@spinabot/brigade 1.6.1 → 1.8.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 (339) hide show
  1. package/dist/agents/agent-loop.d.ts +13 -0
  2. package/dist/agents/agent-loop.d.ts.map +1 -1
  3. package/dist/agents/agent-loop.js +5 -0
  4. package/dist/agents/agent-loop.js.map +1 -1
  5. package/dist/agents/channels/access-control/group-tool-policy.d.ts +73 -0
  6. package/dist/agents/channels/access-control/group-tool-policy.d.ts.map +1 -0
  7. package/dist/agents/channels/access-control/group-tool-policy.js +193 -0
  8. package/dist/agents/channels/access-control/group-tool-policy.js.map +1 -0
  9. package/dist/agents/channels/access-control/index.d.ts +1 -0
  10. package/dist/agents/channels/access-control/index.d.ts.map +1 -1
  11. package/dist/agents/channels/access-control/index.js +1 -0
  12. package/dist/agents/channels/access-control/index.js.map +1 -1
  13. package/dist/agents/channels/bluebubbles/account-config.d.ts +253 -0
  14. package/dist/agents/channels/bluebubbles/account-config.d.ts.map +1 -0
  15. package/dist/agents/channels/bluebubbles/account-config.js +486 -0
  16. package/dist/agents/channels/bluebubbles/account-config.js.map +1 -0
  17. package/dist/agents/channels/bluebubbles/account-registry.d.ts +33 -0
  18. package/dist/agents/channels/bluebubbles/account-registry.d.ts.map +1 -0
  19. package/dist/agents/channels/bluebubbles/account-registry.js +46 -0
  20. package/dist/agents/channels/bluebubbles/account-registry.js.map +1 -0
  21. package/dist/agents/channels/bluebubbles/adapter.d.ts +45 -0
  22. package/dist/agents/channels/bluebubbles/adapter.d.ts.map +1 -0
  23. package/dist/agents/channels/bluebubbles/adapter.js +366 -0
  24. package/dist/agents/channels/bluebubbles/adapter.js.map +1 -0
  25. package/dist/agents/channels/bluebubbles/catchup-cursor.d.ts +52 -0
  26. package/dist/agents/channels/bluebubbles/catchup-cursor.d.ts.map +1 -0
  27. package/dist/agents/channels/bluebubbles/catchup-cursor.js +118 -0
  28. package/dist/agents/channels/bluebubbles/catchup-cursor.js.map +1 -0
  29. package/dist/agents/channels/bluebubbles/catchup.d.ts +114 -0
  30. package/dist/agents/channels/bluebubbles/catchup.d.ts.map +1 -0
  31. package/dist/agents/channels/bluebubbles/catchup.js +220 -0
  32. package/dist/agents/channels/bluebubbles/catchup.js.map +1 -0
  33. package/dist/agents/channels/bluebubbles/chat.d.ts +75 -0
  34. package/dist/agents/channels/bluebubbles/chat.d.ts.map +1 -0
  35. package/dist/agents/channels/bluebubbles/chat.js +182 -0
  36. package/dist/agents/channels/bluebubbles/chat.js.map +1 -0
  37. package/dist/agents/channels/bluebubbles/connection.d.ts +95 -0
  38. package/dist/agents/channels/bluebubbles/connection.d.ts.map +1 -0
  39. package/dist/agents/channels/bluebubbles/connection.js +413 -0
  40. package/dist/agents/channels/bluebubbles/connection.js.map +1 -0
  41. package/dist/agents/channels/bluebubbles/contact-names.d.ts +79 -0
  42. package/dist/agents/channels/bluebubbles/contact-names.d.ts.map +1 -0
  43. package/dist/agents/channels/bluebubbles/contact-names.js +188 -0
  44. package/dist/agents/channels/bluebubbles/contact-names.js.map +1 -0
  45. package/dist/agents/channels/bluebubbles/debounce.d.ts +78 -0
  46. package/dist/agents/channels/bluebubbles/debounce.d.ts.map +1 -0
  47. package/dist/agents/channels/bluebubbles/debounce.js +173 -0
  48. package/dist/agents/channels/bluebubbles/debounce.js.map +1 -0
  49. package/dist/agents/channels/bluebubbles/dedupe.d.ts +25 -0
  50. package/dist/agents/channels/bluebubbles/dedupe.d.ts.map +1 -0
  51. package/dist/agents/channels/bluebubbles/dedupe.js +35 -0
  52. package/dist/agents/channels/bluebubbles/dedupe.js.map +1 -0
  53. package/dist/agents/channels/bluebubbles/effects.d.ts +17 -0
  54. package/dist/agents/channels/bluebubbles/effects.d.ts.map +1 -0
  55. package/dist/agents/channels/bluebubbles/effects.js +57 -0
  56. package/dist/agents/channels/bluebubbles/effects.js.map +1 -0
  57. package/dist/agents/channels/bluebubbles/history.d.ts +56 -0
  58. package/dist/agents/channels/bluebubbles/history.d.ts.map +1 -0
  59. package/dist/agents/channels/bluebubbles/history.js +140 -0
  60. package/dist/agents/channels/bluebubbles/history.js.map +1 -0
  61. package/dist/agents/channels/bluebubbles/index.d.ts +18 -0
  62. package/dist/agents/channels/bluebubbles/index.d.ts.map +1 -0
  63. package/dist/agents/channels/bluebubbles/index.js +18 -0
  64. package/dist/agents/channels/bluebubbles/index.js.map +1 -0
  65. package/dist/agents/channels/bluebubbles/media.d.ts +104 -0
  66. package/dist/agents/channels/bluebubbles/media.d.ts.map +1 -0
  67. package/dist/agents/channels/bluebubbles/media.js +222 -0
  68. package/dist/agents/channels/bluebubbles/media.js.map +1 -0
  69. package/dist/agents/channels/bluebubbles/messaging.d.ts +13 -0
  70. package/dist/agents/channels/bluebubbles/messaging.d.ts.map +1 -0
  71. package/dist/agents/channels/bluebubbles/messaging.js +36 -0
  72. package/dist/agents/channels/bluebubbles/messaging.js.map +1 -0
  73. package/dist/agents/channels/bluebubbles/module.d.ts +24 -0
  74. package/dist/agents/channels/bluebubbles/module.d.ts.map +1 -0
  75. package/dist/agents/channels/bluebubbles/module.js +52 -0
  76. package/dist/agents/channels/bluebubbles/module.js.map +1 -0
  77. package/dist/agents/channels/bluebubbles/normalize.d.ts +111 -0
  78. package/dist/agents/channels/bluebubbles/normalize.d.ts.map +1 -0
  79. package/dist/agents/channels/bluebubbles/normalize.js +239 -0
  80. package/dist/agents/channels/bluebubbles/normalize.js.map +1 -0
  81. package/dist/agents/channels/bluebubbles/plugin.d.ts +46 -0
  82. package/dist/agents/channels/bluebubbles/plugin.d.ts.map +1 -0
  83. package/dist/agents/channels/bluebubbles/plugin.js +242 -0
  84. package/dist/agents/channels/bluebubbles/plugin.js.map +1 -0
  85. package/dist/agents/channels/bluebubbles/probe.d.ts +79 -0
  86. package/dist/agents/channels/bluebubbles/probe.d.ts.map +1 -0
  87. package/dist/agents/channels/bluebubbles/probe.js +138 -0
  88. package/dist/agents/channels/bluebubbles/probe.js.map +1 -0
  89. package/dist/agents/channels/bluebubbles/reactions.d.ts +46 -0
  90. package/dist/agents/channels/bluebubbles/reactions.d.ts.map +1 -0
  91. package/dist/agents/channels/bluebubbles/reactions.js +207 -0
  92. package/dist/agents/channels/bluebubbles/reactions.js.map +1 -0
  93. package/dist/agents/channels/bluebubbles/send.d.ts +132 -0
  94. package/dist/agents/channels/bluebubbles/send.d.ts.map +1 -0
  95. package/dist/agents/channels/bluebubbles/send.js +327 -0
  96. package/dist/agents/channels/bluebubbles/send.js.map +1 -0
  97. package/dist/agents/channels/bluebubbles/status-issues.d.ts +57 -0
  98. package/dist/agents/channels/bluebubbles/status-issues.d.ts.map +1 -0
  99. package/dist/agents/channels/bluebubbles/status-issues.js +93 -0
  100. package/dist/agents/channels/bluebubbles/status-issues.js.map +1 -0
  101. package/dist/agents/channels/bluebubbles/types.d.ts +69 -0
  102. package/dist/agents/channels/bluebubbles/types.d.ts.map +1 -0
  103. package/dist/agents/channels/bluebubbles/types.js +118 -0
  104. package/dist/agents/channels/bluebubbles/types.js.map +1 -0
  105. package/dist/agents/channels/bluebubbles/webhook.d.ts +97 -0
  106. package/dist/agents/channels/bluebubbles/webhook.d.ts.map +1 -0
  107. package/dist/agents/channels/bluebubbles/webhook.js +249 -0
  108. package/dist/agents/channels/bluebubbles/webhook.js.map +1 -0
  109. package/dist/agents/channels/bundled-channel-metas.d.ts +13 -0
  110. package/dist/agents/channels/bundled-channel-metas.d.ts.map +1 -1
  111. package/dist/agents/channels/bundled-channel-metas.js +33 -0
  112. package/dist/agents/channels/bundled-channel-metas.js.map +1 -1
  113. package/dist/agents/channels/discord/account-config.d.ts +60 -0
  114. package/dist/agents/channels/discord/account-config.d.ts.map +1 -1
  115. package/dist/agents/channels/discord/account-config.js +89 -0
  116. package/dist/agents/channels/discord/account-config.js.map +1 -1
  117. package/dist/agents/channels/discord/adapter.d.ts +24 -1
  118. package/dist/agents/channels/discord/adapter.d.ts.map +1 -1
  119. package/dist/agents/channels/discord/adapter.js +208 -41
  120. package/dist/agents/channels/discord/adapter.js.map +1 -1
  121. package/dist/agents/channels/discord/component-blocks.d.ts +108 -0
  122. package/dist/agents/channels/discord/component-blocks.d.ts.map +1 -0
  123. package/dist/agents/channels/discord/component-blocks.js +113 -0
  124. package/dist/agents/channels/discord/component-blocks.js.map +1 -0
  125. package/dist/agents/channels/discord/components.d.ts +78 -0
  126. package/dist/agents/channels/discord/components.d.ts.map +1 -1
  127. package/dist/agents/channels/discord/components.js +89 -0
  128. package/dist/agents/channels/discord/components.js.map +1 -1
  129. package/dist/agents/channels/discord/connection.d.ts +195 -12
  130. package/dist/agents/channels/discord/connection.d.ts.map +1 -1
  131. package/dist/agents/channels/discord/connection.js +852 -38
  132. package/dist/agents/channels/discord/connection.js.map +1 -1
  133. package/dist/agents/channels/discord/directory-cache.d.ts +47 -0
  134. package/dist/agents/channels/discord/directory-cache.d.ts.map +1 -0
  135. package/dist/agents/channels/discord/directory-cache.js +131 -0
  136. package/dist/agents/channels/discord/directory-cache.js.map +1 -0
  137. package/dist/agents/channels/discord/directory-live.d.ts +61 -0
  138. package/dist/agents/channels/discord/directory-live.d.ts.map +1 -0
  139. package/dist/agents/channels/discord/directory-live.js +140 -0
  140. package/dist/agents/channels/discord/directory-live.js.map +1 -0
  141. package/dist/agents/channels/discord/format.d.ts +15 -0
  142. package/dist/agents/channels/discord/format.d.ts.map +1 -1
  143. package/dist/agents/channels/discord/format.js +56 -0
  144. package/dist/agents/channels/discord/format.js.map +1 -1
  145. package/dist/agents/channels/discord/guilds.d.ts +25 -0
  146. package/dist/agents/channels/discord/guilds.d.ts.map +1 -0
  147. package/dist/agents/channels/discord/guilds.js +46 -0
  148. package/dist/agents/channels/discord/guilds.js.map +1 -0
  149. package/dist/agents/channels/discord/inbound-extras.d.ts +166 -9
  150. package/dist/agents/channels/discord/inbound-extras.d.ts.map +1 -1
  151. package/dist/agents/channels/discord/inbound-extras.js +246 -8
  152. package/dist/agents/channels/discord/inbound-extras.js.map +1 -1
  153. package/dist/agents/channels/discord/index.d.ts +10 -3
  154. package/dist/agents/channels/discord/index.d.ts.map +1 -1
  155. package/dist/agents/channels/discord/index.js +10 -3
  156. package/dist/agents/channels/discord/index.js.map +1 -1
  157. package/dist/agents/channels/discord/modal-registry.d.ts +89 -0
  158. package/dist/agents/channels/discord/modal-registry.d.ts.map +1 -0
  159. package/dist/agents/channels/discord/modal-registry.js +104 -0
  160. package/dist/agents/channels/discord/modal-registry.js.map +1 -0
  161. package/dist/agents/channels/discord/modals.d.ts +100 -0
  162. package/dist/agents/channels/discord/modals.d.ts.map +1 -0
  163. package/dist/agents/channels/discord/modals.js +124 -0
  164. package/dist/agents/channels/discord/modals.js.map +1 -0
  165. package/dist/agents/channels/discord/permission-audit.d.ts +43 -0
  166. package/dist/agents/channels/discord/permission-audit.d.ts.map +1 -0
  167. package/dist/agents/channels/discord/permission-audit.js +192 -0
  168. package/dist/agents/channels/discord/permission-audit.js.map +1 -0
  169. package/dist/agents/channels/discord/plugin.d.ts +18 -2
  170. package/dist/agents/channels/discord/plugin.d.ts.map +1 -1
  171. package/dist/agents/channels/discord/plugin.js +73 -4
  172. package/dist/agents/channels/discord/plugin.js.map +1 -1
  173. package/dist/agents/channels/discord/probe.d.ts +23 -1
  174. package/dist/agents/channels/discord/probe.d.ts.map +1 -1
  175. package/dist/agents/channels/discord/probe.js +40 -5
  176. package/dist/agents/channels/discord/probe.js.map +1 -1
  177. package/dist/agents/channels/discord/rest-actions.d.ts +346 -0
  178. package/dist/agents/channels/discord/rest-actions.d.ts.map +1 -0
  179. package/dist/agents/channels/discord/rest-actions.js +559 -0
  180. package/dist/agents/channels/discord/rest-actions.js.map +1 -0
  181. package/dist/agents/channels/discord/rest-components.d.ts +122 -0
  182. package/dist/agents/channels/discord/rest-components.d.ts.map +1 -0
  183. package/dist/agents/channels/discord/rest-components.js +243 -0
  184. package/dist/agents/channels/discord/rest-components.js.map +1 -0
  185. package/dist/agents/channels/discord/security-audit.d.ts +29 -0
  186. package/dist/agents/channels/discord/security-audit.d.ts.map +1 -0
  187. package/dist/agents/channels/discord/security-audit.js +94 -0
  188. package/dist/agents/channels/discord/security-audit.js.map +1 -0
  189. package/dist/agents/channels/discord/security-doctor.d.ts +43 -0
  190. package/dist/agents/channels/discord/security-doctor.d.ts.map +1 -0
  191. package/dist/agents/channels/discord/security-doctor.js +83 -0
  192. package/dist/agents/channels/discord/security-doctor.js.map +1 -0
  193. package/dist/agents/channels/discord/status-issues.d.ts +37 -0
  194. package/dist/agents/channels/discord/status-issues.d.ts.map +1 -0
  195. package/dist/agents/channels/discord/status-issues.js +66 -0
  196. package/dist/agents/channels/discord/status-issues.js.map +1 -0
  197. package/dist/agents/channels/discord/subagent-thread-binding-store.d.ts +57 -0
  198. package/dist/agents/channels/discord/subagent-thread-binding-store.d.ts.map +1 -0
  199. package/dist/agents/channels/discord/subagent-thread-binding-store.js +98 -0
  200. package/dist/agents/channels/discord/subagent-thread-binding-store.js.map +1 -0
  201. package/dist/agents/channels/discord/subagent-thread-binding.d.ts +95 -0
  202. package/dist/agents/channels/discord/subagent-thread-binding.d.ts.map +1 -0
  203. package/dist/agents/channels/discord/subagent-thread-binding.js +208 -0
  204. package/dist/agents/channels/discord/subagent-thread-binding.js.map +1 -0
  205. package/dist/agents/channels/discord/system-events.d.ts +31 -0
  206. package/dist/agents/channels/discord/system-events.d.ts.map +1 -0
  207. package/dist/agents/channels/discord/system-events.js +74 -0
  208. package/dist/agents/channels/discord/system-events.js.map +1 -0
  209. package/dist/agents/channels/general-callback.d.ts +12 -0
  210. package/dist/agents/channels/general-callback.d.ts.map +1 -1
  211. package/dist/agents/channels/general-callback.js +18 -0
  212. package/dist/agents/channels/general-callback.js.map +1 -1
  213. package/dist/agents/channels/imessage/account-config.d.ts +178 -0
  214. package/dist/agents/channels/imessage/account-config.d.ts.map +1 -0
  215. package/dist/agents/channels/imessage/account-config.js +371 -0
  216. package/dist/agents/channels/imessage/account-config.js.map +1 -0
  217. package/dist/agents/channels/imessage/adapter.d.ts +36 -0
  218. package/dist/agents/channels/imessage/adapter.d.ts.map +1 -0
  219. package/dist/agents/channels/imessage/adapter.js +286 -0
  220. package/dist/agents/channels/imessage/adapter.js.map +1 -0
  221. package/dist/agents/channels/imessage/client.d.ts +99 -0
  222. package/dist/agents/channels/imessage/client.d.ts.map +1 -0
  223. package/dist/agents/channels/imessage/client.js +231 -0
  224. package/dist/agents/channels/imessage/client.js.map +1 -0
  225. package/dist/agents/channels/imessage/connection.d.ts +101 -0
  226. package/dist/agents/channels/imessage/connection.d.ts.map +1 -0
  227. package/dist/agents/channels/imessage/connection.js +367 -0
  228. package/dist/agents/channels/imessage/connection.js.map +1 -0
  229. package/dist/agents/channels/imessage/format.d.ts +45 -0
  230. package/dist/agents/channels/imessage/format.d.ts.map +1 -0
  231. package/dist/agents/channels/imessage/format.js +170 -0
  232. package/dist/agents/channels/imessage/format.js.map +1 -0
  233. package/dist/agents/channels/imessage/history.d.ts +49 -0
  234. package/dist/agents/channels/imessage/history.d.ts.map +1 -0
  235. package/dist/agents/channels/imessage/history.js +74 -0
  236. package/dist/agents/channels/imessage/history.js.map +1 -0
  237. package/dist/agents/channels/imessage/index.d.ts +25 -0
  238. package/dist/agents/channels/imessage/index.d.ts.map +1 -0
  239. package/dist/agents/channels/imessage/index.js +25 -0
  240. package/dist/agents/channels/imessage/index.js.map +1 -0
  241. package/dist/agents/channels/imessage/media.d.ts +92 -0
  242. package/dist/agents/channels/imessage/media.d.ts.map +1 -0
  243. package/dist/agents/channels/imessage/media.js +196 -0
  244. package/dist/agents/channels/imessage/media.js.map +1 -0
  245. package/dist/agents/channels/imessage/messaging.d.ts +14 -0
  246. package/dist/agents/channels/imessage/messaging.d.ts.map +1 -0
  247. package/dist/agents/channels/imessage/messaging.js +37 -0
  248. package/dist/agents/channels/imessage/messaging.js.map +1 -0
  249. package/dist/agents/channels/imessage/module.d.ts +16 -0
  250. package/dist/agents/channels/imessage/module.d.ts.map +1 -0
  251. package/dist/agents/channels/imessage/module.js +23 -0
  252. package/dist/agents/channels/imessage/module.js.map +1 -0
  253. package/dist/agents/channels/imessage/monitor.d.ts +207 -0
  254. package/dist/agents/channels/imessage/monitor.d.ts.map +1 -0
  255. package/dist/agents/channels/imessage/monitor.js +504 -0
  256. package/dist/agents/channels/imessage/monitor.js.map +1 -0
  257. package/dist/agents/channels/imessage/plugin.d.ts +53 -0
  258. package/dist/agents/channels/imessage/plugin.d.ts.map +1 -0
  259. package/dist/agents/channels/imessage/plugin.js +215 -0
  260. package/dist/agents/channels/imessage/plugin.js.map +1 -0
  261. package/dist/agents/channels/imessage/probe.d.ts +68 -0
  262. package/dist/agents/channels/imessage/probe.d.ts.map +1 -0
  263. package/dist/agents/channels/imessage/probe.js +134 -0
  264. package/dist/agents/channels/imessage/probe.js.map +1 -0
  265. package/dist/agents/channels/imessage/remote-attachments.d.ts +61 -0
  266. package/dist/agents/channels/imessage/remote-attachments.d.ts.map +1 -0
  267. package/dist/agents/channels/imessage/remote-attachments.js +131 -0
  268. package/dist/agents/channels/imessage/remote-attachments.js.map +1 -0
  269. package/dist/agents/channels/imessage/send.d.ts +61 -0
  270. package/dist/agents/channels/imessage/send.d.ts.map +1 -0
  271. package/dist/agents/channels/imessage/send.js +108 -0
  272. package/dist/agents/channels/imessage/send.js.map +1 -0
  273. package/dist/agents/channels/imessage/targets.d.ts +91 -0
  274. package/dist/agents/channels/imessage/targets.d.ts.map +1 -0
  275. package/dist/agents/channels/imessage/targets.js +245 -0
  276. package/dist/agents/channels/imessage/targets.js.map +1 -0
  277. package/dist/agents/channels/imessage/watch-error.d.ts +23 -0
  278. package/dist/agents/channels/imessage/watch-error.d.ts.map +1 -0
  279. package/dist/agents/channels/imessage/watch-error.js +69 -0
  280. package/dist/agents/channels/imessage/watch-error.js.map +1 -0
  281. package/dist/agents/channels/inbound-pipeline.d.ts +11 -0
  282. package/dist/agents/channels/inbound-pipeline.d.ts.map +1 -1
  283. package/dist/agents/channels/inbound-pipeline.js +25 -4
  284. package/dist/agents/channels/inbound-pipeline.js.map +1 -1
  285. package/dist/agents/channels/manager.d.ts +9 -0
  286. package/dist/agents/channels/manager.d.ts.map +1 -1
  287. package/dist/agents/channels/manager.js.map +1 -1
  288. package/dist/agents/channels/sdk.d.ts +4 -0
  289. package/dist/agents/channels/sdk.d.ts.map +1 -1
  290. package/dist/agents/channels/sdk.js +4 -0
  291. package/dist/agents/channels/sdk.js.map +1 -1
  292. package/dist/agents/extensions/modules/index.d.ts.map +1 -1
  293. package/dist/agents/extensions/modules/index.js +12 -0
  294. package/dist/agents/extensions/modules/index.js.map +1 -1
  295. package/dist/agents/extensions/types.d.ts +7 -0
  296. package/dist/agents/extensions/types.d.ts.map +1 -1
  297. package/dist/agents/extensions/types.js.map +1 -1
  298. package/dist/agents/session-wiring.d.ts +31 -0
  299. package/dist/agents/session-wiring.d.ts.map +1 -1
  300. package/dist/agents/session-wiring.js +45 -2
  301. package/dist/agents/session-wiring.js.map +1 -1
  302. package/dist/agents/subagent-announce-delivery.d.ts +10 -0
  303. package/dist/agents/subagent-announce-delivery.d.ts.map +1 -1
  304. package/dist/agents/subagent-announce-delivery.js +1 -0
  305. package/dist/agents/subagent-announce-delivery.js.map +1 -1
  306. package/dist/agents/subagent-completion-bridge.d.ts.map +1 -1
  307. package/dist/agents/subagent-completion-bridge.js +81 -0
  308. package/dist/agents/subagent-completion-bridge.js.map +1 -1
  309. package/dist/agents/subagent-spawn.d.ts.map +1 -1
  310. package/dist/agents/subagent-spawn.js +57 -4
  311. package/dist/agents/subagent-spawn.js.map +1 -1
  312. package/dist/agents/tools/bluebubbles-action-tool.d.ts +66 -0
  313. package/dist/agents/tools/bluebubbles-action-tool.d.ts.map +1 -0
  314. package/dist/agents/tools/bluebubbles-action-tool.js +234 -0
  315. package/dist/agents/tools/bluebubbles-action-tool.js.map +1 -0
  316. package/dist/agents/tools/discord-action-tool.d.ts +224 -0
  317. package/dist/agents/tools/discord-action-tool.d.ts.map +1 -0
  318. package/dist/agents/tools/discord-action-tool.js +848 -0
  319. package/dist/agents/tools/discord-action-tool.js.map +1 -0
  320. package/dist/agents/tools/registry.d.ts.map +1 -1
  321. package/dist/agents/tools/registry.js +39 -0
  322. package/dist/agents/tools/registry.js.map +1 -1
  323. package/dist/agents/tools/sessions/index.d.ts +8 -0
  324. package/dist/agents/tools/sessions/index.d.ts.map +1 -1
  325. package/dist/agents/tools/sessions/index.js +15 -3
  326. package/dist/agents/tools/sessions/index.js.map +1 -1
  327. package/dist/buildstamp.json +1 -1
  328. package/dist/cli/commands/channels.d.ts +2 -0
  329. package/dist/cli/commands/channels.d.ts.map +1 -1
  330. package/dist/cli/commands/channels.js +58 -1
  331. package/dist/cli/commands/channels.js.map +1 -1
  332. package/dist/core/server.d.ts.map +1 -1
  333. package/dist/core/server.js +48 -2
  334. package/dist/core/server.js.map +1 -1
  335. package/dist/infra/net/fetch-guard.d.ts +24 -2
  336. package/dist/infra/net/fetch-guard.d.ts.map +1 -1
  337. package/dist/infra/net/fetch-guard.js +78 -31
  338. package/dist/infra/net/fetch-guard.js.map +1 -1
  339. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-spawn.js","sourceRoot":"","sources":["../../src/agents/subagent-spawn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subagent-spawn.js","sourceRoot":"","sources":["../../src/agents/subagent-spawn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * `bluebubbles_action` — owner-only BlueBubbles group-admin surface.
