vora-ai 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2380) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +606 -0
  3. package/assets/avatar-placeholder.svg +19 -0
  4. package/assets/chrome-extension/icons/icon128.png +0 -0
  5. package/assets/chrome-extension/icons/icon16.png +0 -0
  6. package/assets/chrome-extension/icons/icon32.png +0 -0
  7. package/assets/chrome-extension/icons/icon48.png +0 -0
  8. package/assets/dmg-background-small.png +0 -0
  9. package/assets/dmg-background.png +0 -0
  10. package/dist/abort-bAEt3OX0.js +192 -0
  11. package/dist/abort-cutoff-BW9X8atp.js +56 -0
  12. package/dist/abort-cutoff.runtime-BTdcverG.js +20 -0
  13. package/dist/abort-primitives-BkLaStf6.js +92 -0
  14. package/dist/abort-signal-OQ0B1Hsw.js +13 -0
  15. package/dist/abort.runtime-Bk-WTrsH.js +2 -0
  16. package/dist/access-DUWbTdtq.js +82 -0
  17. package/dist/account-action-gate-BhV8CpjB.js +12 -0
  18. package/dist/account-core-BxpV-R9y.js +26 -0
  19. package/dist/account-helpers-D1v4-R4z.js +102 -0
  20. package/dist/account-helpers-DsRxse98.js +1 -0
  21. package/dist/account-id-Da7aL0Gd.js +1 -0
  22. package/dist/account-inspect-CAOMlXxX.js +158 -0
  23. package/dist/account-inspect-sHk3NdqU.js +81 -0
  24. package/dist/account-lookup-C6jbidQL.js +17 -0
  25. package/dist/account-resolution-DKAWqmga.js +30 -0
  26. package/dist/account-snapshot-fields-D7AI5hQQ.js +130 -0
  27. package/dist/account-summary-BgeGcB_3.js +36 -0
  28. package/dist/accounts-Db4FI6Zz.js +58 -0
  29. package/dist/accounts-qrnlKu1q.js +137 -0
  30. package/dist/ack-reactions-BZ-o06GS.js +43 -0
  31. package/dist/acp-cli-BvaZntRI.js +88 -0
  32. package/dist/acp-runtime-JWaJYUhz.js +8 -0
  33. package/dist/acp-stateful-target-driver-Bw7044NV.js +60 -0
  34. package/dist/action-runtime-api-Oe9YXMPW.js +1026 -0
  35. package/dist/agent-B1rpctfA.js +2 -0
  36. package/dist/agent-command-Ca6TUUTc.js +1462 -0
  37. package/dist/agent-events-DvBJWaR9.js +51 -0
  38. package/dist/agent-list-BLH_azHg.js +52 -0
  39. package/dist/agent-media-payload-DJHM1u8B.js +17 -0
  40. package/dist/agent-paths-A_P9FLsb.js +12 -0
  41. package/dist/agent-runner-utils-9OoCJtjv.js +178 -0
  42. package/dist/agent-runner.runtime-CBOjZZGX.js +2205 -0
  43. package/dist/agent-runtime-DUidz-g-.js +142 -0
  44. package/dist/agent-scope-BsqFyt8u.js +203 -0
  45. package/dist/agents/auth-profiles.runtime.js +7 -0
  46. package/dist/agents/pi-model-discovery-runtime.js +2 -0
  47. package/dist/agents-BalJcJ6y.js +5 -0
  48. package/dist/agents-C3mHfRHd.js +888 -0
  49. package/dist/agents.config-BDTgYzjf.js +3 -0
  50. package/dist/agents.config-CD4kuH-_.js +121 -0
  51. package/dist/allow-from-Bj0HDNYh.js +20 -0
  52. package/dist/allow-from-D-rvXQ8h.js +9 -0
  53. package/dist/allow-from-xOap1t02.js +62 -0
  54. package/dist/allow-list-BFJp0pl8.js +341 -0
  55. package/dist/allowlist-config-edit-Cm1yBM1Z.js +279 -0
  56. package/dist/allowlist-match-CvP7M2nU.js +63 -0
  57. package/dist/ansi-B_0KjIJj.js +54 -0
  58. package/dist/anthropic-vertex-CmYuMVC4.js +21 -0
  59. package/dist/anthropic-vertex-stream-CDum4sTM.js +631 -0
  60. package/dist/api-C8PGNlY8.js +10 -0
  61. package/dist/api-CUkBKFva.js +74 -0
  62. package/dist/api-builder-Dxtk0Cjs.js +172 -0
  63. package/dist/api-fetch-D1Orij33.js +35 -0
  64. package/dist/api-key-rotation-BgD2ZwFB.js +150 -0
  65. package/dist/apply-uNQmdYrd.js +485 -0
  66. package/dist/apply.runtime-CDBPl8wO.js +166 -0
  67. package/dist/apply.runtime-DXzYQs7u.js +2 -0
  68. package/dist/approval-renderers-D-qQquHC.js +83 -0
  69. package/dist/approval-runtime-DodHpuxq.js +122 -0
  70. package/dist/archive-BUHAoH49.js +537 -0
  71. package/dist/arg-split-ShoVtQWt.js +38 -0
  72. package/dist/artifacts-UsJTFgjT.js +52 -0
  73. package/dist/assistant-error-format-KDZ_osDM.js +109 -0
  74. package/dist/audio-DFt2UJ9l.js +41 -0
  75. package/dist/audit-234llk_L.js +85 -0
  76. package/dist/audit-BzzkNrPw.js +893 -0
  77. package/dist/audit-D8ikC9Ex.js +54 -0
  78. package/dist/audit-channel.allow-from.runtime-todwwiYs.js +5 -0
  79. package/dist/audit-channel.collect.runtime-DmpUSGTW.js +528 -0
  80. package/dist/audit-channel.discord.runtime-eztVMsVi.js +5 -0
  81. package/dist/audit-channel.telegram.runtime-C1XTQaXt.js +8 -0
  82. package/dist/audit-channel.zalouser.runtime-0HM10car.js +5 -0
  83. package/dist/audit-extra.async-CSQaJlTH.js +820 -0
  84. package/dist/audit-fs-ClsvRCTg.js +375 -0
  85. package/dist/audit-membership-runtime-ByM59rIs.js +55 -0
  86. package/dist/audit.deep.runtime-DXGK_1J_.js +2 -0
  87. package/dist/audit.nondeep.runtime-DJXN9aBX.js +831 -0
  88. package/dist/audit.runtime-BS7_g95e.js +7 -0
  89. package/dist/auth-DEuZoVpN.js +371 -0
  90. package/dist/auth-choice-9Go6Q-oV.js +3 -0
  91. package/dist/auth-choice-BQBEikSW.js +69 -0
  92. package/dist/auth-choice-CbU_5K03.js +341 -0
  93. package/dist/auth-choice-legacy-D9rcQsLS.js +44 -0
  94. package/dist/auth-choice-options-DzvdP-W5.js +98 -0
  95. package/dist/auth-choice-prompt-CAt3z9Wn.js +2 -0
  96. package/dist/auth-choice-prompt-DfuSZB7t.js +36 -0
  97. package/dist/auth-choice.apply-helpers-CxPMo6aR.js +2 -0
  98. package/dist/auth-choice.plugin-providers.runtime-C4iPKNWh.js +11 -0
  99. package/dist/auth-health-CztAfAX3.js +165 -0
  100. package/dist/auth-mode-policy-C2dpPPMZ.js +18 -0
  101. package/dist/auth-profiles-DgsNxC4M.js +431 -0
  102. package/dist/auth-rate-limit-B3HOQz3U.js +119 -0
  103. package/dist/avatar-policy-D_F2Olbt.js +67 -0
  104. package/dist/backend-config-DRYC_KQP.js +311 -0
  105. package/dist/backoff-C-fId8Y0.js +18 -0
  106. package/dist/backup-create-CWffgs90.js +462 -0
  107. package/dist/banner-BJJQ_jor.js +2 -0
  108. package/dist/banner-CzYuF1AM.js +369 -0
  109. package/dist/base-session-key-yPDY2ReX.js +14 -0
  110. package/dist/binaries-D04aDwRb.js +2 -0
  111. package/dist/binaries-UyZ8gKvx.js +11 -0
  112. package/dist/binding-registry-DeW6GWl7.js +422 -0
  113. package/dist/binding-targets-Dew-Cmhe.js +99 -0
  114. package/dist/bindings-Be6kpbqd.js +21 -0
  115. package/dist/bindings-C415Adm_.js +69 -0
  116. package/dist/block-reply-pipeline-DOyiLrmk.js +266 -0
  117. package/dist/block-streaming-irtDjCPX.js +107 -0
  118. package/dist/bluebubbles-cpaV8DUH.js +64 -0
  119. package/dist/bluebubbles-policy-DO-t7OnD.js +13 -0
  120. package/dist/boolean-BRxEL2pT.js +29 -0
  121. package/dist/boolean-param-B3tzmZ3k.js +13 -0
  122. package/dist/bootstrap-budget-lNGYv_xu.js +314 -0
  123. package/dist/bootstrap-cache-CwL_mvEY.js +19 -0
  124. package/dist/bot-message-context-BDfCxJZs.js +1213 -0
  125. package/dist/bot-message-context-C-8RvNrP.js +2 -0
  126. package/dist/bot-native-commands.delivery.runtime-z0viWrSs.js +3 -0
  127. package/dist/boundary-file-read-DzY137L0.js +192 -0
  128. package/dist/brave-web-search-provider-Bab38BrX.js +441 -0
  129. package/dist/brew-CTkvvpxg.js +44 -0
  130. package/dist/browser-open-BU6ETbQQ.js +94 -0
  131. package/dist/browser-runtime-C9uxHbGW.js +76 -0
  132. package/dist/browser-support-Bb_k0jpF.js +34 -0
  133. package/dist/btw-command-NOqYNWtX.js +16 -0
  134. package/dist/bundle-lsp-BeRKY2JZ.js +93 -0
  135. package/dist/bundle-mcp-Bx8MNFO5.js +263 -0
  136. package/dist/bundled/boot-md/handler.js +180 -0
  137. package/dist/bundled/bootstrap-extra-files/handler.js +42 -0
  138. package/dist/bundled/command-logger/handler.js +56 -0
  139. package/dist/bundled/session-memory/handler.js +196 -0
  140. package/dist/bundled-capability-metadata-BJSb_HDr.js +38 -0
  141. package/dist/bundled-compat-CAM7KkKK.js +64 -0
  142. package/dist/bundled-plugin-metadata-DuQVm9f5.js +621 -0
  143. package/dist/bundled-sources-cwLmVfLO.js +53 -0
  144. package/dist/cache-controls-CpBpLE7o.js +40 -0
  145. package/dist/call-CYGZtInt.js +649 -0
  146. package/dist/call-DNl9zM74.js +2 -0
  147. package/dist/capability-provider-runtime-yc24eaUD.js +40 -0
  148. package/dist/catalog-CTTRbG9P.js +272 -0
  149. package/dist/channel-Ur_UNzw2.js +679 -0
  150. package/dist/channel-account-context-BWgKFgVH.js +104 -0
  151. package/dist/channel-actions-BOFC-_zU.js +39 -0
  152. package/dist/channel-catalog.json +26 -0
  153. package/dist/channel-config-B-7hYcg1.js +115 -0
  154. package/dist/channel-config-helpers-C1S4WfJJ.js +482 -0
  155. package/dist/channel-config-schema-2huPMu2x.js +6 -0
  156. package/dist/channel-feedback-Ro-BTZzh.js +257 -0
  157. package/dist/channel-inbound-_DJyFgZs.js +30 -0
  158. package/dist/channel-issues-BPmcKiOr.js +13 -0
  159. package/dist/channel-lifecycle-tykcw1CK.js +286 -0
  160. package/dist/channel-lifecycle.core-3OcmXTam.js +69 -0
  161. package/dist/channel-options-DgOdpBj-.js +39 -0
  162. package/dist/channel-pairing-Dx7NU9a4.js +68 -0
  163. package/dist/channel-plugin-common-B7gWshwF.js +4 -0
  164. package/dist/channel-plugin-ids-DGJsaNeP.js +230 -0
  165. package/dist/channel-plugin-resolution-B3C2B0Xc.js +113 -0
  166. package/dist/channel-policy-BiAdlZRY.js +32 -0
  167. package/dist/channel-reply-pipeline-DZQu_Smr.js +16 -0
  168. package/dist/channel-resolution-BRpGejEv.js +57 -0
  169. package/dist/channel-runtime-B3OwaSIN.js +8 -0
  170. package/dist/channel-selection-CJiUKode.js +125 -0
  171. package/dist/channel-send-result-C4cfMY3q.js +40 -0
  172. package/dist/channel-setup-CVb_d9r3.js +51 -0
  173. package/dist/channel-status-is1j_O8T.js +2 -0
  174. package/dist/channel-summary-CcHbPriu.js +2 -0
  175. package/dist/channel-summary-ChMRan7Y.js +139 -0
  176. package/dist/channel-target-B2-JZuxb.js +157 -0
  177. package/dist/channel-targets-C7I-yneV.js +173 -0
  178. package/dist/channel.runtime-DPqGWQMI.js +5 -0
  179. package/dist/channels-BLrLpPbs.js +1134 -0
  180. package/dist/channels-ClZdlIAP.js +409 -0
  181. package/dist/channels-cli-CxyDo24U.js +246 -0
  182. package/dist/channels-status-issues-DOvoiysl.js +17 -0
  183. package/dist/chat-envelope-BKa8gVwt.js +158 -0
  184. package/dist/chat-meta-CxxUMjgT.js +77 -0
  185. package/dist/chat-type-D66QkgK0.js +10 -0
  186. package/dist/chunk-BRNunu6m.js +334 -0
  187. package/dist/chunk-DBEY4PJZ.js +16 -0
  188. package/dist/chutes-oauth-df1s-ETh.js +127 -0
  189. package/dist/cjk-chars-nOH-kRF8.js +50 -0
  190. package/dist/clack-prompter-ByYhQnEc.js +112 -0
  191. package/dist/clawbot-cli-B1PP3cQS.js +9 -0
  192. package/dist/clawhub-BlNkstQC.js +163 -0
  193. package/dist/clawhub-PHPunBYA.js +263 -0
  194. package/dist/cli/daemon-cli.js +3 -0
  195. package/dist/cli-BVs9q78-.js +2 -0
  196. package/dist/cli-backend-BY5ACL_R.js +1 -0
  197. package/dist/cli-backend-MiCoOt1Y.js +44 -0
  198. package/dist/cli-eS9_49Ka.js +153 -0
  199. package/dist/cli-name-l1qeysOp.js +21 -0
  200. package/dist/cli-runner-rgKmST01.js +1010 -0
  201. package/dist/cli-utils-CMfpS8SF.js +40 -0
  202. package/dist/cli-watchdog-defaults-3Qs4l3Yf.js +14 -0
  203. package/dist/cmd-argv-BafMhhA4.js +68 -0
  204. package/dist/codex-native-web-search-CWYqRu9M.js +2 -0
  205. package/dist/codex-native-web-search-CbRntg-q.js +155 -0
  206. package/dist/command-auth-CJsP4GL7.js +64 -0
  207. package/dist/command-auth-Dfgmp_6_.js +356 -0
  208. package/dist/command-auth-native-CdgZoflY.js +3 -0
  209. package/dist/command-detection-CyrUVnod.js +46 -0
  210. package/dist/command-format-CfBy_-A6.js +2 -0
  211. package/dist/command-format-DmvS76BD.js +22 -0
  212. package/dist/command-gating-HO-bVa6h.js +40 -0
  213. package/dist/command-options-BUoAEXAi.js +25 -0
  214. package/dist/command-poll-backoff-BbGeC12t.js +56 -0
  215. package/dist/command-poll-backoff.runtime-BDcejg_n.js +7 -0
  216. package/dist/command-registry-C0kFYtIa.js +199 -0
  217. package/dist/command-registry-VUV6Y6SA.js +3 -0
  218. package/dist/command-secret-gateway-B2PsoqGE.js +2 -0
  219. package/dist/command-secret-gateway-rXrG4_xf.js +449 -0
  220. package/dist/command-secret-targets-BMcCyKKM.js +85 -0
  221. package/dist/command-secret-targets-DYLJqbik.js +2 -0
  222. package/dist/commands/status.summary.runtime.js +146 -0
  223. package/dist/commands-BNN8qnEq.js +42 -0
  224. package/dist/commands-D905e2TE.js +4 -0
  225. package/dist/commands-acp-DxpRaS_2.js +994 -0
  226. package/dist/commands-context-DYfg86cW.js +33 -0
  227. package/dist/commands-core-BkTgFXRe.js +185 -0
  228. package/dist/commands-core.runtime-DL4UA7LO.js +2 -0
  229. package/dist/commands-handlers.runtime-Dnqn4WRI.js +3597 -0
  230. package/dist/commands-info-9qXzZJZy.js +638 -0
  231. package/dist/commands-models-DaGXLYpI.js +395 -0
  232. package/dist/commands-rHJt1A27.js +192 -0
  233. package/dist/commands-registry-DsvlObRs.js +295 -0
  234. package/dist/commands-registry.data-D4mfAJVD.js +928 -0
  235. package/dist/commands-registry.runtime-CvK5vfUk.js +2 -0
  236. package/dist/commands-status.runtime-Biqry_fJ.js +2 -0
  237. package/dist/commands.runtime-BQNIS1_C.js +4 -0
  238. package/dist/common-B8KXadTs.js +206 -0
  239. package/dist/compact.runtime-DrIYPOe_.js +7 -0
  240. package/dist/completion-cli-DADmFZNY.js +2 -0
  241. package/dist/completion-cli-Xpp8XJNt.js +466 -0
  242. package/dist/config-B8J_0cJd.js +41 -0
  243. package/dist/config-BeMghpRW.js +136 -0
  244. package/dist/config-C6sbf2mt.js +7 -0
  245. package/dist/config-CKbWnj3S.js +52 -0
  246. package/dist/config-DUHgkJzn.js +421 -0
  247. package/dist/config-cli-CwphzfyS.js +944 -0
  248. package/dist/config-eval-DM9FHTGd.js +100 -0
  249. package/dist/config-guard-BQvfMpPf.js +94 -0
  250. package/dist/config-helpers-DiGV2z9-.js +117 -0
  251. package/dist/config-paths-h016qQJq.js +8 -0
  252. package/dist/config-presence-C16x_f3x.js +79 -0
  253. package/dist/config-regex-CvZFnWkO.js +39 -0
  254. package/dist/config-runtime-CGUisiU5.js +12 -0
  255. package/dist/config-schema-5JUAk8XL.js +202 -0
  256. package/dist/config-schema-BRTDDWFV.js +65 -0
  257. package/dist/config-schema-B_uHmf_j.js +133 -0
  258. package/dist/config-schema-dV8ghEVQ.js +85 -0
  259. package/dist/config-state-CiYvCzdZ.js +185 -0
  260. package/dist/config-validation-CzH2O_-H.js +276 -0
  261. package/dist/config-value-B0LE9l8u.js +25 -0
  262. package/dist/configure-BUZKW20U.js +1140 -0
  263. package/dist/configure-CFbHMkXc.js +2 -0
  264. package/dist/configured-provider-fallback-HW8QhjlX.js +15 -0
  265. package/dist/connection-auth-Cs3qTX0J.js +30 -0
  266. package/dist/connection-details-GqZVX1_1.js +56 -0
  267. package/dist/constants-lHqfjBOu.js +71 -0
  268. package/dist/content-blocks-DdN51R-1.js +1640 -0
  269. package/dist/context-Bv7BKF9l.js +227 -0
  270. package/dist/context-window-guard-BKQgasN7.js +46 -0
  271. package/dist/control-ui/apple-touch-icon.png +0 -0
  272. package/dist/control-ui/assets/agents-sN8RQ1eS.js +813 -0
  273. package/dist/control-ui/assets/anthropic-ZDTkKd9P.js +37 -0
  274. package/dist/control-ui/assets/azure-openai-responses-CQjyuM35.js +2 -0
  275. package/dist/control-ui/assets/channel-config-extras-DNCeHtEf.js +2 -0
  276. package/dist/control-ui/assets/channels-LecGHhYY.js +349 -0
  277. package/dist/control-ui/assets/cron-BCSmuADd.js +928 -0
  278. package/dist/control-ui/assets/de-BhrN2Nih.js +2 -0
  279. package/dist/control-ui/assets/debug-DIDwUeSi.js +94 -0
  280. package/dist/control-ui/assets/directive-C6NBp6xJ.js +2 -0
  281. package/dist/control-ui/assets/dist-D8DZLmCF.js +18 -0
  282. package/dist/control-ui/assets/es-D2hTJirx.js +2 -0
  283. package/dist/control-ui/assets/event-stream-B8X6sYaV.js +2 -0
  284. package/dist/control-ui/assets/format-Cbj45nru.js +2 -0
  285. package/dist/control-ui/assets/github-copilot-headers-CrI0CIJ7.js +2 -0
  286. package/dist/control-ui/assets/google-gemini-cli-BpxbH95Q.js +3 -0
  287. package/dist/control-ui/assets/google-shared-CbPHVnPr.js +12 -0
  288. package/dist/control-ui/assets/google-vertex-lQwbjEII.js +2 -0
  289. package/dist/control-ui/assets/google-xtjMQAen.js +2 -0
  290. package/dist/control-ui/assets/hash-Bt1aVMQ3.js +2 -0
  291. package/dist/control-ui/assets/index-DqTClMaZ.js +4714 -0
  292. package/dist/control-ui/assets/index-yaW_F-Wi.css +1 -0
  293. package/dist/control-ui/assets/instances-CMgIM69b.js +57 -0
  294. package/dist/control-ui/assets/lit-zdTgzAJI.js +3 -0
  295. package/dist/control-ui/assets/logs-vVeVJ0CI.js +74 -0
  296. package/dist/control-ui/assets/mistral-u1o8NcCM.js +8 -0
  297. package/dist/control-ui/assets/nodes-B1R45Hyv.js +430 -0
  298. package/dist/control-ui/assets/openai-Cn7eGqwa.js +17 -0
  299. package/dist/control-ui/assets/openai-codex-responses-o0Z3RMWa.js +8 -0
  300. package/dist/control-ui/assets/openai-completions-7V2Ovprv.js +6 -0
  301. package/dist/control-ui/assets/openai-responses-oNxOx3Q1.js +2 -0
  302. package/dist/control-ui/assets/openai-responses-shared-OKpfrZ-q.js +11 -0
  303. package/dist/control-ui/assets/preload-helper-xBbMyY7u.js +1 -0
  304. package/dist/control-ui/assets/pt-BR-Bd9tFPER.js +2 -0
  305. package/dist/control-ui/assets/sessions-Lc0IvBNe.js +236 -0
  306. package/dist/control-ui/assets/skills-k1ptbgMP.js +216 -0
  307. package/dist/control-ui/assets/skills-shared-D4l2M8cL.js +11 -0
  308. package/dist/control-ui/assets/transform-messages-XKqwKV3D.js +2 -0
  309. package/dist/control-ui/assets/zh-CN-DvLwUwA1.js +2 -0
  310. package/dist/control-ui/assets/zh-TW-BXT7QT3h.js +2 -0
  311. package/dist/control-ui/favicon-32.png +0 -0
  312. package/dist/control-ui/favicon.ico +0 -0
  313. package/dist/control-ui/favicon.svg +22 -0
  314. package/dist/control-ui/index.html +75 -0
  315. package/dist/control-ui-assets-DbOOvjtb.js +233 -0
  316. package/dist/control-ui-shared-DsqkrmmN.js +29 -0
  317. package/dist/conversation-binding-input-BGI5gsf7.js +250 -0
  318. package/dist/conversation-binding-xxmmj56H.js +520 -0
  319. package/dist/conversation-id-B2-7oYz5.js +9 -0
  320. package/dist/conversation-label-CDBJEzqs.js +32 -0
  321. package/dist/conversation-runtime-CPXVzEGP.js +85 -0
  322. package/dist/core-DidBIGEJ.js +195 -0
  323. package/dist/core-api-VzeJYIaC.js +670 -0
  324. package/dist/core-command-descriptors-OO8iMaXR.js +91 -0
  325. package/dist/credential-planner-B6V18E6X.js +109 -0
  326. package/dist/credentials-T7b82ytT.js +135 -0
  327. package/dist/cron-cli-D2epg2QX.js +643 -0
  328. package/dist/current-time-AvIq1E3O.js +20 -0
  329. package/dist/daemon-cli-Be7LAwcB.js +368 -0
  330. package/dist/daemon-install-CfvYrNa-.js +63 -0
  331. package/dist/daemon-install-plan.shared-Dm6sK7Lg.js +222 -0
  332. package/dist/daemon-runtime-DPejcJWG.js +12 -0
  333. package/dist/dangerous-config-flags-DyYwhFd-.js +38 -0
  334. package/dist/dangerous-name-matching-DJGvHcqL.js +48 -0
  335. package/dist/date-time-ChwO2p0r.js +118 -0
  336. package/dist/dedupe-ClGH5AD-.js +59 -0
  337. package/dist/default-account-warnings-DhrBUOxe.js +15 -0
  338. package/dist/default-models-p_jLxv9h.js +35 -0
  339. package/dist/defaults-DAt--D9n.js +6 -0
  340. package/dist/delegate-D_a6-aW6.js +43 -0
  341. package/dist/deliver-NyzvqqW3.js +954 -0
  342. package/dist/deliver-YFpAT2Gv.js +3 -0
  343. package/dist/deliver-runtime-CDYmnxXC.js +2 -0
  344. package/dist/delivery-DHz1_gua.js +819 -0
  345. package/dist/delivery-context-wkeob4lC.js +106 -0
  346. package/dist/delivery-info-0NXZH054.js +36 -0
  347. package/dist/delivery-queue-BceSoMom.js +2 -0
  348. package/dist/delivery-queue-Dij4z9yQ.js +289 -0
  349. package/dist/deps-xJ6d5mcR.js +67 -0
  350. package/dist/detect-binary-D5oXUD9C.js +30 -0
  351. package/dist/device-auth-BPeQrfAM.js +19 -0
  352. package/dist/device-bootstrap-IW2esZhx.js +176 -0
  353. package/dist/device-identity-2GhXUC5d.js +2 -0
  354. package/dist/device-identity-DH-dBXN2.js +140 -0
  355. package/dist/device-metadata-normalization-DesKWnX9.js +21 -0
  356. package/dist/device-pairing-D-eXc4mS.js +543 -0
  357. package/dist/devices-cli-CUkbtT5k.js +328 -0
  358. package/dist/diagnostic-BYcJF51S.js +311 -0
  359. package/dist/diagnostic-events-R6R0hsS8.js +48 -0
  360. package/dist/diagnostic-flags-DI1-YJxA.js +64 -0
  361. package/dist/diagnostic-runtime-iwrls2oi.js +1 -0
  362. package/dist/diagnostics-Bn7WBAMb.js +2 -0
  363. package/dist/diagnostics-CNOhNbiG.js +33 -0
  364. package/dist/direct-dm-DX9Sqse3.js +139 -0
  365. package/dist/directive-handling.defaults-CiM3zY4c.js +19 -0
  366. package/dist/directive-handling.fast-lane-CBsRyqm9.js +64 -0
  367. package/dist/directive-handling.fast-lane-CkLifH7t.js +2 -0
  368. package/dist/directive-handling.impl-DDDo9_pC.js +2 -0
  369. package/dist/directive-handling.impl-Rcgo5SCg.js +674 -0
  370. package/dist/directive-handling.levels-Dlk68wUB.js +2 -0
  371. package/dist/directive-handling.levels-Y1fuvRYT.js +12 -0
  372. package/dist/directive-handling.parse-CMEE0kEW.js +375 -0
  373. package/dist/directive-handling.persist-CvEtXaAd.js +133 -0
  374. package/dist/directive-handling.persist.runtime-Cdksoe_I.js +2 -0
  375. package/dist/directive-handling.shared-8kteIv4q.js +158 -0
  376. package/dist/directive-tags-B4NiUGng.js +109 -0
  377. package/dist/directives-DLcHC9jG.js +209 -0
  378. package/dist/directory-cache-KFfoEzq3.js +62 -0
  379. package/dist/directory-cli-DUY3BGGz.js +238 -0
  380. package/dist/directory-config-helpers-DBmVJY3U.js +141 -0
  381. package/dist/directory-runtime-DWVDd3A5.js +20 -0
  382. package/dist/discord-2uEduGX9.js +6 -0
  383. package/dist/discord-BMCiYFK_.js +11 -0
  384. package/dist/discord-account-HmxkZycn.js +11 -0
  385. package/dist/discord-core-Pl5ukuXB.js +5 -0
  386. package/dist/discord-runtime-surface-DNQNbA29.js +67 -0
  387. package/dist/discord-session-key-DoaFTAH3.js +11 -0
  388. package/dist/discord-surface-Cn77ggmj.js +30 -0
  389. package/dist/discord-thread-bindings-DRMbWo4Q.js +21 -0
  390. package/dist/discord-timeouts-Cv7cpmLu.js +12 -0
  391. package/dist/dispatch-CZypQktI.js +842 -0
  392. package/dist/dispatch-acp.runtime-DVu2VG71.js +887 -0
  393. package/dist/dist-C22HbjJn.js +3 -0
  394. package/dist/dist-C26-w-eb.js +14245 -0
  395. package/dist/dist-_cqaGkQM.js +503 -0
  396. package/dist/dm-policy-shared-BsSmWpF_.js +188 -0
  397. package/dist/dns-cli-CypS3rSW.js +192 -0
  398. package/dist/docker-e3sy4uxj.js +837 -0
  399. package/dist/docs-cli-CAc6XPQ1.js +156 -0
  400. package/dist/doctor-completion-D1GX1eYy.js +90 -0
  401. package/dist/doctor-config-preflight-BIjpCYLH.js +2 -0
  402. package/dist/doctor-config-preflight-C5YWG1Il.js +147 -0
  403. package/dist/doctor-state-migrations-C4JRWbB5.js +2 -0
  404. package/dist/doctor-state-migrations-Hkw1WYQh.js +3 -0
  405. package/dist/dotenv-5B3Ltg5m.js +11 -0
  406. package/dist/dotenv-C-ipPVRV.js +91 -0
  407. package/dist/enable-1JBZrsl3.js +57 -0
  408. package/dist/entry-status-8GZhSwz9.js +172 -0
  409. package/dist/entry.js +209 -0
  410. package/dist/env-DAI7QbHD.js +40 -0
  411. package/dist/env-substitution-D4FvNwAw.js +136 -0
  412. package/dist/envelope-BT4nxsRe.js +137 -0
  413. package/dist/error-runtime-BWR3edBz.js +2 -0
  414. package/dist/error-text-Dz9S7qeJ.js +9 -0
  415. package/dist/errors-BVF4CQJh.js +15 -0
  416. package/dist/errors-BxyFnvP3.js +58 -0
  417. package/dist/exa-web-search-provider-YdwhKG_r.js +355 -0
  418. package/dist/exec-DBEtpL4G.js +2 -0
  419. package/dist/exec-DNTgEe82.js +375 -0
  420. package/dist/exec-approval-reply-CIaFux57.js +161 -0
  421. package/dist/exec-approval-session-target-BsD_thnK.js +159 -0
  422. package/dist/exec-approvals-D6Kd1FHX.js +120 -0
  423. package/dist/exec-approvals-XWl5Qihe.js +394 -0
  424. package/dist/exec-approvals-allowlist-B90zHMFx.js +771 -0
  425. package/dist/exec-approvals-cli-CBwEU5lx.js +375 -0
  426. package/dist/exec-safe-bin-runtime-policy-CQ_6FV8z.js +90 -0
  427. package/dist/exec-safety-FkFR1qf5.js +24 -0
  428. package/dist/extensionAPI.js +17 -0
  429. package/dist/extensions/brave/index.js +13 -0
  430. package/dist/extensions/brave/package.json +12 -0
  431. package/dist/extensions/brave/test-api.js +2 -0
  432. package/dist/extensions/brave/vora.plugin.json +50 -0
  433. package/dist/extensions/brave/web-search-provider.js +2 -0
  434. package/dist/extensions/browser/browser-runtime-api.js +4 -0
  435. package/dist/extensions/browser/index.js +20 -0
  436. package/dist/extensions/browser/package.json +12 -0
  437. package/dist/extensions/browser/runtime-api.js +6 -0
  438. package/dist/extensions/browser/test-support.js +19 -0
  439. package/dist/extensions/browser/vora.plugin.json +9 -0
  440. package/dist/extensions/discord/action-runtime-api.js +2 -0
  441. package/dist/extensions/discord/api.js +14 -0
  442. package/dist/extensions/discord/channel-config-api.js +2 -0
  443. package/dist/extensions/discord/index.js +615 -0
  444. package/dist/extensions/discord/package.json +40 -0
  445. package/dist/extensions/discord/runtime-api.js +229 -0
  446. package/dist/extensions/discord/session-key-api.js +2 -0
  447. package/dist/extensions/discord/setup-entry.js +10 -0
  448. package/dist/extensions/discord/test-api.js +45 -0
  449. package/dist/extensions/discord/timeouts.js +2 -0
  450. package/dist/extensions/discord/vora.plugin.json +11 -0
  451. package/dist/extensions/exa/index.js +13 -0
  452. package/dist/extensions/exa/package.json +12 -0
  453. package/dist/extensions/exa/vora.plugin.json +39 -0
  454. package/dist/extensions/exa/web-search-provider.js +2 -0
  455. package/dist/extensions/openai/api.js +4 -0
  456. package/dist/extensions/openai/cli-backend.js +2 -0
  457. package/dist/extensions/openai/default-models.js +2 -0
  458. package/dist/extensions/openai/image-generation-provider.js +2 -0
  459. package/dist/extensions/openai/index.js +24 -0
  460. package/dist/extensions/openai/media-understanding-provider.js +2 -0
  461. package/dist/extensions/openai/openai-codex-auth-identity.js +2 -0
  462. package/dist/extensions/openai/openai-codex-catalog.js +2 -0
  463. package/dist/extensions/openai/openai-codex-provider.js +2 -0
  464. package/dist/extensions/openai/openai-codex-provider.runtime.js +14 -0
  465. package/dist/extensions/openai/openai-provider.js +2 -0
  466. package/dist/extensions/openai/package.json +12 -0
  467. package/dist/extensions/openai/shared.js +4 -0
  468. package/dist/extensions/openai/speech-provider.js +2 -0
  469. package/dist/extensions/openai/test-api.js +5 -0
  470. package/dist/extensions/openai/tts.js +2 -0
  471. package/dist/extensions/openai/vora.plugin.json +61 -0
  472. package/dist/extensions/tavily/index.js +128 -0
  473. package/dist/extensions/tavily/package.json +12 -0
  474. package/dist/extensions/tavily/skills/tavily/SKILL.md +94 -0
  475. package/dist/extensions/tavily/vora.plugin.json +53 -0
  476. package/dist/extensions/tavily/web-search-provider.js +2 -0
  477. package/dist/extensions/telegram/allow-from.js +2 -0
  478. package/dist/extensions/telegram/api.js +13 -0
  479. package/dist/extensions/telegram/channel-config-api.js +2 -0
  480. package/dist/extensions/telegram/index.js +12 -0
  481. package/dist/extensions/telegram/package.json +37 -0
  482. package/dist/extensions/telegram/runtime-api.js +24 -0
  483. package/dist/extensions/telegram/session-key-api.js +2 -0
  484. package/dist/extensions/telegram/setup-entry.js +13 -0
  485. package/dist/extensions/telegram/test-api.js +87 -0
  486. package/dist/extensions/telegram/test-support.js +72 -0
  487. package/dist/extensions/telegram/update-offset-runtime-api.js +2 -0
  488. package/dist/extensions/telegram/vora.plugin.json +11 -0
  489. package/dist/external-content-CCU3ADB4.js +242 -0
  490. package/dist/facade-runtime-FE2gvW08.js +183 -0
  491. package/dist/failover-error-Bv6ZpTGn.js +194 -0
  492. package/dist/feishu-conversation-CRGPLs2e.js +17 -0
  493. package/dist/feishu-setup-D3qBPVeH.js +12 -0
  494. package/dist/fetch-B7l-vxJ5.js +65 -0
  495. package/dist/fetch-BlEbs4zu.js +416 -0
  496. package/dist/fetch-guard-DECxJSgV.js +132 -0
  497. package/dist/fetch-mock-Y15aY-vX.js +6 -0
  498. package/dist/fetch-runtime-DfJc8pAb.js +4 -0
  499. package/dist/fetch-timeout-DlhFJxaz.js +58 -0
  500. package/dist/file-identity-CFjEVvlD.js +567 -0
  501. package/dist/file-lock-I_Ef85iM.js +141 -0
  502. package/dist/file-lock-_Bv5Z0H8.js +2 -0
  503. package/dist/format-Cmirp0jV.js +19 -0
  504. package/dist/format-DTr5MrB3.js +787 -0
  505. package/dist/format-datetime-BzFsOTtu.js +73 -0
  506. package/dist/format-duration-3-yx54b_.js +57 -0
  507. package/dist/format-relative-CKRrUR_e.js +54 -0
  508. package/dist/frontmatter-7NzkXiTl.js +45 -0
  509. package/dist/frontmatter-BruYJzuJ.js +210 -0
  510. package/dist/fs-safe-C7Y0npoY.js +999 -0
  511. package/dist/gateway-cli-CL9kkVgP.js +25330 -0
  512. package/dist/gateway-discovery-targets-Nj88oSf4.js +430 -0
  513. package/dist/gateway-install-token-DT4JSzW6.js +231 -0
  514. package/dist/gateway-presence-C9FNv0wz.js +15 -0
  515. package/dist/gateway-registry-bOE6bwiW.js +74 -0
  516. package/dist/gateway-rpc-EUERnNbW.js +26 -0
  517. package/dist/gateway-runtime-DA85e49x.js +12 -0
  518. package/dist/gaxios-fetch-compat-TyJGVB6l.js +180 -0
  519. package/dist/gemini-auth-DU9RM3Fo.js +29 -0
  520. package/dist/get-reply-from-config.runtime-BTZAHGwc.js +2 -0
  521. package/dist/git-commit-B_DkJ7LE.js +177 -0
  522. package/dist/git-commit-Bx0Yma3I.js +2 -0
  523. package/dist/github-copilot-login-BiqEMA_7.js +11 -0
  524. package/dist/github-copilot-token-BMHm0urT.js +2 -0
  525. package/dist/github-copilot-token-CGpIsMSL.js +77 -0
  526. package/dist/global-singleton-54zT3rCn.js +13 -0
  527. package/dist/global-singleton-o2ArPCEw.js +1 -0
  528. package/dist/global-state-DUuMGgts.js +17 -0
  529. package/dist/globals-DNhziPZz.js +25 -0
  530. package/dist/gmail-setup-utils-B4xK25jT.js +421 -0
  531. package/dist/google-CPRZDTjq.js +24 -0
  532. package/dist/group-access-Cd6mU7Ys.js +113 -0
  533. package/dist/group-activation-BwfaA0gP.js +22 -0
  534. package/dist/group-id-vLZLwNVz.js +11 -0
  535. package/dist/group-policy-Cr7UXkoj.js +201 -0
  536. package/dist/group-policy-warnings-DmIDYgw8.js +196 -0
  537. package/dist/groups.runtime-DKOqtNQC.js +7 -0
  538. package/dist/handle-action-DsH0nVWk.js +500 -0
  539. package/dist/health-B3O0HygG.js +577 -0
  540. package/dist/health-CojrwX7m.js +2 -0
  541. package/dist/health-format-JFM9rFJB.js +26 -0
  542. package/dist/heartbeat-C1Xvupsk.js +122 -0
  543. package/dist/heartbeat-reply-payload-C-Rlp4k5.js +13 -0
  544. package/dist/heartbeat-summary-D5pDHsmN.js +57 -0
  545. package/dist/heartbeat-visibility-kNXllOIC.js +102 -0
  546. package/dist/heartbeat-wake-DfVExPSU.js +188 -0
  547. package/dist/help-CpuviX5S.js +81 -0
  548. package/dist/help-format-Dad85O74.js +15 -0
  549. package/dist/helpers-4IKdDZX5.js +24 -0
  550. package/dist/helpers-fNw5R_YT.js +32 -0
  551. package/dist/history-CK-v5j98.js +102 -0
  552. package/dist/home-dir-BXPtwSCY.js +83 -0
  553. package/dist/hook-runner-global-DEn0PCL0.js +602 -0
  554. package/dist/hook-runtime-Dn-Congb.js +3 -0
  555. package/dist/hooks-cli-DNKW70lO.js +353 -0
  556. package/dist/hooks-policy-Ad8y_Dfl.js +20 -0
  557. package/dist/hooks-status-Cb31D01g.js +86 -0
  558. package/dist/host-env-security-Cks-ZF3X.js +285 -0
  559. package/dist/hostname-BYGiBG2v.js +8 -0
  560. package/dist/http-body-DoRUn0Id.js +238 -0
  561. package/dist/http-registry-1oFXUjVZ.js +54 -0
  562. package/dist/http-route-overlap-CRbY2bBV.js +101 -0
  563. package/dist/identity-BBfQnFMg.js +29 -0
  564. package/dist/identity-BoQQh6Y8.js +26 -0
  565. package/dist/identity-D7VGm34b.js +84 -0
  566. package/dist/identity-avatar-CBJpFxtc.js +86 -0
  567. package/dist/identity-file-9bBicCze.js +60 -0
  568. package/dist/image-UFatuV93.js +152 -0
  569. package/dist/image-generation-CB1-VO0n.js +1 -0
  570. package/dist/image-generation-provider-CoHdiPC_.js +86 -0
  571. package/dist/image-ops-EABsGjsc.js +476 -0
  572. package/dist/image-runtime-ZZOiUbiY.js +7 -0
  573. package/dist/imessage-UUBzYSCn.js +19 -0
  574. package/dist/inbound-context-BxNfypB6.js +59 -0
  575. package/dist/inbound-context-DQ_fXNSa.js +38 -0
  576. package/dist/inbound-debounce-YEtyt_k_.js +159 -0
  577. package/dist/inbound-envelope-B6C8FhsE.js +61 -0
  578. package/dist/inbound-reply-dispatch-BP3sajLc.js +73 -0
  579. package/dist/inbound-text-DibnKFqn.js +14 -0
  580. package/dist/inbound.runtime-SCcR_etw.js +3 -0
  581. package/dist/includes-CHoL4g8x.js +188 -0
  582. package/dist/includes-scan-rcUlg6Nq.js +55 -0
  583. package/dist/index.js +56 -0
  584. package/dist/infra/warning-filter.js +2 -0
  585. package/dist/infra-runtime-D1S_mYfO.js +326 -0
  586. package/dist/input-files-BJKZz7LU.js +251 -0
  587. package/dist/input-provenance-DqtZ-oaB.js +44 -0
  588. package/dist/inspect-BdrrX2i3.js +282 -0
  589. package/dist/install-BwbpybtH.js +588 -0
  590. package/dist/install-package-dir-DhoPrQ04.js +284 -0
  591. package/dist/install-safe-path-BK_5xK2H.js +69 -0
  592. package/dist/install-security-scan-qS3b3qEq.js +22 -0
  593. package/dist/install-security-scan.runtime-BChyO9J8.js +166 -0
  594. package/dist/install-source-utils-BvLftGQS.js +167 -0
  595. package/dist/install-target-CTg66IIO.js +175 -0
  596. package/dist/install.runtime-BTSq91Fr.js +27 -0
  597. package/dist/install.runtime-D4V_unI1.js +11 -0
  598. package/dist/installs-CRoSOFIQ.js +28 -0
  599. package/dist/interactive-C3NpHdfG.js +8 -0
  600. package/dist/interactive-runtime-ihi8xJat.js +1 -0
  601. package/dist/internal-DBQug4hL.js +411 -0
  602. package/dist/internal-hooks-BbEvCG0I.js +155 -0
  603. package/dist/io-B07IaARR.js +20276 -0
  604. package/dist/io-CNajM2P9.js +4 -0
  605. package/dist/ip-B9fdE2gz.js +208 -0
  606. package/dist/ipv4-C3dcphoh.js +82 -0
  607. package/dist/irc-surface-76sLILVt.js +15 -0
  608. package/dist/is-main-Bv5ej4lF.js +27 -0
  609. package/dist/issue-format-BSF24W54.js +31 -0
  610. package/dist/issue-format-DOmwnG2e.js +2 -0
  611. package/dist/json-file-BWMSefn1.js +23 -0
  612. package/dist/json-files-BTzholfl.js +72 -0
  613. package/dist/json-mode-BSMgY7a9.js +34 -0
  614. package/dist/json-pointer-jqlJaexT.js +43 -0
  615. package/dist/json-store-BMjN0M0e.js +37 -0
  616. package/dist/keyed-async-queue-BThh1lNJ.js +32 -0
  617. package/dist/kill-tree-B6ozo-AE.js +82 -0
  618. package/dist/kill-tree-Cqktd2UA.js +2 -0
  619. package/dist/launchd-D65d45MJ.js +517 -0
  620. package/dist/lazy-runtime-CeSDvNOX.js +29 -0
  621. package/dist/lazy-service-module-BfNSCPnr.js +24 -0
  622. package/dist/legacy-names-alNfx9uv.js +7 -0
  623. package/dist/legacy-web-search-PlL5wfRE.js +140 -0
  624. package/dist/legacy.shared-BdJdF_Ji.js +45 -0
  625. package/dist/level-overrides-DkpAP8Z5.js +36 -0
  626. package/dist/library-D0LkGi9S.js +44 -0
  627. package/dist/lifecycle-core-LQrm8n7o.js +401 -0
  628. package/dist/line-C7MzXHd9.js +4 -0
  629. package/dist/line-runtime-D0TK2zdy.js +60 -0
  630. package/dist/line-surface-CN8Lvuud.js +27 -0
  631. package/dist/links-Dew9XRNK.js +17 -0
  632. package/dist/listeners-CUHNPyTB.js +14 -0
  633. package/dist/llm-slug-generator-DdO4_-IV.js +68 -0
  634. package/dist/llm-slug-generator.js +2 -0
  635. package/dist/load-CadZ3tcc.js +28 -0
  636. package/dist/loader-CbUrcgTY.js +2096 -0
  637. package/dist/local-file-access-BKg2BnYT.js +49 -0
  638. package/dist/location-DAl2Dv-o.js +42 -0
  639. package/dist/logger-BOH4EG1g.js +75 -0
  640. package/dist/logger-DXmZnecR.js +582 -0
  641. package/dist/logger-hR5Nn0oR.js +11 -0
  642. package/dist/logging-BVrQyk5K.js +13 -0
  643. package/dist/logging-BoyMPDyh.js +16 -0
  644. package/dist/logging-DPN6sRQx.js +3 -0
  645. package/dist/logging-core-BOrwsQp5.js +3 -0
  646. package/dist/logging-x8ySQJz4.js +2 -0
  647. package/dist/logs-cli-DUKwlDzr.js +221 -0
  648. package/dist/magic-string.es-CnHiwmBJ.js +1011 -0
  649. package/dist/main-session-BQ1fLshb.js +38 -0
  650. package/dist/manager-BfZUkAlZ.js +7 -0
  651. package/dist/manager.runtime-CiRcAT_V.js +670 -0
  652. package/dist/manifest-D49j8zhq.js +231 -0
  653. package/dist/manifest-registry-CVwreH55.js +955 -0
  654. package/dist/map-size-CHeGE-Hu.js +15 -0
  655. package/dist/markdown-tables-D2sUymqZ.js +31 -0
  656. package/dist/mask-api-key-Dxw856id.js +10 -0
  657. package/dist/matrix-Ds9X7gxo.js +340 -0
  658. package/dist/matrix-config-helpers-CXItIHIe.js +153 -0
  659. package/dist/matrix-helper-dQNUz9y1.js +20 -0
  660. package/dist/matrix-migration-snapshot-BSPlCZpf.js +714 -0
  661. package/dist/matrix-runtime-surface-Dggb-0DD.js +12 -0
  662. package/dist/matrix-surface-CxJ9TM8l.js +13 -0
  663. package/dist/matrix-thread-bindings-CT4Dqsid.js +12 -0
  664. package/dist/mcp/plugin-tools-serve.js +105 -0
  665. package/dist/mcp-cli-IzvP-l2E.js +768 -0
  666. package/dist/mcp-config-Bul9F_lO.js +117 -0
  667. package/dist/media-limits-CfgImPSH.js +14 -0
  668. package/dist/media-runtime-D2qFlSNy.js +293 -0
  669. package/dist/media-understanding-D930-yxA.js +43 -0
  670. package/dist/media-understanding-provider-WeSvV5Jz.js +27 -0
  671. package/dist/media-understanding-runtime-C2xB_w9c.js +15 -0
  672. package/dist/media-understanding.runtime-Cad8YO-5.js +7 -0
  673. package/dist/memory-core-engine-runtime-e08xLNwK.js +14 -0
  674. package/dist/memory-core-host-engine-embeddings-CeqjF8mF.js +1369 -0
  675. package/dist/memory-core-host-engine-qmd-2rX9HR2g.js +375 -0
  676. package/dist/memory-core-host-engine-storage-BocZ6yow.js +109 -0
  677. package/dist/memory-core-host-multimodal-DgBuQzZm.js +1 -0
  678. package/dist/memory-core-host-query-Cekrv97-.js +2 -0
  679. package/dist/memory-core-host-runtime-cli--EQHw17R.js +10 -0
  680. package/dist/memory-core-host-runtime-core-DX17el9Z.js +8 -0
  681. package/dist/memory-core-host-runtime-files-CeDFldc-.js +3 -0
  682. package/dist/memory-core-host-secret-BUGjwboV.js +1 -0
  683. package/dist/memory-core-host-status-C7nF33J8.js +44 -0
  684. package/dist/memory-embedding-providers-C8KLZUqC.js +34 -0
  685. package/dist/memory-runtime-D2rQY7mY.js +2 -0
  686. package/dist/memory-runtime-WuWYrOU9.js +30 -0
  687. package/dist/memory-search-BQs_twVs.js +2 -0
  688. package/dist/memory-search-L16IM5VZ.js +202 -0
  689. package/dist/memory-state-BPOopEhZ.js +41 -0
  690. package/dist/mention-gating-BJSMiJu8.js +25 -0
  691. package/dist/mentions-D0fLhfbe.js +155 -0
  692. package/dist/mentions-Ksl6lu1X.js +65 -0
  693. package/dist/merge-patch-CY3S-7zE.js +240 -0
  694. package/dist/message-D1nCeSGV.js +205 -0
  695. package/dist/message-action-discovery-Bp_zFTg1.js +133 -0
  696. package/dist/message-action-runner-DOaZ7jbV.js +1601 -0
  697. package/dist/message-channel-Di9LQZCg.js +105 -0
  698. package/dist/message-handler-CVxycGRP.js +1759 -0
  699. package/dist/message-hook-mappers-CgJovp_6.js +255 -0
  700. package/dist/message-secret-scope-BsvGcXOU.js +104 -0
  701. package/dist/method-scopes-1fMDkPgy.js +2608 -0
  702. package/dist/mime-CPj5mSwT.js +150 -0
  703. package/dist/min-host-version-BROqyGiT.js +348 -0
  704. package/dist/minimax-vlm-ciXgon3-.js +502 -0
  705. package/dist/model-auth-FAjaPIyj.js +330 -0
  706. package/dist/model-auth-env-aXebmtnO.js +42 -0
  707. package/dist/model-auth-label-BdkmYsfL.js +45 -0
  708. package/dist/model-auth-markers-CAxoOhNr.js +70 -0
  709. package/dist/model-auth-runtime-shared-C6EfNsiC.js +18 -0
  710. package/dist/model-catalog-DcYmAWnK.js +208 -0
  711. package/dist/model-catalog.runtime-BnfcWBe6.js +2 -0
  712. package/dist/model-input-shLH7pnZ.js +20 -0
  713. package/dist/model-overrides-CCPXEsf4.js +61 -0
  714. package/dist/model-overrides-CbljEHPO.js +84 -0
  715. package/dist/model-param-b-C9Se0GAW.js +15 -0
  716. package/dist/model-picker-7YHY1_DM.js +439 -0
  717. package/dist/model-picker-cAVRu3J8.js +3 -0
  718. package/dist/model-picker.runtime-DbCF7jcT.js +15 -0
  719. package/dist/model-selection-DLV9QudA.js +486 -0
  720. package/dist/model-selection-teaznyVt.js +407 -0
  721. package/dist/model-suppression-DxU9Wl3w.js +24 -0
  722. package/dist/model-suppression.runtime-DdJpj7Pn.js +7 -0
  723. package/dist/models-BktgoCTN.js +3 -0
  724. package/dist/models-DxC1yWIR.js +2550 -0
  725. package/dist/models-cli-BQJGDwlZ.js +197 -0
  726. package/dist/models-config-BrM95ZWn.js +2 -0
  727. package/dist/models-config-WznILp-f.js +1106 -0
  728. package/dist/models-config.runtime-DKvV7dBw.js +2 -0
  729. package/dist/monitor-B7Wimfc0.js +6004 -0
  730. package/dist/moonshot-stream-wrappers-CAVTNNIV.js +27 -0
  731. package/dist/moonshot-thinking-stream-wrappers-DSGFaY0P.js +69 -0
  732. package/dist/multimodal-fHfIB02R.js +66 -0
  733. package/dist/mutable-allowlist-detectors-Cz3_rHTS.js +62 -0
  734. package/dist/native-command-session-targets-YEwzYdBY.js +10 -0
  735. package/dist/net-DV8cgxeU.js +264 -0
  736. package/dist/network-mode-DlVi9UOI.js +17 -0
  737. package/dist/node-cli-BOOTFx0A.js +2201 -0
  738. package/dist/node-command-policy-H9JvUbqw.js +190 -0
  739. package/dist/node-commands-CtUW-J-z.js +11 -0
  740. package/dist/node-require-BgDD9bTi.js +14 -0
  741. package/dist/node-resolve-r0n2qCFZ.js +110 -0
  742. package/dist/node-service-BTIQHcIe.js +68 -0
  743. package/dist/node-startup-env-CVMjxAUF.js +50 -0
  744. package/dist/nodes-cli-DSe8_891.js +1050 -0
  745. package/dist/nodes-screen-BFBwMK0F.js +219 -0
  746. package/dist/nodes.helpers-C5_joVF0.js +204 -0
  747. package/dist/normalize-TCHtmmQz.js +35 -0
  748. package/dist/normalize-reply-D3AZv-Ku.js +500 -0
  749. package/dist/normalize-secret-input-Botsab7G.js +32 -0
  750. package/dist/note-BopuvWl0.js +109 -0
  751. package/dist/npm-registry-spec-C04c6qSA.js +100 -0
  752. package/dist/ollama-DHGG2Bt4.js +26 -0
  753. package/dist/ollama-surface-C297W-Hb.js +24 -0
  754. package/dist/onboard-BLF26Ra3.js +591 -0
  755. package/dist/onboard-channels-C7VwUlqL.js +2 -0
  756. package/dist/onboard-channels-CNYuwk6A.js +705 -0
  757. package/dist/onboard-config-BHR99vFk.js +2 -0
  758. package/dist/onboard-config-CDwd7KFG.js +29 -0
  759. package/dist/onboard-custom-B-SjrGJ_.js +2 -0
  760. package/dist/onboard-custom-BYciMnUV.js +646 -0
  761. package/dist/onboard-helpers-CXSVhHmw.js +4 -0
  762. package/dist/onboard-helpers-DQzH15KX.js +272 -0
  763. package/dist/onboard-hooks-dbSmp47O.js +52 -0
  764. package/dist/onboard-remote-76zO-wtV.js +2 -0
  765. package/dist/onboard-remote-CV8CYWRk.js +193 -0
  766. package/dist/onboard-search-CR1tclPf.js +339 -0
  767. package/dist/onboard-skills-B3nol3_I.js +2 -0
  768. package/dist/onboard-skills-BWzgYZiw.js +134 -0
  769. package/dist/openai-CYdnp7Xp.js +21 -0
  770. package/dist/openai-codex-auth-identity-DYIekza3.js +40 -0
  771. package/dist/openai-codex-catalog-C9jNVPkk.js +11 -0
  772. package/dist/openai-codex-provider-CihFFdms.js +254 -0
  773. package/dist/openai-provider-CY9og1U4.js +272 -0
  774. package/dist/openai-stream-wrappers-DMltslUP.js +453 -0
  775. package/dist/operator-approvals-client-CrZARXVS.js +33 -0
  776. package/dist/order-EE5jGs_C.js +744 -0
  777. package/dist/origin-routing-IIB1gZNP.js +15 -0
  778. package/dist/os-summary-B2xVpxVk.js +26 -0
  779. package/dist/outbound-adapter-BXuNyLX4.js +181 -0
  780. package/dist/outbound-media-Do8el7w-.js +48 -0
  781. package/dist/outbound-runtime-BsrPMYQX.js +2 -0
  782. package/dist/outbound-send-deps-RCYokJDu.js +7 -0
  783. package/dist/pairing-challenge-C6zO1O_e.js +33 -0
  784. package/dist/pairing-cli-lSGiQegx.js +116 -0
  785. package/dist/pairing-labels-CqTzyQv4.js +7 -0
  786. package/dist/pairing-message-CLV_7GCg.js +4 -0
  787. package/dist/pairing-messages-Bms_bews.js +23 -0
  788. package/dist/pairing-pending-CymkYopg.js +14 -0
  789. package/dist/pairing-store-BgSXc67b.js +617 -0
  790. package/dist/pairing-token-trqjnXaR.js +80 -0
  791. package/dist/parse-duration-FGYGEVrK.js +41 -0
  792. package/dist/parse-finite-number-CpMi4ac9.js +30 -0
  793. package/dist/parse-log-line-DB02BPsG.js +43 -0
  794. package/dist/parse-port-CfkrReDG.js +8 -0
  795. package/dist/parse-timeout-CqVxIetA.js +27 -0
  796. package/dist/path-alias-guards-CTG--JDv.js +40 -0
  797. package/dist/path-env-Coe9j6U3.js +87 -0
  798. package/dist/path-safety-BtrNm8CZ.js +12 -0
  799. package/dist/paths-dFp6bjkV.js +180 -0
  800. package/dist/paths-voC5pD8X.js +201 -0
  801. package/dist/payload-BiCTL_Go.js +90 -0
  802. package/dist/pdf-extract-DYqhcrys.js +73 -0
  803. package/dist/persistent-bindings.resolve-BG1W2wH2.js +12 -0
  804. package/dist/persistent-bindings.types-yg27a-LN.js +6 -0
  805. package/dist/persistent-dedupe-DeJFOp8F.js +116 -0
  806. package/dist/pi-model-discovery-4V1cP6C-.js +188 -0
  807. package/dist/pi-settings-tFYTni5h.js +57 -0
  808. package/dist/plugin-approvals-BBS3Vgt6.js +34 -0
  809. package/dist/plugin-auto-enable-B4gIDfiP.js +349 -0
  810. package/dist/plugin-entry-D7EjsbGL.js +25 -0
  811. package/dist/plugin-install-CBe57uiZ.js +2 -0
  812. package/dist/plugin-install-PbQ6ukY-.js +191 -0
  813. package/dist/plugin-install-config-policy-MQbVt-fA.js +93 -0
  814. package/dist/plugin-install-path-warnings-BfBOA9nm.js +40 -0
  815. package/dist/plugin-install-plan-DKH1Osjr.js +50 -0
  816. package/dist/plugin-registry-D2DvWTxI.js +2 -0
  817. package/dist/plugin-registry-t_GnpNNe.js +70 -0
  818. package/dist/plugin-runtime-kxm6OF3O.js +6 -0
  819. package/dist/plugin-sdk/account-core.js +8 -0
  820. package/dist/plugin-sdk/account-helpers.js +4 -0
  821. package/dist/plugin-sdk/account-id.js +3 -0
  822. package/dist/plugin-sdk/account-resolution.js +12 -0
  823. package/dist/plugin-sdk/acp-runtime.js +6 -0
  824. package/dist/plugin-sdk/agent-config-primitives.js +3 -0
  825. package/dist/plugin-sdk/agent-runtime.js +29 -0
  826. package/dist/plugin-sdk/allow-from.js +5 -0
  827. package/dist/plugin-sdk/allowlist-config-edit.js +2 -0
  828. package/dist/plugin-sdk/amazon-bedrock.js +15 -0
  829. package/dist/plugin-sdk/anthropic-vertex.js +2 -0
  830. package/dist/plugin-sdk/approval-runtime.js +7 -0
  831. package/dist/plugin-sdk/bluebubbles-policy.js +2 -0
  832. package/dist/plugin-sdk/bluebubbles.js +255 -0
  833. package/dist/plugin-sdk/boolean-param.js +2 -0
  834. package/dist/plugin-sdk/browser-runtime.js +2 -0
  835. package/dist/plugin-sdk/browser-support.js +44 -0
  836. package/dist/plugin-sdk/browser.js +15 -0
  837. package/dist/plugin-sdk/byteplus.js +17 -0
  838. package/dist/plugin-sdk/channel-actions.js +3 -0
  839. package/dist/plugin-sdk/channel-config-helpers.js +2 -0
  840. package/dist/plugin-sdk/channel-config-primitives.js +3 -0
  841. package/dist/plugin-sdk/channel-config-schema.js +7 -0
  842. package/dist/plugin-sdk/channel-config-writes.js +2 -0
  843. package/dist/plugin-sdk/channel-contract.js +1 -0
  844. package/dist/plugin-sdk/channel-feedback.js +5 -0
  845. package/dist/plugin-sdk/channel-inbound.js +10 -0
  846. package/dist/plugin-sdk/channel-lifecycle.js +3 -0
  847. package/dist/plugin-sdk/channel-pairing.js +2 -0
  848. package/dist/plugin-sdk/channel-policy.js +6 -0
  849. package/dist/plugin-sdk/channel-reply-pipeline.js +2 -0
  850. package/dist/plugin-sdk/channel-runtime.js +15 -0
  851. package/dist/plugin-sdk/channel-send-result.js +2 -0
  852. package/dist/plugin-sdk/channel-setup.js +5 -0
  853. package/dist/plugin-sdk/channel-status.js +5 -0
  854. package/dist/plugin-sdk/channel-targets.js +4 -0
  855. package/dist/plugin-sdk/chutes.js +20 -0
  856. package/dist/plugin-sdk/cli-backend.js +3 -0
  857. package/dist/plugin-sdk/cli-runtime.js +6 -0
  858. package/dist/plugin-sdk/cloudflare-ai-gateway.js +18 -0
  859. package/dist/plugin-sdk/collection-runtime.js +2 -0
  860. package/dist/plugin-sdk/command-auth-native.js +6 -0
  861. package/dist/plugin-sdk/command-auth.js +14 -0
  862. package/dist/plugin-sdk/compat.js +35 -0
  863. package/dist/plugin-sdk/config-runtime.js +22 -0
  864. package/dist/plugin-sdk/conversation-runtime.js +15 -0
  865. package/dist/plugin-sdk/core.js +22 -0
  866. package/dist/plugin-sdk/deepseek.js +14 -0
  867. package/dist/plugin-sdk/device-bootstrap.js +3 -0
  868. package/dist/plugin-sdk/diagnostic-runtime.js +4 -0
  869. package/dist/plugin-sdk/diagnostics-otel.js +5 -0
  870. package/dist/plugin-sdk/diffs.js +3 -0
  871. package/dist/plugin-sdk/direct-dm.js +2 -0
  872. package/dist/plugin-sdk/directory-runtime.js +5 -0
  873. package/dist/plugin-sdk/discord-account.js +2 -0
  874. package/dist/plugin-sdk/discord-core.js +9 -0
  875. package/dist/plugin-sdk/discord-runtime-surface.js +2 -0
  876. package/dist/plugin-sdk/discord-session-key.js +2 -0
  877. package/dist/plugin-sdk/discord-surface.js +2 -0
  878. package/dist/plugin-sdk/discord-thread-bindings.js +2 -0
  879. package/dist/plugin-sdk/discord-timeouts.js +2 -0
  880. package/dist/plugin-sdk/discord.js +21 -0
  881. package/dist/plugin-sdk/error-runtime.js +3 -0
  882. package/dist/plugin-sdk/extension-shared.js +75 -0
  883. package/dist/plugin-sdk/feishu-conversation.js +2 -0
  884. package/dist/plugin-sdk/feishu-setup.js +2 -0
  885. package/dist/plugin-sdk/feishu.js +33 -0
  886. package/dist/plugin-sdk/fetch-runtime.js +7 -0
  887. package/dist/plugin-sdk/file-lock.js +2 -0
  888. package/dist/plugin-sdk/gateway-runtime.js +4 -0
  889. package/dist/plugin-sdk/github-copilot-login.js +2 -0
  890. package/dist/plugin-sdk/github-copilot-token.js +2 -0
  891. package/dist/plugin-sdk/global-singleton.js +4 -0
  892. package/dist/plugin-sdk/google.js +2 -0
  893. package/dist/plugin-sdk/googlechat.js +58 -0
  894. package/dist/plugin-sdk/group-access.js +2 -0
  895. package/dist/plugin-sdk/hook-runtime.js +4 -0
  896. package/dist/plugin-sdk/host-runtime.js +3 -0
  897. package/dist/plugin-sdk/huggingface.js +18 -0
  898. package/dist/plugin-sdk/image-generation-core.js +63 -0
  899. package/dist/plugin-sdk/image-generation.js +2 -0
  900. package/dist/plugin-sdk/index.js +5 -0
  901. package/dist/plugin-sdk/infra-runtime.js +45 -0
  902. package/dist/plugin-sdk/interactive-runtime.js +4 -0
  903. package/dist/plugin-sdk/irc-surface.js +2 -0
  904. package/dist/plugin-sdk/irc.js +30 -0
  905. package/dist/plugin-sdk/json-store.js +3 -0
  906. package/dist/plugin-sdk/keyed-async-queue.js +2 -0
  907. package/dist/plugin-sdk/kilocode.js +23 -0
  908. package/dist/plugin-sdk/kimi-coding.js +11 -0
  909. package/dist/plugin-sdk/lazy-runtime.js +2 -0
  910. package/dist/plugin-sdk/line-core.js +6 -0
  911. package/dist/plugin-sdk/line-runtime.js +2 -0
  912. package/dist/plugin-sdk/line-surface.js +2 -0
  913. package/dist/plugin-sdk/line.js +9 -0
  914. package/dist/plugin-sdk/llm-task.js +5 -0
  915. package/dist/plugin-sdk/logging-core.js +5 -0
  916. package/dist/plugin-sdk/matrix-helper.js +2 -0
  917. package/dist/plugin-sdk/matrix-runtime-heavy.js +4 -0
  918. package/dist/plugin-sdk/matrix-runtime-shared.js +2 -0
  919. package/dist/plugin-sdk/matrix-runtime-surface.js +2 -0
  920. package/dist/plugin-sdk/matrix-surface.js +2 -0
  921. package/dist/plugin-sdk/matrix-thread-bindings.js +2 -0
  922. package/dist/plugin-sdk/matrix.js +64 -0
  923. package/dist/plugin-sdk/mattermost-policy.js +11 -0
  924. package/dist/plugin-sdk/mattermost.js +42 -0
  925. package/dist/plugin-sdk/media-runtime.js +15 -0
  926. package/dist/plugin-sdk/media-understanding-runtime.js +2 -0
  927. package/dist/plugin-sdk/media-understanding.js +3 -0
  928. package/dist/plugin-sdk/memory-core-engine-runtime.js +2 -0
  929. package/dist/plugin-sdk/memory-core-host-engine-embeddings.js +6 -0
  930. package/dist/plugin-sdk/memory-core-host-engine-foundation.js +17 -0
  931. package/dist/plugin-sdk/memory-core-host-engine-qmd.js +3 -0
  932. package/dist/plugin-sdk/memory-core-host-engine-storage.js +4 -0
  933. package/dist/plugin-sdk/memory-core-host-multimodal.js +3 -0
  934. package/dist/plugin-sdk/memory-core-host-query.js +3 -0
  935. package/dist/plugin-sdk/memory-core-host-runtime-cli.js +12 -0
  936. package/dist/plugin-sdk/memory-core-host-runtime-core.js +13 -0
  937. package/dist/plugin-sdk/memory-core-host-runtime-files.js +4 -0
  938. package/dist/plugin-sdk/memory-core-host-secret.js +3 -0
  939. package/dist/plugin-sdk/memory-core-host-status.js +2 -0
  940. package/dist/plugin-sdk/memory-core.js +28 -0
  941. package/dist/plugin-sdk/memory-lancedb.js +4 -0
  942. package/dist/plugin-sdk/minimax.js +24 -0
  943. package/dist/plugin-sdk/mistral.js +17 -0
  944. package/dist/plugin-sdk/modelstudio-definitions.js +19 -0
  945. package/dist/plugin-sdk/modelstudio.js +24 -0
  946. package/dist/plugin-sdk/moonshot.js +17 -0
  947. package/dist/plugin-sdk/msteams.js +54 -0
  948. package/dist/plugin-sdk/nextcloud-talk.js +35 -0
  949. package/dist/plugin-sdk/nostr.js +24 -0
  950. package/dist/plugin-sdk/nvidia.js +11 -0
  951. package/dist/plugin-sdk/ollama-surface.js +2 -0
  952. package/dist/plugin-sdk/ollama.js +2 -0
  953. package/dist/plugin-sdk/openai.js +2 -0
  954. package/dist/plugin-sdk/opencode-go.js +14 -0
  955. package/dist/plugin-sdk/opencode.js +15 -0
  956. package/dist/plugin-sdk/outbound-runtime.js +5 -0
  957. package/dist/plugin-sdk/param-readers.js +2 -0
  958. package/dist/plugin-sdk/plugin-entry.js +3 -0
  959. package/dist/plugin-sdk/plugin-runtime.js +8 -0
  960. package/dist/plugin-sdk/process-runtime.js +2 -0
  961. package/dist/plugin-sdk/provider-auth-api-key.js +9 -0
  962. package/dist/plugin-sdk/provider-auth-login.js +2 -0
  963. package/dist/plugin-sdk/provider-auth-result.js +2 -0
  964. package/dist/plugin-sdk/provider-auth-runtime.js +5 -0
  965. package/dist/plugin-sdk/provider-auth.js +17 -0
  966. package/dist/plugin-sdk/provider-catalog-shared.js +2 -0
  967. package/dist/plugin-sdk/provider-entry.js +86 -0
  968. package/dist/plugin-sdk/provider-env-vars.js +2 -0
  969. package/dist/plugin-sdk/provider-http.js +3 -0
  970. package/dist/plugin-sdk/provider-model-shared.js +5 -0
  971. package/dist/plugin-sdk/provider-moonshot.js +3 -0
  972. package/dist/plugin-sdk/provider-onboard.js +3 -0
  973. package/dist/plugin-sdk/provider-setup.js +2 -0
  974. package/dist/plugin-sdk/provider-stream.js +4 -0
  975. package/dist/plugin-sdk/provider-tools.js +2 -0
  976. package/dist/plugin-sdk/provider-usage.js +3 -0
  977. package/dist/plugin-sdk/provider-web-search.js +6 -0
  978. package/dist/plugin-sdk/provider-zai-endpoint.js +116 -0
  979. package/dist/plugin-sdk/qianfan.js +13 -0
  980. package/dist/plugin-sdk/reply-chunking.js +3 -0
  981. package/dist/plugin-sdk/reply-dispatch-runtime.js +5 -0
  982. package/dist/plugin-sdk/reply-history.js +3 -0
  983. package/dist/plugin-sdk/reply-payload.js +2 -0
  984. package/dist/plugin-sdk/reply-runtime.js +14 -0
  985. package/dist/plugin-sdk/request-url.js +2 -0
  986. package/dist/plugin-sdk/retry-runtime.js +4 -0
  987. package/dist/plugin-sdk/root-alias.cjs +347 -0
  988. package/dist/plugin-sdk/routing.js +9 -0
  989. package/dist/plugin-sdk/runtime-env.js +17 -0
  990. package/dist/plugin-sdk/runtime-store.js +2 -0
  991. package/dist/plugin-sdk/runtime.js +9 -0
  992. package/dist/plugin-sdk/sandbox.js +5 -0
  993. package/dist/plugin-sdk/secret-input.js +4 -0
  994. package/dist/plugin-sdk/security-runtime.js +5 -0
  995. package/dist/plugin-sdk/self-hosted-provider-setup.js +2 -0
  996. package/dist/plugin-sdk/setup-adapter-runtime.js +3 -0
  997. package/dist/plugin-sdk/setup-runtime.js +6 -0
  998. package/dist/plugin-sdk/setup-tools.js +6 -0
  999. package/dist/plugin-sdk/setup.js +13 -0
  1000. package/dist/plugin-sdk/sglang.js +15 -0
  1001. package/dist/plugin-sdk/signal-account.js +2 -0
  1002. package/dist/plugin-sdk/signal-surface.js +2 -0
  1003. package/dist/plugin-sdk/signal.js +24 -0
  1004. package/dist/plugin-sdk/slack-account.js +2 -0
  1005. package/dist/plugin-sdk/slack-core.js +7 -0
  1006. package/dist/plugin-sdk/slack-runtime-surface.js +2 -0
  1007. package/dist/plugin-sdk/slack-surface.js +2 -0
  1008. package/dist/plugin-sdk/slack-target-parser.js +2 -0
  1009. package/dist/plugin-sdk/slack-targets.js +3 -0
  1010. package/dist/plugin-sdk/slack.js +20 -0
  1011. package/dist/plugin-sdk/speech-core.js +4 -0
  1012. package/dist/plugin-sdk/speech-runtime.js +2 -0
  1013. package/dist/plugin-sdk/speech.js +5 -0
  1014. package/dist/plugin-sdk/ssrf-runtime.js +6 -0
  1015. package/dist/plugin-sdk/state-paths.js +3 -0
  1016. package/dist/plugin-sdk/status-helpers.js +4 -0
  1017. package/dist/plugin-sdk/synthetic.js +17 -0
  1018. package/dist/plugin-sdk/telegram-account.js +2 -0
  1019. package/dist/plugin-sdk/telegram-allow-from.js +12 -0
  1020. package/dist/plugin-sdk/telegram-core.js +18 -0
  1021. package/dist/plugin-sdk/telegram-surface.js +42 -0
  1022. package/dist/plugin-sdk/temp-path.js +4 -0
  1023. package/dist/plugin-sdk/testing.js +11 -0
  1024. package/dist/plugin-sdk/text-runtime.js +20 -0
  1025. package/dist/plugin-sdk/thread-bindings-runtime.js +3 -0
  1026. package/dist/plugin-sdk/thread-ownership.js +4 -0
  1027. package/dist/plugin-sdk/tlon.js +23 -0
  1028. package/dist/plugin-sdk/together.js +16 -0
  1029. package/dist/plugin-sdk/tool-send.js +2 -0
  1030. package/dist/plugin-sdk/twitch.js +17 -0
  1031. package/dist/plugin-sdk/venice.js +16 -0
  1032. package/dist/plugin-sdk/vllm.js +15 -0
  1033. package/dist/plugin-sdk/voice-call.js +6 -0
  1034. package/dist/plugin-sdk/volcengine.js +17 -0
  1035. package/dist/plugin-sdk/web-media.js +3 -0
  1036. package/dist/plugin-sdk/webhook-ingress.js +9 -0
  1037. package/dist/plugin-sdk/webhook-path.js +2 -0
  1038. package/dist/plugin-sdk/webhook-request-guards.js +3 -0
  1039. package/dist/plugin-sdk/whatsapp-auth-presence.js +3 -0
  1040. package/dist/plugin-sdk/whatsapp-core.js +11 -0
  1041. package/dist/plugin-sdk/whatsapp-shared.js +3 -0
  1042. package/dist/plugin-sdk/whatsapp-surface.js +2 -0
  1043. package/dist/plugin-sdk/whatsapp-targets.js +2 -0
  1044. package/dist/plugin-sdk/windows-spawn.js +2 -0
  1045. package/dist/plugin-sdk/xai.js +2 -0
  1046. package/dist/plugin-sdk/zalo-setup.js +2 -0
  1047. package/dist/plugin-sdk/zalo.js +37 -0
  1048. package/dist/plugin-sdk/zalouser.js +39 -0
  1049. package/dist/plugin-sdk/zod.js +2 -0
  1050. package/dist/plugins/build-smoke-entry.js +4 -0
  1051. package/dist/plugins/provider-runtime.runtime.js +2 -0
  1052. package/dist/plugins/runtime/index.js +2 -0
  1053. package/dist/plugins/runtime/runtime-line.contract.js +23 -0
  1054. package/dist/plugins-BUhqQahf.js +7 -0
  1055. package/dist/plugins-D3E9gBoB.js +5 -0
  1056. package/dist/plugins-allowlist-BsE4VUd6.js +14 -0
  1057. package/dist/plugins-cli-DNIRlpEw.js +551 -0
  1058. package/dist/plugins-command-helpers-D0cHWZ8k.js +116 -0
  1059. package/dist/plugins-install-persist-B4VRDkMW.js +121 -0
  1060. package/dist/plugins-update-command-CVpqSCHk.js +974 -0
  1061. package/dist/pluralkit-BLAFsOsu.js +21 -0
  1062. package/dist/poll-params-BRovIMUP.js +52 -0
  1063. package/dist/polls-BJAJSaiP.js +35 -0
  1064. package/dist/port-defaults-BSVMFkjY.js +30 -0
  1065. package/dist/ports-Bc5Ccog1.js +262 -0
  1066. package/dist/ports-C4UXOMrf.js +432 -0
  1067. package/dist/ports-lsof-BGtOoYbU.js +25 -0
  1068. package/dist/ports-probe-BsWR8TFT.js +14 -0
  1069. package/dist/preflight-audio.runtime-C9Vy2rmC.js +7 -0
  1070. package/dist/probe-BQag0DWb.js +178 -0
  1071. package/dist/probe-Ba_tzX9A.js +383 -0
  1072. package/dist/probe-CU89zpYY.js +2 -0
  1073. package/dist/probe-DqrD8L5s.js +137 -0
  1074. package/dist/probe-auth-B_8xyHva.js +63 -0
  1075. package/dist/probe-auth-ynM8e9Ac.js +2 -0
  1076. package/dist/probe.runtime-CJ9xp7YD.js +2 -0
  1077. package/dist/process-scoped-map-DSo5-USL.js +61 -0
  1078. package/dist/profile-utils-C7uzTwgJ.js +15 -0
  1079. package/dist/profiles-bHSSYfJl.js +79 -0
  1080. package/dist/program-context-87EEruZh.js +10 -0
  1081. package/dist/program-context-D14SwQxo.js +2 -0
  1082. package/dist/program-wvgzSxLY.js +158 -0
  1083. package/dist/progress-BvK_oMpz.js +132 -0
  1084. package/dist/prompt-CtkpPKiX.js +2 -0
  1085. package/dist/prompt-DOBS3BID.js +20 -0
  1086. package/dist/prompt-select-styled-c91_PlKW.js +5468 -0
  1087. package/dist/prompt-style-DRmsfagi.js +7 -0
  1088. package/dist/prompts-DAJPf5yB.js +9 -0
  1089. package/dist/prototype-keys-BWjW0VW8.js +11 -0
  1090. package/dist/provider-C6dmSPJE.js +7237 -0
  1091. package/dist/provider-api-key-auth-BBRnMefH.js +109 -0
  1092. package/dist/provider-api-key-auth.runtime-obo7wOYn.js +14 -0
  1093. package/dist/provider-auth-BTrDFsFt.js +43 -0
  1094. package/dist/provider-auth-api-key-BhD_cXM7.js +5 -0
  1095. package/dist/provider-auth-choice-2fsBmYtb.js +134 -0
  1096. package/dist/provider-auth-choice-helpers-DLlNwVwg.js +58 -0
  1097. package/dist/provider-auth-choice-preference-BkZTzT1J.js +44 -0
  1098. package/dist/provider-auth-choice.runtime-BHkXn7WH.js +14 -0
  1099. package/dist/provider-auth-choice.runtime-r6ydqD_o.js +2 -0
  1100. package/dist/provider-auth-choices-AHFkSF9C.js +65 -0
  1101. package/dist/provider-auth-guidance-Bo67Hboq.js +35 -0
  1102. package/dist/provider-auth-helpers-Bk-AB5Wp.js +92 -0
  1103. package/dist/provider-auth-input-kKdGWlxc.js +116 -0
  1104. package/dist/provider-auth-login-dOLrU5NV.js +8 -0
  1105. package/dist/provider-auth-login.runtime-C_GzFGmF.js +196 -0
  1106. package/dist/provider-auth-mode-B8uz1z07.js +20 -0
  1107. package/dist/provider-auth-ref-Bq-MejeL.js +2 -0
  1108. package/dist/provider-auth-ref-DRl66ULG.js +171 -0
  1109. package/dist/provider-auth-result-CkUVvE5c.js +31 -0
  1110. package/dist/provider-auth-runtime-BRAnqbBW.js +32 -0
  1111. package/dist/provider-catalog-shared-BdXDqt2_.js +28 -0
  1112. package/dist/provider-discovery.runtime-BKQXZvW1.js +10 -0
  1113. package/dist/provider-dispatcher-Cic3Zvgm.js +22 -0
  1114. package/dist/provider-env-vars-X-m-m1cR.js +119 -0
  1115. package/dist/provider-flow-rMDy096Q.js +93 -0
  1116. package/dist/provider-id-CTiEzT1T.js +30 -0
  1117. package/dist/provider-model-primary-QC1J1e8s.js +26 -0
  1118. package/dist/provider-model-shared-YwZtB78q.js +104 -0
  1119. package/dist/provider-oauth-flow-DGhuMjqj.js +33 -0
  1120. package/dist/provider-onboard-Dhee14q4.js +264 -0
  1121. package/dist/provider-openai-codex-oauth-tls-CExxHKyb.js +101 -0
  1122. package/dist/provider-registry-7IbNpklR.js +49 -0
  1123. package/dist/provider-runtime-C3NxbOtm.js +2 -0
  1124. package/dist/provider-runtime-DWDjorB4.js +275 -0
  1125. package/dist/provider-runtime.runtime-BYVCPiGA.js +26 -0
  1126. package/dist/provider-self-hosted-setup-Cr4L3fdW.js +272 -0
  1127. package/dist/provider-session.runtime-BHtGAIna.js +8 -0
  1128. package/dist/provider-stream-DpUrpHvN.js +266 -0
  1129. package/dist/provider-tools-L23YSx8p.js +37 -0
  1130. package/dist/provider-usage-BWLu6XJt.js +375 -0
  1131. package/dist/provider-usage-BwHu9Ee_.js +3 -0
  1132. package/dist/provider-usage-CfYpxnUD.js +2 -0
  1133. package/dist/provider-usage.fetch-BCNscJcf.js +633 -0
  1134. package/dist/provider-web-search-CJBYgiMq.js +717 -0
  1135. package/dist/provider-wizard-BGXsleZZ.js +209 -0
  1136. package/dist/provider.runtime-BS0qB3qa.js +2 -0
  1137. package/dist/providers-DTi5kDSF.js +59 -0
  1138. package/dist/providers.runtime-7kqrRLzO.js +55 -0
  1139. package/dist/proxy-env-CEq84zdW.js +40 -0
  1140. package/dist/proxy-fetch-BI4S6OOr.js +55 -0
  1141. package/dist/push-apns-btlZ1qmo.js +921 -0
  1142. package/dist/pw-ai-Crk1oU2c.js +1827 -0
  1143. package/dist/qr-cli-CBrnKR40.js +368 -0
  1144. package/dist/qr-cli-D35IbCMe.js +2 -0
  1145. package/dist/query-expansion-CTVRVJBc.js +633 -0
  1146. package/dist/read-only-account-inspect-CtMAYZjJ.js +9 -0
  1147. package/dist/read-only-account-inspect.telegram-DsWhEWsi.js +202 -0
  1148. package/dist/reasoning-tags-C0A8lJGB.js +77 -0
  1149. package/dist/redact-BDinS1q9.js +102 -0
  1150. package/dist/redact-identifier-CIxwZTyq.js +13 -0
  1151. package/dist/redact-sensitive-url-BYqi2BEL.js +50 -0
  1152. package/dist/redirect-headers-BX_akPpf.js +25 -0
  1153. package/dist/ref-contract-D5ynmOGd.js +53 -0
  1154. package/dist/register-lazy-command-C1up25zY.js +43 -0
  1155. package/dist/register.agent-BoS4J17I.js +239 -0
  1156. package/dist/register.backup-CJxtB0Qd.js +236 -0
  1157. package/dist/register.configure-a7pFaHfe.js +15 -0
  1158. package/dist/register.maintenance-BtI8X-uf.js +450 -0
  1159. package/dist/register.message-BQRkPLq3.js +643 -0
  1160. package/dist/register.onboard-CthiWQxu.js +79 -0
  1161. package/dist/register.setup-BnxRKFDi.js +104 -0
  1162. package/dist/register.status-health-sessions-CHaa5NX0.js +705 -0
  1163. package/dist/register.subclis-DKmBSSCn.js +3 -0
  1164. package/dist/register.subclis-TJY--uPt.js +287 -0
  1165. package/dist/registry-8eF_COje.js +667 -0
  1166. package/dist/registry-B84vjqPA.js +11 -0
  1167. package/dist/registry-CJH_346k.js +60 -0
  1168. package/dist/registry-CiuAeUhZ.js +50 -0
  1169. package/dist/registry-DrnXCaTU.js +219 -0
  1170. package/dist/repair-bIiF2iJn.js +112 -0
  1171. package/dist/reply-B1wBiwTS.js +3134 -0
  1172. package/dist/reply-dispatch-runtime-nSg-l3YV.js +3 -0
  1173. package/dist/reply-history-DiOD0MK2.js +2 -0
  1174. package/dist/reply-payload-D0XXyIHC.js +232 -0
  1175. package/dist/reply-payloads-DW1w7Ckr.js +116 -0
  1176. package/dist/reply-payloads-dedupe-BEPyuQQJ.js +135 -0
  1177. package/dist/reply-payloads-dedupe.runtime-ClraIPuB.js +2 -0
  1178. package/dist/reply-prefix-Bmqt3err.js +39 -0
  1179. package/dist/reply-runtime-bbaSgEmi.js +123 -0
  1180. package/dist/reply.runtime-leqfq1BG.js +2 -0
  1181. package/dist/request-url-B5e58odi.js +10 -0
  1182. package/dist/resolve-B-OthG4M.js +2 -0
  1183. package/dist/resolve-BjvAwAfZ.js +619 -0
  1184. package/dist/resolve-bBpW2W5z.js +174 -0
  1185. package/dist/resolve-channels-543uTQ-Q.js +263 -0
  1186. package/dist/resolve-configured-secret-input-string-CcNZQ54A.js +112 -0
  1187. package/dist/resolve-route-CCHWflcJ.js +486 -0
  1188. package/dist/resolve-system-bin-M8rzqZWg.js +120 -0
  1189. package/dist/resolve-users-B2hIFlh6.js +145 -0
  1190. package/dist/resolve-utils-B34dER9i.js +102 -0
  1191. package/dist/response-prefix-template-CmRtMrPn.js +50 -0
  1192. package/dist/restart-sentinel-BEGeUiKE.js +70 -0
  1193. package/dist/restart-stale-pids-Co_AHlf1.js +187 -0
  1194. package/dist/retry-DB6rKQUK.js +76 -0
  1195. package/dist/retry-policy-vpZZs4Ql.js +58 -0
  1196. package/dist/retry-runtime-BwFtUlOC.js +3 -0
  1197. package/dist/root-help-BKc92COf.js +53 -0
  1198. package/dist/route-reply-BhwCACur.js +133 -0
  1199. package/dist/route-reply.runtime-CR3o0GzY.js +2 -0
  1200. package/dist/route-resolution-C30ccEVA.js +1222 -0
  1201. package/dist/routes-BkjFgytb.js +6880 -0
  1202. package/dist/routing-B6ZVsl1G.js +16 -0
  1203. package/dist/rpc-Ceg29ThW.js +67 -0
  1204. package/dist/run-command-Bec0f6Qx.js +32 -0
  1205. package/dist/run-main-B5ZRlNEV.js +425 -0
  1206. package/dist/run-with-concurrency-oNPuq9N9.js +41 -0
  1207. package/dist/runner-BEbGymO4.js +1478 -0
  1208. package/dist/runtime-B3T4VytJ.js +1627 -0
  1209. package/dist/runtime-CiU2aDgB.js +42 -0
  1210. package/dist/runtime-D0VpiCHi.js +125 -0
  1211. package/dist/runtime-Dtd5v6Gj.js +153 -0
  1212. package/dist/runtime-Fhelf5Qd.js +126 -0
  1213. package/dist/runtime-api-B0fBYyFa.js +241 -0
  1214. package/dist/runtime-api-JdnJolgR.js +2484 -0
  1215. package/dist/runtime-discord-ops.runtime-Cc-Clbrs.js +26 -0
  1216. package/dist/runtime-embedded-pi.runtime-CAq8BTmS.js +2 -0
  1217. package/dist/runtime-env-CkoJ2p8u.js +9 -0
  1218. package/dist/runtime-forwarders-BwQHD11s.js +44 -0
  1219. package/dist/runtime-gaN3vB28.js +284 -0
  1220. package/dist/runtime-group-policy-BPxHuPda.js +59 -0
  1221. package/dist/runtime-guard-VWNtYR4l.js +70 -0
  1222. package/dist/runtime-media-understanding.runtime-BnfH3VZb.js +2 -0
  1223. package/dist/runtime-model-auth.runtime-Bd2GMW6W.js +2 -0
  1224. package/dist/runtime-parse-DFyJekfB.js +83 -0
  1225. package/dist/runtime-paths-C22j-CNR.js +333 -0
  1226. package/dist/runtime-schema-Bft9ccja.js +14524 -0
  1227. package/dist/runtime-slack-ops.runtime-qCe8vp_N.js +15 -0
  1228. package/dist/runtime-status-C7QK-Xow.js +109 -0
  1229. package/dist/runtime-status-SEjcftwu.js +15 -0
  1230. package/dist/runtime-store-j5RNDQBQ.js +22 -0
  1231. package/dist/runtime-tts.runtime-IxRggKLH.js +2 -0
  1232. package/dist/runtime-web-tools-Lf22Il6X.js +1891 -0
  1233. package/dist/runtime-whatsapp-boundary-BQeud5Kv.js +6 -0
  1234. package/dist/runtime-whatsapp-boundary-DbAJ9jGX.js +2 -0
  1235. package/dist/safe-regex-tLlDZYfM.js +244 -0
  1236. package/dist/safe-text-CRAu9RDR.js +16 -0
  1237. package/dist/sandbox-DxQGIkI1.js +2698 -0
  1238. package/dist/sandbox-cli-Bd8ECmMx.js +443 -0
  1239. package/dist/sandbox-paths-ui_vqw2W.js +146 -0
  1240. package/dist/sanitize-env-vars-DpPdECQ9.js +82 -0
  1241. package/dist/scan-paths-VhLKL5WT.js +28 -0
  1242. package/dist/scoped-expiring-id-cache-BmlyFPPR.js +35 -0
  1243. package/dist/scp-host-C5NgDe_6.js +62 -0
  1244. package/dist/secret-equal-fMR1DjSl.js +9 -0
  1245. package/dist/secret-file-COQ7QNO9.js +4 -0
  1246. package/dist/secret-file-Dv42g1FG.js +92 -0
  1247. package/dist/secret-input-CzbdxXxu.js +13 -0
  1248. package/dist/secret-input-DJ-sTcOE.js +38 -0
  1249. package/dist/secrets-cli-OoRkxItP.js +2112 -0
  1250. package/dist/secure-random-DJ9MB_Og.js +20 -0
  1251. package/dist/security-cli-CQ4HiQLb.js +477 -0
  1252. package/dist/security-runtime-CU_gbsBJ.js +51 -0
  1253. package/dist/semver-compare-aGN2MIqz.js +53 -0
  1254. package/dist/send-COItao1A.js +2473 -0
  1255. package/dist/send-deps-K4k6Myst.js +19 -0
  1256. package/dist/send-policy-B1t4c2Ab.js +60 -0
  1257. package/dist/server-BPOSwT-c.js +67 -0
  1258. package/dist/server-middleware-QGnAuw-H.js +108 -0
  1259. package/dist/server-node-events-CoM4XGHV.js +454 -0
  1260. package/dist/server-startup-matrix-migration-CMLAopuE.js +1255 -0
  1261. package/dist/service-8Ef_HfQd.js +2 -0
  1262. package/dist/service-DzXqyjgG.js +849 -0
  1263. package/dist/session-DNTpr0A7.js +50 -0
  1264. package/dist/session-archive.runtime-Bz20yPKg.js +2 -0
  1265. package/dist/session-binding-service-BqY1J7gs.js +421 -0
  1266. package/dist/session-context-D4ioj_ZC.js +23 -0
  1267. package/dist/session-conversation-D3BLZCjg.js +15 -0
  1268. package/dist/session-conversation-SDN1QbLK.js +135 -0
  1269. package/dist/session-cost-usage-5D6Kkthv.js +650 -0
  1270. package/dist/session-cost-usage-CqniZ9Q3.js +2 -0
  1271. package/dist/session-envelope-DdZaP6iS.js +18 -0
  1272. package/dist/session-file-SVifvwcV.js +120 -0
  1273. package/dist/session-fork.runtime-Bhgl-_lq.js +50 -0
  1274. package/dist/session-key-BIrdMs11.js +279 -0
  1275. package/dist/session-key-CCQ4ZS9B.js +53 -0
  1276. package/dist/session-key-normalization-DGxkxG3U.js +22 -0
  1277. package/dist/session-meta-5PkRqQxG.js +9 -0
  1278. package/dist/session-override-CqiOQ4Om.js +100 -0
  1279. package/dist/session-reset-model.runtime-DFL5rk1J.js +119 -0
  1280. package/dist/session-subagent-reactivation.runtime-DIIFdc6I.js +2 -0
  1281. package/dist/session-system-events-BrXQQl_c.js +62 -0
  1282. package/dist/session-transcript-files.fs-BltD5xvW.js +124 -0
  1283. package/dist/session-updates-Dd6r5vhZ.js +177 -0
  1284. package/dist/session-updates.runtime-CTmXpESa.js +2 -0
  1285. package/dist/session-utils-CYh1zGmy.js +1735 -0
  1286. package/dist/session-write-lock-D_1twm3Q.js +343 -0
  1287. package/dist/sessions-BBObTITM.js +2 -0
  1288. package/dist/sessions-BLL-TKEv.js +224 -0
  1289. package/dist/sessions-zgiFsm1E.js +381 -0
  1290. package/dist/setup-BnAbcoEP.js +15 -0
  1291. package/dist/setup-CDUb3AWu.js +427 -0
  1292. package/dist/setup-adapter-runtime-kV6aLMzB.js +2 -0
  1293. package/dist/setup-binary-C35NJX1i.js +2 -0
  1294. package/dist/setup-core-C-0ynF1r.js +256 -0
  1295. package/dist/setup-group-access-BrKTGyeK.js +70 -0
  1296. package/dist/setup-helpers-CNcOI9ct.js +390 -0
  1297. package/dist/setup-runtime-CZF60tJ1.js +4 -0
  1298. package/dist/setup-surface-BcZenSzA.js +237 -0
  1299. package/dist/setup-surface-BwZZukYI.js +97 -0
  1300. package/dist/setup-tools-DB-J75x8.js +4 -0
  1301. package/dist/setup-wizard-helpers-u8iQ-OcY.js +841 -0
  1302. package/dist/setup-wizard-proxy-DiI-Brmi.js +127 -0
  1303. package/dist/setup.finalize-L3P2sSFi.js +443 -0
  1304. package/dist/setup.gateway-config-ISaEE7wH.js +246 -0
  1305. package/dist/setup.secret-input-DCxgkYJ3.js +25 -0
  1306. package/dist/shared-B0P4kmoP.js +50 -0
  1307. package/dist/shared-BOaKRLRY.js +64 -0
  1308. package/dist/shared-BXUt8yQc.js +160 -0
  1309. package/dist/shared-BZ338OsD.js +64 -0
  1310. package/dist/shared-BjU08Pt_.js +54 -0
  1311. package/dist/shared-BsFd7tT-.js +136 -0
  1312. package/dist/shared-CvC-RYap.js +37 -0
  1313. package/dist/shared-dXZZGNhj.js +10 -0
  1314. package/dist/shared-rGax8vC3.js +221 -0
  1315. package/dist/shell-argv-Z5ptFecq.js +72 -0
  1316. package/dist/shell-env-BSJycHpS.js +181 -0
  1317. package/dist/signal-BSV2xBJt.js +46 -0
  1318. package/dist/signal-BZDASWHO.js +13 -0
  1319. package/dist/signal-CId8sMA8.js +6 -0
  1320. package/dist/signal-account-DcEiRyli.js +11 -0
  1321. package/dist/signal-cli-install-CzSdr2VM.js +188 -0
  1322. package/dist/signal-surface-DrUgouip.js +21 -0
  1323. package/dist/simple-completion-transport-BNMmn163.js +24 -0
  1324. package/dist/skill-commands-CZ_x2Cqy.js +77 -0
  1325. package/dist/skill-commands-base-wY_Bsohb.js +60 -0
  1326. package/dist/skill-commands.runtime-BV7uDCJx.js +2 -0
  1327. package/dist/skill-scanner-B27VLIIq.js +354 -0
  1328. package/dist/skills-BTiQjfVL.js +1310 -0
  1329. package/dist/skills-CIF8vVlP.js +3 -0
  1330. package/dist/skills-clawhub-BDym_41x.js +274 -0
  1331. package/dist/skills-cli-C8m1I_bL.js +369 -0
  1332. package/dist/skills-install-B_gFFO8I.js +818 -0
  1333. package/dist/skills-remote-QuF4recE.js +550 -0
  1334. package/dist/skills-status-BEZWIOBR.js +2 -0
  1335. package/dist/skills-status-Dm_Jhtes.js +169 -0
  1336. package/dist/slack-Cs63YrE6.js +6 -0
  1337. package/dist/slack-account-5pXdcCaK.js +11 -0
  1338. package/dist/slack-liv3adei.js +9 -0
  1339. package/dist/slack-runtime-surface-B5JYrWWf.js +18 -0
  1340. package/dist/slack-surface-DpNHDOit.js +44 -0
  1341. package/dist/slack-target-parser-CErq1YCw.js +12 -0
  1342. package/dist/slack-targets-xF6pth_v.js +45 -0
  1343. package/dist/slots-PFLvT1Kq.js +93 -0
  1344. package/dist/speech-BY_tUO7g.js +46 -0
  1345. package/dist/speech-provider-S9O0XAp5.js +154 -0
  1346. package/dist/speech-runtime-oxmNRw3Z.js +34 -0
  1347. package/dist/ssh-config-BDfMcgtS.js +77 -0
  1348. package/dist/ssh-tunnel-DG9ZYGsa.js +159 -0
  1349. package/dist/ssh-tunnel-D_XZfkBV.js +2 -0
  1350. package/dist/ssrf-BRA26Q75.js +246 -0
  1351. package/dist/ssrf-policy-BIG3iChD.js +69 -0
  1352. package/dist/ssrf-runtime-BPxpSyiW.js +5 -0
  1353. package/dist/stage-sandbox-media.runtime-DOOiTZkt.js +229 -0
  1354. package/dist/state-migrations-cqOvSXP-.js +845 -0
  1355. package/dist/state-paths-CudqznX-.js +2 -0
  1356. package/dist/status-B5sZUURG.js +3 -0
  1357. package/dist/status-BXjWA90V.js +608 -0
  1358. package/dist/status-Biw1EIdt.js +2 -0
  1359. package/dist/status-CgHjqeMn.js +650 -0
  1360. package/dist/status-DQZ0kLxk.js +44 -0
  1361. package/dist/status-VHq1HAMM.js +240 -0
  1362. package/dist/status-all-DhEDLGP9.js +798 -0
  1363. package/dist/status-helpers-B7-UgIy8.js +170 -0
  1364. package/dist/status-issues-BFrNHsVn.js +335 -0
  1365. package/dist/status-issues-BUaLeYpi.js +187 -0
  1366. package/dist/status-json-DOnh1xDZ.js +86 -0
  1367. package/dist/status.agent-local-CaYKjhhX.js +59 -0
  1368. package/dist/status.command.text-runtime-DsOhXWI5.js +18 -0
  1369. package/dist/status.daemon-CriBgB61.js +25 -0
  1370. package/dist/status.format-c9WFxqY6.js +44 -0
  1371. package/dist/status.gateway-probe-FD9wNXhY.js +15 -0
  1372. package/dist/status.link-channel-DYBN8KV3.js +35 -0
  1373. package/dist/status.node-mode-FwHcEfkE.js +2 -0
  1374. package/dist/status.node-mode-dPc3mfqx.js +32 -0
  1375. package/dist/status.scan-DTGuZcAs.js +264 -0
  1376. package/dist/status.scan.deps.runtime-BlestHMC.js +18 -0
  1377. package/dist/status.scan.fast-json-Co7nNA_T.js +97 -0
  1378. package/dist/status.scan.fast-json-DRsEwD_h.js +2 -0
  1379. package/dist/status.scan.json-core-DaBuCMzr.js +254 -0
  1380. package/dist/status.scan.runtime-Dp_UkjfG.js +9 -0
  1381. package/dist/status.service-summary-BmHN_sIt.js +32 -0
  1382. package/dist/status.summary-C0Jn9d8y.js +2 -0
  1383. package/dist/status.summary-C3KHSLR1.js +210 -0
  1384. package/dist/status.update-DiRYpvwE.js +2 -0
  1385. package/dist/status.update-DjXE_PsH.js +79 -0
  1386. package/dist/sticker-cache-kEcJqycr.js +1516 -0
  1387. package/dist/sticker-vision.runtime-DdnhPS7k.js +16 -0
  1388. package/dist/store-DKzOIKqx.js +1342 -0
  1389. package/dist/store-DwAEHdgR.js +749 -0
  1390. package/dist/store-HBHyNMRe.js +10 -0
  1391. package/dist/store-NoUggnB3.js +365 -0
  1392. package/dist/store-read-BHYG1WxT.js +16 -0
  1393. package/dist/store.runtime-jT-JoPV1.js +2 -0
  1394. package/dist/string-normalization-k4ilMPRu.js +19 -0
  1395. package/dist/string-sample-BIWt11jp.js +11 -0
  1396. package/dist/strip-inbound-meta-DuOzaKMB.js +665 -0
  1397. package/dist/subagent-orphan-recovery-BaGPnDpY.js +206 -0
  1398. package/dist/subagent-registry-runtime-C0hklxy4.js +2 -0
  1399. package/dist/subcli-descriptors-Ccul9RKX.js +151 -0
  1400. package/dist/subsystem-CpBs2R1c.js +582 -0
  1401. package/dist/supervisor-log.runtime-BbxSpWqa.js +8 -0
  1402. package/dist/system-cli-rGgbAbhD.js +58 -0
  1403. package/dist/system-events-CkTr2pVV.js +93 -0
  1404. package/dist/system-message-BwHVKRn-.js +16 -0
  1405. package/dist/system-run-command-CeFzgmkE.js +295 -0
  1406. package/dist/systemd-aS57J-tg.js +588 -0
  1407. package/dist/systemd-hints-DexZGkZU.js +325 -0
  1408. package/dist/systemd-linger-Dum_Ly5E.js +68 -0
  1409. package/dist/systemd-linger-a109c27V.js +2 -0
  1410. package/dist/table-BNAxmbtm.js +305 -0
  1411. package/dist/tables-AGjErT3Z.js +832 -0
  1412. package/dist/tailnet-CtCjQNPK.js +76 -0
  1413. package/dist/tailscale-IqBQ_JBD.js +232 -0
  1414. package/dist/tailscale-status-SUYxe8DO.js +71 -0
  1415. package/dist/target-errors-Dd5ygAn4.js +26 -0
  1416. package/dist/target-parsing-DsTnx9-F.js +14 -0
  1417. package/dist/target-registry-Je8d-VjB.js +1280 -0
  1418. package/dist/targets-B5CwzJUC.js +748 -0
  1419. package/dist/targets-CsuOrZri.js +269 -0
  1420. package/dist/targets-CwnVSfRA.js +70 -0
  1421. package/dist/targets-DuUFEzKS.js +78 -0
  1422. package/dist/task-registry-delivery-runtime-DqP8eooO.js +2 -0
  1423. package/dist/task-registry.audit.shared-C4RGABy7.js +18 -0
  1424. package/dist/task-registry.maintenance-Bu37anXR.js +281 -0
  1425. package/dist/task-registry.maintenance-DOsnDSZk.js +2 -0
  1426. package/dist/task-registry.summary-DxVk_l3y.js +44 -0
  1427. package/dist/tavily-search-provider-CJqkM2Pl.js +226 -0
  1428. package/dist/telegram/audit.js +2 -0
  1429. package/dist/telegram/token.js +2 -0
  1430. package/dist/telegram-DYAW3Sfk.js +23 -0
  1431. package/dist/telegram-account-BJWXAeS3.js +11 -0
  1432. package/dist/telegram-core-BB-oqWi1.js +6 -0
  1433. package/dist/temp-download-vS-txIoM.js +62 -0
  1434. package/dist/temp-path-DfCfU6WG.js +2 -0
  1435. package/dist/templating-NXIs4v5N.js +24 -0
  1436. package/dist/terminal-link-TU0E45HO.js +10 -0
  1437. package/dist/testing-BnS6kfoS.js +575 -0
  1438. package/dist/text-chunking-90VX7tgk.js +12 -0
  1439. package/dist/text-chunking-BVps1926.js +20 -0
  1440. package/dist/text-format-B1S_nIVb.js +8 -0
  1441. package/dist/text-runtime-vMYWZmQD.js +398 -0
  1442. package/dist/theme-BJIQPogA.js +34 -0
  1443. package/dist/theme-SO8WovMK.js +2 -0
  1444. package/dist/thinking-uI0siSaD.js +68 -0
  1445. package/dist/thinking.shared-C4SN38qn.js +243 -0
  1446. package/dist/thread-bindings-policy-BcpXmcKL.js +172 -0
  1447. package/dist/thread-bindings-u1VyUaZn.js +778 -0
  1448. package/dist/thread-bindings.discord-api-Cq6oEKwK.js +486 -0
  1449. package/dist/threading-helpers-PW95yLIC.js +14 -0
  1450. package/dist/timeouts-CTDvzc8O.js +72 -0
  1451. package/dist/tmp-vora-dir-D2qk7W45.js +102 -0
  1452. package/dist/token-CHFyaNO5.js +45 -0
  1453. package/dist/token-D6h_ZVJn.js +82 -0
  1454. package/dist/tokens-shGOmvyA.js +66 -0
  1455. package/dist/tool-display-DqKeDkdg.js +1607 -0
  1456. package/dist/tool-images-Dk60Ug5h.js +270 -0
  1457. package/dist/tool-policy-CQHL2-I3.js +515 -0
  1458. package/dist/tool-policy-match-DL8JY2vg.js +48 -0
  1459. package/dist/tool-send-hJCuDJfS.js +16 -0
  1460. package/dist/tools-effective-inventory-CWzIubjU.js +148 -0
  1461. package/dist/tools-pE9BlK9y.js +119 -0
  1462. package/dist/transcript-events-DRsDmwmp.js +29 -0
  1463. package/dist/transport-ready-f6mdQOwn.js +36 -0
  1464. package/dist/tts-B1m3C2Az.js +102 -0
  1465. package/dist/tts-DUrUS0mZ.js +85 -0
  1466. package/dist/tts-auto-mode-C8_kw3FV.js +14 -0
  1467. package/dist/tts.runtime-BoqipRLV.js +2 -0
  1468. package/dist/tui-CQLplrBK.js +3898 -0
  1469. package/dist/tui-cli-DT0FyMjs.js +31 -0
  1470. package/dist/typebox-DR5b98DT.js +22 -0
  1471. package/dist/types-CGCTcpfm.js +465 -0
  1472. package/dist/types-DDSZHm1L.js +12 -0
  1473. package/dist/types-KyI2zD1Y.js +83 -0
  1474. package/dist/types.secrets-CxoujPzV.js +80 -0
  1475. package/dist/types.tools-DbA37tJ5.js +22 -0
  1476. package/dist/typing-Dz7FaNst.js +68 -0
  1477. package/dist/typing-mode-D3dtTRFq.js +75 -0
  1478. package/dist/typing-policy-DNdXa4aP.js +11 -0
  1479. package/dist/typing-start-guard-Bd69zP69.js +73 -0
  1480. package/dist/ui-DBzDVf5Z.js +182 -0
  1481. package/dist/undici-global-dispatcher-jevw8Gzz.js +99 -0
  1482. package/dist/unhandled-rejections-D0HD8aaS.js +2 -0
  1483. package/dist/unhandled-rejections-yZafPL2A.js +241 -0
  1484. package/dist/update-Bof-SJAQ.js +1253 -0
  1485. package/dist/update-channels-d8te77R1.js +78 -0
  1486. package/dist/update-check-DK2tfDQH.js +354 -0
  1487. package/dist/update-cli-Ck2vsRAq.js +1446 -0
  1488. package/dist/update-offset-store-DzcRNELt.js +75 -0
  1489. package/dist/utils-BiWzD1kh.js +230 -0
  1490. package/dist/utils-QayXenI0.js +3 -0
  1491. package/dist/version-B8PcQo5n.js +79 -0
  1492. package/dist/version-DBzWIScg.js +2 -0
  1493. package/dist/vora-embedded-block-chunker-3yyZObTq.js +258 -0
  1494. package/dist/vora-embedded-helpers-CcpQ4UhE.js +1451 -0
  1495. package/dist/vora-embedded-runner-CtRc9sK4.js +35200 -0
  1496. package/dist/vora-embedded.runtime-DnQSqL4C.js +3 -0
  1497. package/dist/vora-exec-env-D4Xwhvu2.js +14 -0
  1498. package/dist/vora-root-LrpnxvkN.js +88 -0
  1499. package/dist/vora-tools.before-tool-call.runtime-DMDQZj3b.js +354 -0
  1500. package/dist/vora-tools.runtime-CRE3qINm.js +2 -0
  1501. package/dist/wait-DINWFDZY.js +7 -0
  1502. package/dist/warning-filter-SAevhKdH.js +57 -0
  1503. package/dist/web-media-xqpNAEze.js +630 -0
  1504. package/dist/web-search-providers-Dzq6HxbB.js +21 -0
  1505. package/dist/web-search-providers.runtime-CtA0c8j7.js +110 -0
  1506. package/dist/web-search-providers.shared-BDbtn1DP.js +404 -0
  1507. package/dist/webhook-ingress-VjrwfCEq.js +164 -0
  1508. package/dist/webhook-memory-guards-B-_GNMqp.js +129 -0
  1509. package/dist/webhook-path-KmDDjLxH.js +22 -0
  1510. package/dist/webhook-request-guards-RvZR0xOr.js +178 -0
  1511. package/dist/webhooks-cli-DW2licxV.js +325 -0
  1512. package/dist/whatsapp-BdBhDmjG.js +4 -0
  1513. package/dist/whatsapp-DrWLgII5.js +33 -0
  1514. package/dist/whatsapp-heartbeat-B9ic2dUo.js +114 -0
  1515. package/dist/whatsapp-shared-CCB6ISPU.js +56 -0
  1516. package/dist/whatsapp-surface-Dj75n55B.js +26 -0
  1517. package/dist/whatsapp-targets-DC3kH_Ao.js +13 -0
  1518. package/dist/widearea-dns-CQmUW5IF.js +125 -0
  1519. package/dist/windows-argv-Dp3PZAV0.js +345 -0
  1520. package/dist/windows-install-roots-XI3CvO9O.js +149 -0
  1521. package/dist/windows-spawn-Bo5J7nQU.js +154 -0
  1522. package/dist/with-timeout-82_4MKPJ.js +13 -0
  1523. package/dist/with-timeout-C9cQCRMB.js +215 -0
  1524. package/dist/workspace-Byy6tyA9.js +479 -0
  1525. package/dist/workspace-dirs-DD2rvoad.js +13 -0
  1526. package/dist/workspace-rZgvKsfA.js +306 -0
  1527. package/dist/ws-H_UxQmDV.js +11 -0
  1528. package/dist/ws-log-Colefm0_.js +289 -0
  1529. package/dist/wsl-Cja5t6Cg.js +57 -0
  1530. package/dist/xai-G_qBZ2Uy.js +27 -0
  1531. package/dist/zalo-setup-DhLwoxOU.js +14 -0
  1532. package/dist/zod-parse-CoS4Cf-k.js +14 -0
  1533. package/dist/zod-schema.agent-runtime-DvpP4fxf.js +602 -0
  1534. package/dist/zod-schema.channels-BAf89d5l.js +10 -0
  1535. package/dist/zod-schema.core-BTG8QVOn.js +514 -0
  1536. package/dist/zod-schema.providers-core-CBsF2dSN.js +1569 -0
  1537. package/dist/zod-schema.providers-whatsapp-BORKPdar.js +125 -0
  1538. package/dist/zod-schema.sensitive-bgI4eB_k.js +5 -0
  1539. package/docs/.i18n/README.md +31 -0
  1540. package/docs/.i18n/glossary.ja-JP.json +14 -0
  1541. package/docs/.i18n/glossary.zh-CN.json +306 -0
  1542. package/docs/.i18n/ja-JP.tm.jsonl +0 -0
  1543. package/docs/assets/install-script.svg +1 -0
  1544. package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
  1545. package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
  1546. package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
  1547. package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
  1548. package/docs/assets/macos-onboarding/05-permissions.png +0 -0
  1549. package/docs/assets/pixel-lobster.svg +60 -0
  1550. package/docs/assets/showcase/agents-ui.jpg +0 -0
  1551. package/docs/assets/showcase/bambu-cli.png +0 -0
  1552. package/docs/assets/showcase/codexmonitor.png +0 -0
  1553. package/docs/assets/showcase/gohome-grafana.png +0 -0
  1554. package/docs/assets/showcase/ios-testflight.jpg +0 -0
  1555. package/docs/assets/showcase/oura-health.png +0 -0
  1556. package/docs/assets/showcase/padel-cli.svg +11 -0
  1557. package/docs/assets/showcase/padel-screenshot.jpg +0 -0
  1558. package/docs/assets/showcase/papla-tts.jpg +0 -0
  1559. package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
  1560. package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
  1561. package/docs/assets/showcase/roborock-status.svg +13 -0
  1562. package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
  1563. package/docs/assets/showcase/snag.png +0 -0
  1564. package/docs/assets/showcase/tesco-shop.jpg +0 -0
  1565. package/docs/assets/showcase/wienerlinien.png +0 -0
  1566. package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
  1567. package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
  1568. package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
  1569. package/docs/assets/sponsors/blacksmith-light.svg +14 -0
  1570. package/docs/assets/sponsors/blacksmith.svg +14 -0
  1571. package/docs/assets/sponsors/convex-light.svg +16 -0
  1572. package/docs/assets/sponsors/convex.svg +16 -0
  1573. package/docs/assets/sponsors/nvidia-dark.svg +9 -0
  1574. package/docs/assets/sponsors/nvidia.svg +9 -0
  1575. package/docs/assets/sponsors/openai-light.svg +3 -0
  1576. package/docs/assets/sponsors/openai.svg +3 -0
  1577. package/docs/assets/sponsors/vercel-light.svg +5 -0
  1578. package/docs/assets/sponsors/vercel.svg +5 -0
  1579. package/docs/assets/vora-logo-text-dark.png +0 -0
  1580. package/docs/assets/vora-logo-text-dark.svg +418 -0
  1581. package/docs/assets/vora-logo-text.png +0 -0
  1582. package/docs/assets/vora-logo-text.svg +418 -0
  1583. package/docs/auth-credential-semantics.md +60 -0
  1584. package/docs/automation/auth-monitoring.md +44 -0
  1585. package/docs/automation/clawflow.md +109 -0
  1586. package/docs/automation/cron-jobs.md +744 -0
  1587. package/docs/automation/cron-vs-heartbeat.md +299 -0
  1588. package/docs/automation/gmail-pubsub.md +256 -0
  1589. package/docs/automation/hooks.md +1375 -0
  1590. package/docs/automation/index.md +69 -0
  1591. package/docs/automation/poll.md +86 -0
  1592. package/docs/automation/standing-orders.md +254 -0
  1593. package/docs/automation/tasks.md +247 -0
  1594. package/docs/automation/troubleshooting.md +122 -0
  1595. package/docs/automation/webhook.md +217 -0
  1596. package/docs/brave-search.md +93 -0
  1597. package/docs/channels/bluebubbles.md +430 -0
  1598. package/docs/channels/broadcast-groups.md +442 -0
  1599. package/docs/channels/channel-routing.md +139 -0
  1600. package/docs/channels/discord.md +1240 -0
  1601. package/docs/channels/feishu.md +760 -0
  1602. package/docs/channels/googlechat.md +270 -0
  1603. package/docs/channels/group-messages.md +84 -0
  1604. package/docs/channels/groups.md +385 -0
  1605. package/docs/channels/imessage.md +427 -0
  1606. package/docs/channels/index.md +50 -0
  1607. package/docs/channels/irc.md +250 -0
  1608. package/docs/channels/line.md +221 -0
  1609. package/docs/channels/location.md +56 -0
  1610. package/docs/channels/matrix.md +779 -0
  1611. package/docs/channels/mattermost.md +435 -0
  1612. package/docs/channels/msteams.md +802 -0
  1613. package/docs/channels/nextcloud-talk.md +146 -0
  1614. package/docs/channels/nostr.md +257 -0
  1615. package/docs/channels/pairing.md +114 -0
  1616. package/docs/channels/qqbot.md +193 -0
  1617. package/docs/channels/signal.md +337 -0
  1618. package/docs/channels/slack.md +607 -0
  1619. package/docs/channels/synology-chat.md +150 -0
  1620. package/docs/channels/telegram.md +991 -0
  1621. package/docs/channels/tlon.md +284 -0
  1622. package/docs/channels/troubleshooting.md +118 -0
  1623. package/docs/channels/twitch.md +387 -0
  1624. package/docs/channels/whatsapp.md +462 -0
  1625. package/docs/channels/zalo.md +251 -0
  1626. package/docs/channels/zalouser.md +189 -0
  1627. package/docs/ci.md +57 -0
  1628. package/docs/cli/acp.md +297 -0
  1629. package/docs/cli/agent.md +29 -0
  1630. package/docs/cli/agents.md +123 -0
  1631. package/docs/cli/approvals.md +50 -0
  1632. package/docs/cli/backup.md +76 -0
  1633. package/docs/cli/browser.md +127 -0
  1634. package/docs/cli/channels.md +102 -0
  1635. package/docs/cli/clawbot.md +21 -0
  1636. package/docs/cli/completion.md +35 -0
  1637. package/docs/cli/config.md +317 -0
  1638. package/docs/cli/configure.md +42 -0
  1639. package/docs/cli/cron.md +80 -0
  1640. package/docs/cli/daemon.md +55 -0
  1641. package/docs/cli/dashboard.md +22 -0
  1642. package/docs/cli/devices.md +139 -0
  1643. package/docs/cli/directory.md +63 -0
  1644. package/docs/cli/dns.md +23 -0
  1645. package/docs/cli/docs.md +15 -0
  1646. package/docs/cli/doctor.md +48 -0
  1647. package/docs/cli/flows.md +54 -0
  1648. package/docs/cli/gateway.md +238 -0
  1649. package/docs/cli/health.md +21 -0
  1650. package/docs/cli/hooks.md +330 -0
  1651. package/docs/cli/index.md +1239 -0
  1652. package/docs/cli/logs.md +28 -0
  1653. package/docs/cli/mcp.md +467 -0
  1654. package/docs/cli/memory.md +66 -0
  1655. package/docs/cli/message.md +280 -0
  1656. package/docs/cli/models.md +90 -0
  1657. package/docs/cli/node.md +132 -0
  1658. package/docs/cli/nodes.md +55 -0
  1659. package/docs/cli/onboard.md +160 -0
  1660. package/docs/cli/pairing.md +32 -0
  1661. package/docs/cli/plugins.md +229 -0
  1662. package/docs/cli/qr.md +46 -0
  1663. package/docs/cli/reset.md +20 -0
  1664. package/docs/cli/sandbox.md +197 -0
  1665. package/docs/cli/secrets.md +188 -0
  1666. package/docs/cli/security.md +79 -0
  1667. package/docs/cli/sessions.md +110 -0
  1668. package/docs/cli/setup.md +29 -0
  1669. package/docs/cli/skills.md +40 -0
  1670. package/docs/cli/status.md +30 -0
  1671. package/docs/cli/system.md +60 -0
  1672. package/docs/cli/tui.md +30 -0
  1673. package/docs/cli/uninstall.md +20 -0
  1674. package/docs/cli/update.md +103 -0
  1675. package/docs/cli/voicecall.md +34 -0
  1676. package/docs/cli/webhooks.md +25 -0
  1677. package/docs/concepts/agent-loop.md +166 -0
  1678. package/docs/concepts/agent-workspace.md +243 -0
  1679. package/docs/concepts/agent.md +122 -0
  1680. package/docs/concepts/architecture.md +144 -0
  1681. package/docs/concepts/compaction.md +93 -0
  1682. package/docs/concepts/context-engine.md +274 -0
  1683. package/docs/concepts/context.md +179 -0
  1684. package/docs/concepts/delegate-architecture.md +296 -0
  1685. package/docs/concepts/features.md +73 -0
  1686. package/docs/concepts/markdown-formatting.md +130 -0
  1687. package/docs/concepts/memory-builtin.md +105 -0
  1688. package/docs/concepts/memory-honcho.md +140 -0
  1689. package/docs/concepts/memory-qmd.md +163 -0
  1690. package/docs/concepts/memory-search.md +141 -0
  1691. package/docs/concepts/memory.md +102 -0
  1692. package/docs/concepts/messages.md +161 -0
  1693. package/docs/concepts/model-failover.md +160 -0
  1694. package/docs/concepts/model-providers.md +599 -0
  1695. package/docs/concepts/models.md +232 -0
  1696. package/docs/concepts/multi-agent.md +602 -0
  1697. package/docs/concepts/oauth.md +193 -0
  1698. package/docs/concepts/presence.md +102 -0
  1699. package/docs/concepts/queue.md +89 -0
  1700. package/docs/concepts/retry.md +69 -0
  1701. package/docs/concepts/session-pruning.md +80 -0
  1702. package/docs/concepts/session-tool.md +84 -0
  1703. package/docs/concepts/session.md +116 -0
  1704. package/docs/concepts/streaming.md +161 -0
  1705. package/docs/concepts/system-prompt.md +132 -0
  1706. package/docs/concepts/timezone.md +97 -0
  1707. package/docs/concepts/typebox.md +291 -0
  1708. package/docs/concepts/typing-indicators.md +68 -0
  1709. package/docs/concepts/usage-tracking.md +35 -0
  1710. package/docs/date-time.md +128 -0
  1711. package/docs/debug/node-issue.md +85 -0
  1712. package/docs/diagnostics/flags.md +91 -0
  1713. package/docs/docs.json +2143 -0
  1714. package/docs/gateway/authentication.md +204 -0
  1715. package/docs/gateway/background-process.md +97 -0
  1716. package/docs/gateway/bonjour.md +177 -0
  1717. package/docs/gateway/bridge-protocol.md +86 -0
  1718. package/docs/gateway/cli-backends.md +249 -0
  1719. package/docs/gateway/configuration-examples.md +652 -0
  1720. package/docs/gateway/configuration-reference.md +3384 -0
  1721. package/docs/gateway/configuration.md +633 -0
  1722. package/docs/gateway/discovery.md +127 -0
  1723. package/docs/gateway/doctor.md +463 -0
  1724. package/docs/gateway/gateway-lock.md +37 -0
  1725. package/docs/gateway/health.md +53 -0
  1726. package/docs/gateway/heartbeat.md +407 -0
  1727. package/docs/gateway/index.md +286 -0
  1728. package/docs/gateway/local-models.md +153 -0
  1729. package/docs/gateway/logging.md +113 -0
  1730. package/docs/gateway/multiple-gateways.md +112 -0
  1731. package/docs/gateway/network-model.md +24 -0
  1732. package/docs/gateway/openai-http-api.md +266 -0
  1733. package/docs/gateway/openresponses-http-api.md +322 -0
  1734. package/docs/gateway/openshell.md +307 -0
  1735. package/docs/gateway/pairing.md +99 -0
  1736. package/docs/gateway/protocol.md +280 -0
  1737. package/docs/gateway/remote-gateway-readme.md +160 -0
  1738. package/docs/gateway/remote.md +248 -0
  1739. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +134 -0
  1740. package/docs/gateway/sandboxing.md +469 -0
  1741. package/docs/gateway/secrets-plan-contract.md +116 -0
  1742. package/docs/gateway/secrets.md +541 -0
  1743. package/docs/gateway/security/index.md +1216 -0
  1744. package/docs/gateway/tailscale.md +132 -0
  1745. package/docs/gateway/tools-invoke-http-api.md +147 -0
  1746. package/docs/gateway/troubleshooting.md +382 -0
  1747. package/docs/gateway/trusted-proxy-auth.md +342 -0
  1748. package/docs/help/debugging.md +168 -0
  1749. package/docs/help/environment.md +163 -0
  1750. package/docs/help/faq.md +3002 -0
  1751. package/docs/help/index.md +28 -0
  1752. package/docs/help/scripts.md +28 -0
  1753. package/docs/help/testing.md +664 -0
  1754. package/docs/help/troubleshooting.md +352 -0
  1755. package/docs/images/configure-model-picker-unsearchable.png +0 -0
  1756. package/docs/images/feishu-step2-create-app.png +0 -0
  1757. package/docs/images/feishu-step3-credentials.png +0 -0
  1758. package/docs/images/feishu-step4-permissions.png +0 -0
  1759. package/docs/images/feishu-step5-bot-capability.png +0 -0
  1760. package/docs/images/feishu-step6-event-subscription.png +0 -0
  1761. package/docs/images/feishu-verification-token.png +0 -0
  1762. package/docs/images/groups-flow.svg +52 -0
  1763. package/docs/images/mobile-ui-screenshot.png +0 -0
  1764. package/docs/index.md +196 -0
  1765. package/docs/install/ansible.md +230 -0
  1766. package/docs/install/azure.md +311 -0
  1767. package/docs/install/bun.md +55 -0
  1768. package/docs/install/clawdock.md +105 -0
  1769. package/docs/install/development-channels.md +120 -0
  1770. package/docs/install/digitalocean.md +129 -0
  1771. package/docs/install/docker-vm-runtime.md +142 -0
  1772. package/docs/install/docker.md +404 -0
  1773. package/docs/install/exe-dev.md +126 -0
  1774. package/docs/install/fly.md +501 -0
  1775. package/docs/install/gcp.md +402 -0
  1776. package/docs/install/hetzner.md +251 -0
  1777. package/docs/install/index.md +183 -0
  1778. package/docs/install/installer.md +421 -0
  1779. package/docs/install/kubernetes.md +191 -0
  1780. package/docs/install/macos-vm.md +281 -0
  1781. package/docs/install/migrating-matrix.md +346 -0
  1782. package/docs/install/migrating.md +110 -0
  1783. package/docs/install/nix.md +89 -0
  1784. package/docs/install/node.md +144 -0
  1785. package/docs/install/northflank.mdx +40 -0
  1786. package/docs/install/oracle.md +156 -0
  1787. package/docs/install/podman.md +269 -0
  1788. package/docs/install/railway.mdx +87 -0
  1789. package/docs/install/raspberry-pi.md +159 -0
  1790. package/docs/install/render.mdx +159 -0
  1791. package/docs/install/uninstall.md +128 -0
  1792. package/docs/install/updating.md +134 -0
  1793. package/docs/ja-JP/index.md +186 -0
  1794. package/docs/ja-JP/start/getting-started.md +125 -0
  1795. package/docs/ja-JP/start/wizard.md +77 -0
  1796. package/docs/logging.md +357 -0
  1797. package/docs/nav-tabs-underline.js +100 -0
  1798. package/docs/network.md +63 -0
  1799. package/docs/nodes/audio.md +187 -0
  1800. package/docs/nodes/camera.md +162 -0
  1801. package/docs/nodes/images.md +72 -0
  1802. package/docs/nodes/index.md +395 -0
  1803. package/docs/nodes/location-command.md +98 -0
  1804. package/docs/nodes/media-understanding.md +394 -0
  1805. package/docs/nodes/talk.md +92 -0
  1806. package/docs/nodes/troubleshooting.md +114 -0
  1807. package/docs/nodes/voicewake.md +66 -0
  1808. package/docs/perplexity.md +174 -0
  1809. package/docs/pi-dev.md +80 -0
  1810. package/docs/pi.md +567 -0
  1811. package/docs/platforms/android.md +168 -0
  1812. package/docs/platforms/digitalocean.md +266 -0
  1813. package/docs/platforms/index.md +54 -0
  1814. package/docs/platforms/ios.md +220 -0
  1815. package/docs/platforms/linux.md +94 -0
  1816. package/docs/platforms/mac/bundled-gateway.md +73 -0
  1817. package/docs/platforms/mac/canvas.md +125 -0
  1818. package/docs/platforms/mac/child-process.md +69 -0
  1819. package/docs/platforms/mac/dev-setup.md +104 -0
  1820. package/docs/platforms/mac/health.md +34 -0
  1821. package/docs/platforms/mac/icon.md +31 -0
  1822. package/docs/platforms/mac/logging.md +57 -0
  1823. package/docs/platforms/mac/menu-bar.md +81 -0
  1824. package/docs/platforms/mac/peekaboo.md +65 -0
  1825. package/docs/platforms/mac/permissions.md +50 -0
  1826. package/docs/platforms/mac/remote.md +84 -0
  1827. package/docs/platforms/mac/signing.md +47 -0
  1828. package/docs/platforms/mac/skills.md +34 -0
  1829. package/docs/platforms/mac/voice-overlay.md +60 -0
  1830. package/docs/platforms/mac/voicewake.md +67 -0
  1831. package/docs/platforms/mac/webchat.md +43 -0
  1832. package/docs/platforms/mac/xpc.md +61 -0
  1833. package/docs/platforms/macos.md +228 -0
  1834. package/docs/platforms/oracle.md +303 -0
  1835. package/docs/platforms/raspberry-pi.md +412 -0
  1836. package/docs/platforms/windows.md +241 -0
  1837. package/docs/plugins/agent-tools.md +10 -0
  1838. package/docs/plugins/architecture.md +1400 -0
  1839. package/docs/plugins/building-extensions.md +10 -0
  1840. package/docs/plugins/building-plugins.md +283 -0
  1841. package/docs/plugins/bundles.md +278 -0
  1842. package/docs/plugins/community.md +145 -0
  1843. package/docs/plugins/manifest.md +284 -0
  1844. package/docs/plugins/sdk-channel-plugins.md +419 -0
  1845. package/docs/plugins/sdk-entrypoints.md +184 -0
  1846. package/docs/plugins/sdk-migration.md +180 -0
  1847. package/docs/plugins/sdk-overview.md +287 -0
  1848. package/docs/plugins/sdk-provider-plugins.md +440 -0
  1849. package/docs/plugins/sdk-runtime.md +347 -0
  1850. package/docs/plugins/sdk-setup.md +365 -0
  1851. package/docs/plugins/sdk-testing.md +263 -0
  1852. package/docs/plugins/voice-call.md +397 -0
  1853. package/docs/plugins/zalouser.md +78 -0
  1854. package/docs/prose.md +134 -0
  1855. package/docs/providers/anthropic.md +375 -0
  1856. package/docs/providers/bedrock.md +217 -0
  1857. package/docs/providers/claude-max-api-proxy.md +154 -0
  1858. package/docs/providers/cloudflare-ai-gateway.md +71 -0
  1859. package/docs/providers/deepgram.md +93 -0
  1860. package/docs/providers/deepseek.md +53 -0
  1861. package/docs/providers/github-copilot.md +72 -0
  1862. package/docs/providers/glm.md +43 -0
  1863. package/docs/providers/google.md +78 -0
  1864. package/docs/providers/groq.md +96 -0
  1865. package/docs/providers/huggingface.md +209 -0
  1866. package/docs/providers/index.md +72 -0
  1867. package/docs/providers/kilocode.md +74 -0
  1868. package/docs/providers/litellm.md +154 -0
  1869. package/docs/providers/minimax.md +183 -0
  1870. package/docs/providers/mistral.md +54 -0
  1871. package/docs/providers/models.md +45 -0
  1872. package/docs/providers/moonshot.md +175 -0
  1873. package/docs/providers/nvidia.md +55 -0
  1874. package/docs/providers/ollama.md +352 -0
  1875. package/docs/providers/openai.md +319 -0
  1876. package/docs/providers/opencode-go.md +45 -0
  1877. package/docs/providers/opencode.md +64 -0
  1878. package/docs/providers/openrouter.md +37 -0
  1879. package/docs/providers/perplexity-provider.md +62 -0
  1880. package/docs/providers/qianfan.md +38 -0
  1881. package/docs/providers/qwen.md +33 -0
  1882. package/docs/providers/qwen_modelstudio.md +85 -0
  1883. package/docs/providers/sglang.md +104 -0
  1884. package/docs/providers/synthetic.md +99 -0
  1885. package/docs/providers/together.md +66 -0
  1886. package/docs/providers/venice.md +282 -0
  1887. package/docs/providers/vercel-ai-gateway.md +60 -0
  1888. package/docs/providers/vllm.md +92 -0
  1889. package/docs/providers/volcengine.md +74 -0
  1890. package/docs/providers/xai.md +69 -0
  1891. package/docs/providers/xiaomi.md +86 -0
  1892. package/docs/providers/zai.md +46 -0
  1893. package/docs/reference/AGENTS.default.md +126 -0
  1894. package/docs/reference/RELEASING.md +80 -0
  1895. package/docs/reference/api-usage-costs.md +144 -0
  1896. package/docs/reference/credits.md +30 -0
  1897. package/docs/reference/device-models.md +47 -0
  1898. package/docs/reference/memory-config.md +370 -0
  1899. package/docs/reference/prompt-caching.md +195 -0
  1900. package/docs/reference/rpc.md +43 -0
  1901. package/docs/reference/secretref-credential-surface.md +137 -0
  1902. package/docs/reference/secretref-user-supplied-credentials-matrix.json +535 -0
  1903. package/docs/reference/session-management-compaction.md +326 -0
  1904. package/docs/reference/templates/AGENTS.dev.md +84 -0
  1905. package/docs/reference/templates/AGENTS.md +219 -0
  1906. package/docs/reference/templates/BOOT.md +11 -0
  1907. package/docs/reference/templates/BOOTSTRAP.md +62 -0
  1908. package/docs/reference/templates/HEARTBEAT.md +14 -0
  1909. package/docs/reference/templates/IDENTITY.dev.md +48 -0
  1910. package/docs/reference/templates/IDENTITY.md +30 -0
  1911. package/docs/reference/templates/SOUL.dev.md +77 -0
  1912. package/docs/reference/templates/SOUL.md +43 -0
  1913. package/docs/reference/templates/TOOLS.dev.md +25 -0
  1914. package/docs/reference/templates/TOOLS.md +47 -0
  1915. package/docs/reference/templates/USER.dev.md +19 -0
  1916. package/docs/reference/templates/USER.md +24 -0
  1917. package/docs/reference/test.md +120 -0
  1918. package/docs/reference/token-use.md +175 -0
  1919. package/docs/reference/transcript-hygiene.md +151 -0
  1920. package/docs/reference/wizard.md +235 -0
  1921. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +98 -0
  1922. package/docs/security/THREAT-MODEL-ATLAS.md +608 -0
  1923. package/docs/security/formal-verification.md +167 -0
  1924. package/docs/snippets/plugin-publish/minimal-package.json +16 -0
  1925. package/docs/snippets/plugin-publish/minimal-vora.plugin.json +9 -0
  1926. package/docs/start/bootstrapping.md +41 -0
  1927. package/docs/start/docs-directory.md +66 -0
  1928. package/docs/start/getting-started.md +116 -0
  1929. package/docs/start/hubs.md +198 -0
  1930. package/docs/start/lore.md +219 -0
  1931. package/docs/start/onboarding-overview.md +67 -0
  1932. package/docs/start/onboarding.md +91 -0
  1933. package/docs/start/quickstart.md +22 -0
  1934. package/docs/start/setup.md +164 -0
  1935. package/docs/start/showcase.md +418 -0
  1936. package/docs/start/vora.md +224 -0
  1937. package/docs/start/wizard-cli-automation.md +215 -0
  1938. package/docs/start/wizard-cli-reference.md +302 -0
  1939. package/docs/start/wizard.md +125 -0
  1940. package/docs/style.css +37 -0
  1941. package/docs/tools/acp-agents.md +772 -0
  1942. package/docs/tools/agent-send.md +100 -0
  1943. package/docs/tools/apply-patch.md +52 -0
  1944. package/docs/tools/brave-search.md +97 -0
  1945. package/docs/tools/browser-linux-troubleshooting.md +138 -0
  1946. package/docs/tools/browser-login.md +73 -0
  1947. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +211 -0
  1948. package/docs/tools/browser.md +824 -0
  1949. package/docs/tools/btw.md +142 -0
  1950. package/docs/tools/capability-cookbook.md +119 -0
  1951. package/docs/tools/clawhub.md +336 -0
  1952. package/docs/tools/code-execution.md +90 -0
  1953. package/docs/tools/creating-skills.md +117 -0
  1954. package/docs/tools/diffs.md +388 -0
  1955. package/docs/tools/duckduckgo-search.md +101 -0
  1956. package/docs/tools/elevated.md +114 -0
  1957. package/docs/tools/exa-search.md +127 -0
  1958. package/docs/tools/exec-approvals.md +502 -0
  1959. package/docs/tools/exec.md +217 -0
  1960. package/docs/tools/firecrawl.md +144 -0
  1961. package/docs/tools/gemini-search.md +93 -0
  1962. package/docs/tools/grok-search.md +98 -0
  1963. package/docs/tools/image-generation.md +125 -0
  1964. package/docs/tools/index.md +140 -0
  1965. package/docs/tools/kimi-search.md +73 -0
  1966. package/docs/tools/llm-task.md +119 -0
  1967. package/docs/tools/lobster.md +348 -0
  1968. package/docs/tools/loop-detection.md +100 -0
  1969. package/docs/tools/multi-agent-sandbox-tools.md +364 -0
  1970. package/docs/tools/pdf.md +161 -0
  1971. package/docs/tools/perplexity-search.md +178 -0
  1972. package/docs/tools/plugin.md +291 -0
  1973. package/docs/tools/reactions.md +64 -0
  1974. package/docs/tools/skills-config.md +95 -0
  1975. package/docs/tools/skills.md +331 -0
  1976. package/docs/tools/slash-commands.md +315 -0
  1977. package/docs/tools/subagents.md +296 -0
  1978. package/docs/tools/tavily.md +129 -0
  1979. package/docs/tools/thinking.md +96 -0
  1980. package/docs/tools/tts.md +416 -0
  1981. package/docs/tools/web-fetch.md +135 -0
  1982. package/docs/tools/web.md +362 -0
  1983. package/docs/tts.md +416 -0
  1984. package/docs/vps.md +112 -0
  1985. package/docs/web/control-ui.md +285 -0
  1986. package/docs/web/dashboard.md +56 -0
  1987. package/docs/web/index.md +120 -0
  1988. package/docs/web/tui.md +175 -0
  1989. package/docs/web/webchat.md +65 -0
  1990. package/docs/whatsapp-vora-ai-zh.jpg +0 -0
  1991. package/docs/whatsapp-vora.jpg +0 -0
  1992. package/docs/zh-CN/AGENTS.md +61 -0
  1993. package/docs/zh-CN/automation/auth-monitoring.md +47 -0
  1994. package/docs/zh-CN/automation/cron-jobs.md +435 -0
  1995. package/docs/zh-CN/automation/cron-vs-heartbeat.md +286 -0
  1996. package/docs/zh-CN/automation/gmail-pubsub.md +249 -0
  1997. package/docs/zh-CN/automation/hooks.md +1051 -0
  1998. package/docs/zh-CN/automation/poll.md +76 -0
  1999. package/docs/zh-CN/automation/troubleshooting.md +8 -0
  2000. package/docs/zh-CN/automation/webhook.md +163 -0
  2001. package/docs/zh-CN/brave-search.md +60 -0
  2002. package/docs/zh-CN/channels/bluebubbles.md +354 -0
  2003. package/docs/zh-CN/channels/broadcast-groups.md +449 -0
  2004. package/docs/zh-CN/channels/channel-routing.md +117 -0
  2005. package/docs/zh-CN/channels/discord.md +468 -0
  2006. package/docs/zh-CN/channels/feishu.md +728 -0
  2007. package/docs/zh-CN/channels/googlechat.md +257 -0
  2008. package/docs/zh-CN/channels/grammy.md +38 -0
  2009. package/docs/zh-CN/channels/group-messages.md +91 -0
  2010. package/docs/zh-CN/channels/groups.md +379 -0
  2011. package/docs/zh-CN/channels/imessage.md +302 -0
  2012. package/docs/zh-CN/channels/index.md +53 -0
  2013. package/docs/zh-CN/channels/line.md +180 -0
  2014. package/docs/zh-CN/channels/location.md +63 -0
  2015. package/docs/zh-CN/channels/matrix.md +221 -0
  2016. package/docs/zh-CN/channels/mattermost.md +144 -0
  2017. package/docs/zh-CN/channels/msteams.md +775 -0
  2018. package/docs/zh-CN/channels/nextcloud-talk.md +142 -0
  2019. package/docs/zh-CN/channels/nostr.md +249 -0
  2020. package/docs/zh-CN/channels/pairing.md +89 -0
  2021. package/docs/zh-CN/channels/signal.md +209 -0
  2022. package/docs/zh-CN/channels/slack.md +531 -0
  2023. package/docs/zh-CN/channels/synology-chat.md +138 -0
  2024. package/docs/zh-CN/channels/telegram.md +751 -0
  2025. package/docs/zh-CN/channels/tlon.md +136 -0
  2026. package/docs/zh-CN/channels/troubleshooting.md +36 -0
  2027. package/docs/zh-CN/channels/twitch.md +385 -0
  2028. package/docs/zh-CN/channels/whatsapp.md +411 -0
  2029. package/docs/zh-CN/channels/zalo.md +196 -0
  2030. package/docs/zh-CN/channels/zalouser.md +147 -0
  2031. package/docs/zh-CN/cli/acp.md +173 -0
  2032. package/docs/zh-CN/cli/agent.md +30 -0
  2033. package/docs/zh-CN/cli/agents.md +82 -0
  2034. package/docs/zh-CN/cli/approvals.md +57 -0
  2035. package/docs/zh-CN/cli/browser.md +114 -0
  2036. package/docs/zh-CN/cli/channels.md +86 -0
  2037. package/docs/zh-CN/cli/config.md +57 -0
  2038. package/docs/zh-CN/cli/configure.md +38 -0
  2039. package/docs/zh-CN/cli/cron.md +43 -0
  2040. package/docs/zh-CN/cli/dashboard.md +23 -0
  2041. package/docs/zh-CN/cli/devices.md +74 -0
  2042. package/docs/zh-CN/cli/directory.md +70 -0
  2043. package/docs/zh-CN/cli/dns.md +30 -0
  2044. package/docs/zh-CN/cli/docs.md +22 -0
  2045. package/docs/zh-CN/cli/doctor.md +48 -0
  2046. package/docs/zh-CN/cli/gateway.md +206 -0
  2047. package/docs/zh-CN/cli/health.md +28 -0
  2048. package/docs/zh-CN/cli/hooks.md +298 -0
  2049. package/docs/zh-CN/cli/index.md +1142 -0
  2050. package/docs/zh-CN/cli/logs.md +31 -0
  2051. package/docs/zh-CN/cli/memory.md +52 -0
  2052. package/docs/zh-CN/cli/message.md +246 -0
  2053. package/docs/zh-CN/cli/models.md +85 -0
  2054. package/docs/zh-CN/cli/node.md +115 -0
  2055. package/docs/zh-CN/cli/nodes.md +62 -0
  2056. package/docs/zh-CN/cli/onboard.md +164 -0
  2057. package/docs/zh-CN/cli/pairing.md +28 -0
  2058. package/docs/zh-CN/cli/plugins.md +66 -0
  2059. package/docs/zh-CN/cli/reset.md +24 -0
  2060. package/docs/zh-CN/cli/sandbox.md +158 -0
  2061. package/docs/zh-CN/cli/security.md +33 -0
  2062. package/docs/zh-CN/cli/sessions.md +23 -0
  2063. package/docs/zh-CN/cli/setup.md +36 -0
  2064. package/docs/zh-CN/cli/skills.md +33 -0
  2065. package/docs/zh-CN/cli/status.md +33 -0
  2066. package/docs/zh-CN/cli/system.md +63 -0
  2067. package/docs/zh-CN/cli/tui.md +30 -0
  2068. package/docs/zh-CN/cli/uninstall.md +24 -0
  2069. package/docs/zh-CN/cli/update.md +101 -0
  2070. package/docs/zh-CN/cli/voicecall.md +41 -0
  2071. package/docs/zh-CN/cli/webhooks.md +32 -0
  2072. package/docs/zh-CN/concepts/agent-loop.md +146 -0
  2073. package/docs/zh-CN/concepts/agent-workspace.md +219 -0
  2074. package/docs/zh-CN/concepts/agent.md +115 -0
  2075. package/docs/zh-CN/concepts/architecture.md +123 -0
  2076. package/docs/zh-CN/concepts/compaction.md +67 -0
  2077. package/docs/zh-CN/concepts/context.md +168 -0
  2078. package/docs/zh-CN/concepts/features.md +59 -0
  2079. package/docs/zh-CN/concepts/markdown-formatting.md +117 -0
  2080. package/docs/zh-CN/concepts/memory.md +412 -0
  2081. package/docs/zh-CN/concepts/messages.md +141 -0
  2082. package/docs/zh-CN/concepts/model-failover.md +145 -0
  2083. package/docs/zh-CN/concepts/model-providers.md +589 -0
  2084. package/docs/zh-CN/concepts/models.md +225 -0
  2085. package/docs/zh-CN/concepts/multi-agent.md +372 -0
  2086. package/docs/zh-CN/concepts/oauth.md +164 -0
  2087. package/docs/zh-CN/concepts/presence.md +99 -0
  2088. package/docs/zh-CN/concepts/queue.md +94 -0
  2089. package/docs/zh-CN/concepts/retry.md +76 -0
  2090. package/docs/zh-CN/concepts/session-pruning.md +129 -0
  2091. package/docs/zh-CN/concepts/session-tool.md +200 -0
  2092. package/docs/zh-CN/concepts/session.md +166 -0
  2093. package/docs/zh-CN/concepts/streaming.md +133 -0
  2094. package/docs/zh-CN/concepts/system-prompt.md +101 -0
  2095. package/docs/zh-CN/concepts/timezone.md +96 -0
  2096. package/docs/zh-CN/concepts/typebox.md +284 -0
  2097. package/docs/zh-CN/concepts/typing-indicators.md +74 -0
  2098. package/docs/zh-CN/concepts/usage-tracking.md +42 -0
  2099. package/docs/zh-CN/date-time.md +129 -0
  2100. package/docs/zh-CN/debug/node-issue.md +90 -0
  2101. package/docs/zh-CN/diagnostics/flags.md +98 -0
  2102. package/docs/zh-CN/gateway/authentication.md +184 -0
  2103. package/docs/zh-CN/gateway/background-process.md +100 -0
  2104. package/docs/zh-CN/gateway/bonjour.md +174 -0
  2105. package/docs/zh-CN/gateway/bridge-protocol.md +86 -0
  2106. package/docs/zh-CN/gateway/cli-backends.md +213 -0
  2107. package/docs/zh-CN/gateway/configuration-examples.md +587 -0
  2108. package/docs/zh-CN/gateway/configuration-reference.md +3103 -0
  2109. package/docs/zh-CN/gateway/configuration.md +640 -0
  2110. package/docs/zh-CN/gateway/discovery.md +123 -0
  2111. package/docs/zh-CN/gateway/doctor.md +238 -0
  2112. package/docs/zh-CN/gateway/gateway-lock.md +41 -0
  2113. package/docs/zh-CN/gateway/health.md +42 -0
  2114. package/docs/zh-CN/gateway/heartbeat.md +274 -0
  2115. package/docs/zh-CN/gateway/index.md +335 -0
  2116. package/docs/zh-CN/gateway/local-models.md +159 -0
  2117. package/docs/zh-CN/gateway/logging.md +114 -0
  2118. package/docs/zh-CN/gateway/multiple-gateways.md +119 -0
  2119. package/docs/zh-CN/gateway/network-model.md +23 -0
  2120. package/docs/zh-CN/gateway/openai-http-api.md +125 -0
  2121. package/docs/zh-CN/gateway/openresponses-http-api.md +317 -0
  2122. package/docs/zh-CN/gateway/pairing.md +99 -0
  2123. package/docs/zh-CN/gateway/protocol.md +220 -0
  2124. package/docs/zh-CN/gateway/remote-gateway-readme.md +164 -0
  2125. package/docs/zh-CN/gateway/remote.md +133 -0
  2126. package/docs/zh-CN/gateway/sandbox-vs-tool-policy-vs-elevated.md +135 -0
  2127. package/docs/zh-CN/gateway/sandboxing.md +188 -0
  2128. package/docs/zh-CN/gateway/security/index.md +777 -0
  2129. package/docs/zh-CN/gateway/tailscale.md +124 -0
  2130. package/docs/zh-CN/gateway/tools-invoke-http-api.md +92 -0
  2131. package/docs/zh-CN/gateway/troubleshooting.md +771 -0
  2132. package/docs/zh-CN/help/debugging.md +160 -0
  2133. package/docs/zh-CN/help/environment.md +88 -0
  2134. package/docs/zh-CN/help/faq.md +2640 -0
  2135. package/docs/zh-CN/help/index.md +28 -0
  2136. package/docs/zh-CN/help/scripts.md +35 -0
  2137. package/docs/zh-CN/help/testing.md +375 -0
  2138. package/docs/zh-CN/help/troubleshooting.md +104 -0
  2139. package/docs/zh-CN/index.md +186 -0
  2140. package/docs/zh-CN/install/ansible.md +215 -0
  2141. package/docs/zh-CN/install/bun.md +65 -0
  2142. package/docs/zh-CN/install/development-channels.md +81 -0
  2143. package/docs/zh-CN/install/docker.md +532 -0
  2144. package/docs/zh-CN/install/exe-dev.md +133 -0
  2145. package/docs/zh-CN/install/fly.md +490 -0
  2146. package/docs/zh-CN/install/gcp.md +510 -0
  2147. package/docs/zh-CN/install/hetzner.md +337 -0
  2148. package/docs/zh-CN/install/index.md +235 -0
  2149. package/docs/zh-CN/install/installer.md +422 -0
  2150. package/docs/zh-CN/install/macos-vm.md +288 -0
  2151. package/docs/zh-CN/install/migrating.md +199 -0
  2152. package/docs/zh-CN/install/nix.md +99 -0
  2153. package/docs/zh-CN/install/node.md +8 -0
  2154. package/docs/zh-CN/install/northflank.mdx +60 -0
  2155. package/docs/zh-CN/install/railway.mdx +106 -0
  2156. package/docs/zh-CN/install/render.mdx +169 -0
  2157. package/docs/zh-CN/install/uninstall.md +135 -0
  2158. package/docs/zh-CN/install/updating.md +233 -0
  2159. package/docs/zh-CN/logging.md +329 -0
  2160. package/docs/zh-CN/network.md +59 -0
  2161. package/docs/zh-CN/nodes/audio.md +120 -0
  2162. package/docs/zh-CN/nodes/camera.md +162 -0
  2163. package/docs/zh-CN/nodes/images.md +79 -0
  2164. package/docs/zh-CN/nodes/index.md +350 -0
  2165. package/docs/zh-CN/nodes/location-command.md +120 -0
  2166. package/docs/zh-CN/nodes/media-understanding.md +380 -0
  2167. package/docs/zh-CN/nodes/talk.md +97 -0
  2168. package/docs/zh-CN/nodes/troubleshooting.md +8 -0
  2169. package/docs/zh-CN/nodes/voicewake.md +72 -0
  2170. package/docs/zh-CN/perplexity.md +102 -0
  2171. package/docs/zh-CN/pi-dev.md +87 -0
  2172. package/docs/zh-CN/pi.md +571 -0
  2173. package/docs/zh-CN/platforms/android.md +155 -0
  2174. package/docs/zh-CN/platforms/digitalocean.md +273 -0
  2175. package/docs/zh-CN/platforms/index.md +60 -0
  2176. package/docs/zh-CN/platforms/ios.md +114 -0
  2177. package/docs/zh-CN/platforms/linux.md +100 -0
  2178. package/docs/zh-CN/platforms/mac/bundled-gateway.md +75 -0
  2179. package/docs/zh-CN/platforms/mac/canvas.md +128 -0
  2180. package/docs/zh-CN/platforms/mac/child-process.md +73 -0
  2181. package/docs/zh-CN/platforms/mac/dev-setup.md +109 -0
  2182. package/docs/zh-CN/platforms/mac/health.md +41 -0
  2183. package/docs/zh-CN/platforms/mac/icon.md +38 -0
  2184. package/docs/zh-CN/platforms/mac/logging.md +64 -0
  2185. package/docs/zh-CN/platforms/mac/menu-bar.md +88 -0
  2186. package/docs/zh-CN/platforms/mac/peekaboo.md +62 -0
  2187. package/docs/zh-CN/platforms/mac/permissions.md +46 -0
  2188. package/docs/zh-CN/platforms/mac/remote.md +90 -0
  2189. package/docs/zh-CN/platforms/mac/signing.md +54 -0
  2190. package/docs/zh-CN/platforms/mac/skills.md +40 -0
  2191. package/docs/zh-CN/platforms/mac/voice-overlay.md +67 -0
  2192. package/docs/zh-CN/platforms/mac/voicewake.md +74 -0
  2193. package/docs/zh-CN/platforms/mac/webchat.md +43 -0
  2194. package/docs/zh-CN/platforms/mac/xpc.md +68 -0
  2195. package/docs/zh-CN/platforms/macos.md +193 -0
  2196. package/docs/zh-CN/platforms/oracle.md +310 -0
  2197. package/docs/zh-CN/platforms/raspberry-pi.md +416 -0
  2198. package/docs/zh-CN/platforms/windows.md +247 -0
  2199. package/docs/zh-CN/plugins/agent-tools.md +99 -0
  2200. package/docs/zh-CN/plugins/manifest.md +68 -0
  2201. package/docs/zh-CN/plugins/voice-call.md +250 -0
  2202. package/docs/zh-CN/plugins/zalouser.md +88 -0
  2203. package/docs/zh-CN/prose.md +141 -0
  2204. package/docs/zh-CN/providers/anthropic.md +265 -0
  2205. package/docs/zh-CN/providers/bedrock.md +170 -0
  2206. package/docs/zh-CN/providers/claude-max-api-proxy.md +155 -0
  2207. package/docs/zh-CN/providers/cloudflare-ai-gateway.md +78 -0
  2208. package/docs/zh-CN/providers/deepgram.md +97 -0
  2209. package/docs/zh-CN/providers/github-copilot.md +67 -0
  2210. package/docs/zh-CN/providers/glm.md +50 -0
  2211. package/docs/zh-CN/providers/huggingface.md +216 -0
  2212. package/docs/zh-CN/providers/index.md +69 -0
  2213. package/docs/zh-CN/providers/kilocode.md +80 -0
  2214. package/docs/zh-CN/providers/litellm.md +160 -0
  2215. package/docs/zh-CN/providers/minimax.md +222 -0
  2216. package/docs/zh-CN/providers/mistral.md +61 -0
  2217. package/docs/zh-CN/providers/models.md +51 -0
  2218. package/docs/zh-CN/providers/moonshot.md +182 -0
  2219. package/docs/zh-CN/providers/nvidia.md +62 -0
  2220. package/docs/zh-CN/providers/ollama.md +359 -0
  2221. package/docs/zh-CN/providers/openai.md +308 -0
  2222. package/docs/zh-CN/providers/opencode-go.md +52 -0
  2223. package/docs/zh-CN/providers/opencode.md +71 -0
  2224. package/docs/zh-CN/providers/openrouter.md +44 -0
  2225. package/docs/zh-CN/providers/qianfan.md +45 -0
  2226. package/docs/zh-CN/providers/qwen.md +36 -0
  2227. package/docs/zh-CN/providers/sglang.md +111 -0
  2228. package/docs/zh-CN/providers/synthetic.md +106 -0
  2229. package/docs/zh-CN/providers/together.md +72 -0
  2230. package/docs/zh-CN/providers/venice.md +289 -0
  2231. package/docs/zh-CN/providers/vercel-ai-gateway.md +66 -0
  2232. package/docs/zh-CN/providers/xiaomi.md +93 -0
  2233. package/docs/zh-CN/providers/zai.md +53 -0
  2234. package/docs/zh-CN/reference/AGENTS.default.md +131 -0
  2235. package/docs/zh-CN/reference/RELEASING.md +48 -0
  2236. package/docs/zh-CN/reference/api-usage-costs.md +141 -0
  2237. package/docs/zh-CN/reference/credits.md +34 -0
  2238. package/docs/zh-CN/reference/device-models.md +54 -0
  2239. package/docs/zh-CN/reference/rpc.md +48 -0
  2240. package/docs/zh-CN/reference/session-management-compaction.md +287 -0
  2241. package/docs/zh-CN/reference/templates/AGENTS.dev.md +89 -0
  2242. package/docs/zh-CN/reference/templates/AGENTS.md +225 -0
  2243. package/docs/zh-CN/reference/templates/BOOT.md +17 -0
  2244. package/docs/zh-CN/reference/templates/BOOTSTRAP.md +68 -0
  2245. package/docs/zh-CN/reference/templates/HEARTBEAT.md +18 -0
  2246. package/docs/zh-CN/reference/templates/IDENTITY.dev.md +54 -0
  2247. package/docs/zh-CN/reference/templates/IDENTITY.md +36 -0
  2248. package/docs/zh-CN/reference/templates/SOUL.dev.md +83 -0
  2249. package/docs/zh-CN/reference/templates/SOUL.md +49 -0
  2250. package/docs/zh-CN/reference/templates/TOOLS.dev.md +31 -0
  2251. package/docs/zh-CN/reference/templates/TOOLS.md +53 -0
  2252. package/docs/zh-CN/reference/templates/USER.dev.md +25 -0
  2253. package/docs/zh-CN/reference/templates/USER.md +30 -0
  2254. package/docs/zh-CN/reference/test.md +57 -0
  2255. package/docs/zh-CN/reference/token-use.md +119 -0
  2256. package/docs/zh-CN/reference/transcript-hygiene.md +109 -0
  2257. package/docs/zh-CN/reference/wizard.md +242 -0
  2258. package/docs/zh-CN/security/formal-verification.md +171 -0
  2259. package/docs/zh-CN/start/bootstrapping.md +9 -0
  2260. package/docs/zh-CN/start/docs-directory.md +70 -0
  2261. package/docs/zh-CN/start/getting-started.md +143 -0
  2262. package/docs/zh-CN/start/hubs.md +194 -0
  2263. package/docs/zh-CN/start/lore.md +226 -0
  2264. package/docs/zh-CN/start/onboarding-overview.md +58 -0
  2265. package/docs/zh-CN/start/onboarding.md +105 -0
  2266. package/docs/zh-CN/start/quickstart.md +88 -0
  2267. package/docs/zh-CN/start/setup.md +153 -0
  2268. package/docs/zh-CN/start/showcase.md +423 -0
  2269. package/docs/zh-CN/start/vora.md +248 -0
  2270. package/docs/zh-CN/start/wizard-cli-automation.md +222 -0
  2271. package/docs/zh-CN/start/wizard-cli-reference.md +306 -0
  2272. package/docs/zh-CN/start/wizard.md +132 -0
  2273. package/docs/zh-CN/tools/agent-send.md +59 -0
  2274. package/docs/zh-CN/tools/apply-patch.md +57 -0
  2275. package/docs/zh-CN/tools/browser-linux-troubleshooting.md +144 -0
  2276. package/docs/zh-CN/tools/browser-login.md +75 -0
  2277. package/docs/zh-CN/tools/browser.md +553 -0
  2278. package/docs/zh-CN/tools/chrome-extension.md +183 -0
  2279. package/docs/zh-CN/tools/clawhub.md +225 -0
  2280. package/docs/zh-CN/tools/creating-skills.md +61 -0
  2281. package/docs/zh-CN/tools/diffs.md +393 -0
  2282. package/docs/zh-CN/tools/elevated.md +64 -0
  2283. package/docs/zh-CN/tools/exec-approvals.md +234 -0
  2284. package/docs/zh-CN/tools/exec.md +169 -0
  2285. package/docs/zh-CN/tools/firecrawl.md +68 -0
  2286. package/docs/zh-CN/tools/index.md +514 -0
  2287. package/docs/zh-CN/tools/llm-task.md +117 -0
  2288. package/docs/zh-CN/tools/lobster.md +349 -0
  2289. package/docs/zh-CN/tools/multi-agent-sandbox-tools.md +401 -0
  2290. package/docs/zh-CN/tools/plugin.md +1610 -0
  2291. package/docs/zh-CN/tools/reactions.md +29 -0
  2292. package/docs/zh-CN/tools/skills-config.md +78 -0
  2293. package/docs/zh-CN/tools/skills.md +279 -0
  2294. package/docs/zh-CN/tools/slash-commands.md +205 -0
  2295. package/docs/zh-CN/tools/subagents.md +167 -0
  2296. package/docs/zh-CN/tools/thinking.md +80 -0
  2297. package/docs/zh-CN/tools/web.md +289 -0
  2298. package/docs/zh-CN/tts.md +375 -0
  2299. package/docs/zh-CN/vps.md +47 -0
  2300. package/docs/zh-CN/web/control-ui.md +191 -0
  2301. package/docs/zh-CN/web/dashboard.md +53 -0
  2302. package/docs/zh-CN/web/index.md +118 -0
  2303. package/docs/zh-CN/web/tui.md +166 -0
  2304. package/docs/zh-CN/web/webchat.md +56 -0
  2305. package/package.json +1305 -0
  2306. package/scripts/postinstall-bundled-plugins.mjs +166 -0
  2307. package/skills/1password/SKILL.md +70 -0
  2308. package/skills/1password/references/cli-examples.md +29 -0
  2309. package/skills/1password/references/get-started.md +17 -0
  2310. package/skills/apple-notes/SKILL.md +77 -0
  2311. package/skills/apple-reminders/SKILL.md +118 -0
  2312. package/skills/bear-notes/SKILL.md +107 -0
  2313. package/skills/blogwatcher/SKILL.md +69 -0
  2314. package/skills/blucli/SKILL.md +47 -0
  2315. package/skills/bluebubbles/SKILL.md +131 -0
  2316. package/skills/camsnap/SKILL.md +45 -0
  2317. package/skills/canvas/SKILL.md +199 -0
  2318. package/skills/clawflow/SKILL.md +76 -0
  2319. package/skills/clawflow/examples/inbox-triage.lobster +33 -0
  2320. package/skills/clawflow/examples/pr-intake.lobster +32 -0
  2321. package/skills/clawflow-inbox-triage/SKILL.md +62 -0
  2322. package/skills/clawhub/SKILL.md +77 -0
  2323. package/skills/coding-agent/SKILL.md +316 -0
  2324. package/skills/discord/SKILL.md +197 -0
  2325. package/skills/eightctl/SKILL.md +50 -0
  2326. package/skills/gemini/SKILL.md +43 -0
  2327. package/skills/gh-issues/SKILL.md +885 -0
  2328. package/skills/gifgrep/SKILL.md +79 -0
  2329. package/skills/github/SKILL.md +163 -0
  2330. package/skills/gog/SKILL.md +116 -0
  2331. package/skills/goplaces/SKILL.md +52 -0
  2332. package/skills/healthcheck/SKILL.md +245 -0
  2333. package/skills/himalaya/SKILL.md +257 -0
  2334. package/skills/himalaya/references/configuration.md +184 -0
  2335. package/skills/himalaya/references/message-composition.md +199 -0
  2336. package/skills/imsg/SKILL.md +122 -0
  2337. package/skills/mcporter/SKILL.md +61 -0
  2338. package/skills/model-usage/SKILL.md +69 -0
  2339. package/skills/model-usage/references/codexbar-cli.md +33 -0
  2340. package/skills/model-usage/scripts/model_usage.py +320 -0
  2341. package/skills/model-usage/scripts/test_model_usage.py +40 -0
  2342. package/skills/nano-pdf/SKILL.md +38 -0
  2343. package/skills/node-connect/SKILL.md +142 -0
  2344. package/skills/notion/SKILL.md +174 -0
  2345. package/skills/obsidian/SKILL.md +81 -0
  2346. package/skills/openai-whisper/SKILL.md +38 -0
  2347. package/skills/openai-whisper-api/SKILL.md +62 -0
  2348. package/skills/openai-whisper-api/scripts/transcribe.sh +88 -0
  2349. package/skills/openhue/SKILL.md +112 -0
  2350. package/skills/oracle/SKILL.md +125 -0
  2351. package/skills/ordercli/SKILL.md +78 -0
  2352. package/skills/peekaboo/SKILL.md +190 -0
  2353. package/skills/sag/SKILL.md +87 -0
  2354. package/skills/session-logs/SKILL.md +151 -0
  2355. package/skills/sherpa-onnx-tts/SKILL.md +109 -0
  2356. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  2357. package/skills/skill-creator/SKILL.md +372 -0
  2358. package/skills/skill-creator/license.txt +202 -0
  2359. package/skills/skill-creator/scripts/init_skill.py +378 -0
  2360. package/skills/skill-creator/scripts/package_skill.py +139 -0
  2361. package/skills/skill-creator/scripts/quick_validate.py +159 -0
  2362. package/skills/skill-creator/scripts/test_package_skill.py +160 -0
  2363. package/skills/skill-creator/scripts/test_quick_validate.py +72 -0
  2364. package/skills/slack/SKILL.md +144 -0
  2365. package/skills/songsee/SKILL.md +49 -0
  2366. package/skills/sonoscli/SKILL.md +65 -0
  2367. package/skills/spotify-player/SKILL.md +64 -0
  2368. package/skills/summarize/SKILL.md +87 -0
  2369. package/skills/things-mac/SKILL.md +86 -0
  2370. package/skills/tmux/SKILL.md +170 -0
  2371. package/skills/tmux/scripts/find-sessions.sh +112 -0
  2372. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  2373. package/skills/trello/SKILL.md +108 -0
  2374. package/skills/video-frames/SKILL.md +46 -0
  2375. package/skills/video-frames/scripts/frame.sh +81 -0
  2376. package/skills/voice-call/SKILL.md +45 -0
  2377. package/skills/wacli/SKILL.md +72 -0
  2378. package/skills/weather/SKILL.md +129 -0
  2379. package/skills/xurl/SKILL.md +461 -0
  2380. package/vora.mjs +183 -0