3
+ *
4
+ * Brigade's live BlueBubbles adapter handles inbound + the everyday
5
+ * send/edit/react/typing/mark-read path, but it does NOT expose group
6
+ * administration (membership, rename, group icon). This tool fills that gap with
7
+ * a SELF-CONTAINED client over the same BlueBubbles REST plumbing the channel
8
+ * uses (`chat.ts` helpers over `buildBlueBubblesApiUrl` + the injectable
9
+ * `fetchImpl`): it resolves the server URL + password from config exactly like
10
+ * `probe.ts`, so it works whether or not the live adapter is up.
11
+ *
12
+ * Every action here needs the BlueBubbles server's Private API. The tool probes
13
+ * the server once (cached server/info) to learn the Private-API status, then
14
+ * refuses cleanly when it is off. One meta-tool with an `action` discriminator
15
+ * (keeps the prompt small) dispatches to the matching `chat.ts` helper.
16
+ *
17
+ * Owner-only: the standard `wrapOwnerOnlyToolExecution` gate (applied at
18
+ * session-wiring) already refuses non-owner senders + unattended cron turns, so
19
+ * this file does not re-implement auth. The registry only ASSEMBLES this tool
20
+ * when the BlueBubbles channel is configured (`channels.bluebubbles.enabled`),
21
+ * so a non-BlueBubbles install never sees it.
22
+ */
23
+ import { Type } from "typebox";
24
+ import { type BlueBubblesActionFlags } from "../channels/bluebubbles/account-config.js";
25
+ import type { FetchLike } from "../channels/bluebubbles/types.js";
26
+ import type { BrigadeTool } from "./types.js";
27
+ declare const BlueBubblesActionParams: Type.TObject<{
28
+ action: Type.TUnion<[Type.TLiteral<"add-participant">, Type.TLiteral<"remove-participant">, Type.TLiteral<"rename-group">, Type.TLiteral<"set-group-icon">, Type.TLiteral<"leave-group">, Type.TLiteral<"send-effect">, Type.TLiteral<"reply">]>;
29
+ accountId: Type.TOptional<Type.TString>;
30
+ chatGuid: Type.TString;
31
+ address: Type.TOptional<Type.TString>;
32
+ displayName: Type.TOptional<Type.TString>;
33
+ iconPath: Type.TOptional<Type.TString>;
34
+ text: Type.TOptional<Type.TString>;
35
+ effect: Type.TOptional<Type.TString>;
36
+ replyToId: Type.TOptional<Type.TString>;
37
+ partIndex: Type.TOptional<Type.TInteger>;
38
+ }>;
39
+ interface BlueBubblesActionResult {
40
+ action: string;
41
+ ok: boolean;
42
+ message: string;
43
+ }
44
+ export interface MakeBlueBubblesActionToolOptions {
45
+ /** Inject the resolved server URL + password (tests). Defaults to config-resolve per call. */
46
+ resolveAccount?: (accountId: string) => {
47
+ serverUrl: string;
48
+ password: string;
49
+ timeoutMs?: number;
50
+ };
51
+ /** Inject the Private-API status (tests). When omitted, probed from the server per call. */
52
+ resolvePrivateApi?: (account: {
53
+ serverUrl: string;
54
+ password: string;
55
+ timeoutMs?: number;
56
+ }) => Promise<boolean | null>;
57
+ /** Inject the per-account action toggles (tests). Defaults to config-resolve per call. */
58
+ resolveActions?: (accountId: string) => BlueBubblesActionFlags;
59
+ /** Inject fetch (tests). Defaults to global fetch in the REST helpers. */
60
+ fetchImpl?: FetchLike;
61
+ /** Inject the icon file reader (tests). Defaults to reading from disk after the media-path guard. */
62
+ readIcon?: (path: string) => Promise<Uint8Array>;
63
+ }
64
+ export declare function makeBlueBubblesActionTool(opts?: MakeBlueBubblesActionToolOptions): BrigadeTool<typeof BlueBubblesActionParams, BlueBubblesActionResult>;
65
+ export {};
66
+ //# sourceMappingURL=bluebubbles-action-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bluebubbles-action-tool.d.ts","sourceRoot":"","sources":["../../../src/agents/tools/bluebubbles-action-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAG/B,OAAO,EAKN,KAAK,sBAAsB,EAE3B,MAAM,2CAA2C,CAAC;AAWnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAGlE,OAAO,KAAK,EAAmB,WAAW,EAAE,MAAM,YAAY,CAAC;AAI/D,QAAA,MAAM,uBAAuB;;;;;;;;;;;EA8C3B,CAAC;AAEH,UAAU,uBAAuB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,gCAAgC;IAChD,8FAA8F;IAC9F,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpG,4FAA4F;IAC5F,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACtH,0FAA0F;IAC1F,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,sBAAsB,CAAC;IAC/D,0EAA0E;IAC1E,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,qGAAqG;IACrG,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACjD;AAED,wBAAgB,yBAAyB,CACxC,IAAI,GAAE,gCAAqC,GACzC,WAAW,CAAC,OAAO,uBAAuB,EAAE,uBAAuB,CAAC,CAkLtE"}
@@ -0,0 +1,234 @@
1
+ /**
2
+ * `bluebubbles_action` — owner-only BlueBubbles group-admin surface.
3
+ *
4
+ * Brigade's live BlueBubbles adapter handles inbound + the everyday
5
+ * send/edit/react/typing/mark-read path, but it does NOT expose group
6
+ * administration (membership, rename, group icon). This tool fills that gap with
7
+ * a SELF-CONTAINED client over the same BlueBubbles REST plumbing the channel
8
+ * uses (`chat.ts` helpers over `buildBlueBubblesApiUrl` + the injectable
9
+ * `fetchImpl`): it resolves the server URL + password from config exactly like
10
+ * `probe.ts`, so it works whether or not the live adapter is up.
11
+ *
12
+ * Every action here needs the BlueBubbles server's Private API. The tool probes
13
+ * the server once (cached server/info) to learn the Private-API status, then
14
+ * refuses cleanly when it is off. One meta-tool with an `action` discriminator
15
+ * (keeps the prompt small) dispatches to the matching `chat.ts` helper.
16
+ *
17
+ * Owner-only: the standard `wrapOwnerOnlyToolExecution` gate (applied at
18
+ * session-wiring) already refuses non-owner senders + unattended cron turns, so
19
+ * this file does not re-implement auth. The registry only ASSEMBLES this tool
20
+ * when the BlueBubbles channel is configured (`channels.bluebubbles.enabled`),
21
+ * so a non-BlueBubbles install never sees it.
22
+ */
23
+ import { readFile } from "node:fs/promises";
24
+ import { Type } from "typebox";
25
+ import { loadConfig } from "../../core/config.js";
26
+ import { BLUEBUBBLES_DEFAULT_ACCOUNT_ID, isBlueBubblesOpAllowed, resolveBlueBubblesAccount, resolveBlueBubblesActions, } from "../channels/bluebubbles/account-config.js";
27
+ import { addBlueBubblesParticipant, leaveBlueBubblesChat, removeBlueBubblesParticipant, renameBlueBubblesChat, setBlueBubblesGroupIcon, } from "../channels/bluebubbles/chat.js";
28
+ import { resolveEffectId } from "../channels/bluebubbles/effects.js";
29
+ import { probeBlueBubblesCached } from "../channels/bluebubbles/probe.js";
30
+ import { sendBlueBubblesText } from "../channels/bluebubbles/send.js";
31
+ import { validateOutboundMediaPath } from "../../security/media-path-guard.js";
32
+ import { jsonResult } from "./common.js";
33
+ /* ───────────────────────────── params ───────────────────────────── */
34
+ const BlueBubblesActionParams = Type.Object({
35
+ action: Type.Union([
36
+ Type.Literal("add-participant"),
37
+ Type.Literal("remove-participant"),
38
+ Type.Literal("rename-group"),
39
+ Type.Literal("set-group-icon"),
40
+ Type.Literal("leave-group"),
41
+ Type.Literal("send-effect"),
42
+ Type.Literal("reply"),
43
+ ], {
44
+ description: "The BlueBubbles action to run. Group admin: add-participant / remove-participant (needs address), rename-group (needs displayName), set-group-icon (needs iconPath), leave-group. Rich send: send-effect (a bubble/screen effect — needs text + effect), reply (a native inline reply — needs text + replyToId). All require the server's Private API.",
45
+ }),
46
+ accountId: Type.Optional(Type.String({ description: "Which BlueBubbles account to act as (default: the configured default).", maxLength: 64 })),
47
+ chatGuid: Type.String({
48
+ description: "Target group chat GUID (e.g. `iMessage;+;chat123…`). The `chat_guid:` prefix is optional and stripped.",
49
+ maxLength: 256,
50
+ }),
51
+ address: Type.Optional(Type.String({ description: "add-participant / remove-participant: the phone number or email to add/remove.", maxLength: 256 })),
52
+ displayName: Type.Optional(Type.String({ description: "rename-group: the new group name.", maxLength: 256 })),
53
+ iconPath: Type.Optional(Type.String({ description: "set-group-icon: a local image file path to upload as the group photo.", maxLength: 1024 })),
54
+ text: Type.Optional(Type.String({ description: "send-effect / reply: the message text to send.", maxLength: 10_000 })),
55
+ effect: Type.Optional(Type.String({
56
+ description: "send-effect: the effect name (slam, loud, gentle, invisible-ink, echo, spotlight, balloons, confetti, love, lasers, fireworks, sparkles).",
57
+ maxLength: 64,
58
+ })),
59
+ replyToId: Type.Optional(Type.String({ description: "reply: the GUID of the message to reply to (inline thread).", maxLength: 256 })),
60
+ partIndex: Type.Optional(Type.Integer({ description: "reply: the part index of the replied-to message (default 0).", minimum: 0 })),
61
+ });
62
+ export function makeBlueBubblesActionTool(opts = {}) {
63
+ const resolveAccount = opts.resolveAccount ??
64
+ ((accountId) => {
65
+ const acc = resolveBlueBubblesAccount(loadConfig(), accountId);
66
+ return { serverUrl: acc.serverUrl, password: acc.password, timeoutMs: acc.probeTimeoutMs };
67
+ });
68
+ const resolvePrivateApi = opts.resolvePrivateApi ??
69
+ (async (account) => {
70
+ // Served from the per-server TTL cache when fresh, so back-to-back actions
71
+ // don't each re-probe server/info.
72
+ const probe = await probeBlueBubblesCached({
73
+ accountId: `tool:${account.serverUrl}`,
74
+ serverUrl: account.serverUrl,
75
+ password: account.password,
76
+ ...(account.timeoutMs !== undefined ? { timeoutMs: account.timeoutMs } : {}),
77
+ ...(opts.fetchImpl ? { fetchImpl: opts.fetchImpl } : {}),
78
+ });
79
+ return probe.privateApi;
80
+ });
81
+ const resolveActions = opts.resolveActions ??
82
+ ((accountId) => resolveBlueBubblesActions(loadConfig(), accountId));
83
+ const readIcon = opts.readIcon ??
84
+ (async (path) => {
85
+ // Exfil guard — refuse a secret / system file before reading its bytes.
86
+ const verdict = validateOutboundMediaPath(path);
87
+ if (!verdict.ok)
88
+ throw new Error(verdict.reason ?? "icon path is not allowed");
89
+ return new Uint8Array(await readFile(path));
90
+ });
91
+ return {
92
+ name: "bluebubbles_action",
93
+ label: "BlueBubbles action",
94
+ displaySummary: "managing a BlueBubbles group",
95
+ ownerOnly: true,
96
+ description: [
97
+ "Administer a BlueBubbles (iMessage) chat the everyday chat reply can't:",
98
+ "add-participant / remove-participant (by phone or email), rename-group, set-group-icon (a local image path), leave-group;",
99
+ "plus rich sends — send-effect (a bubble/screen effect with `text` + `effect`) and reply (a native inline reply with `text` + `replyToId`).",
100
+ "All actions require the BlueBubbles server's Private API; the tool reports clearly when it is off.",
101
+ "Owner-only. Every action needs a `chatGuid`; membership needs an `address`, rename needs `displayName`, set-group-icon needs `iconPath`.",
102
+ ].join(" "),
103
+ parameters: BlueBubblesActionParams,
104
+ execute: async (_toolCallId, args) => {
105
+ const action = args.action;
106
+ const ok = (message) => jsonResult({ action, ok: true, message });
107
+ const fail = (message) => jsonResult({ action, ok: false, message });
108
+ const accountId = (args.accountId ?? "").trim() || BLUEBUBBLES_DEFAULT_ACCOUNT_ID;
109
+ let account;
110
+ try {
111
+ account = resolveAccount(accountId);
112
+ }
113
+ catch (err) {
114
+ return fail(`Cannot resolve the BlueBubbles account: ${err instanceof Error ? err.message : String(err)}`);
115
+ }
116
+ if (!account.serverUrl || !account.password) {
117
+ return fail("BlueBubbles is not configured — set channels.bluebubbles.serverUrl + password (or connect the channel) first, then retry.");
118
+ }
119
+ // Strip an optional `chat_guid:` prefix the agent might carry from an inbound id.
120
+ const chatGuid = (args.chatGuid ?? "").trim().replace(/^chat_guid:/i, "");
121
+ if (!chatGuid)
122
+ return fail(`${action} requires a \`chatGuid\`.`);
123
+ // Resolve the per-account action toggles + gate the action against them,
124
+ // PER-OP. Each op maps to a fine-grained flag that inherits its coarse
125
+ // umbrella when unset (group-admin ops ← `groupAdmin`; send-effect ←
126
+ // `effects`; reply ← always on) — so the operator can, e.g., allow
127
+ // rename-group but forbid remove-participant.
128
+ const actions = resolveActions(accountId);
129
+ const OP_FLAG = {
130
+ "add-participant": "addParticipant",
131
+ "remove-participant": "removeParticipant",
132
+ "rename-group": "renameGroup",
133
+ "set-group-icon": "setGroupIcon",
134
+ "leave-group": "leaveGroup",
135
+ "send-effect": "sendWithEffect",
136
+ reply: "reply",
137
+ };
138
+ const opFlag = OP_FLAG[action];
139
+ if (opFlag && !isBlueBubblesOpAllowed(actions, opFlag)) {
140
+ return fail(`BlueBubbles ${action} is disabled (channels.bluebubbles.actions.${opFlag} = false).`);
141
+ }
142
+ // Probe once for the Private-API status — every action here needs it.
143
+ const privateApi = await resolvePrivateApi(account).catch(() => null);
144
+ if (privateApi === false) {
145
+ return fail(`BlueBubbles ${action} requires the Private API, but it is disabled on the BlueBubbles server. Enable the Private API in the BlueBubbles macOS app, then retry.`);
146
+ }
147
+ const base = {
148
+ serverUrl: account.serverUrl,
149
+ password: account.password,
150
+ ...(account.timeoutMs !== undefined ? { timeoutMs: account.timeoutMs } : {}),
151
+ ...(opts.fetchImpl ? { fetchImpl: opts.fetchImpl } : {}),
152
+ // We already refused on a definite `false` above; a `true` or unknown
153
+ // (`null`) status proceeds (the helper's own guard only blocks `false`).
154
+ privateApiEnabled: true,
155
+ };
156
+ try {
157
+ switch (action) {
158
+ case "add-participant": {
159
+ const address = (args.address ?? "").trim();
160
+ if (!address)
161
+ return fail("add-participant requires an `address`.");
162
+ await addBlueBubblesParticipant(base, { chatGuid, address });
163
+ return ok(`Added ${address} to the group.`);
164
+ }
165
+ case "remove-participant": {
166
+ const address = (args.address ?? "").trim();
167
+ if (!address)
168
+ return fail("remove-participant requires an `address`.");
169
+ await removeBlueBubblesParticipant(base, { chatGuid, address });
170
+ return ok(`Removed ${address} from the group.`);
171
+ }
172
+ case "rename-group": {
173
+ const displayName = (args.displayName ?? "").trim();
174
+ if (!displayName)
175
+ return fail("rename-group requires a `displayName`.");
176
+ await renameBlueBubblesChat(base, { chatGuid, displayName });
177
+ return ok(`Renamed the group to "${displayName}".`);
178
+ }
179
+ case "set-group-icon": {
180
+ const iconPath = (args.iconPath ?? "").trim();
181
+ if (!iconPath)
182
+ return fail("set-group-icon requires an `iconPath`.");
183
+ let bytes;
184
+ try {
185
+ bytes = await readIcon(iconPath);
186
+ }
187
+ catch (err) {
188
+ return fail(`set-group-icon could not read the icon: ${err instanceof Error ? err.message : String(err)}`);
189
+ }
190
+ await setBlueBubblesGroupIcon(base, { chatGuid, bytes });
191
+ return ok("Updated the group icon.");
192
+ }
193
+ case "leave-group": {
194
+ await leaveBlueBubblesChat(base, { chatGuid });
195
+ return ok("Left the group.");
196
+ }
197
+ case "send-effect": {
198
+ const text = (args.text ?? "").trim();
199
+ if (!text)
200
+ return fail("send-effect requires `text`.");
201
+ const effect = (args.effect ?? "").trim();
202
+ if (!effect)
203
+ return fail("send-effect requires an `effect` name.");
204
+ if (!resolveEffectId(effect)) {
205
+ return fail(`Unknown effect "${effect}". Try one of: slam, loud, gentle, invisible-ink, echo, spotlight, balloons, confetti, love, lasers, fireworks, sparkles.`);
206
+ }
207
+ const sent = await sendBlueBubblesText(chatGuid, text, { ...base, effect });
208
+ return ok(`Sent with the "${effect}" effect${sent.messageId ? ` (message ${sent.messageId})` : ""}.`);
209
+ }
210
+ case "reply": {
211
+ const text = (args.text ?? "").trim();
212
+ if (!text)
213
+ return fail("reply requires `text`.");
214
+ const replyToId = (args.replyToId ?? "").trim();
215
+ if (!replyToId)
216
+ return fail("reply requires a `replyToId` (the message GUID to reply to).");
217
+ const sent = await sendBlueBubblesText(chatGuid, text, {
218
+ ...base,
219
+ replyToMessageGuid: replyToId,
220
+ ...(typeof args.partIndex === "number" ? { replyToPartIndex: args.partIndex } : {}),
221
+ });
222
+ return ok(`Replied to message ${replyToId}${sent.messageId ? ` (message ${sent.messageId})` : ""}.`);
223
+ }
224
+ default:
225
+ return fail(`Unknown action "${String(action)}".`);
226
+ }
227
+ }
228
+ catch (err) {
229
+ return fail(`BlueBubbles ${action} failed: ${err instanceof Error ? err.message : String(err)}`);
230
+ }
231
+ },
232
+ };
233
+ }
234
+ //# sourceMappingURL=bluebubbles-action-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bluebubbles-action-tool.js","sourceRoot":"","sources":["../../../src/agents/tools/bluebubbles-action-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,224 @@
1
+ /**
2
+ * `discord_action` — owner-only Discord guild action surface (Phase 4).
3
+ *
4
+ * Brigade's live Discord adapter handles inbound + the everyday send/edit/react
5
+ * path, but it does NOT expose the wide guild-management surface a full Discord
6
+ * bot needs: creating/editing channels + categories, role + member management, emoji /
7
+ * sticker / scheduled-event admin, rich embeds + polls + stickers + threads +
8
+ * search, and moderation (ban / unban / kick / timeout). This tool fills that
9
+ * gap with a SELF-CONTAINED Discord REST v10 client — exactly like `probe.ts`
10
+ * and Slack's `directory-live.ts`: it resolves the bot token via
11
+ * `resolveDiscordBotToken` and talks straight to `https://discord.com/api/v10`
12
+ * with `Authorization: Bot <token>`. It never reaches through the live
13
+ * adapter/connection, so it works the same whether or not the Gateway socket is
14
+ * up.
15
+ *
16
+ * One meta-tool with an `action` discriminator (keeps the prompt small) dispatches
17
+ * to the matching helper in `discord/rest-actions.ts`. Owner-only: the standard
18
+ * `wrapOwnerOnlyToolExecution` gate (applied at session-wiring) already refuses
19
+ * non-owner senders and unattended cron turns, so this file does not re-implement
20
+ * auth. The registry only ASSEMBLES this tool when the Discord channel is
21
+ * configured (`channels.discord.enabled`), so a non-Discord install never sees it.
22
+ *
23
+ * Each action validates its required params, calls the REST helper, and returns a
24
+ * compact `jsonResult({ action, ok, … })`. REST failures decode (permissions /
25
+ * 404 / rate-limit / unknown-resource) into an operator-readable message via the
26
+ * `DiscordRestError` carried up from the helper.
27
+ *
28
+ * `set-presence` (Phase 5) is the ONE action that is NOT a REST call: presence
29
+ * is a Gateway (websocket) operation, and this self-contained REST tool holds no
30
+ * live discord.js client handle. The clean path chosen here is CONFIG-WRITE — it
31
+ * persists `channels.discord.presence` via `mutateConfigAtomic`, and the live
32
+ * connection applies that presence on its next (re)connect (it re-reads the
33
+ * resolved presence on every start). This keeps the tool stateless + air-gap-
34
+ * safe and avoids reaching across module boundaries into the running gateway.
35
+ */
36
+ import { Type } from "typebox";
37
+ import { type BrigadeConfig } from "../../config/io.js";
38
+ import type { BrigadeTool } from "./types.js";
39
+ declare const DiscordActionParams: Type.TObject<{
40
+ action: Type.TUnion<[Type.TLiteral<"send">, Type.TLiteral<"send-embed">, Type.TLiteral<"poll">, Type.TLiteral<"sticker">, Type.TLiteral<"read-messages">, Type.TLiteral<"list-reactions">, Type.TLiteral<"remove-reaction">, Type.TLiteral<"thread-create">, Type.TLiteral<"list-threads">, Type.TLiteral<"search-messages">, Type.TLiteral<"channel-create">, Type.TLiteral<"channel-edit">, Type.TLiteral<"channel-delete">, Type.TLiteral<"channel-move">, Type.TLiteral<"category-create">, Type.TLiteral<"category-edit">, Type.TLiteral<"category-delete">, Type.TLiteral<"role-list">, Type.TLiteral<"role-add">, Type.TLiteral<"role-remove">, Type.TLiteral<"role-info">, Type.TLiteral<"member-info">, Type.TLiteral<"emoji-list">, Type.TLiteral<"emoji-upload">, Type.TLiteral<"sticker-upload">, Type.TLiteral<"event-list">, Type.TLiteral<"event-create">, Type.TLiteral<"ban">, Type.TLiteral<"unban">, Type.TLiteral<"kick">, Type.TLiteral<"timeout">, Type.TLiteral<"untimeout">, Type.TLiteral<"set-presence">]>;
41
+ accountId: Type.TOptional<Type.TString>;
42
+ to: Type.TOptional<Type.TString>;
43
+ channelId: Type.TOptional<Type.TString>;
44
+ guildId: Type.TOptional<Type.TString>;
45
+ userId: Type.TOptional<Type.TString>;
46
+ messageId: Type.TOptional<Type.TString>;
47
+ roleId: Type.TOptional<Type.TString>;
48
+ categoryId: Type.TOptional<Type.TString>;
49
+ content: Type.TOptional<Type.TString>;
50
+ embed: Type.TOptional<Type.TObject<{
51
+ title: Type.TOptional<Type.TString>;
52
+ description: Type.TOptional<Type.TString>;
53
+ color: Type.TOptional<Type.TNumber>;
54
+ url: Type.TOptional<Type.TString>;
55
+ footer: Type.TOptional<Type.TString>;
56
+ image: Type.TOptional<Type.TString>;
57
+ thumbnail: Type.TOptional<Type.TString>;
58
+ fields: Type.TOptional<Type.TArray<Type.TObject<{
59
+ name: Type.TString;
60
+ value: Type.TString;
61
+ inline: Type.TOptional<Type.TBoolean>;
62
+ }>>>;
63
+ }>>;
64
+ embeds: Type.TOptional<Type.TArray<Type.TObject<{
65
+ title: Type.TOptional<Type.TString>;
66
+ description: Type.TOptional<Type.TString>;
67
+ color: Type.TOptional<Type.TNumber>;
68
+ url: Type.TOptional<Type.TString>;
69
+ footer: Type.TOptional<Type.TString>;
70
+ image: Type.TOptional<Type.TString>;
71
+ thumbnail: Type.TOptional<Type.TString>;
72
+ fields: Type.TOptional<Type.TArray<Type.TObject<{
73
+ name: Type.TString;
74
+ value: Type.TString;
75
+ inline: Type.TOptional<Type.TBoolean>;
76
+ }>>>;
77
+ }>>>;
78
+ components: Type.TOptional<Type.TArray<Type.TUnknown>>;
79
+ select: Type.TOptional<Type.TObject<{
80
+ kind: Type.TUnion<[Type.TLiteral<"string">, Type.TLiteral<"user">, Type.TLiteral<"role">, Type.TLiteral<"channel">, Type.TLiteral<"mentionable">]>;
81
+ customId: Type.TString;
82
+ placeholder: Type.TOptional<Type.TString>;
83
+ minValues: Type.TOptional<Type.TNumber>;
84
+ maxValues: Type.TOptional<Type.TNumber>;
85
+ options: Type.TOptional<Type.TArray<Type.TObject<{
86
+ label: Type.TString;
87
+ value: Type.TString;
88
+ description: Type.TOptional<Type.TString>;
89
+ }>>>;
90
+ }>>;
91
+ modal: Type.TOptional<Type.TObject<{
92
+ buttonLabel: Type.TString;
93
+ title: Type.TOptional<Type.TString>;
94
+ fields: Type.TArray<Type.TObject<{
95
+ id: Type.TString;
96
+ label: Type.TString;
97
+ style: Type.TOptional<Type.TUnion<[Type.TLiteral<"short">, Type.TLiteral<"paragraph">]>>;
98
+ required: Type.TOptional<Type.TBoolean>;
99
+ placeholder: Type.TOptional<Type.TString>;
100
+ }>>;
101
+ buttonStyle: Type.TOptional<Type.TNumber>;
102
+ }>>;
103
+ blocks: Type.TOptional<Type.TObject<{
104
+ blocks: Type.TArray<Type.TUnion<[Type.TObject<{
105
+ type: Type.TLiteral<"text">;
106
+ text: Type.TString;
107
+ }>, Type.TObject<{
108
+ type: Type.TLiteral<"section">;
109
+ texts: Type.TArray<Type.TString>;
110
+ accessory: Type.TOptional<Type.TUnion<[Type.TObject<{
111
+ kind: Type.TLiteral<"thumbnail">;
112
+ url: Type.TString;
113
+ }>, Type.TObject<{
114
+ kind: Type.TLiteral<"button">;
115
+ button: Type.TObject<{
116
+ label: Type.TString;
117
+ url: Type.TOptional<Type.TString>;
118
+ customId: Type.TOptional<Type.TString>;
119
+ style: Type.TOptional<Type.TNumber>;
120
+ }>;
121
+ }>]>>;
122
+ }>, Type.TObject<{
123
+ type: Type.TLiteral<"separator">;
124
+ divider: Type.TOptional<Type.TBoolean>;
125
+ spacing: Type.TOptional<Type.TUnion<[Type.TLiteral<"small">, Type.TLiteral<"large">]>>;
126
+ }>, Type.TObject<{
127
+ type: Type.TLiteral<"actions">;
128
+ buttons: Type.TArray<Type.TObject<{
129
+ label: Type.TString;
130
+ url: Type.TOptional<Type.TString>;
131
+ customId: Type.TOptional<Type.TString>;
132
+ style: Type.TOptional<Type.TNumber>;
133
+ }>>;
134
+ }>, Type.TObject<{
135
+ type: Type.TLiteral<"media-gallery">;
136
+ items: Type.TArray<Type.TObject<{
137
+ url: Type.TString;
138
+ description: Type.TOptional<Type.TString>;
139
+ spoiler: Type.TOptional<Type.TBoolean>;
140
+ }>>;
141
+ }>, Type.TObject<{
142
+ type: Type.TLiteral<"file">;
143
+ url: Type.TString;
144
+ spoiler: Type.TOptional<Type.TBoolean>;
145
+ }>]>>;
146
+ accentColor: Type.TOptional<Type.TNumber>;
147
+ }>>;
148
+ replyTo: Type.TOptional<Type.TString>;
149
+ silent: Type.TOptional<Type.TBoolean>;
150
+ question: Type.TOptional<Type.TString>;
151
+ answers: Type.TOptional<Type.TArray<Type.TString>>;
152
+ durationHours: Type.TOptional<Type.TNumber>;
153
+ allowMultiselect: Type.TOptional<Type.TBoolean>;
154
+ stickerIds: Type.TOptional<Type.TArray<Type.TString>>;
155
+ emoji: Type.TOptional<Type.TString>;
156
+ emojiName: Type.TOptional<Type.TString>;
157
+ emojiImage: Type.TOptional<Type.TString>;
158
+ stickerName: Type.TOptional<Type.TString>;
159
+ stickerDescription: Type.TOptional<Type.TString>;
160
+ stickerTags: Type.TOptional<Type.TString>;
161
+ stickerImage: Type.TOptional<Type.TString>;
162
+ limit: Type.TOptional<Type.TNumber>;
163
+ before: Type.TOptional<Type.TString>;
164
+ after: Type.TOptional<Type.TString>;
165
+ around: Type.TOptional<Type.TString>;
166
+ query: Type.TOptional<Type.TString>;
167
+ authorId: Type.TOptional<Type.TString>;
168
+ name: Type.TOptional<Type.TString>;
169
+ threadType: Type.TOptional<Type.TNumber>;
170
+ autoArchiveMinutes: Type.TOptional<Type.TNumber>;
171
+ channelType: Type.TOptional<Type.TNumber>;
172
+ parentId: Type.TOptional<Type.TString>;
173
+ topic: Type.TOptional<Type.TString>;
174
+ position: Type.TOptional<Type.TNumber>;
175
+ nsfw: Type.TOptional<Type.TBoolean>;
176
+ rateLimitPerUser: Type.TOptional<Type.TNumber>;
177
+ archived: Type.TOptional<Type.TBoolean>;
178
+ locked: Type.TOptional<Type.TBoolean>;
179
+ eventName: Type.TOptional<Type.TString>;
180
+ startTime: Type.TOptional<Type.TString>;
181
+ endTime: Type.TOptional<Type.TString>;
182
+ description: Type.TOptional<Type.TString>;
183
+ location: Type.TOptional<Type.TString>;
184
+ entityType: Type.TOptional<Type.TUnion<[Type.TLiteral<"stage">, Type.TLiteral<"voice">, Type.TLiteral<"external">]>>;
185
+ reason: Type.TOptional<Type.TString>;
186
+ deleteMessageDays: Type.TOptional<Type.TNumber>;
187
+ durationMinutes: Type.TOptional<Type.TNumber>;
188
+ status: Type.TOptional<Type.TUnion<[Type.TLiteral<"online">, Type.TLiteral<"idle">, Type.TLiteral<"dnd">, Type.TLiteral<"invisible">]>>;
189
+ activityType: Type.TOptional<Type.TUnion<[Type.TLiteral<"playing">, Type.TLiteral<"streaming">, Type.TLiteral<"listening">, Type.TLiteral<"watching">, Type.TLiteral<"custom">, Type.TLiteral<"competing">]>>;
190
+ activityText: Type.TOptional<Type.TString>;
191
+ activityUrl: Type.TOptional<Type.TString>;
192
+ }>;
193
+ interface DiscordActionResult {
194
+ action: string;
195
+ ok: boolean;
196
+ message: string;
197
+ data?: unknown;
198
+ }
199
+ /** Compact a payload so a large list result can't flood the model's context. Pure. */
200
+ export declare function capDiscordData(value: unknown, maxChars?: number): unknown;
201
+ /**
202
+ * Decode a `data:<mime>;base64,<payload>` URI into raw bytes + the MIME type, for
203
+ * the multipart sticker upload (which needs the file bytes, not a JSON image
204
+ * string like emoji-upload). Returns null when the input isn't a base64 data URI.
205
+ */
206
+ export declare function decodeStickerDataUri(input: string): {
207
+ bytes: Uint8Array;
208
+ contentType: string;
209
+ } | null;
210
+ export interface MakeDiscordActionToolOptions {
211
+ /** Inject the resolved bot token (tests). When omitted, resolved from config per call. */
212
+ resolveToken?: (accountId: string) => string;
213
+ /** Inject fetch (tests). Defaults to global fetch in the REST helpers. */
214
+ fetchImpl?: typeof fetch;
215
+ /**
216
+ * Inject the config mutator (tests). Production uses `mutateConfigAtomic`.
217
+ * Used by `set-presence`, which persists `channels.discord.presence` so the
218
+ * live connection applies it on next (re)connect.
219
+ */
220
+ mutateConfig?: (mutate: (current: BrigadeConfig) => BrigadeConfig) => Promise<BrigadeConfig>;
221
+ }
222
+ export declare function makeDiscordActionTool(opts?: MakeDiscordActionToolOptions): BrigadeTool<typeof DiscordActionParams, DiscordActionResult>;
223
+ export {};
224
+ //# sourceMappingURL=discord-action-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord-action-tool.d.ts","sourceRoot":"","sources":["../../../src/agents/tools/discord-action-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAG/B,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAmD5E,OAAO,KAAK,EAAmB,WAAW,EAAE,MAAM,YAAY,CAAC;AA6K/D,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsJvB,CAAC;AAEH,UAAU,mBAAmB;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAOD,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAiB,GAAG,OAAO,CAcjF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAUrG;AAID,MAAM,WAAW,4BAA4B;IAC5C,0FAA0F;IAC1F,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,aAAa,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;CAC7F;AA+BD,wBAAgB,qBAAqB,CACpC,IAAI,GAAE,4BAAiC,GACrC,WAAW,CAAC,OAAO,mBAAmB,EAAE,mBAAmB,CAAC,CA2gB9D"}