@@ -0,0 +1,2473 @@
1
+ import { n as resolvePreferredVoraTmpDir } from "./tmp-vora-dir-D2qk7W45.js";
2
+ import { t as resolveGlobalMap } from "./global-singleton-54zT3rCn.js";
3
+ import { _ as normalizeAccountId } from "./session-key-BIrdMs11.js";
4
+ import { c as loadConfig } from "./io-B07IaARR.js";
5
+ import { n as buildOutboundMediaLoadOptions, t as loadOutboundMediaFromUrl } from "./outbound-media-Do8el7w-.js";
6
+ import { n as extensionForMime, p as maxBytesForKind } from "./mime-CPj5mSwT.js";
7
+ import { n as loadWebMediaRaw, t as loadWebMedia } from "./web-media-xqpNAEze.js";
8
+ import { m as resolveTextChunksWithFallback } from "./reply-payload-D0XXyIHC.js";
9
+ import { n as normalizePollInput, t as normalizePollDurationHours } from "./polls-BJAJSaiP.js";
10
+ import { i as chunkMarkdownTextWithMode, s as resolveChunkMode } from "./chunk-BRNunu6m.js";
11
+ import { c as parseFfprobeCodecAndSampleRate, d as runFfprobe, f as MEDIA_FFMPEG_MAX_AUDIO_DURATION_SECS, u as runFfmpeg } from "./runner-BEbGymO4.js";
12
+ import "./temp-path-DfCfU6WG.js";
13
+ import "./routing-B6ZVsl1G.js";
14
+ import { t as resolveMarkdownTableMode } from "./markdown-tables-D2sUymqZ.js";
15
+ import { c as recordChannelActivity } from "./heartbeat-visibility-kNXllOIC.js";
16
+ import { t as convertMarkdownTables } from "./tables-AGjErT3Z.js";
17
+ import "./config-runtime-CGUisiU5.js";
18
+ import "./reply-runtime-bbaSgEmi.js";
19
+ import { t as reduceInteractiveReply } from "./interactive-C3NpHdfG.js";
20
+ import "./channel-runtime-B3OwaSIN.js";
21
+ import { n as createRateLimitRetryRunner } from "./retry-policy-vpZZs4Ql.js";
22
+ import { a as unlinkIfExists } from "./media-runtime-D2qFlSNy.js";
23
+ import "./text-runtime-vMYWZmQD.js";
24
+ import "./retry-runtime-BwFtUlOC.js";
25
+ import { t as normalizeDiscordToken } from "./token-CHFyaNO5.js";
26
+ import { i as mergeDiscordAccountConfig, o as resolveDiscordAccount } from "./accounts-Db4FI6Zz.js";
27
+ import { i as resolveDiscordTarget, n as parseDiscordTarget } from "./runtime-api-B0fBYyFa.js";
28
+ import { n as rewriteDiscordKnownMentions } from "./mentions-Ksl6lu1X.js";
29
+ import path from "node:path";
30
+ import fs from "node:fs/promises";
31
+ import crypto from "node:crypto";
32
+ import { Button, ChannelSelectMenu, CheckboxGroup, Container, Embed, File, Label, LinkButton, MediaGallery, MentionableSelectMenu, Modal, RadioGroup, RateLimitError, RequestClient, RoleSelectMenu, Row, Section, Separator, StringSelectMenu, TextDisplay, TextInput, Thumbnail, UserSelectMenu, parseCustomId, serializePayload } from "@buape/carbon";
33
+ import { ButtonStyle, ChannelType as ChannelType$1, MessageFlags, PermissionFlagsBits, Routes, TextInputStyle } from "discord-api-types/v10";
34
+ import { PollLayoutType } from "discord-api-types/payloads/v10";
35
+ //#region extensions/discord/src/chunk.ts
36
+ const DEFAULT_MAX_CHARS = 2e3;
37
+ const DEFAULT_MAX_LINES = 17;
38
+ const FENCE_RE = /^( {0,3})(`{3,}|~{3,})(.*)$/;
39
+ function countLines(text) {
40
+ if (!text) return 0;
41
+ return text.split("\n").length;
42
+ }
43
+ function parseFenceLine(line) {
44
+ const match = line.match(FENCE_RE);
45
+ if (!match) return null;
46
+ const indent = match[1] ?? "";
47
+ const marker = match[2] ?? "";
48
+ return {
49
+ indent,
50
+ markerChar: marker[0] ?? "`",
51
+ markerLen: marker.length,
52
+ openLine: line
53
+ };
54
+ }
55
+ function closeFenceLine(openFence) {
56
+ return `${openFence.indent}${openFence.markerChar.repeat(openFence.markerLen)}`;
57
+ }
58
+ function closeFenceIfNeeded(text, openFence) {
59
+ if (!openFence) return text;
60
+ const closeLine = closeFenceLine(openFence);
61
+ if (!text) return closeLine;
62
+ if (!text.endsWith("\n")) return `${text}\n${closeLine}`;
63
+ return `${text}${closeLine}`;
64
+ }
65
+ function splitLongLine(line, maxChars, opts) {
66
+ const limit = Math.max(1, Math.floor(maxChars));
67
+ if (line.length <= limit) return [line];
68
+ const out = [];
69
+ let remaining = line;
70
+ while (remaining.length > limit) {
71
+ if (opts.preserveWhitespace) {
72
+ out.push(remaining.slice(0, limit));
73
+ remaining = remaining.slice(limit);
74
+ continue;
75
+ }
76
+ const window = remaining.slice(0, limit);
77
+ let breakIdx = -1;
78
+ for (let i = window.length - 1; i >= 0; i--) if (/\s/.test(window[i])) {
79
+ breakIdx = i;
80
+ break;
81
+ }
82
+ if (breakIdx <= 0) breakIdx = limit;
83
+ out.push(remaining.slice(0, breakIdx));
84
+ remaining = remaining.slice(breakIdx);
85
+ }
86
+ if (remaining.length) out.push(remaining);
87
+ return out;
88
+ }
89
+ /**
90
+ * Chunks outbound Discord text by both character count and (soft) line count,
91
+ * while keeping fenced code blocks balanced across chunks.
92
+ */
93
+ function chunkDiscordText(text, opts = {}) {
94
+ const maxChars = Math.max(1, Math.floor(opts.maxChars ?? DEFAULT_MAX_CHARS));
95
+ const maxLines = Math.max(1, Math.floor(opts.maxLines ?? DEFAULT_MAX_LINES));
96
+ const body = text ?? "";
97
+ if (!body) return [];
98
+ if (body.length <= maxChars && countLines(body) <= maxLines) return [body];
99
+ const lines = body.split("\n");
100
+ const chunks = [];
101
+ let current = "";
102
+ let currentLines = 0;
103
+ let openFence = null;
104
+ const flush = () => {
105
+ if (!current) return;
106
+ const payload = closeFenceIfNeeded(current, openFence);
107
+ if (payload.trim().length) chunks.push(payload);
108
+ current = "";
109
+ currentLines = 0;
110
+ if (openFence) {
111
+ current = openFence.openLine;
112
+ currentLines = 1;
113
+ }
114
+ };
115
+ for (const originalLine of lines) {
116
+ const fenceInfo = parseFenceLine(originalLine);
117
+ const wasInsideFence = openFence !== null;
118
+ let nextOpenFence = openFence;
119
+ if (fenceInfo) {
120
+ if (!openFence) nextOpenFence = fenceInfo;
121
+ else if (openFence.markerChar === fenceInfo.markerChar && fenceInfo.markerLen >= openFence.markerLen) nextOpenFence = null;
122
+ }
123
+ const reserveChars = nextOpenFence ? closeFenceLine(nextOpenFence).length + 1 : 0;
124
+ const reserveLines = nextOpenFence ? 1 : 0;
125
+ const effectiveMaxChars = maxChars - reserveChars;
126
+ const effectiveMaxLines = maxLines - reserveLines;
127
+ const charLimit = effectiveMaxChars > 0 ? effectiveMaxChars : maxChars;
128
+ const lineLimit = effectiveMaxLines > 0 ? effectiveMaxLines : maxLines;
129
+ const prefixLen = current.length > 0 ? current.length + 1 : 0;
130
+ const segments = splitLongLine(originalLine, Math.max(1, charLimit - prefixLen), { preserveWhitespace: wasInsideFence });
131
+ for (let segIndex = 0; segIndex < segments.length; segIndex++) {
132
+ const segment = segments[segIndex];
133
+ const isLineContinuation = segIndex > 0;
134
+ const addition = `${isLineContinuation ? "" : current.length > 0 ? "\n" : ""}${segment}`;
135
+ const nextLen = current.length + addition.length;
136
+ const nextLines = currentLines + (isLineContinuation ? 0 : 1);
137
+ if ((nextLen > charLimit || nextLines > lineLimit) && current.length > 0) flush();
138
+ if (current.length > 0) {
139
+ current += addition;
140
+ if (!isLineContinuation) currentLines += 1;
141
+ } else {
142
+ current = segment;
143
+ currentLines = 1;
144
+ }
145
+ }
146
+ openFence = nextOpenFence;
147
+ }
148
+ if (current.length) {
149
+ const payload = closeFenceIfNeeded(current, openFence);
150
+ if (payload.trim().length) chunks.push(payload);
151
+ }
152
+ return rebalanceReasoningItalics(text, chunks);
153
+ }
154
+ function chunkDiscordTextWithMode(text, opts) {
155
+ if ((opts.chunkMode ?? "length") !== "newline") return chunkDiscordText(text, opts);
156
+ const lineChunks = chunkMarkdownTextWithMode(text, Math.max(1, Math.floor(opts.maxChars ?? DEFAULT_MAX_CHARS)), "newline");
157
+ const chunks = [];
158
+ for (const line of lineChunks) {
159
+ const nested = chunkDiscordText(line, opts);
160
+ if (!nested.length && line) {
161
+ chunks.push(line);
162
+ continue;
163
+ }
164
+ chunks.push(...nested);
165
+ }
166
+ return chunks;
167
+ }
168
+ function rebalanceReasoningItalics(source, chunks) {
169
+ if (chunks.length <= 1) return chunks;
170
+ if (!(source.startsWith("Reasoning:\n_") && source.trimEnd().endsWith("_"))) return chunks;
171
+ const adjusted = [...chunks];
172
+ for (let i = 0; i < adjusted.length; i++) {
173
+ const isLast = i === adjusted.length - 1;
174
+ const current = adjusted[i];
175
+ if (!current.trimEnd().endsWith("_")) adjusted[i] = `${current}_`;
176
+ if (isLast) break;
177
+ const next = adjusted[i + 1];
178
+ const leadingWhitespaceLen = next.length - next.trimStart().length;
179
+ const leadingWhitespace = next.slice(0, leadingWhitespaceLen);
180
+ const nextBody = next.slice(leadingWhitespaceLen);
181
+ if (!nextBody.startsWith("_")) adjusted[i + 1] = `${leadingWhitespace}_${nextBody}`;
182
+ }
183
+ return adjusted;
184
+ }
185
+ //#endregion
186
+ //#region extensions/discord/src/retry.ts
187
+ const DISCORD_RETRY_DEFAULTS = {
188
+ attempts: 3,
189
+ minDelayMs: 500,
190
+ maxDelayMs: 3e4,
191
+ jitter: .1
192
+ };
193
+ function createDiscordRetryRunner(params) {
194
+ return createRateLimitRetryRunner({
195
+ ...params,
196
+ defaults: DISCORD_RETRY_DEFAULTS,
197
+ logLabel: "discord",
198
+ shouldRetry: (err) => err instanceof RateLimitError,
199
+ retryAfterMs: (err) => err instanceof RateLimitError ? err.retryAfter * 1e3 : void 0
200
+ });
201
+ }
202
+ //#endregion
203
+ //#region extensions/discord/src/client.ts
204
+ function resolveToken(params) {
205
+ const fallback = normalizeDiscordToken(params.fallbackToken, "channels.discord.token");
206
+ if (!fallback) throw new Error(`Discord bot token missing for account "${params.accountId}" (set discord.accounts.${params.accountId}.token or DISCORD_BOT_TOKEN for default).`);
207
+ return fallback;
208
+ }
209
+ function resolveRest(token, rest) {
210
+ return rest ?? new RequestClient(token);
211
+ }
212
+ function resolveAccountWithoutToken(params) {
213
+ const accountId = normalizeAccountId(params.accountId);
214
+ const merged = mergeDiscordAccountConfig(params.cfg, accountId);
215
+ const baseEnabled = params.cfg.channels?.discord?.enabled !== false;
216
+ const accountEnabled = merged.enabled !== false;
217
+ return {
218
+ accountId,
219
+ enabled: baseEnabled && accountEnabled,
220
+ name: merged.name?.trim() || void 0,
221
+ token: "",
222
+ tokenSource: "none",
223
+ config: merged
224
+ };
225
+ }
226
+ function createDiscordRestClient(opts, cfg) {
227
+ const resolvedCfg = opts.cfg ?? cfg ?? loadConfig();
228
+ const explicitToken = normalizeDiscordToken(opts.token, "channels.discord.token");
229
+ const account = explicitToken ? resolveAccountWithoutToken({
230
+ cfg: resolvedCfg,
231
+ accountId: opts.accountId
232
+ }) : resolveDiscordAccount({
233
+ cfg: resolvedCfg,
234
+ accountId: opts.accountId
235
+ });
236
+ const token = explicitToken ?? resolveToken({
237
+ accountId: account.accountId,
238
+ fallbackToken: account.token
239
+ });
240
+ return {
241
+ token,
242
+ rest: resolveRest(token, opts.rest),
243
+ account
244
+ };
245
+ }
246
+ function createDiscordClient(opts, cfg) {
247
+ const { token, rest, account } = createDiscordRestClient(opts, opts.cfg ?? cfg);
248
+ return {
249
+ token,
250
+ rest,
251
+ request: createDiscordRetryRunner({
252
+ retry: opts.retry,
253
+ configRetry: account.config.retry,
254
+ verbose: opts.verbose
255
+ })
256
+ };
257
+ }
258
+ function resolveDiscordRest(opts) {
259
+ return createDiscordRestClient(opts, opts.cfg).rest;
260
+ }
261
+ //#endregion
262
+ //#region extensions/discord/src/send.permissions.ts
263
+ const PERMISSION_ENTRIES = Object.entries(PermissionFlagsBits).filter(([, value]) => typeof value === "bigint");
264
+ const ALL_PERMISSIONS = PERMISSION_ENTRIES.reduce((acc, [, value]) => acc | value, 0n);
265
+ const ADMINISTRATOR_BIT = PermissionFlagsBits.Administrator;
266
+ function addPermissionBits(base, add) {
267
+ if (!add) return base;
268
+ return base | BigInt(add);
269
+ }
270
+ function removePermissionBits(base, deny) {
271
+ if (!deny) return base;
272
+ return base & ~BigInt(deny);
273
+ }
274
+ function bitfieldToPermissions(bitfield) {
275
+ return PERMISSION_ENTRIES.filter(([, value]) => (bitfield & value) === value).map(([name]) => name).toSorted();
276
+ }
277
+ function hasAdministrator(bitfield) {
278
+ return (bitfield & ADMINISTRATOR_BIT) === ADMINISTRATOR_BIT;
279
+ }
280
+ function hasPermissionBit(bitfield, permission) {
281
+ return (bitfield & permission) === permission;
282
+ }
283
+ function isThreadChannelType(channelType) {
284
+ return channelType === ChannelType$1.GuildNewsThread || channelType === ChannelType$1.GuildPublicThread || channelType === ChannelType$1.GuildPrivateThread;
285
+ }
286
+ async function fetchBotUserId(rest) {
287
+ const me = await rest.get(Routes.user("@me"));
288
+ if (!me?.id) throw new Error("Failed to resolve bot user id");
289
+ return me.id;
290
+ }
291
+ /**
292
+ * Fetch guild-level permissions for a user. This does not include channel-specific overwrites.
293
+ */
294
+ async function fetchMemberGuildPermissionsDiscord(guildId, userId, opts = {}) {
295
+ const rest = resolveDiscordRest(opts);
296
+ try {
297
+ const [guild, member] = await Promise.all([rest.get(Routes.guild(guildId)), rest.get(Routes.guildMember(guildId, userId))]);
298
+ const rolesById = new Map((guild.roles ?? []).map((role) => [role.id, role]));
299
+ const everyoneRole = rolesById.get(guildId);
300
+ let permissions = 0n;
301
+ if (everyoneRole?.permissions) permissions = addPermissionBits(permissions, everyoneRole.permissions);
302
+ for (const roleId of member.roles ?? []) {
303
+ const role = rolesById.get(roleId);
304
+ if (role?.permissions) permissions = addPermissionBits(permissions, role.permissions);
305
+ }
306
+ return permissions;
307
+ } catch {
308
+ return null;
309
+ }
310
+ }
311
+ /**
312
+ * Returns true when the user has ADMINISTRATOR or required permission bits
313
+ * matching the provided predicate.
314
+ */
315
+ async function hasGuildPermissionsDiscord(guildId, userId, requiredPermissions, check, opts = {}) {
316
+ const permissions = await fetchMemberGuildPermissionsDiscord(guildId, userId, opts);
317
+ if (permissions === null) return false;
318
+ if (hasAdministrator(permissions)) return true;
319
+ return check(permissions, requiredPermissions);
320
+ }
321
+ /**
322
+ * Returns true when the user has ADMINISTRATOR or any required permission bit.
323
+ */
324
+ async function hasAnyGuildPermissionDiscord(guildId, userId, requiredPermissions, opts = {}) {
325
+ return await hasGuildPermissionsDiscord(guildId, userId, requiredPermissions, (permissions, required) => required.some((permission) => hasPermissionBit(permissions, permission)), opts);
326
+ }
327
+ /**
328
+ * Returns true when the user has ADMINISTRATOR or all required permission bits.
329
+ */
330
+ async function hasAllGuildPermissionsDiscord(guildId, userId, requiredPermissions, opts = {}) {
331
+ return await hasGuildPermissionsDiscord(guildId, userId, requiredPermissions, (permissions, required) => required.every((permission) => hasPermissionBit(permissions, permission)), opts);
332
+ }
333
+ async function fetchChannelPermissionsDiscord(channelId, opts = {}) {
334
+ const rest = resolveDiscordRest(opts);
335
+ const channel = await rest.get(Routes.channel(channelId));
336
+ const channelType = "type" in channel ? channel.type : void 0;
337
+ const guildId = "guild_id" in channel ? channel.guild_id : void 0;
338
+ if (!guildId) return {
339
+ channelId,
340
+ permissions: [],
341
+ raw: "0",
342
+ isDm: true,
343
+ channelType
344
+ };
345
+ const botId = await fetchBotUserId(rest);
346
+ const [guild, member] = await Promise.all([rest.get(Routes.guild(guildId)), rest.get(Routes.guildMember(guildId, botId))]);
347
+ const rolesById = new Map((guild.roles ?? []).map((role) => [role.id, role]));
348
+ const everyoneRole = rolesById.get(guildId);
349
+ let base = 0n;
350
+ if (everyoneRole?.permissions) base = addPermissionBits(base, everyoneRole.permissions);
351
+ for (const roleId of member.roles ?? []) {
352
+ const role = rolesById.get(roleId);
353
+ if (role?.permissions) base = addPermissionBits(base, role.permissions);
354
+ }
355
+ if (hasAdministrator(base)) return {
356
+ channelId,
357
+ guildId,
358
+ permissions: bitfieldToPermissions(ALL_PERMISSIONS),
359
+ raw: ALL_PERMISSIONS.toString(),
360
+ isDm: false,
361
+ channelType
362
+ };
363
+ let permissions = base;
364
+ const overwrites = "permission_overwrites" in channel ? channel.permission_overwrites ?? [] : [];
365
+ for (const overwrite of overwrites) if (overwrite.id === guildId) {
366
+ permissions = removePermissionBits(permissions, overwrite.deny ?? "0");
367
+ permissions = addPermissionBits(permissions, overwrite.allow ?? "0");
368
+ }
369
+ for (const overwrite of overwrites) if (member.roles?.includes(overwrite.id)) {
370
+ permissions = removePermissionBits(permissions, overwrite.deny ?? "0");
371
+ permissions = addPermissionBits(permissions, overwrite.allow ?? "0");
372
+ }
373
+ for (const overwrite of overwrites) if (overwrite.id === botId) {
374
+ permissions = removePermissionBits(permissions, overwrite.deny ?? "0");
375
+ permissions = addPermissionBits(permissions, overwrite.allow ?? "0");
376
+ }
377
+ return {
378
+ channelId,
379
+ guildId,
380
+ permissions: bitfieldToPermissions(permissions),
381
+ raw: permissions.toString(),
382
+ isDm: false,
383
+ channelType
384
+ };
385
+ }
386
+ //#endregion
387
+ //#region extensions/discord/src/send.types.ts
388
+ var DiscordSendError = class extends Error {
389
+ constructor(message, opts) {
390
+ super(message);
391
+ this.name = "DiscordSendError";
392
+ if (opts) Object.assign(this, opts);
393
+ }
394
+ toString() {
395
+ return this.message;
396
+ }
397
+ };
398
+ const DISCORD_MAX_EMOJI_BYTES = 256 * 1024;
399
+ const DISCORD_MAX_STICKER_BYTES = 512 * 1024;
400
+ //#endregion
401
+ //#region extensions/discord/src/send.shared.ts
402
+ const DISCORD_TEXT_LIMIT = 2e3;
403
+ const DISCORD_MAX_STICKERS = 3;
404
+ const DISCORD_POLL_MAX_ANSWERS = 10;
405
+ const DISCORD_POLL_MAX_DURATION_HOURS = 768;
406
+ const DISCORD_MISSING_PERMISSIONS = 50013;
407
+ const DISCORD_CANNOT_DM = 50007;
408
+ function normalizeReactionEmoji(raw) {
409
+ const trimmed = raw.trim();
410
+ if (!trimmed) throw new Error("emoji required");
411
+ const customMatch = trimmed.match(/^<a?:([^:>]+):(\d+)>$/);
412
+ const identifier = customMatch ? `${customMatch[1]}:${customMatch[2]}` : trimmed.replace(/[\uFE0E\uFE0F]/g, "");
413
+ return encodeURIComponent(identifier);
414
+ }
415
+ /**
416
+ * Parse and resolve Discord recipient, including username lookup.
417
+ * This enables sending DMs by username (e.g., "john.doe") by querying
418
+ * the Discord directory to resolve usernames to user IDs.
419
+ *
420
+ * @param raw - The recipient string (username, ID, or known format)
421
+ * @param accountId - Discord account ID to use for directory lookup
422
+ * @returns Parsed DiscordRecipient with resolved user ID if applicable
423
+ */
424
+ async function parseAndResolveRecipient(raw, accountId, cfg) {
425
+ const resolvedCfg = cfg ?? loadConfig();
426
+ const accountInfo = resolveDiscordAccount({
427
+ cfg: resolvedCfg,
428
+ accountId
429
+ });
430
+ const trimmed = raw.trim();
431
+ const parseOptions = { ambiguousMessage: `Ambiguous Discord recipient "${trimmed}". Use "user:${trimmed}" for DMs or "channel:${trimmed}" for channel messages.` };
432
+ const resolved = await resolveDiscordTarget(raw, {
433
+ cfg: resolvedCfg,
434
+ accountId: accountInfo.accountId
435
+ }, parseOptions);
436
+ if (resolved) return {
437
+ kind: resolved.kind,
438
+ id: resolved.id
439
+ };
440
+ const parsed = parseDiscordTarget(raw, parseOptions);
441
+ if (!parsed) throw new Error("Recipient is required for Discord sends");
442
+ return {
443
+ kind: parsed.kind,
444
+ id: parsed.id
445
+ };
446
+ }
447
+ function normalizeStickerIds(raw) {
448
+ const ids = raw.map((entry) => entry.trim()).filter(Boolean);
449
+ if (ids.length === 0) throw new Error("At least one sticker id is required");
450
+ if (ids.length > DISCORD_MAX_STICKERS) throw new Error("Discord supports up to 3 stickers per message");
451
+ return ids;
452
+ }
453
+ function normalizeEmojiName(raw, label) {
454
+ const name = raw.trim();
455
+ if (!name) throw new Error(`${label} is required`);
456
+ return name;
457
+ }
458
+ function normalizeDiscordPollInput(input) {
459
+ const poll = normalizePollInput(input, { maxOptions: DISCORD_POLL_MAX_ANSWERS });
460
+ const duration = normalizePollDurationHours(poll.durationHours, {
461
+ defaultHours: 24,
462
+ maxHours: DISCORD_POLL_MAX_DURATION_HOURS
463
+ });
464
+ return {
465
+ question: { text: poll.question },
466
+ answers: poll.options.map((answer) => ({ poll_media: { text: answer } })),
467
+ duration,
468
+ allow_multiselect: poll.maxSelections > 1,
469
+ layout_type: PollLayoutType.Default
470
+ };
471
+ }
472
+ function getDiscordErrorCode(err) {
473
+ if (!err || typeof err !== "object") return;
474
+ const candidate = "code" in err && err.code !== void 0 ? err.code : "rawError" in err && err.rawError && typeof err.rawError === "object" ? err.rawError.code : void 0;
475
+ if (typeof candidate === "number") return candidate;
476
+ if (typeof candidate === "string" && /^\d+$/.test(candidate)) return Number(candidate);
477
+ }
478
+ async function buildDiscordSendError(err, ctx) {
479
+ if (err instanceof DiscordSendError) return err;
480
+ const code = getDiscordErrorCode(err);
481
+ if (code === DISCORD_CANNOT_DM) return new DiscordSendError("discord dm failed: user blocks dms or privacy settings disallow it", { kind: "dm-blocked" });
482
+ if (code !== DISCORD_MISSING_PERMISSIONS) return err;
483
+ let missing = [];
484
+ try {
485
+ const permissions = await fetchChannelPermissionsDiscord(ctx.channelId, {
486
+ rest: ctx.rest,
487
+ token: ctx.token
488
+ });
489
+ const current = new Set(permissions.permissions);
490
+ const required = ["ViewChannel", "SendMessages"];
491
+ if (isThreadChannelType(permissions.channelType)) required.push("SendMessagesInThreads");
492
+ if (ctx.hasMedia) required.push("AttachFiles");
493
+ missing = required.filter((permission) => !current.has(permission));
494
+ } catch {}
495
+ return new DiscordSendError(`${missing.length ? `missing permissions in channel ${ctx.channelId}: ${missing.join(", ")}` : `missing permissions in channel ${ctx.channelId}`}. bot might be muted or blocked by role/channel overrides`, {
496
+ kind: "missing-permissions",
497
+ channelId: ctx.channelId,
498
+ missingPermissions: missing
499
+ });
500
+ }
501
+ async function resolveChannelId(rest, recipient, request) {
502
+ if (recipient.kind === "channel") return { channelId: recipient.id };
503
+ const dmChannel = await request(() => rest.post(Routes.userChannels(), { body: { recipient_id: recipient.id } }), "dm-channel");
504
+ if (!dmChannel?.id) throw new Error("Failed to create Discord DM channel");
505
+ return {
506
+ channelId: dmChannel.id,
507
+ dm: true
508
+ };
509
+ }
510
+ async function resolveDiscordChannelType(rest, channelId) {
511
+ try {
512
+ return (await rest.get(Routes.channel(channelId)))?.type;
513
+ } catch {
514
+ return;
515
+ }
516
+ }
517
+ const SUPPRESS_NOTIFICATIONS_FLAG$1 = 4096;
518
+ function buildDiscordTextChunks(text, opts = {}) {
519
+ if (!text) return [];
520
+ return resolveTextChunksWithFallback(text, chunkDiscordTextWithMode(text, {
521
+ maxChars: opts.maxChars ?? DISCORD_TEXT_LIMIT,
522
+ maxLines: opts.maxLinesPerMessage,
523
+ chunkMode: opts.chunkMode
524
+ }));
525
+ }
526
+ function hasV2Components(components) {
527
+ return Boolean(components?.some((component) => "isV2" in component && component.isV2));
528
+ }
529
+ function resolveDiscordSendComponents(params) {
530
+ if (!params.components || !params.isFirst) return;
531
+ return typeof params.components === "function" ? params.components(params.text) : params.components;
532
+ }
533
+ function normalizeDiscordEmbeds(embeds) {
534
+ if (!embeds?.length) return;
535
+ return embeds.map((embed) => embed instanceof Embed ? embed : new Embed(embed));
536
+ }
537
+ function resolveDiscordSendEmbeds(params) {
538
+ if (!params.embeds || !params.isFirst) return;
539
+ return normalizeDiscordEmbeds(params.embeds);
540
+ }
541
+ function buildDiscordMessagePayload(params) {
542
+ const payload = {};
543
+ const hasV2 = hasV2Components(params.components);
544
+ const trimmed = params.text.trim();
545
+ if (!hasV2 && trimmed) payload.content = params.text;
546
+ if (params.components?.length) payload.components = params.components;
547
+ if (!hasV2 && params.embeds?.length) payload.embeds = params.embeds;
548
+ if (params.flags !== void 0) payload.flags = params.flags;
549
+ if (params.files?.length) payload.files = params.files;
550
+ return payload;
551
+ }
552
+ function stripUndefinedFields(value) {
553
+ return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== void 0));
554
+ }
555
+ function toDiscordFileBlob(data) {
556
+ if (data instanceof Blob) return data;
557
+ const arrayBuffer = new ArrayBuffer(data.byteLength);
558
+ new Uint8Array(arrayBuffer).set(data);
559
+ return new Blob([arrayBuffer]);
560
+ }
561
+ async function sendDiscordText(rest, channelId, text, replyTo, request, maxLinesPerMessage, components, embeds, chunkMode, silent) {
562
+ if (!text.trim()) throw new Error("Message must be non-empty for Discord sends");
563
+ const messageReference = replyTo ? {
564
+ message_id: replyTo,
565
+ fail_if_not_exists: false
566
+ } : void 0;
567
+ const flags = silent ? SUPPRESS_NOTIFICATIONS_FLAG$1 : void 0;
568
+ const chunks = buildDiscordTextChunks(text, {
569
+ maxLinesPerMessage,
570
+ chunkMode
571
+ });
572
+ const sendChunk = async (chunk, isFirst) => {
573
+ const body = stripUndefinedFields({
574
+ ...serializePayload(buildDiscordMessagePayload({
575
+ text: chunk,
576
+ components: resolveDiscordSendComponents({
577
+ components,
578
+ text: chunk,
579
+ isFirst
580
+ }),
581
+ embeds: resolveDiscordSendEmbeds({
582
+ embeds,
583
+ isFirst
584
+ }),
585
+ flags
586
+ })),
587
+ ...messageReference ? { message_reference: messageReference } : {}
588
+ });
589
+ return await request(() => rest.post(Routes.channelMessages(channelId), { body }), "text");
590
+ };
591
+ if (chunks.length === 1) return await sendChunk(chunks[0], true);
592
+ let last = null;
593
+ for (const [index, chunk] of chunks.entries()) last = await sendChunk(chunk, index === 0);
594
+ if (!last) throw new Error("Discord send failed (empty chunk result)");
595
+ return last;
596
+ }
597
+ async function sendDiscordMedia(rest, channelId, text, mediaUrl, filename, mediaLocalRoots, mediaReadFile, maxBytes, replyTo, request, maxLinesPerMessage, components, embeds, chunkMode, silent) {
598
+ const media = await loadWebMedia(mediaUrl, buildOutboundMediaLoadOptions({
599
+ maxBytes,
600
+ mediaLocalRoots,
601
+ mediaReadFile
602
+ }));
603
+ const resolvedFileName = filename?.trim() || media.fileName || (media.contentType ? `upload${extensionForMime(media.contentType) ?? ""}` : "") || "upload";
604
+ const chunks = text ? buildDiscordTextChunks(text, {
605
+ maxLinesPerMessage,
606
+ chunkMode
607
+ }) : [];
608
+ const caption = chunks[0] ?? "";
609
+ const messageReference = replyTo ? {
610
+ message_id: replyTo,
611
+ fail_if_not_exists: false
612
+ } : void 0;
613
+ const flags = silent ? SUPPRESS_NOTIFICATIONS_FLAG$1 : void 0;
614
+ const fileData = toDiscordFileBlob(media.buffer);
615
+ const payload = buildDiscordMessagePayload({
616
+ text: caption,
617
+ components: resolveDiscordSendComponents({
618
+ components,
619
+ text: caption,
620
+ isFirst: true
621
+ }),
622
+ embeds: resolveDiscordSendEmbeds({
623
+ embeds,
624
+ isFirst: true
625
+ }),
626
+ flags,
627
+ files: [{
628
+ data: fileData,
629
+ name: resolvedFileName
630
+ }]
631
+ });
632
+ const res = await request(() => rest.post(Routes.channelMessages(channelId), { body: stripUndefinedFields({
633
+ ...serializePayload(payload),
634
+ ...messageReference ? { message_reference: messageReference } : {}
635
+ }) }), "media");
636
+ for (const chunk of chunks.slice(1)) {
637
+ if (!chunk.trim()) continue;
638
+ await sendDiscordText(rest, channelId, chunk, replyTo, request, maxLinesPerMessage, void 0, void 0, chunkMode, silent);
639
+ }
640
+ return res;
641
+ }
642
+ function buildReactionIdentifier(emoji) {
643
+ if (emoji.id && emoji.name) return `${emoji.name}:${emoji.id}`;
644
+ return emoji.name ?? "";
645
+ }
646
+ function formatReactionEmoji(emoji) {
647
+ return buildReactionIdentifier(emoji);
648
+ }
649
+ //#endregion
650
+ //#region extensions/discord/src/send.channels.ts
651
+ async function createChannelDiscord(payload, opts = {}) {
652
+ const rest = resolveDiscordRest(opts);
653
+ const body = { name: payload.name };
654
+ if (payload.type !== void 0) body.type = payload.type;
655
+ if (payload.parentId) body.parent_id = payload.parentId;
656
+ if (payload.topic) body.topic = payload.topic;
657
+ if (payload.position !== void 0) body.position = payload.position;
658
+ if (payload.nsfw !== void 0) body.nsfw = payload.nsfw;
659
+ return await rest.post(Routes.guildChannels(payload.guildId), { body });
660
+ }
661
+ async function editChannelDiscord(payload, opts = {}) {
662
+ const rest = resolveDiscordRest(opts);
663
+ const body = {};
664
+ if (payload.name !== void 0) body.name = payload.name;
665
+ if (payload.topic !== void 0) body.topic = payload.topic;
666
+ if (payload.position !== void 0) body.position = payload.position;
667
+ if (payload.parentId !== void 0) body.parent_id = payload.parentId;
668
+ if (payload.nsfw !== void 0) body.nsfw = payload.nsfw;
669
+ if (payload.rateLimitPerUser !== void 0) body.rate_limit_per_user = payload.rateLimitPerUser;
670
+ if (payload.archived !== void 0) body.archived = payload.archived;
671
+ if (payload.locked !== void 0) body.locked = payload.locked;
672
+ if (payload.autoArchiveDuration !== void 0) body.auto_archive_duration = payload.autoArchiveDuration;
673
+ if (payload.availableTags !== void 0) body.available_tags = payload.availableTags.map((t) => ({
674
+ ...t.id !== void 0 && { id: t.id },
675
+ name: t.name,
676
+ ...t.moderated !== void 0 && { moderated: t.moderated },
677
+ ...t.emoji_id !== void 0 && { emoji_id: t.emoji_id },
678
+ ...t.emoji_name !== void 0 && { emoji_name: t.emoji_name }
679
+ }));
680
+ return await rest.patch(Routes.channel(payload.channelId), { body });
681
+ }
682
+ async function deleteChannelDiscord(channelId, opts = {}) {
683
+ await resolveDiscordRest(opts).delete(Routes.channel(channelId));
684
+ return {
685
+ ok: true,
686
+ channelId
687
+ };
688
+ }
689
+ async function moveChannelDiscord(payload, opts = {}) {
690
+ const rest = resolveDiscordRest(opts);
691
+ const body = [{
692
+ id: payload.channelId,
693
+ ...payload.parentId !== void 0 && { parent_id: payload.parentId },
694
+ ...payload.position !== void 0 && { position: payload.position }
695
+ }];
696
+ await rest.patch(Routes.guildChannels(payload.guildId), { body });
697
+ return { ok: true };
698
+ }
699
+ async function setChannelPermissionDiscord(payload, opts = {}) {
700
+ const rest = resolveDiscordRest(opts);
701
+ const body = { type: payload.targetType };
702
+ if (payload.allow !== void 0) body.allow = payload.allow;
703
+ if (payload.deny !== void 0) body.deny = payload.deny;
704
+ await rest.put(`/channels/${payload.channelId}/permissions/${payload.targetId}`, { body });
705
+ return { ok: true };
706
+ }
707
+ async function removeChannelPermissionDiscord(channelId, targetId, opts = {}) {
708
+ await resolveDiscordRest(opts).delete(`/channels/${channelId}/permissions/${targetId}`);
709
+ return { ok: true };
710
+ }
711
+ //#endregion
712
+ //#region extensions/discord/src/send.emojis-stickers.ts
713
+ async function listGuildEmojisDiscord(guildId, opts = {}) {
714
+ return await resolveDiscordRest(opts).get(Routes.guildEmojis(guildId));
715
+ }
716
+ async function uploadEmojiDiscord(payload, opts = {}) {
717
+ const rest = resolveDiscordRest(opts);
718
+ const media = await loadWebMediaRaw(payload.mediaUrl, DISCORD_MAX_EMOJI_BYTES);
719
+ const contentType = media.contentType?.toLowerCase();
720
+ if (!contentType || ![
721
+ "image/png",
722
+ "image/jpeg",
723
+ "image/jpg",
724
+ "image/gif"
725
+ ].includes(contentType)) throw new Error("Discord emoji uploads require a PNG, JPG, or GIF image");
726
+ const image = `data:${contentType};base64,${media.buffer.toString("base64")}`;
727
+ const roleIds = (payload.roleIds ?? []).map((id) => id.trim()).filter(Boolean);
728
+ return await rest.post(Routes.guildEmojis(payload.guildId), { body: {
729
+ name: normalizeEmojiName(payload.name, "Emoji name"),
730
+ image,
731
+ roles: roleIds.length ? roleIds : void 0
732
+ } });
733
+ }
734
+ async function uploadStickerDiscord(payload, opts = {}) {
735
+ const rest = resolveDiscordRest(opts);
736
+ const media = await loadWebMediaRaw(payload.mediaUrl, DISCORD_MAX_STICKER_BYTES);
737
+ const contentType = media.contentType?.toLowerCase();
738
+ if (!contentType || ![
739
+ "image/png",
740
+ "image/apng",
741
+ "application/json"
742
+ ].includes(contentType)) throw new Error("Discord sticker uploads require a PNG, APNG, or Lottie JSON file");
743
+ return await rest.post(Routes.guildStickers(payload.guildId), { body: {
744
+ name: normalizeEmojiName(payload.name, "Sticker name"),
745
+ description: normalizeEmojiName(payload.description, "Sticker description"),
746
+ tags: normalizeEmojiName(payload.tags, "Sticker tags"),
747
+ files: [{
748
+ data: media.buffer,
749
+ name: media.fileName ?? "sticker",
750
+ contentType
751
+ }]
752
+ } });
753
+ }
754
+ //#endregion
755
+ //#region extensions/discord/src/send.guild.ts
756
+ async function fetchMemberInfoDiscord(guildId, userId, opts = {}) {
757
+ return await resolveDiscordRest(opts).get(Routes.guildMember(guildId, userId));
758
+ }
759
+ async function fetchRoleInfoDiscord(guildId, opts = {}) {
760
+ return await resolveDiscordRest(opts).get(Routes.guildRoles(guildId));
761
+ }
762
+ async function addRoleDiscord(payload, opts = {}) {
763
+ await resolveDiscordRest(opts).put(Routes.guildMemberRole(payload.guildId, payload.userId, payload.roleId));
764
+ return { ok: true };
765
+ }
766
+ async function removeRoleDiscord(payload, opts = {}) {
767
+ await resolveDiscordRest(opts).delete(Routes.guildMemberRole(payload.guildId, payload.userId, payload.roleId));
768
+ return { ok: true };
769
+ }
770
+ async function fetchChannelInfoDiscord(channelId, opts = {}) {
771
+ return await resolveDiscordRest(opts).get(Routes.channel(channelId));
772
+ }
773
+ async function listGuildChannelsDiscord(guildId, opts = {}) {
774
+ return await resolveDiscordRest(opts).get(Routes.guildChannels(guildId));
775
+ }
776
+ async function fetchVoiceStatusDiscord(guildId, userId, opts = {}) {
777
+ return await resolveDiscordRest(opts).get(Routes.guildVoiceState(guildId, userId));
778
+ }
779
+ async function listScheduledEventsDiscord(guildId, opts = {}) {
780
+ return await resolveDiscordRest(opts).get(Routes.guildScheduledEvents(guildId));
781
+ }
782
+ async function createScheduledEventDiscord(guildId, payload, opts = {}) {
783
+ return await resolveDiscordRest(opts).post(Routes.guildScheduledEvents(guildId), { body: payload });
784
+ }
785
+ async function timeoutMemberDiscord(payload, opts = {}) {
786
+ const rest = resolveDiscordRest(opts);
787
+ let until = payload.until;
788
+ if (!until && payload.durationMinutes) {
789
+ const ms = payload.durationMinutes * 60 * 1e3;
790
+ until = new Date(Date.now() + ms).toISOString();
791
+ }
792
+ return await rest.patch(Routes.guildMember(payload.guildId, payload.userId), {
793
+ body: { communication_disabled_until: until ?? null },
794
+ headers: payload.reason ? { "X-Audit-Log-Reason": encodeURIComponent(payload.reason) } : void 0
795
+ });
796
+ }
797
+ async function kickMemberDiscord(payload, opts = {}) {
798
+ await resolveDiscordRest(opts).delete(Routes.guildMember(payload.guildId, payload.userId), { headers: payload.reason ? { "X-Audit-Log-Reason": encodeURIComponent(payload.reason) } : void 0 });
799
+ return { ok: true };
800
+ }
801
+ async function banMemberDiscord(payload, opts = {}) {
802
+ const rest = resolveDiscordRest(opts);
803
+ const deleteMessageDays = typeof payload.deleteMessageDays === "number" && Number.isFinite(payload.deleteMessageDays) ? Math.min(Math.max(Math.floor(payload.deleteMessageDays), 0), 7) : void 0;
804
+ await rest.put(Routes.guildBan(payload.guildId, payload.userId), {
805
+ body: deleteMessageDays !== void 0 ? { delete_message_days: deleteMessageDays } : void 0,
806
+ headers: payload.reason ? { "X-Audit-Log-Reason": encodeURIComponent(payload.reason) } : void 0
807
+ });
808
+ return { ok: true };
809
+ }
810
+ //#endregion
811
+ //#region extensions/discord/src/send.messages.ts
812
+ async function readMessagesDiscord(channelId, query = {}, opts = {}) {
813
+ const rest = resolveDiscordRest(opts);
814
+ const limit = typeof query.limit === "number" && Number.isFinite(query.limit) ? Math.min(Math.max(Math.floor(query.limit), 1), 100) : void 0;
815
+ const params = {};
816
+ if (limit) params.limit = limit;
817
+ if (query.before) params.before = query.before;
818
+ if (query.after) params.after = query.after;
819
+ if (query.around) params.around = query.around;
820
+ return await rest.get(Routes.channelMessages(channelId), params);
821
+ }
822
+ async function fetchMessageDiscord(channelId, messageId, opts = {}) {
823
+ return await resolveDiscordRest(opts).get(Routes.channelMessage(channelId, messageId));
824
+ }
825
+ async function editMessageDiscord(channelId, messageId, payload, opts = {}) {
826
+ return await resolveDiscordRest(opts).patch(Routes.channelMessage(channelId, messageId), { body: { content: payload.content } });
827
+ }
828
+ async function deleteMessageDiscord(channelId, messageId, opts = {}) {
829
+ await resolveDiscordRest(opts).delete(Routes.channelMessage(channelId, messageId));
830
+ return { ok: true };
831
+ }
832
+ async function pinMessageDiscord(channelId, messageId, opts = {}) {
833
+ await resolveDiscordRest(opts).put(Routes.channelPin(channelId, messageId));
834
+ return { ok: true };
835
+ }
836
+ async function unpinMessageDiscord(channelId, messageId, opts = {}) {
837
+ await resolveDiscordRest(opts).delete(Routes.channelPin(channelId, messageId));
838
+ return { ok: true };
839
+ }
840
+ async function listPinsDiscord(channelId, opts = {}) {
841
+ return await resolveDiscordRest(opts).get(Routes.channelPins(channelId));
842
+ }
843
+ async function createThreadDiscord(channelId, payload, opts = {}) {
844
+ const rest = resolveDiscordRest(opts);
845
+ const body = { name: payload.name };
846
+ if (payload.autoArchiveMinutes) body.auto_archive_duration = payload.autoArchiveMinutes;
847
+ if (!payload.messageId && payload.type !== void 0) body.type = payload.type;
848
+ let channelType;
849
+ if (!payload.messageId) try {
850
+ channelType = (await rest.get(Routes.channel(channelId)))?.type;
851
+ } catch {
852
+ channelType = void 0;
853
+ }
854
+ const isForumLike = channelType === ChannelType$1.GuildForum || channelType === ChannelType$1.GuildMedia;
855
+ if (isForumLike) {
856
+ body.message = { content: payload.content?.trim() ? payload.content : payload.name };
857
+ if (payload.appliedTags?.length) body.applied_tags = payload.appliedTags;
858
+ }
859
+ if (!payload.messageId && !isForumLike && body.type === void 0) body.type = ChannelType$1.PublicThread;
860
+ const route = payload.messageId ? Routes.threads(channelId, payload.messageId) : Routes.threads(channelId);
861
+ const thread = await rest.post(route, { body });
862
+ if (!isForumLike && payload.content?.trim()) await rest.post(Routes.channelMessages(thread.id), { body: { content: payload.content } });
863
+ return thread;
864
+ }
865
+ async function listThreadsDiscord(payload, opts = {}) {
866
+ const rest = resolveDiscordRest(opts);
867
+ if (payload.includeArchived) {
868
+ if (!payload.channelId) throw new Error("channelId required to list archived threads");
869
+ const params = {};
870
+ if (payload.before) params.before = payload.before;
871
+ if (payload.limit) params.limit = payload.limit;
872
+ return await rest.get(Routes.channelThreads(payload.channelId, "public"), params);
873
+ }
874
+ return await rest.get(Routes.guildActiveThreads(payload.guildId));
875
+ }
876
+ async function searchMessagesDiscord(query, opts = {}) {
877
+ const rest = resolveDiscordRest(opts);
878
+ const params = new URLSearchParams();
879
+ params.set("content", query.content);
880
+ if (query.channelIds?.length) for (const channelId of query.channelIds) params.append("channel_id", channelId);
881
+ if (query.authorIds?.length) for (const authorId of query.authorIds) params.append("author_id", authorId);
882
+ if (query.limit) {
883
+ const limit = Math.min(Math.max(Math.floor(query.limit), 1), 25);
884
+ params.set("limit", String(limit));
885
+ }
886
+ return await rest.get(`/guilds/${query.guildId}/messages/search?${params.toString()}`);
887
+ }
888
+ //#endregion
889
+ //#region extensions/discord/src/voice-message.ts
890
+ /**
891
+ * Discord Voice Message Support
892
+ *
893
+ * Implements sending voice messages via Discord's API.
894
+ * Voice messages require:
895
+ * - OGG/Opus format audio
896
+ * - Waveform data (base64 encoded, up to 256 samples, 0-255 values)
897
+ * - Duration in seconds
898
+ * - Message flag 8192 (IS_VOICE_MESSAGE)
899
+ * - No other content (text, embeds, etc.)
900
+ */
901
+ const DISCORD_VOICE_MESSAGE_FLAG = 8192;
902
+ const SUPPRESS_NOTIFICATIONS_FLAG = 4096;
903
+ const WAVEFORM_SAMPLES = 256;
904
+ const DISCORD_OPUS_SAMPLE_RATE_HZ = 48e3;
905
+ function createRateLimitError(response, body, request) {
906
+ return new RateLimitError(response, body, request ?? new Request("https://discord.com/api/v10/channels/voice/messages", { method: "POST" }));
907
+ }
908
+ /**
909
+ * Get audio duration using ffprobe
910
+ */
911
+ async function getAudioDuration(filePath) {
912
+ try {
913
+ const stdout = await runFfprobe([
914
+ "-v",
915
+ "error",
916
+ "-show_entries",
917
+ "format=duration",
918
+ "-of",
919
+ "csv=p=0",
920
+ filePath
921
+ ]);
922
+ const duration = parseFloat(stdout.trim());
923
+ if (isNaN(duration)) throw new Error("Could not parse duration");
924
+ return Math.round(duration * 100) / 100;
925
+ } catch (err) {
926
+ const errMessage = err instanceof Error ? err.message : String(err);
927
+ throw new Error(`Failed to get audio duration: ${errMessage}`, { cause: err });
928
+ }
929
+ }
930
+ /**
931
+ * Generate waveform data from audio file using ffmpeg
932
+ * Returns base64 encoded byte array of amplitude samples (0-255)
933
+ */
934
+ async function generateWaveform(filePath) {
935
+ try {
936
+ return await generateWaveformFromPcm(filePath);
937
+ } catch {
938
+ return generatePlaceholderWaveform();
939
+ }
940
+ }
941
+ /**
942
+ * Generate waveform by extracting raw PCM data and sampling amplitudes
943
+ */
944
+ async function generateWaveformFromPcm(filePath) {
945
+ const tempDir = resolvePreferredVoraTmpDir();
946
+ const tempPcm = path.join(tempDir, `waveform-${crypto.randomUUID()}.raw`);
947
+ try {
948
+ await runFfmpeg([
949
+ "-y",
950
+ "-i",
951
+ filePath,
952
+ "-vn",
953
+ "-sn",
954
+ "-dn",
955
+ "-t",
956
+ String(MEDIA_FFMPEG_MAX_AUDIO_DURATION_SECS),
957
+ "-f",
958
+ "s16le",
959
+ "-acodec",
960
+ "pcm_s16le",
961
+ "-ac",
962
+ "1",
963
+ "-ar",
964
+ "8000",
965
+ tempPcm
966
+ ]);
967
+ const pcmData = await fs.readFile(tempPcm);
968
+ const samples = new Int16Array(pcmData.buffer, pcmData.byteOffset, pcmData.byteLength / 2);
969
+ const step = Math.max(1, Math.floor(samples.length / WAVEFORM_SAMPLES));
970
+ const waveform = [];
971
+ for (let i = 0; i < WAVEFORM_SAMPLES && i * step < samples.length; i++) {
972
+ let sum = 0;
973
+ let count = 0;
974
+ for (let j = 0; j < step && i * step + j < samples.length; j++) {
975
+ sum += Math.abs(samples[i * step + j]);
976
+ count++;
977
+ }
978
+ const avg = count > 0 ? sum / count : 0;
979
+ const normalized = Math.min(255, Math.round(avg / 32767 * 255));
980
+ waveform.push(normalized);
981
+ }
982
+ while (waveform.length < WAVEFORM_SAMPLES) waveform.push(0);
983
+ return Buffer.from(waveform).toString("base64");
984
+ } finally {
985
+ await unlinkIfExists(tempPcm);
986
+ }
987
+ }
988
+ /**
989
+ * Generate a placeholder waveform (for when audio processing fails)
990
+ */
991
+ function generatePlaceholderWaveform() {
992
+ const waveform = [];
993
+ for (let i = 0; i < WAVEFORM_SAMPLES; i++) {
994
+ const value = Math.round(128 + 64 * Math.sin(i / WAVEFORM_SAMPLES * Math.PI * 8));
995
+ waveform.push(Math.min(255, Math.max(0, value)));
996
+ }
997
+ return Buffer.from(waveform).toString("base64");
998
+ }
999
+ /**
1000
+ * Convert audio file to OGG/Opus format if needed
1001
+ * Returns path to the OGG file (may be same as input if already OGG/Opus)
1002
+ */
1003
+ async function ensureOggOpus(filePath) {
1004
+ const trimmed = filePath.trim();
1005
+ if (/^[a-z][a-z0-9+.-]*:\/\//i.test(trimmed)) throw new Error(`Voice message conversion requires a local file path; received a URL/protocol source: ${trimmed}`);
1006
+ if (path.extname(filePath).toLowerCase() === ".ogg") try {
1007
+ const { codec, sampleRateHz } = parseFfprobeCodecAndSampleRate(await runFfprobe([
1008
+ "-v",
1009
+ "error",
1010
+ "-select_streams",
1011
+ "a:0",
1012
+ "-show_entries",
1013
+ "stream=codec_name,sample_rate",
1014
+ "-of",
1015
+ "csv=p=0",
1016
+ filePath
1017
+ ]));
1018
+ if (codec === "opus" && sampleRateHz === DISCORD_OPUS_SAMPLE_RATE_HZ) return {
1019
+ path: filePath,
1020
+ cleanup: false
1021
+ };
1022
+ } catch {}
1023
+ const tempDir = resolvePreferredVoraTmpDir();
1024
+ const outputPath = path.join(tempDir, `voice-${crypto.randomUUID()}.ogg`);
1025
+ await runFfmpeg([
1026
+ "-y",
1027
+ "-i",
1028
+ filePath,
1029
+ "-vn",
1030
+ "-sn",
1031
+ "-dn",
1032
+ "-t",
1033
+ String(MEDIA_FFMPEG_MAX_AUDIO_DURATION_SECS),
1034
+ "-ar",
1035
+ String(DISCORD_OPUS_SAMPLE_RATE_HZ),
1036
+ "-c:a",
1037
+ "libopus",
1038
+ "-b:a",
1039
+ "64k",
1040
+ outputPath
1041
+ ]);
1042
+ return {
1043
+ path: outputPath,
1044
+ cleanup: true
1045
+ };
1046
+ }
1047
+ /**
1048
+ * Get voice message metadata (duration and waveform)
1049
+ */
1050
+ async function getVoiceMessageMetadata(filePath) {
1051
+ const [durationSecs, waveform] = await Promise.all([getAudioDuration(filePath), generateWaveform(filePath)]);
1052
+ return {
1053
+ durationSecs,
1054
+ waveform
1055
+ };
1056
+ }
1057
+ /**
1058
+ * Send a voice message to Discord
1059
+ *
1060
+ * This follows Discord's voice message protocol:
1061
+ * 1. Request upload URL from Discord
1062
+ * 2. Upload the OGG file to the provided URL
1063
+ * 3. Send the message with flag 8192 and attachment metadata
1064
+ */
1065
+ async function sendDiscordVoiceMessage(rest, channelId, audioBuffer, metadata, replyTo, request, silent, token) {
1066
+ const filename = "voice-message.ogg";
1067
+ const fileSize = audioBuffer.byteLength;
1068
+ const botToken = token;
1069
+ if (!botToken) throw new Error("Discord bot token is required for voice message upload");
1070
+ const uploadUrlResponse = await request(async () => {
1071
+ const url = `${rest.options?.baseUrl ?? "https://discord.com/api"}/channels/${channelId}/attachments`;
1072
+ const uploadUrlRequest = new Request(url, {
1073
+ method: "POST",
1074
+ headers: {
1075
+ Authorization: `Bot ${botToken}`,
1076
+ "Content-Type": "application/json"
1077
+ },
1078
+ body: JSON.stringify({ files: [{
1079
+ filename,
1080
+ file_size: fileSize,
1081
+ id: "0"
1082
+ }] })
1083
+ });
1084
+ const res = await fetch(uploadUrlRequest);
1085
+ if (!res.ok) {
1086
+ if (res.status === 429) {
1087
+ const retryData = await res.json().catch(() => ({}));
1088
+ throw createRateLimitError(res, {
1089
+ message: retryData.message ?? "You are being rate limited.",
1090
+ retry_after: retryData.retry_after ?? 1,
1091
+ global: retryData.global ?? false
1092
+ });
1093
+ }
1094
+ const errorBody = await res.json().catch(() => null);
1095
+ const err = /* @__PURE__ */ new Error(`Upload URL request failed: ${res.status} ${errorBody?.message ?? ""}`);
1096
+ if (errorBody?.code !== void 0) err.code = errorBody.code;
1097
+ throw err;
1098
+ }
1099
+ return await res.json();
1100
+ }, "voice-upload-url");
1101
+ if (!uploadUrlResponse.attachments?.[0]) throw new Error("Failed to get upload URL for voice message");
1102
+ const { upload_url, upload_filename } = uploadUrlResponse.attachments[0];
1103
+ const uploadResponse = await fetch(upload_url, {
1104
+ method: "PUT",
1105
+ headers: { "Content-Type": "audio/ogg" },
1106
+ body: new Uint8Array(audioBuffer)
1107
+ });
1108
+ if (!uploadResponse.ok) throw new Error(`Failed to upload voice message: ${uploadResponse.status}`);
1109
+ const messagePayload = {
1110
+ flags: silent ? DISCORD_VOICE_MESSAGE_FLAG | SUPPRESS_NOTIFICATIONS_FLAG : DISCORD_VOICE_MESSAGE_FLAG,
1111
+ attachments: [{
1112
+ id: "0",
1113
+ filename,
1114
+ uploaded_filename: upload_filename,
1115
+ duration_secs: metadata.durationSecs,
1116
+ waveform: metadata.waveform
1117
+ }]
1118
+ };
1119
+ if (replyTo) messagePayload.message_reference = {
1120
+ message_id: replyTo,
1121
+ fail_if_not_exists: false
1122
+ };
1123
+ return await request(() => rest.post(`/channels/${channelId}/messages`, { body: messagePayload }), "voice-message");
1124
+ }
1125
+ //#endregion
1126
+ //#region extensions/discord/src/send.outbound.ts
1127
+ async function sendDiscordThreadTextChunks(params) {
1128
+ for (const chunk of params.chunks) await sendDiscordText(params.rest, params.threadId, chunk, void 0, params.request, params.maxLinesPerMessage, void 0, void 0, params.chunkMode, params.silent);
1129
+ }
1130
+ /** Discord thread names are capped at 100 characters. */
1131
+ const DISCORD_THREAD_NAME_LIMIT = 100;
1132
+ /** Derive a thread title from the first non-empty line of the message text. */
1133
+ function deriveForumThreadName(text) {
1134
+ return (text.split("\n").find((l) => l.trim())?.trim() ?? "").slice(0, DISCORD_THREAD_NAME_LIMIT) || (/* @__PURE__ */ new Date()).toISOString().slice(0, 16);
1135
+ }
1136
+ /** Forum/Media channels cannot receive regular messages; detect them here. */
1137
+ function isForumLikeType(channelType) {
1138
+ return channelType === ChannelType$1.GuildForum || channelType === ChannelType$1.GuildMedia;
1139
+ }
1140
+ function toDiscordSendResult(result, fallbackChannelId) {
1141
+ return {
1142
+ messageId: result.id ? String(result.id) : "unknown",
1143
+ channelId: String(result.channel_id ?? fallbackChannelId)
1144
+ };
1145
+ }
1146
+ async function resolveDiscordSendTarget(to, opts) {
1147
+ const cfg = opts.cfg ?? loadConfig();
1148
+ const { rest, request } = createDiscordClient(opts, cfg);
1149
+ const { channelId } = await resolveChannelId(rest, await parseAndResolveRecipient(to, opts.accountId, cfg), request);
1150
+ return {
1151
+ rest,
1152
+ request,
1153
+ channelId
1154
+ };
1155
+ }
1156
+ async function sendMessageDiscord(to, text, opts = {}) {
1157
+ const cfg = opts.cfg ?? loadConfig();
1158
+ const accountInfo = resolveDiscordAccount({
1159
+ cfg,
1160
+ accountId: opts.accountId
1161
+ });
1162
+ const tableMode = resolveMarkdownTableMode({
1163
+ cfg,
1164
+ channel: "discord",
1165
+ accountId: accountInfo.accountId
1166
+ });
1167
+ const chunkMode = resolveChunkMode(cfg, "discord", accountInfo.accountId);
1168
+ const mediaMaxBytes = typeof accountInfo.config.mediaMaxMb === "number" ? accountInfo.config.mediaMaxMb * 1024 * 1024 : 8 * 1024 * 1024;
1169
+ const textWithTables = convertMarkdownTables(text ?? "", tableMode);
1170
+ const textWithMentions = rewriteDiscordKnownMentions(textWithTables, { accountId: accountInfo.accountId });
1171
+ const { token, rest, request } = createDiscordClient(opts, cfg);
1172
+ const { channelId } = await resolveChannelId(rest, await parseAndResolveRecipient(to, opts.accountId, cfg), request);
1173
+ if (isForumLikeType(await resolveDiscordChannelType(rest, channelId))) {
1174
+ const threadName = deriveForumThreadName(textWithTables);
1175
+ const chunks = buildDiscordTextChunks(textWithMentions, {
1176
+ maxLinesPerMessage: accountInfo.config.maxLinesPerMessage,
1177
+ chunkMode
1178
+ });
1179
+ const starterContent = chunks[0]?.trim() ? chunks[0] : threadName;
1180
+ const starterPayload = buildDiscordMessagePayload({
1181
+ text: starterContent,
1182
+ components: resolveDiscordSendComponents({
1183
+ components: opts.components,
1184
+ text: starterContent,
1185
+ isFirst: true
1186
+ }),
1187
+ embeds: resolveDiscordSendEmbeds({
1188
+ embeds: opts.embeds,
1189
+ isFirst: true
1190
+ }),
1191
+ flags: opts.silent ? 4096 : void 0
1192
+ });
1193
+ let threadRes;
1194
+ try {
1195
+ threadRes = await request(() => rest.post(Routes.threads(channelId), { body: {
1196
+ name: threadName,
1197
+ message: stripUndefinedFields(serializePayload(starterPayload))
1198
+ } }), "forum-thread");
1199
+ } catch (err) {
1200
+ throw await buildDiscordSendError(err, {
1201
+ channelId,
1202
+ rest,
1203
+ token,
1204
+ hasMedia: Boolean(opts.mediaUrl)
1205
+ });
1206
+ }
1207
+ const threadId = threadRes.id;
1208
+ const messageId = threadRes.message?.id ?? threadId;
1209
+ const resultChannelId = threadRes.message?.channel_id ?? threadId;
1210
+ const remainingChunks = chunks.slice(1);
1211
+ try {
1212
+ if (opts.mediaUrl) {
1213
+ const [mediaCaption, ...afterMediaChunks] = remainingChunks;
1214
+ await sendDiscordMedia(rest, threadId, mediaCaption ?? "", opts.mediaUrl, opts.filename, opts.mediaLocalRoots, opts.mediaReadFile, mediaMaxBytes, void 0, request, accountInfo.config.maxLinesPerMessage, void 0, void 0, chunkMode, opts.silent);
1215
+ await sendDiscordThreadTextChunks({
1216
+ rest,
1217
+ threadId,
1218
+ chunks: afterMediaChunks,
1219
+ request,
1220
+ maxLinesPerMessage: accountInfo.config.maxLinesPerMessage,
1221
+ chunkMode,
1222
+ silent: opts.silent
1223
+ });
1224
+ } else await sendDiscordThreadTextChunks({
1225
+ rest,
1226
+ threadId,
1227
+ chunks: remainingChunks,
1228
+ request,
1229
+ maxLinesPerMessage: accountInfo.config.maxLinesPerMessage,
1230
+ chunkMode,
1231
+ silent: opts.silent
1232
+ });
1233
+ } catch (err) {
1234
+ throw await buildDiscordSendError(err, {
1235
+ channelId: threadId,
1236
+ rest,
1237
+ token,
1238
+ hasMedia: Boolean(opts.mediaUrl)
1239
+ });
1240
+ }
1241
+ recordChannelActivity({
1242
+ channel: "discord",
1243
+ accountId: accountInfo.accountId,
1244
+ direction: "outbound"
1245
+ });
1246
+ return toDiscordSendResult({
1247
+ id: messageId,
1248
+ channel_id: resultChannelId
1249
+ }, channelId);
1250
+ }
1251
+ let result;
1252
+ try {
1253
+ if (opts.mediaUrl) result = await sendDiscordMedia(rest, channelId, textWithMentions, opts.mediaUrl, opts.filename, opts.mediaLocalRoots, opts.mediaReadFile, mediaMaxBytes, opts.replyTo, request, accountInfo.config.maxLinesPerMessage, opts.components, opts.embeds, chunkMode, opts.silent);
1254
+ else result = await sendDiscordText(rest, channelId, textWithMentions, opts.replyTo, request, accountInfo.config.maxLinesPerMessage, opts.components, opts.embeds, chunkMode, opts.silent);
1255
+ } catch (err) {
1256
+ throw await buildDiscordSendError(err, {
1257
+ channelId,
1258
+ rest,
1259
+ token,
1260
+ hasMedia: Boolean(opts.mediaUrl)
1261
+ });
1262
+ }
1263
+ recordChannelActivity({
1264
+ channel: "discord",
1265
+ accountId: accountInfo.accountId,
1266
+ direction: "outbound"
1267
+ });
1268
+ return toDiscordSendResult(result, channelId);
1269
+ }
1270
+ function resolveWebhookExecutionUrl(params) {
1271
+ const baseUrl = new URL(`https://discord.com/api/v10/webhooks/${encodeURIComponent(params.webhookId)}/${encodeURIComponent(params.webhookToken)}`);
1272
+ baseUrl.searchParams.set("wait", params.wait === false ? "false" : "true");
1273
+ if (params.threadId !== void 0 && params.threadId !== null && params.threadId !== "") baseUrl.searchParams.set("thread_id", String(params.threadId));
1274
+ return baseUrl.toString();
1275
+ }
1276
+ async function sendWebhookMessageDiscord(text, opts) {
1277
+ const webhookId = opts.webhookId.trim();
1278
+ const webhookToken = opts.webhookToken.trim();
1279
+ if (!webhookId || !webhookToken) throw new Error("Discord webhook id/token are required");
1280
+ const rewrittenText = rewriteDiscordKnownMentions(text, { accountId: opts.accountId });
1281
+ const replyTo = typeof opts.replyTo === "string" ? opts.replyTo.trim() : "";
1282
+ const messageReference = replyTo ? {
1283
+ message_id: replyTo,
1284
+ fail_if_not_exists: false
1285
+ } : void 0;
1286
+ const response = await fetch(resolveWebhookExecutionUrl({
1287
+ webhookId,
1288
+ webhookToken,
1289
+ threadId: opts.threadId,
1290
+ wait: opts.wait
1291
+ }), {
1292
+ method: "POST",
1293
+ headers: { "content-type": "application/json" },
1294
+ body: JSON.stringify({
1295
+ content: rewrittenText,
1296
+ username: opts.username?.trim() || void 0,
1297
+ avatar_url: opts.avatarUrl?.trim() || void 0,
1298
+ ...messageReference ? { message_reference: messageReference } : {}
1299
+ })
1300
+ });
1301
+ if (!response.ok) {
1302
+ const raw = await response.text().catch(() => "");
1303
+ throw new Error(`Discord webhook send failed (${response.status}${raw ? `: ${raw.slice(0, 200)}` : ""})`);
1304
+ }
1305
+ const payload = await response.json().catch(() => ({}));
1306
+ try {
1307
+ recordChannelActivity({
1308
+ channel: "discord",
1309
+ accountId: resolveDiscordAccount({
1310
+ cfg: opts.cfg ?? loadConfig(),
1311
+ accountId: opts.accountId
1312
+ }).accountId,
1313
+ direction: "outbound"
1314
+ });
1315
+ } catch {}
1316
+ return {
1317
+ messageId: payload.id ? String(payload.id) : "unknown",
1318
+ channelId: payload.channel_id ? String(payload.channel_id) : opts.threadId ? String(opts.threadId) : ""
1319
+ };
1320
+ }
1321
+ async function sendStickerDiscord(to, stickerIds, opts = {}) {
1322
+ const { rest, request, channelId } = await resolveDiscordSendTarget(to, opts);
1323
+ const content = opts.content?.trim();
1324
+ const rewrittenContent = content ? rewriteDiscordKnownMentions(content, { accountId: opts.accountId }) : void 0;
1325
+ const stickers = normalizeStickerIds(stickerIds);
1326
+ return toDiscordSendResult(await request(() => rest.post(Routes.channelMessages(channelId), { body: {
1327
+ content: rewrittenContent || void 0,
1328
+ sticker_ids: stickers
1329
+ } }), "sticker"), channelId);
1330
+ }
1331
+ async function sendPollDiscord(to, poll, opts = {}) {
1332
+ const { rest, request, channelId } = await resolveDiscordSendTarget(to, opts);
1333
+ const content = opts.content?.trim();
1334
+ const rewrittenContent = content ? rewriteDiscordKnownMentions(content, { accountId: opts.accountId }) : void 0;
1335
+ if (poll.durationSeconds !== void 0) throw new Error("Discord polls do not support durationSeconds; use durationHours");
1336
+ const payload = normalizeDiscordPollInput(poll);
1337
+ const flags = opts.silent ? SUPPRESS_NOTIFICATIONS_FLAG$1 : void 0;
1338
+ return toDiscordSendResult(await request(() => rest.post(Routes.channelMessages(channelId), { body: {
1339
+ content: rewrittenContent || void 0,
1340
+ poll: payload,
1341
+ ...flags ? { flags } : {}
1342
+ } }), "poll"), channelId);
1343
+ }
1344
+ async function materializeVoiceMessageInput(mediaUrl) {
1345
+ const media = await loadWebMediaRaw(mediaUrl, maxBytesForKind("audio"));
1346
+ const extFromName = media.fileName ? path.extname(media.fileName) : "";
1347
+ const extFromMime = media.contentType ? extensionForMime(media.contentType) : "";
1348
+ const ext = extFromName || extFromMime || ".bin";
1349
+ const tempDir = resolvePreferredVoraTmpDir();
1350
+ const filePath = path.join(tempDir, `voice-src-${crypto.randomUUID()}${ext}`);
1351
+ await fs.writeFile(filePath, media.buffer, { mode: 384 });
1352
+ return { filePath };
1353
+ }
1354
+ /**
1355
+ * Send a voice message to Discord.
1356
+ *
1357
+ * Voice messages are a special Discord feature that displays audio with a waveform
1358
+ * visualization. They require OGG/Opus format and cannot include text content.
1359
+ *
1360
+ * @param to - Recipient (user ID for DM or channel ID)
1361
+ * @param audioPath - Path to local audio file (will be converted to OGG/Opus if needed)
1362
+ * @param opts - Send options
1363
+ */
1364
+ async function sendVoiceMessageDiscord(to, audioPath, opts = {}) {
1365
+ const { filePath: localInputPath } = await materializeVoiceMessageInput(audioPath);
1366
+ let oggPath = null;
1367
+ let oggCleanup = false;
1368
+ let token;
1369
+ let rest;
1370
+ let channelId;
1371
+ try {
1372
+ const cfg = opts.cfg ?? loadConfig();
1373
+ const accountInfo = resolveDiscordAccount({
1374
+ cfg,
1375
+ accountId: opts.accountId
1376
+ });
1377
+ const client = createDiscordClient(opts, cfg);
1378
+ token = client.token;
1379
+ rest = client.rest;
1380
+ const request = client.request;
1381
+ const recipient = await parseAndResolveRecipient(to, opts.accountId, cfg);
1382
+ channelId = (await resolveChannelId(rest, recipient, request)).channelId;
1383
+ const ogg = await ensureOggOpus(localInputPath);
1384
+ oggPath = ogg.path;
1385
+ oggCleanup = ogg.cleanup;
1386
+ const metadata = await getVoiceMessageMetadata(oggPath);
1387
+ const audioBuffer = await fs.readFile(oggPath);
1388
+ const result = await sendDiscordVoiceMessage(rest, channelId, audioBuffer, metadata, opts.replyTo, request, opts.silent, token);
1389
+ recordChannelActivity({
1390
+ channel: "discord",
1391
+ accountId: accountInfo.accountId,
1392
+ direction: "outbound"
1393
+ });
1394
+ return toDiscordSendResult(result, channelId);
1395
+ } catch (err) {
1396
+ if (channelId && rest && token) throw await buildDiscordSendError(err, {
1397
+ channelId,
1398
+ rest,
1399
+ token,
1400
+ hasMedia: true
1401
+ });
1402
+ throw err;
1403
+ } finally {
1404
+ await unlinkIfExists(oggCleanup ? oggPath : null);
1405
+ await unlinkIfExists(localInputPath);
1406
+ }
1407
+ }
1408
+ //#endregion
1409
+ //#region extensions/discord/src/components-registry.ts
1410
+ const DEFAULT_COMPONENT_TTL_MS = 1800 * 1e3;
1411
+ const DISCORD_COMPONENT_ENTRIES_KEY = Symbol.for("vora.discord.componentEntries");
1412
+ const DISCORD_MODAL_ENTRIES_KEY = Symbol.for("vora.discord.modalEntries");
1413
+ let componentEntries;
1414
+ let modalEntries;
1415
+ function getComponentEntries() {
1416
+ componentEntries ??= resolveGlobalMap(DISCORD_COMPONENT_ENTRIES_KEY);
1417
+ return componentEntries;
1418
+ }
1419
+ function getModalEntries() {
1420
+ modalEntries ??= resolveGlobalMap(DISCORD_MODAL_ENTRIES_KEY);
1421
+ return modalEntries;
1422
+ }
1423
+ function isExpired(entry, now) {
1424
+ return typeof entry.expiresAt === "number" && entry.expiresAt <= now;
1425
+ }
1426
+ function normalizeEntryTimestamps(entry, now, ttlMs) {
1427
+ const createdAt = entry.createdAt ?? now;
1428
+ const expiresAt = entry.expiresAt ?? createdAt + ttlMs;
1429
+ return {
1430
+ ...entry,
1431
+ createdAt,
1432
+ expiresAt
1433
+ };
1434
+ }
1435
+ function registerEntries(entries, store, params) {
1436
+ for (const entry of entries) {
1437
+ const normalized = normalizeEntryTimestamps({
1438
+ ...entry,
1439
+ messageId: params.messageId ?? entry.messageId
1440
+ }, params.now, params.ttlMs);
1441
+ store.set(entry.id, normalized);
1442
+ }
1443
+ }
1444
+ function resolveEntry(store, params) {
1445
+ const entry = store.get(params.id);
1446
+ if (!entry) return null;
1447
+ if (isExpired(entry, Date.now())) {
1448
+ store.delete(params.id);
1449
+ return null;
1450
+ }
1451
+ if (params.consume !== false) store.delete(params.id);
1452
+ return entry;
1453
+ }
1454
+ function registerDiscordComponentEntries(params) {
1455
+ const now = Date.now();
1456
+ const ttlMs = params.ttlMs ?? DEFAULT_COMPONENT_TTL_MS;
1457
+ registerEntries(params.entries, getComponentEntries(), {
1458
+ now,
1459
+ ttlMs,
1460
+ messageId: params.messageId
1461
+ });
1462
+ registerEntries(params.modals, getModalEntries(), {
1463
+ now,
1464
+ ttlMs,
1465
+ messageId: params.messageId
1466
+ });
1467
+ }
1468
+ function resolveDiscordComponentEntry(params) {
1469
+ return resolveEntry(getComponentEntries(), params);
1470
+ }
1471
+ function resolveDiscordModalEntry(params) {
1472
+ return resolveEntry(getModalEntries(), params);
1473
+ }
1474
+ //#endregion
1475
+ //#region extensions/discord/src/shared-interactive.ts
1476
+ function resolveDiscordInteractiveButtonStyle(style) {
1477
+ return style ?? "secondary";
1478
+ }
1479
+ const DISCORD_INTERACTIVE_BUTTON_ROW_SIZE = 5;
1480
+ function buildDiscordInteractiveComponents(interactive) {
1481
+ const blocks = reduceInteractiveReply(interactive, [], (state, block) => {
1482
+ if (block.type === "text") {
1483
+ const text = block.text.trim();
1484
+ if (text) state.push({
1485
+ type: "text",
1486
+ text
1487
+ });
1488
+ return state;
1489
+ }
1490
+ if (block.type === "buttons") {
1491
+ if (block.buttons.length === 0) return state;
1492
+ for (let index = 0; index < block.buttons.length; index += DISCORD_INTERACTIVE_BUTTON_ROW_SIZE) state.push({
1493
+ type: "actions",
1494
+ buttons: block.buttons.slice(index, index + DISCORD_INTERACTIVE_BUTTON_ROW_SIZE).map((button) => ({
1495
+ label: button.label,
1496
+ style: resolveDiscordInteractiveButtonStyle(button.style),
1497
+ callbackData: button.value
1498
+ }))
1499
+ });
1500
+ return state;
1501
+ }
1502
+ if (block.type === "select" && block.options.length > 0) state.push({
1503
+ type: "actions",
1504
+ select: {
1505
+ type: "string",
1506
+ placeholder: block.placeholder,
1507
+ options: block.options.map((option) => ({
1508
+ label: option.label,
1509
+ value: option.value
1510
+ }))
1511
+ }
1512
+ });
1513
+ return state;
1514
+ });
1515
+ return blocks.length > 0 ? { blocks } : void 0;
1516
+ }
1517
+ //#endregion
1518
+ //#region extensions/discord/src/components.ts
1519
+ const ModalBase = Modal ?? class {};
1520
+ const DISCORD_COMPONENT_CUSTOM_ID_KEY = "occomp";
1521
+ const DISCORD_MODAL_CUSTOM_ID_KEY = "ocmodal";
1522
+ const DISCORD_COMPONENT_ATTACHMENT_PREFIX = "attachment://";
1523
+ const BLOCK_ALIASES = new Map([["row", "actions"], ["action-row", "actions"]]);
1524
+ function createShortId(prefix) {
1525
+ return `${prefix}${crypto.randomBytes(6).toString("base64url")}`;
1526
+ }
1527
+ function requireObject(value, label) {
1528
+ if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error(`${label} must be an object`);
1529
+ return value;
1530
+ }
1531
+ function readString(value, label, opts) {
1532
+ if (typeof value !== "string") throw new Error(`${label} must be a string`);
1533
+ const trimmed = value.trim();
1534
+ if (!opts?.allowEmpty && !trimmed) throw new Error(`${label} cannot be empty`);
1535
+ return opts?.allowEmpty ? value : trimmed;
1536
+ }
1537
+ function readOptionalString(value) {
1538
+ if (typeof value !== "string") return;
1539
+ const trimmed = value.trim();
1540
+ return trimmed ? trimmed : void 0;
1541
+ }
1542
+ function readOptionalStringArray(value, label) {
1543
+ if (value === void 0) return;
1544
+ if (!Array.isArray(value)) throw new Error(`${label} must be an array`);
1545
+ if (value.length === 0) return;
1546
+ return value.map((entry, index) => readString(entry, `${label}[${index}]`));
1547
+ }
1548
+ function readOptionalNumber(value) {
1549
+ if (typeof value !== "number" || !Number.isFinite(value)) return;
1550
+ return value;
1551
+ }
1552
+ function normalizeModalFieldName(value, index) {
1553
+ const trimmed = value?.trim();
1554
+ if (trimmed) return trimmed;
1555
+ return `field_${index + 1}`;
1556
+ }
1557
+ function normalizeAttachmentRef(value, label) {
1558
+ const trimmed = value.trim();
1559
+ if (!trimmed.startsWith("attachment://")) throw new Error(`${label} must start with "${DISCORD_COMPONENT_ATTACHMENT_PREFIX}"`);
1560
+ const attachmentName = trimmed.slice(13).trim();
1561
+ if (!attachmentName) throw new Error(`${label} must include an attachment filename`);
1562
+ return `${DISCORD_COMPONENT_ATTACHMENT_PREFIX}${attachmentName}`;
1563
+ }
1564
+ function resolveDiscordComponentAttachmentName(value) {
1565
+ const trimmed = value.trim();
1566
+ if (!trimmed.startsWith("attachment://")) throw new Error(`Attachment reference must start with "${DISCORD_COMPONENT_ATTACHMENT_PREFIX}"`);
1567
+ const attachmentName = trimmed.slice(13).trim();
1568
+ if (!attachmentName) throw new Error("Attachment reference must include a filename");
1569
+ return attachmentName;
1570
+ }
1571
+ function mapButtonStyle(style) {
1572
+ switch ((style ?? "primary").toLowerCase()) {
1573
+ case "secondary": return ButtonStyle.Secondary;
1574
+ case "success": return ButtonStyle.Success;
1575
+ case "danger": return ButtonStyle.Danger;
1576
+ case "link": return ButtonStyle.Link;
1577
+ default: return ButtonStyle.Primary;
1578
+ }
1579
+ }
1580
+ function mapTextInputStyle(style) {
1581
+ return style === "paragraph" ? TextInputStyle.Paragraph : TextInputStyle.Short;
1582
+ }
1583
+ function normalizeBlockType(raw) {
1584
+ const lowered = raw.trim().toLowerCase();
1585
+ return BLOCK_ALIASES.get(lowered) ?? lowered;
1586
+ }
1587
+ function parseSelectOptions(raw, label) {
1588
+ if (raw === void 0) return;
1589
+ if (!Array.isArray(raw)) throw new Error(`${label} must be an array`);
1590
+ return raw.map((entry, index) => {
1591
+ const obj = requireObject(entry, `${label}[${index}]`);
1592
+ return {
1593
+ label: readString(obj.label, `${label}[${index}].label`),
1594
+ value: readString(obj.value, `${label}[${index}].value`),
1595
+ description: readOptionalString(obj.description),
1596
+ emoji: typeof obj.emoji === "object" && obj.emoji && !Array.isArray(obj.emoji) ? {
1597
+ name: readString(obj.emoji.name, `${label}[${index}].emoji.name`),
1598
+ id: readOptionalString(obj.emoji.id),
1599
+ animated: typeof obj.emoji.animated === "boolean" ? obj.emoji.animated : void 0
1600
+ } : void 0,
1601
+ default: typeof obj.default === "boolean" ? obj.default : void 0
1602
+ };
1603
+ });
1604
+ }
1605
+ function parseButtonSpec(raw, label) {
1606
+ const obj = requireObject(raw, label);
1607
+ const style = readOptionalString(obj.style);
1608
+ const url = readOptionalString(obj.url);
1609
+ if ((style === "link" || url) && !url) throw new Error(`${label}.url is required for link buttons`);
1610
+ return {
1611
+ label: readString(obj.label, `${label}.label`),
1612
+ style,
1613
+ url,
1614
+ callbackData: readOptionalString(obj.callbackData),
1615
+ emoji: typeof obj.emoji === "object" && obj.emoji && !Array.isArray(obj.emoji) ? {
1616
+ name: readString(obj.emoji.name, `${label}.emoji.name`),
1617
+ id: readOptionalString(obj.emoji.id),
1618
+ animated: typeof obj.emoji.animated === "boolean" ? obj.emoji.animated : void 0
1619
+ } : void 0,
1620
+ disabled: typeof obj.disabled === "boolean" ? obj.disabled : void 0,
1621
+ allowedUsers: readOptionalStringArray(obj.allowedUsers, `${label}.allowedUsers`)
1622
+ };
1623
+ }
1624
+ function parseSelectSpec(raw, label) {
1625
+ const obj = requireObject(raw, label);
1626
+ const type = readOptionalString(obj.type);
1627
+ const allowedTypes = [
1628
+ "string",
1629
+ "user",
1630
+ "role",
1631
+ "mentionable",
1632
+ "channel"
1633
+ ];
1634
+ if (type && !allowedTypes.includes(type)) throw new Error(`${label}.type must be one of ${allowedTypes.join(", ")}`);
1635
+ return {
1636
+ type,
1637
+ callbackData: readOptionalString(obj.callbackData),
1638
+ placeholder: readOptionalString(obj.placeholder),
1639
+ minValues: readOptionalNumber(obj.minValues),
1640
+ maxValues: readOptionalNumber(obj.maxValues),
1641
+ options: parseSelectOptions(obj.options, `${label}.options`),
1642
+ allowedUsers: readOptionalStringArray(obj.allowedUsers, `${label}.allowedUsers`)
1643
+ };
1644
+ }
1645
+ function parseModalField(raw, label, index) {
1646
+ const obj = requireObject(raw, label);
1647
+ const type = readString(obj.type, `${label}.type`).toLowerCase();
1648
+ const supported = [
1649
+ "text",
1650
+ "checkbox",
1651
+ "radio",
1652
+ "select",
1653
+ "role-select",
1654
+ "user-select"
1655
+ ];
1656
+ if (!supported.includes(type)) throw new Error(`${label}.type must be one of ${supported.join(", ")}`);
1657
+ const options = parseSelectOptions(obj.options, `${label}.options`);
1658
+ if ([
1659
+ "checkbox",
1660
+ "radio",
1661
+ "select"
1662
+ ].includes(type) && (!options || options.length === 0)) throw new Error(`${label}.options is required for ${type} fields`);
1663
+ return {
1664
+ type,
1665
+ name: normalizeModalFieldName(readOptionalString(obj.name), index),
1666
+ label: readString(obj.label, `${label}.label`),
1667
+ description: readOptionalString(obj.description),
1668
+ placeholder: readOptionalString(obj.placeholder),
1669
+ required: typeof obj.required === "boolean" ? obj.required : void 0,
1670
+ options,
1671
+ minValues: readOptionalNumber(obj.minValues),
1672
+ maxValues: readOptionalNumber(obj.maxValues),
1673
+ minLength: readOptionalNumber(obj.minLength),
1674
+ maxLength: readOptionalNumber(obj.maxLength),
1675
+ style: readOptionalString(obj.style)
1676
+ };
1677
+ }
1678
+ function parseComponentBlock(raw, label) {
1679
+ const obj = requireObject(raw, label);
1680
+ switch (normalizeBlockType(readString(obj.type, `${label}.type`).toLowerCase())) {
1681
+ case "text": return {
1682
+ type: "text",
1683
+ text: readString(obj.text, `${label}.text`)
1684
+ };
1685
+ case "section": {
1686
+ const text = readOptionalString(obj.text);
1687
+ const textsRaw = obj.texts;
1688
+ const texts = Array.isArray(textsRaw) ? textsRaw.map((entry, idx) => readString(entry, `${label}.texts[${idx}]`)) : void 0;
1689
+ if (!text && (!texts || texts.length === 0)) throw new Error(`${label}.text or ${label}.texts is required for section blocks`);
1690
+ let accessory;
1691
+ if (obj.accessory !== void 0) {
1692
+ const accessoryObj = requireObject(obj.accessory, `${label}.accessory`);
1693
+ const accessoryType = readString(accessoryObj.type, `${label}.accessory.type`).toLowerCase();
1694
+ if (accessoryType === "thumbnail") accessory = {
1695
+ type: "thumbnail",
1696
+ url: readString(accessoryObj.url, `${label}.accessory.url`)
1697
+ };
1698
+ else if (accessoryType === "button") accessory = {
1699
+ type: "button",
1700
+ button: parseButtonSpec(accessoryObj.button, `${label}.accessory.button`)
1701
+ };
1702
+ else throw new Error(`${label}.accessory.type must be "thumbnail" or "button"`);
1703
+ }
1704
+ return {
1705
+ type: "section",
1706
+ text,
1707
+ texts,
1708
+ accessory
1709
+ };
1710
+ }
1711
+ case "separator": {
1712
+ const spacingRaw = obj.spacing;
1713
+ let spacing;
1714
+ if (spacingRaw === "small" || spacingRaw === "large") spacing = spacingRaw;
1715
+ else if (spacingRaw === 1 || spacingRaw === 2) spacing = spacingRaw;
1716
+ else if (spacingRaw !== void 0) throw new Error(`${label}.spacing must be "small", "large", 1, or 2`);
1717
+ const divider = typeof obj.divider === "boolean" ? obj.divider : void 0;
1718
+ return {
1719
+ type: "separator",
1720
+ spacing,
1721
+ divider
1722
+ };
1723
+ }
1724
+ case "actions": {
1725
+ const buttonsRaw = obj.buttons;
1726
+ const buttons = Array.isArray(buttonsRaw) ? buttonsRaw.map((entry, idx) => parseButtonSpec(entry, `${label}.buttons[${idx}]`)) : void 0;
1727
+ const select = obj.select ? parseSelectSpec(obj.select, `${label}.select`) : void 0;
1728
+ if ((!buttons || buttons.length === 0) && !select) throw new Error(`${label} requires buttons or select`);
1729
+ if (buttons && select) throw new Error(`${label} cannot include both buttons and select`);
1730
+ return {
1731
+ type: "actions",
1732
+ buttons,
1733
+ select
1734
+ };
1735
+ }
1736
+ case "media-gallery": {
1737
+ const itemsRaw = obj.items;
1738
+ if (!Array.isArray(itemsRaw) || itemsRaw.length === 0) throw new Error(`${label}.items must be a non-empty array`);
1739
+ return {
1740
+ type: "media-gallery",
1741
+ items: itemsRaw.map((entry, idx) => {
1742
+ const itemObj = requireObject(entry, `${label}.items[${idx}]`);
1743
+ return {
1744
+ url: readString(itemObj.url, `${label}.items[${idx}].url`),
1745
+ description: readOptionalString(itemObj.description),
1746
+ spoiler: typeof itemObj.spoiler === "boolean" ? itemObj.spoiler : void 0
1747
+ };
1748
+ })
1749
+ };
1750
+ }
1751
+ case "file": return {
1752
+ type: "file",
1753
+ file: normalizeAttachmentRef(readString(obj.file, `${label}.file`), `${label}.file`),
1754
+ spoiler: typeof obj.spoiler === "boolean" ? obj.spoiler : void 0
1755
+ };
1756
+ default: throw new Error(`${label}.type must be a supported component block`);
1757
+ }
1758
+ }
1759
+ function readDiscordComponentSpec(raw) {
1760
+ if (raw === void 0 || raw === null) return null;
1761
+ const obj = requireObject(raw, "components");
1762
+ const blocksRaw = obj.blocks;
1763
+ const blocks = Array.isArray(blocksRaw) ? blocksRaw.map((entry, idx) => parseComponentBlock(entry, `components.blocks[${idx}]`)) : void 0;
1764
+ const modalRaw = obj.modal;
1765
+ const reusable = typeof obj.reusable === "boolean" ? obj.reusable : void 0;
1766
+ let modal;
1767
+ if (modalRaw !== void 0) {
1768
+ const modalObj = requireObject(modalRaw, "components.modal");
1769
+ const fieldsRaw = modalObj.fields;
1770
+ if (!Array.isArray(fieldsRaw) || fieldsRaw.length === 0) throw new Error("components.modal.fields must be a non-empty array");
1771
+ if (fieldsRaw.length > 5) throw new Error("components.modal.fields supports up to 5 inputs");
1772
+ const fields = fieldsRaw.map((entry, idx) => parseModalField(entry, `components.modal.fields[${idx}]`, idx));
1773
+ modal = {
1774
+ title: readString(modalObj.title, "components.modal.title"),
1775
+ callbackData: readOptionalString(modalObj.callbackData),
1776
+ triggerLabel: readOptionalString(modalObj.triggerLabel),
1777
+ triggerStyle: readOptionalString(modalObj.triggerStyle),
1778
+ allowedUsers: readOptionalStringArray(modalObj.allowedUsers, "components.modal.allowedUsers"),
1779
+ fields
1780
+ };
1781
+ }
1782
+ return {
1783
+ text: readOptionalString(obj.text),
1784
+ reusable,
1785
+ container: typeof obj.container === "object" && obj.container && !Array.isArray(obj.container) ? {
1786
+ accentColor: obj.container.accentColor,
1787
+ spoiler: typeof obj.container.spoiler === "boolean" ? obj.container.spoiler : void 0
1788
+ } : void 0,
1789
+ blocks,
1790
+ modal
1791
+ };
1792
+ }
1793
+ function buildDiscordComponentCustomId(params) {
1794
+ const base = `${DISCORD_COMPONENT_CUSTOM_ID_KEY}:cid=${params.componentId}`;
1795
+ return params.modalId ? `${base};mid=${params.modalId}` : base;
1796
+ }
1797
+ function buildDiscordModalCustomId(modalId) {
1798
+ return `${DISCORD_MODAL_CUSTOM_ID_KEY}:mid=${modalId}`;
1799
+ }
1800
+ function parseDiscordComponentCustomId(id) {
1801
+ const parsed = parseCustomId(id);
1802
+ if (parsed.key !== "occomp") return null;
1803
+ const componentId = parsed.data.cid;
1804
+ if (typeof componentId !== "string" || !componentId.trim()) return null;
1805
+ const modalId = parsed.data.mid;
1806
+ return {
1807
+ componentId,
1808
+ modalId: typeof modalId === "string" && modalId.trim() ? modalId : void 0
1809
+ };
1810
+ }
1811
+ function parseDiscordModalCustomId(id) {
1812
+ const parsed = parseCustomId(id);
1813
+ if (parsed.key !== "ocmodal") return null;
1814
+ const modalId = parsed.data.mid;
1815
+ if (typeof modalId !== "string" || !modalId.trim()) return null;
1816
+ return modalId;
1817
+ }
1818
+ function isDiscordComponentWildcardRegistrationId(id) {
1819
+ return /^__vora_discord_component_[a-z_]+_wildcard__$/.test(id);
1820
+ }
1821
+ function parseDiscordComponentCustomIdForCarbon(id) {
1822
+ if (id === "*" || isDiscordComponentWildcardRegistrationId(id)) return {
1823
+ key: "*",
1824
+ data: {}
1825
+ };
1826
+ const parsed = parseCustomId(id);
1827
+ if (parsed.key !== "occomp") return parsed;
1828
+ return {
1829
+ key: "*",
1830
+ data: parsed.data
1831
+ };
1832
+ }
1833
+ function parseDiscordModalCustomIdForCarbon(id) {
1834
+ if (id === "*" || isDiscordComponentWildcardRegistrationId(id)) return {
1835
+ key: "*",
1836
+ data: {}
1837
+ };
1838
+ const parsed = parseCustomId(id);
1839
+ if (parsed.key !== "ocmodal") return parsed;
1840
+ return {
1841
+ key: "*",
1842
+ data: parsed.data
1843
+ };
1844
+ }
1845
+ function buildTextDisplays(text, texts) {
1846
+ if (texts && texts.length > 0) return texts.map((entry) => new TextDisplay(entry));
1847
+ if (text) return [new TextDisplay(text)];
1848
+ return [];
1849
+ }
1850
+ function createButtonComponent(params) {
1851
+ const style = mapButtonStyle(params.spec.style);
1852
+ if (style === ButtonStyle.Link || Boolean(params.spec.url)) {
1853
+ if (!params.spec.url) throw new Error("Link buttons require a url");
1854
+ const linkUrl = params.spec.url;
1855
+ class DynamicLinkButton extends LinkButton {
1856
+ constructor(..._args) {
1857
+ super(..._args);
1858
+ this.label = params.spec.label;
1859
+ this.url = linkUrl;
1860
+ }
1861
+ }
1862
+ return { component: new DynamicLinkButton() };
1863
+ }
1864
+ const componentId = params.componentId ?? createShortId("btn_");
1865
+ const internalCustomId = typeof params.spec.internalCustomId === "string" && params.spec.internalCustomId.trim() ? params.spec.internalCustomId.trim() : void 0;
1866
+ const customId = internalCustomId ?? buildDiscordComponentCustomId({
1867
+ componentId,
1868
+ modalId: params.modalId
1869
+ });
1870
+ class DynamicButton extends Button {
1871
+ constructor(..._args2) {
1872
+ super(..._args2);
1873
+ this.label = params.spec.label;
1874
+ this.customId = customId;
1875
+ this.style = style;
1876
+ this.emoji = params.spec.emoji;
1877
+ this.disabled = params.spec.disabled ?? false;
1878
+ }
1879
+ }
1880
+ if (internalCustomId) return { component: new DynamicButton() };
1881
+ return {
1882
+ component: new DynamicButton(),
1883
+ entry: {
1884
+ id: componentId,
1885
+ kind: params.modalId ? "modal-trigger" : "button",
1886
+ label: params.spec.label,
1887
+ callbackData: params.spec.callbackData,
1888
+ modalId: params.modalId,
1889
+ allowedUsers: params.spec.allowedUsers
1890
+ }
1891
+ };
1892
+ }
1893
+ function createSelectComponent(params) {
1894
+ const type = (params.spec.type ?? "string").toLowerCase();
1895
+ const componentId = params.componentId ?? createShortId("sel_");
1896
+ const customId = buildDiscordComponentCustomId({ componentId });
1897
+ if (type === "string") {
1898
+ const options = params.spec.options ?? [];
1899
+ if (options.length === 0) throw new Error("String select menus require options");
1900
+ class DynamicStringSelect extends StringSelectMenu {
1901
+ constructor(..._args3) {
1902
+ super(..._args3);
1903
+ this.customId = customId;
1904
+ this.options = options;
1905
+ this.minValues = params.spec.minValues;
1906
+ this.maxValues = params.spec.maxValues;
1907
+ this.placeholder = params.spec.placeholder;
1908
+ this.disabled = false;
1909
+ }
1910
+ }
1911
+ return {
1912
+ component: new DynamicStringSelect(),
1913
+ entry: {
1914
+ id: componentId,
1915
+ kind: "select",
1916
+ label: params.spec.placeholder ?? "select",
1917
+ callbackData: params.spec.callbackData,
1918
+ selectType: "string",
1919
+ options: options.map((option) => ({
1920
+ value: option.value,
1921
+ label: option.label
1922
+ })),
1923
+ allowedUsers: params.spec.allowedUsers
1924
+ }
1925
+ };
1926
+ }
1927
+ if (type === "user") {
1928
+ class DynamicUserSelect extends UserSelectMenu {
1929
+ constructor(..._args4) {
1930
+ super(..._args4);
1931
+ this.customId = customId;
1932
+ this.minValues = params.spec.minValues;
1933
+ this.maxValues = params.spec.maxValues;
1934
+ this.placeholder = params.spec.placeholder;
1935
+ this.disabled = false;
1936
+ }
1937
+ }
1938
+ return {
1939
+ component: new DynamicUserSelect(),
1940
+ entry: {
1941
+ id: componentId,
1942
+ kind: "select",
1943
+ label: params.spec.placeholder ?? "user select",
1944
+ callbackData: params.spec.callbackData,
1945
+ selectType: "user",
1946
+ allowedUsers: params.spec.allowedUsers
1947
+ }
1948
+ };
1949
+ }
1950
+ if (type === "role") {
1951
+ class DynamicRoleSelect extends RoleSelectMenu {
1952
+ constructor(..._args5) {
1953
+ super(..._args5);
1954
+ this.customId = customId;
1955
+ this.minValues = params.spec.minValues;
1956
+ this.maxValues = params.spec.maxValues;
1957
+ this.placeholder = params.spec.placeholder;
1958
+ this.disabled = false;
1959
+ }
1960
+ }
1961
+ return {
1962
+ component: new DynamicRoleSelect(),
1963
+ entry: {
1964
+ id: componentId,
1965
+ kind: "select",
1966
+ label: params.spec.placeholder ?? "role select",
1967
+ callbackData: params.spec.callbackData,
1968
+ selectType: "role",
1969
+ allowedUsers: params.spec.allowedUsers
1970
+ }
1971
+ };
1972
+ }
1973
+ if (type === "mentionable") {
1974
+ class DynamicMentionableSelect extends MentionableSelectMenu {
1975
+ constructor(..._args6) {
1976
+ super(..._args6);
1977
+ this.customId = customId;
1978
+ this.minValues = params.spec.minValues;
1979
+ this.maxValues = params.spec.maxValues;
1980
+ this.placeholder = params.spec.placeholder;
1981
+ this.disabled = false;
1982
+ }
1983
+ }
1984
+ return {
1985
+ component: new DynamicMentionableSelect(),
1986
+ entry: {
1987
+ id: componentId,
1988
+ kind: "select",
1989
+ label: params.spec.placeholder ?? "mentionable select",
1990
+ callbackData: params.spec.callbackData,
1991
+ selectType: "mentionable",
1992
+ allowedUsers: params.spec.allowedUsers
1993
+ }
1994
+ };
1995
+ }
1996
+ class DynamicChannelSelect extends ChannelSelectMenu {
1997
+ constructor(..._args7) {
1998
+ super(..._args7);
1999
+ this.customId = customId;
2000
+ this.minValues = params.spec.minValues;
2001
+ this.maxValues = params.spec.maxValues;
2002
+ this.placeholder = params.spec.placeholder;
2003
+ this.disabled = false;
2004
+ }
2005
+ }
2006
+ return {
2007
+ component: new DynamicChannelSelect(),
2008
+ entry: {
2009
+ id: componentId,
2010
+ kind: "select",
2011
+ label: params.spec.placeholder ?? "channel select",
2012
+ callbackData: params.spec.callbackData,
2013
+ selectType: "channel",
2014
+ allowedUsers: params.spec.allowedUsers
2015
+ }
2016
+ };
2017
+ }
2018
+ function isSelectComponent(component) {
2019
+ return component instanceof StringSelectMenu || component instanceof UserSelectMenu || component instanceof RoleSelectMenu || component instanceof MentionableSelectMenu || component instanceof ChannelSelectMenu;
2020
+ }
2021
+ function createModalFieldComponent(field) {
2022
+ if (field.type === "text") {
2023
+ class DynamicTextInput extends TextInput {
2024
+ constructor(..._args8) {
2025
+ super(..._args8);
2026
+ this.customId = field.id;
2027
+ this.style = mapTextInputStyle(field.style);
2028
+ this.placeholder = field.placeholder;
2029
+ this.required = field.required;
2030
+ this.minLength = field.minLength;
2031
+ this.maxLength = field.maxLength;
2032
+ }
2033
+ }
2034
+ return new DynamicTextInput();
2035
+ }
2036
+ if (field.type === "select") {
2037
+ const options = field.options ?? [];
2038
+ class DynamicModalSelect extends StringSelectMenu {
2039
+ constructor(..._args9) {
2040
+ super(..._args9);
2041
+ this.customId = field.id;
2042
+ this.options = options;
2043
+ this.required = field.required;
2044
+ this.minValues = field.minValues;
2045
+ this.maxValues = field.maxValues;
2046
+ this.placeholder = field.placeholder;
2047
+ }
2048
+ }
2049
+ return new DynamicModalSelect();
2050
+ }
2051
+ if (field.type === "role-select") {
2052
+ class DynamicModalRoleSelect extends RoleSelectMenu {
2053
+ constructor(..._args10) {
2054
+ super(..._args10);
2055
+ this.customId = field.id;
2056
+ this.required = field.required;
2057
+ this.minValues = field.minValues;
2058
+ this.maxValues = field.maxValues;
2059
+ this.placeholder = field.placeholder;
2060
+ }
2061
+ }
2062
+ return new DynamicModalRoleSelect();
2063
+ }
2064
+ if (field.type === "user-select") {
2065
+ class DynamicModalUserSelect extends UserSelectMenu {
2066
+ constructor(..._args11) {
2067
+ super(..._args11);
2068
+ this.customId = field.id;
2069
+ this.required = field.required;
2070
+ this.minValues = field.minValues;
2071
+ this.maxValues = field.maxValues;
2072
+ this.placeholder = field.placeholder;
2073
+ }
2074
+ }
2075
+ return new DynamicModalUserSelect();
2076
+ }
2077
+ if (field.type === "checkbox") {
2078
+ const options = field.options ?? [];
2079
+ class DynamicCheckboxGroup extends CheckboxGroup {
2080
+ constructor(..._args12) {
2081
+ super(..._args12);
2082
+ this.customId = field.id;
2083
+ this.options = options;
2084
+ this.required = field.required;
2085
+ this.minValues = field.minValues;
2086
+ this.maxValues = field.maxValues;
2087
+ }
2088
+ }
2089
+ return new DynamicCheckboxGroup();
2090
+ }
2091
+ const options = field.options ?? [];
2092
+ class DynamicRadioGroup extends RadioGroup {
2093
+ constructor(..._args13) {
2094
+ super(..._args13);
2095
+ this.customId = field.id;
2096
+ this.options = options;
2097
+ this.required = field.required;
2098
+ this.minValues = field.minValues;
2099
+ this.maxValues = field.maxValues;
2100
+ }
2101
+ }
2102
+ return new DynamicRadioGroup();
2103
+ }
2104
+ function buildDiscordComponentMessage(params) {
2105
+ const entries = [];
2106
+ const modals = [];
2107
+ const components = [];
2108
+ const containerChildren = [];
2109
+ const addEntry = (entry) => {
2110
+ entries.push({
2111
+ ...entry,
2112
+ sessionKey: params.sessionKey,
2113
+ agentId: params.agentId,
2114
+ accountId: params.accountId,
2115
+ reusable: entry.reusable ?? params.spec.reusable
2116
+ });
2117
+ };
2118
+ const text = params.spec.text ?? params.fallbackText;
2119
+ if (text) containerChildren.push(new TextDisplay(text));
2120
+ for (const block of params.spec.blocks ?? []) {
2121
+ if (block.type === "text") {
2122
+ containerChildren.push(new TextDisplay(block.text));
2123
+ continue;
2124
+ }
2125
+ if (block.type === "section") {
2126
+ const displays = buildTextDisplays(block.text, block.texts);
2127
+ if (displays.length > 3) throw new Error("Section blocks support up to 3 text displays");
2128
+ let accessory;
2129
+ if (block.accessory?.type === "thumbnail") accessory = new Thumbnail(block.accessory.url);
2130
+ else if (block.accessory?.type === "button") {
2131
+ const { component, entry } = createButtonComponent({ spec: block.accessory.button });
2132
+ accessory = component;
2133
+ if (entry) addEntry(entry);
2134
+ }
2135
+ containerChildren.push(new Section(displays, accessory));
2136
+ continue;
2137
+ }
2138
+ if (block.type === "separator") {
2139
+ containerChildren.push(new Separator({
2140
+ spacing: block.spacing,
2141
+ divider: block.divider
2142
+ }));
2143
+ continue;
2144
+ }
2145
+ if (block.type === "media-gallery") {
2146
+ containerChildren.push(new MediaGallery(block.items));
2147
+ continue;
2148
+ }
2149
+ if (block.type === "file") {
2150
+ containerChildren.push(new File(block.file, block.spoiler));
2151
+ continue;
2152
+ }
2153
+ if (block.type === "actions") {
2154
+ const rowComponents = [];
2155
+ if (block.buttons) {
2156
+ if (block.buttons.length > 5) throw new Error("Action rows support up to 5 buttons");
2157
+ for (const button of block.buttons) {
2158
+ const { component, entry } = createButtonComponent({ spec: button });
2159
+ rowComponents.push(component);
2160
+ if (entry) addEntry(entry);
2161
+ }
2162
+ } else if (block.select) {
2163
+ const { component, entry } = createSelectComponent({ spec: block.select });
2164
+ rowComponents.push(component);
2165
+ addEntry(entry);
2166
+ }
2167
+ containerChildren.push(new Row(rowComponents));
2168
+ }
2169
+ }
2170
+ if (params.spec.modal) {
2171
+ const modalId = createShortId("mdl_");
2172
+ const fields = params.spec.modal.fields.map((field, index) => ({
2173
+ id: createShortId("fld_"),
2174
+ name: normalizeModalFieldName(field.name, index),
2175
+ label: field.label,
2176
+ type: field.type,
2177
+ description: field.description,
2178
+ placeholder: field.placeholder,
2179
+ required: field.required,
2180
+ options: field.options,
2181
+ minValues: field.minValues,
2182
+ maxValues: field.maxValues,
2183
+ minLength: field.minLength,
2184
+ maxLength: field.maxLength,
2185
+ style: field.style
2186
+ }));
2187
+ modals.push({
2188
+ id: modalId,
2189
+ title: params.spec.modal.title,
2190
+ callbackData: params.spec.modal.callbackData,
2191
+ fields,
2192
+ sessionKey: params.sessionKey,
2193
+ agentId: params.agentId,
2194
+ accountId: params.accountId,
2195
+ reusable: params.spec.reusable,
2196
+ allowedUsers: params.spec.modal.allowedUsers
2197
+ });
2198
+ const { component, entry } = createButtonComponent({
2199
+ spec: {
2200
+ label: params.spec.modal.triggerLabel ?? "Open form",
2201
+ style: params.spec.modal.triggerStyle ?? "primary",
2202
+ allowedUsers: params.spec.modal.allowedUsers
2203
+ },
2204
+ modalId
2205
+ });
2206
+ if (entry) addEntry(entry);
2207
+ const lastChild = containerChildren.at(-1);
2208
+ if (lastChild instanceof Row) {
2209
+ const row = lastChild;
2210
+ const hasSelect = row.components.some((entry) => isSelectComponent(entry));
2211
+ if (row.components.length < 5 && !hasSelect) row.addComponent(component);
2212
+ else containerChildren.push(new Row([component]));
2213
+ } else containerChildren.push(new Row([component]));
2214
+ }
2215
+ if (containerChildren.length === 0) throw new Error("components must include at least one block, text, or modal trigger");
2216
+ const container = new Container(containerChildren, params.spec.container);
2217
+ components.push(container);
2218
+ return {
2219
+ components,
2220
+ entries,
2221
+ modals
2222
+ };
2223
+ }
2224
+ function buildDiscordComponentMessageFlags(components) {
2225
+ return components.some((component) => component.isV2) ? MessageFlags.IsComponentsV2 : void 0;
2226
+ }
2227
+ var DiscordFormModal = class extends ModalBase {
2228
+ constructor(params) {
2229
+ super();
2230
+ this.customIdParser = parseDiscordModalCustomIdForCarbon;
2231
+ this.title = params.title;
2232
+ this.customId = buildDiscordModalCustomId(params.modalId);
2233
+ this.components = params.fields.map((field) => {
2234
+ const component = createModalFieldComponent(field);
2235
+ class DynamicLabel extends Label {
2236
+ constructor(..._args14) {
2237
+ super(..._args14);
2238
+ this.label = field.label;
2239
+ this.description = field.description;
2240
+ this.component = component;
2241
+ this.customId = field.id;
2242
+ }
2243
+ }
2244
+ return new DynamicLabel(component);
2245
+ });
2246
+ }
2247
+ async run() {
2248
+ throw new Error("Modal handler is not registered for dynamic forms");
2249
+ }
2250
+ };
2251
+ function createDiscordFormModal(entry) {
2252
+ return new DiscordFormModal({
2253
+ modalId: entry.id,
2254
+ title: entry.title,
2255
+ fields: entry.fields
2256
+ });
2257
+ }
2258
+ function formatDiscordComponentEventText(params) {
2259
+ if (params.kind === "button") return `Clicked "${params.label}".`;
2260
+ const values = params.values ?? [];
2261
+ if (values.length === 0) return `Updated "${params.label}".`;
2262
+ return `Selected ${values.join(", ")} from "${params.label}".`;
2263
+ }
2264
+ //#endregion
2265
+ //#region extensions/discord/src/send.components.ts
2266
+ const DISCORD_FORUM_LIKE_TYPES = new Set([ChannelType$1.GuildForum, ChannelType$1.GuildMedia]);
2267
+ function extractComponentAttachmentNames(spec) {
2268
+ const names = [];
2269
+ for (const block of spec.blocks ?? []) if (block.type === "file") names.push(resolveDiscordComponentAttachmentName(block.file));
2270
+ return names;
2271
+ }
2272
+ function registerBuiltDiscordComponentMessage(params) {
2273
+ registerDiscordComponentEntries({
2274
+ entries: params.buildResult.entries,
2275
+ modals: params.buildResult.modals,
2276
+ messageId: params.messageId
2277
+ });
2278
+ }
2279
+ async function buildDiscordComponentPayload(params) {
2280
+ const buildResult = buildDiscordComponentMessage({
2281
+ spec: params.spec,
2282
+ sessionKey: params.opts.sessionKey,
2283
+ agentId: params.opts.agentId,
2284
+ accountId: params.accountId
2285
+ });
2286
+ const flags = buildDiscordComponentMessageFlags(buildResult.components);
2287
+ const finalFlags = params.opts.silent ? (flags ?? 0) | SUPPRESS_NOTIFICATIONS_FLAG$1 : flags ?? void 0;
2288
+ const messageReference = params.opts.replyTo ? {
2289
+ message_id: params.opts.replyTo,
2290
+ fail_if_not_exists: false
2291
+ } : void 0;
2292
+ const attachmentNames = extractComponentAttachmentNames(params.spec);
2293
+ const uniqueAttachmentNames = [...new Set(attachmentNames)];
2294
+ if (uniqueAttachmentNames.length > 1) throw new Error("Discord component attachments currently support a single file. Use media-gallery for multiple files.");
2295
+ const expectedAttachmentName = uniqueAttachmentNames[0];
2296
+ let files;
2297
+ if (params.opts.mediaUrl) {
2298
+ const media = await loadOutboundMediaFromUrl(params.opts.mediaUrl, {
2299
+ mediaAccess: params.opts.mediaAccess,
2300
+ mediaLocalRoots: params.opts.mediaLocalRoots,
2301
+ mediaReadFile: params.opts.mediaReadFile
2302
+ });
2303
+ const fileName = params.opts.filename?.trim() || media.fileName || "upload";
2304
+ if (expectedAttachmentName && expectedAttachmentName !== fileName) throw new Error(`Component file block expects attachment "${expectedAttachmentName}", but the uploaded file is "${fileName}". Update components.blocks[].file or provide a matching filename.`);
2305
+ files = [{
2306
+ data: toDiscordFileBlob(media.buffer),
2307
+ name: fileName
2308
+ }];
2309
+ } else if (expectedAttachmentName) throw new Error("Discord component file blocks require a media attachment (media/path/filePath).");
2310
+ return {
2311
+ body: stripUndefinedFields({
2312
+ ...serializePayload({
2313
+ components: buildResult.components,
2314
+ ...finalFlags ? { flags: finalFlags } : {},
2315
+ ...files ? { files } : {}
2316
+ }),
2317
+ ...messageReference ? { message_reference: messageReference } : {}
2318
+ }),
2319
+ buildResult
2320
+ };
2321
+ }
2322
+ async function sendDiscordComponentMessage(to, spec, opts = {}) {
2323
+ const cfg = opts.cfg ?? loadConfig();
2324
+ const accountInfo = resolveDiscordAccount({
2325
+ cfg,
2326
+ accountId: opts.accountId
2327
+ });
2328
+ const { token, rest, request } = createDiscordClient(opts, cfg);
2329
+ const { channelId } = await resolveChannelId(rest, await parseAndResolveRecipient(to, opts.accountId, cfg), request);
2330
+ const channelType = await resolveDiscordChannelType(rest, channelId);
2331
+ if (channelType && DISCORD_FORUM_LIKE_TYPES.has(channelType)) throw new Error("Discord components are not supported in forum-style channels");
2332
+ const { body, buildResult } = await buildDiscordComponentPayload({
2333
+ spec,
2334
+ opts,
2335
+ accountId: accountInfo.accountId
2336
+ });
2337
+ let result;
2338
+ try {
2339
+ result = await request(() => rest.post(Routes.channelMessages(channelId), { body }), "components");
2340
+ } catch (err) {
2341
+ throw await buildDiscordSendError(err, {
2342
+ channelId,
2343
+ rest,
2344
+ token,
2345
+ hasMedia: Boolean(opts.mediaUrl)
2346
+ });
2347
+ }
2348
+ registerBuiltDiscordComponentMessage({
2349
+ buildResult,
2350
+ messageId: result.id
2351
+ });
2352
+ recordChannelActivity({
2353
+ channel: "discord",
2354
+ accountId: accountInfo.accountId,
2355
+ direction: "outbound"
2356
+ });
2357
+ return {
2358
+ messageId: result.id ?? "unknown",
2359
+ channelId: result.channel_id ?? channelId
2360
+ };
2361
+ }
2362
+ async function editDiscordComponentMessage(to, messageId, spec, opts = {}) {
2363
+ const cfg = opts.cfg ?? loadConfig();
2364
+ const accountInfo = resolveDiscordAccount({
2365
+ cfg,
2366
+ accountId: opts.accountId
2367
+ });
2368
+ const { token, rest, request } = createDiscordClient(opts, cfg);
2369
+ const { channelId } = await resolveChannelId(rest, await parseAndResolveRecipient(to, opts.accountId, cfg), request);
2370
+ const { body, buildResult } = await buildDiscordComponentPayload({
2371
+ spec,
2372
+ opts,
2373
+ accountId: accountInfo.accountId
2374
+ });
2375
+ let result;
2376
+ try {
2377
+ result = await request(() => rest.patch(Routes.channelMessage(channelId, messageId), { body }), "components");
2378
+ } catch (err) {
2379
+ throw await buildDiscordSendError(err, {
2380
+ channelId,
2381
+ rest,
2382
+ token,
2383
+ hasMedia: Boolean(opts.mediaUrl)
2384
+ });
2385
+ }
2386
+ registerBuiltDiscordComponentMessage({
2387
+ buildResult,
2388
+ messageId: result.id ?? messageId
2389
+ });
2390
+ recordChannelActivity({
2391
+ channel: "discord",
2392
+ accountId: accountInfo.accountId,
2393
+ direction: "outbound"
2394
+ });
2395
+ return {
2396
+ messageId: result.id ?? messageId,
2397
+ channelId: result.channel_id ?? channelId
2398
+ };
2399
+ }
2400
+ //#endregion
2401
+ //#region extensions/discord/src/send.typing.ts
2402
+ async function sendTypingDiscord(channelId, opts = {}) {
2403
+ await resolveDiscordRest(opts).post(Routes.channelTyping(channelId));
2404
+ return {
2405
+ ok: true,
2406
+ channelId
2407
+ };
2408
+ }
2409
+ //#endregion
2410
+ //#region extensions/discord/src/send.reactions.ts
2411
+ async function reactMessageDiscord(channelId, messageId, emoji, opts = {}) {
2412
+ const { rest, request } = createDiscordClient(opts, opts.cfg ?? loadConfig());
2413
+ const encoded = normalizeReactionEmoji(emoji);
2414
+ await request(() => rest.put(Routes.channelMessageOwnReaction(channelId, messageId, encoded)), "react");
2415
+ return { ok: true };
2416
+ }
2417
+ async function removeReactionDiscord(channelId, messageId, emoji, opts = {}) {
2418
+ const { rest } = createDiscordClient(opts, opts.cfg ?? loadConfig());
2419
+ const encoded = normalizeReactionEmoji(emoji);
2420
+ await rest.delete(Routes.channelMessageOwnReaction(channelId, messageId, encoded));
2421
+ return { ok: true };
2422
+ }
2423
+ async function removeOwnReactionsDiscord(channelId, messageId, opts = {}) {
2424
+ const { rest } = createDiscordClient(opts, opts.cfg ?? loadConfig());
2425
+ const message = await rest.get(Routes.channelMessage(channelId, messageId));
2426
+ const identifiers = /* @__PURE__ */ new Set();
2427
+ for (const reaction of message.reactions ?? []) {
2428
+ const identifier = buildReactionIdentifier(reaction.emoji);
2429
+ if (identifier) identifiers.add(identifier);
2430
+ }
2431
+ if (identifiers.size === 0) return {
2432
+ ok: true,
2433
+ removed: []
2434
+ };
2435
+ const removed = [];
2436
+ await Promise.allSettled(Array.from(identifiers, (identifier) => {
2437
+ removed.push(identifier);
2438
+ return rest.delete(Routes.channelMessageOwnReaction(channelId, messageId, normalizeReactionEmoji(identifier)));
2439
+ }));
2440
+ return {
2441
+ ok: true,
2442
+ removed
2443
+ };
2444
+ }
2445
+ async function fetchReactionsDiscord(channelId, messageId, opts = {}) {
2446
+ const { rest } = createDiscordClient(opts, opts.cfg ?? loadConfig());
2447
+ const reactions = (await rest.get(Routes.channelMessage(channelId, messageId))).reactions ?? [];
2448
+ if (reactions.length === 0) return [];
2449
+ const limit = typeof opts.limit === "number" && Number.isFinite(opts.limit) ? Math.min(Math.max(Math.floor(opts.limit), 1), 100) : 100;
2450
+ const summaries = [];
2451
+ for (const reaction of reactions) {
2452
+ const identifier = buildReactionIdentifier(reaction.emoji);
2453
+ if (!identifier) continue;
2454
+ const encoded = encodeURIComponent(identifier);
2455
+ const users = await rest.get(Routes.channelMessageReaction(channelId, messageId, encoded), { limit });
2456
+ summaries.push({
2457
+ emoji: {
2458
+ id: reaction.emoji.id ?? null,
2459
+ name: reaction.emoji.name ?? null,
2460
+ raw: formatReactionEmoji(reaction.emoji)
2461
+ },
2462
+ count: reaction.count,
2463
+ users: users.map((user) => ({
2464
+ id: user.id,
2465
+ username: user.username,
2466
+ tag: user.username && user.discriminator ? `${user.username}#${user.discriminator}` : user.username
2467
+ }))
2468
+ });
2469
+ }
2470
+ return summaries;
2471
+ }
2472
+ //#endregion
2473
+ export { removeRoleDiscord as $, sendStickerDiscord as A, readMessagesDiscord as B, readDiscordComponentSpec as C, resolveDiscordModalEntry as D, resolveDiscordComponentEntry as E, editMessageDiscord as F, createScheduledEventDiscord as G, unpinMessageDiscord as H, fetchMessageDiscord as I, fetchRoleInfoDiscord as J, fetchChannelInfoDiscord as K, listPinsDiscord as L, sendWebhookMessageDiscord as M, createThreadDiscord as N, sendMessageDiscord as O, deleteMessageDiscord as P, listScheduledEventsDiscord as Q, listThreadsDiscord as R, parseDiscordModalCustomIdForCarbon as S, buildDiscordInteractiveComponents as T, addRoleDiscord as U, searchMessagesDiscord as V, banMemberDiscord as W, kickMemberDiscord as X, fetchVoiceStatusDiscord as Y, listGuildChannelsDiscord as Z, createDiscordFormModal as _, createDiscordClient as _t, sendTypingDiscord as a, deleteChannelDiscord as at, parseDiscordComponentCustomIdForCarbon as b, chunkDiscordTextWithMode as bt, sendDiscordComponentMessage as c, removeChannelPermissionDiscord as ct, DISCORD_MODAL_CUSTOM_ID_KEY as d, stripUndefinedFields as dt, timeoutMemberDiscord as et, DiscordFormModal as f, DiscordSendError as ft, buildDiscordModalCustomId as g, hasAnyGuildPermissionDiscord as gt, buildDiscordComponentMessageFlags as h, hasAllGuildPermissionsDiscord as ht, removeReactionDiscord as i, createChannelDiscord as it, sendVoiceMessageDiscord as j, sendPollDiscord as k, DISCORD_COMPONENT_ATTACHMENT_PREFIX as l, setChannelPermissionDiscord as lt, buildDiscordComponentMessage as m, fetchMemberGuildPermissionsDiscord as mt, reactMessageDiscord as n, uploadEmojiDiscord as nt, editDiscordComponentMessage as o, editChannelDiscord as ot, buildDiscordComponentCustomId as p, fetchChannelPermissionsDiscord as pt, fetchMemberInfoDiscord as q, removeOwnReactionsDiscord as r, uploadStickerDiscord as rt, registerBuiltDiscordComponentMessage as s, moveChannelDiscord as st, fetchReactionsDiscord as t, listGuildEmojisDiscord as tt, DISCORD_COMPONENT_CUSTOM_ID_KEY as u, sendDiscordText as ut, formatDiscordComponentEventText as v, createDiscordRestClient as vt, resolveDiscordComponentAttachmentName as w, parseDiscordModalCustomId as x, parseDiscordComponentCustomId as y, createDiscordRetryRunner as yt, pinMessageDiscord as z };