@openclaw/discord 2026.3.13 → 2026.5.2-beta.1

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 (502) hide show
  1. package/account-inspect-api.ts +6 -0
  2. package/action-runtime-api.ts +1 -0
  3. package/api.ts +132 -0
  4. package/channel-config-api.ts +1 -0
  5. package/channel-plugin-api.ts +3 -0
  6. package/config-api.ts +4 -0
  7. package/configured-state.ts +6 -0
  8. package/contract-api.ts +21 -0
  9. package/directory-contract-api.ts +4 -0
  10. package/doctor-contract-api.ts +1 -0
  11. package/index.test.ts +13 -0
  12. package/index.ts +18 -13
  13. package/openclaw.plugin.json +3326 -1
  14. package/package.json +68 -2
  15. package/runtime-api.actions.ts +15 -0
  16. package/runtime-api.lookup.ts +22 -0
  17. package/runtime-api.monitor.ts +50 -0
  18. package/runtime-api.send.ts +79 -0
  19. package/runtime-api.threads.ts +30 -0
  20. package/runtime-api.ts +180 -0
  21. package/runtime-setter-api.ts +3 -0
  22. package/secret-contract-api.ts +4 -0
  23. package/security-audit-contract-api.ts +1 -0
  24. package/security-contract-api.ts +4 -0
  25. package/session-key-api.ts +1 -0
  26. package/setup-entry.ts +9 -0
  27. package/setup-plugin-api.ts +3 -0
  28. package/src/account-inspect.test.ts +126 -0
  29. package/src/account-inspect.ts +132 -0
  30. package/src/accounts.test.ts +247 -0
  31. package/src/accounts.ts +196 -0
  32. package/src/actions/handle-action.guild-admin.ts +411 -0
  33. package/src/actions/handle-action.test.ts +306 -0
  34. package/src/actions/handle-action.ts +372 -0
  35. package/src/actions/runtime.guild.ts +446 -0
  36. package/src/actions/runtime.messaging.messages.ts +205 -0
  37. package/src/actions/runtime.messaging.reactions.ts +67 -0
  38. package/src/actions/runtime.messaging.runtime.ts +69 -0
  39. package/src/actions/runtime.messaging.send.ts +248 -0
  40. package/src/actions/runtime.messaging.shared.ts +97 -0
  41. package/src/actions/runtime.messaging.ts +37 -0
  42. package/src/actions/runtime.moderation-shared.ts +48 -0
  43. package/src/actions/runtime.moderation.authz.test.ts +151 -0
  44. package/src/actions/runtime.moderation.ts +116 -0
  45. package/src/actions/runtime.presence.test.ts +160 -0
  46. package/src/actions/runtime.presence.ts +117 -0
  47. package/src/actions/runtime.shared.ts +83 -0
  48. package/src/actions/runtime.test.ts +1087 -0
  49. package/src/actions/runtime.ts +87 -0
  50. package/src/api-barrel.test.ts +80 -0
  51. package/src/api.test.ts +130 -0
  52. package/src/api.ts +169 -0
  53. package/src/approval-handler.runtime.test.ts +41 -0
  54. package/src/approval-handler.runtime.ts +632 -0
  55. package/src/approval-native.test.ts +330 -0
  56. package/src/approval-native.ts +219 -0
  57. package/src/approval-runtime.ts +14 -0
  58. package/src/approval-shared.ts +53 -0
  59. package/src/audit-core.ts +141 -0
  60. package/src/audit.test.ts +145 -0
  61. package/src/audit.ts +32 -0
  62. package/src/channel-actions.contract.test.ts +45 -0
  63. package/src/channel-actions.runtime.ts +1 -0
  64. package/src/channel-actions.test.ts +275 -0
  65. package/src/channel-actions.ts +203 -0
  66. package/src/channel-api.ts +29 -0
  67. package/src/channel.conversation.ts +159 -0
  68. package/src/channel.loaders.ts +47 -0
  69. package/src/channel.runtime.ts +1 -0
  70. package/src/channel.setup.ts +12 -0
  71. package/src/channel.test.ts +547 -12
  72. package/src/channel.ts +597 -430
  73. package/src/chunk.test.ts +157 -0
  74. package/src/chunk.ts +321 -0
  75. package/src/client.proxy.test.ts +176 -0
  76. package/src/client.test.ts +76 -0
  77. package/src/client.ts +132 -0
  78. package/src/component-custom-id.ts +72 -0
  79. package/src/components-registry.ts +356 -0
  80. package/src/components.builders.ts +409 -0
  81. package/src/components.modal.ts +124 -0
  82. package/src/components.parse.ts +407 -0
  83. package/src/components.test.ts +312 -0
  84. package/src/components.ts +54 -0
  85. package/src/components.types.ts +187 -0
  86. package/src/config-schema.test.ts +325 -0
  87. package/src/config-schema.ts +6 -0
  88. package/src/config-ui-hints.ts +249 -0
  89. package/src/conversation-identity.ts +58 -0
  90. package/src/delivery-retry.ts +56 -0
  91. package/src/directory-cache.ts +116 -0
  92. package/src/directory-config.ts +58 -0
  93. package/src/directory-contract.test.ts +129 -0
  94. package/src/directory-live.test.ts +126 -0
  95. package/src/directory-live.ts +135 -0
  96. package/src/doctor-contract.ts +477 -0
  97. package/src/doctor-shared.ts +5 -0
  98. package/src/doctor.test.ts +405 -0
  99. package/src/doctor.ts +340 -0
  100. package/src/draft-chunking.test.ts +64 -0
  101. package/src/draft-chunking.ts +43 -0
  102. package/src/draft-stream.test.ts +159 -0
  103. package/src/draft-stream.ts +154 -0
  104. package/src/error-body.ts +38 -0
  105. package/src/exec-approvals.test.ts +88 -0
  106. package/src/exec-approvals.ts +110 -0
  107. package/src/gateway-logging.test.ts +98 -0
  108. package/src/gateway-logging.ts +67 -0
  109. package/src/group-policy.ts +113 -0
  110. package/src/guilds.ts +29 -0
  111. package/src/inbound-context.contract.test.ts +11 -0
  112. package/src/interactive-dispatch.ts +104 -0
  113. package/src/internal/api.commands.ts +51 -0
  114. package/src/internal/api.guild.ts +164 -0
  115. package/src/internal/api.interactions.ts +53 -0
  116. package/src/internal/api.messages.ts +113 -0
  117. package/src/internal/api.reactions.ts +38 -0
  118. package/src/internal/api.test.ts +262 -0
  119. package/src/internal/api.ts +61 -0
  120. package/src/internal/api.users.ts +19 -0
  121. package/src/internal/api.webhooks.ts +13 -0
  122. package/src/internal/client.test.ts +408 -0
  123. package/src/internal/client.ts +308 -0
  124. package/src/internal/command-deploy.ts +237 -0
  125. package/src/internal/commands.ts +188 -0
  126. package/src/internal/components.base.ts +65 -0
  127. package/src/internal/components.message.ts +279 -0
  128. package/src/internal/components.modal.ts +95 -0
  129. package/src/internal/components.ts +31 -0
  130. package/src/internal/discord.ts +11 -0
  131. package/src/internal/embeds.ts +35 -0
  132. package/src/internal/entity-cache.ts +98 -0
  133. package/src/internal/event-queue.ts +162 -0
  134. package/src/internal/gateway-close-codes.ts +25 -0
  135. package/src/internal/gateway-dispatch.ts +96 -0
  136. package/src/internal/gateway-identify-limiter.ts +26 -0
  137. package/src/internal/gateway-lifecycle.ts +61 -0
  138. package/src/internal/gateway-rate-limit.ts +104 -0
  139. package/src/internal/gateway.test.ts +603 -0
  140. package/src/internal/gateway.ts +476 -0
  141. package/src/internal/interaction-dispatch.test.ts +148 -0
  142. package/src/internal/interaction-dispatch.ts +162 -0
  143. package/src/internal/interaction-options.ts +98 -0
  144. package/src/internal/interaction-response.ts +53 -0
  145. package/src/internal/interactions.test.ts +325 -0
  146. package/src/internal/interactions.ts +378 -0
  147. package/src/internal/listeners.ts +85 -0
  148. package/src/internal/live-smoke.live.test.ts +26 -0
  149. package/src/internal/modal-fields.ts +95 -0
  150. package/src/internal/payload.ts +69 -0
  151. package/src/internal/rest-body.ts +115 -0
  152. package/src/internal/rest-errors.ts +88 -0
  153. package/src/internal/rest-routes.ts +50 -0
  154. package/src/internal/rest-scheduler.ts +557 -0
  155. package/src/internal/rest.test.ts +673 -0
  156. package/src/internal/rest.ts +322 -0
  157. package/src/internal/schemas.ts +36 -0
  158. package/src/internal/structures.test.ts +43 -0
  159. package/src/internal/structures.ts +280 -0
  160. package/src/internal/test-builders.test-support.ts +163 -0
  161. package/src/internal/voice.ts +49 -0
  162. package/src/media-detection.ts +28 -0
  163. package/src/mentions.test.ts +111 -0
  164. package/src/mentions.ts +147 -0
  165. package/src/monitor/access-groups.ts +55 -0
  166. package/src/monitor/ack-reactions.ts +70 -0
  167. package/src/monitor/acp-bind-here.integration.test.ts +211 -0
  168. package/src/monitor/agent-components-auth.ts +7 -0
  169. package/src/monitor/agent-components-context.ts +154 -0
  170. package/src/monitor/agent-components-data.ts +224 -0
  171. package/src/monitor/agent-components-dm-auth.ts +221 -0
  172. package/src/monitor/agent-components-guild-auth.ts +322 -0
  173. package/src/monitor/agent-components-helpers.runtime.ts +5 -0
  174. package/src/monitor/agent-components-helpers.ts +34 -0
  175. package/src/monitor/agent-components-reply.ts +10 -0
  176. package/src/monitor/agent-components.deps.runtime.ts +2 -0
  177. package/src/monitor/agent-components.dispatch.ts +366 -0
  178. package/src/monitor/agent-components.handlers.ts +303 -0
  179. package/src/monitor/agent-components.modal.ts +160 -0
  180. package/src/monitor/agent-components.plugin-interactive.ts +187 -0
  181. package/src/monitor/agent-components.runtime.ts +14 -0
  182. package/src/monitor/agent-components.system-controls.ts +211 -0
  183. package/src/monitor/agent-components.ts +70 -0
  184. package/src/monitor/agent-components.types.ts +58 -0
  185. package/src/monitor/agent-components.wildcard-controls.ts +168 -0
  186. package/src/monitor/agent-components.wildcard.test.ts +71 -0
  187. package/src/monitor/allow-list.test.ts +14 -0
  188. package/src/monitor/allow-list.ts +633 -0
  189. package/src/monitor/auto-presence.test.ts +156 -0
  190. package/src/monitor/auto-presence.ts +356 -0
  191. package/src/monitor/channel-access.test.ts +99 -0
  192. package/src/monitor/channel-access.ts +102 -0
  193. package/src/monitor/commands.test.ts +24 -0
  194. package/src/monitor/commands.ts +9 -0
  195. package/src/monitor/dm-command-auth.test.ts +197 -0
  196. package/src/monitor/dm-command-auth.ts +158 -0
  197. package/src/monitor/dm-command-decision.test.ts +113 -0
  198. package/src/monitor/dm-command-decision.ts +49 -0
  199. package/src/monitor/exec-approvals.test.ts +226 -0
  200. package/src/monitor/exec-approvals.ts +158 -0
  201. package/src/monitor/format.ts +45 -0
  202. package/src/monitor/gateway-handle.ts +34 -0
  203. package/src/monitor/gateway-metadata.test.ts +29 -0
  204. package/src/monitor/gateway-metadata.ts +298 -0
  205. package/src/monitor/gateway-plugin.test.ts +297 -0
  206. package/src/monitor/gateway-plugin.ts +294 -0
  207. package/src/monitor/gateway-registry.ts +37 -0
  208. package/src/monitor/gateway-supervisor.test.ts +150 -0
  209. package/src/monitor/gateway-supervisor.ts +206 -0
  210. package/src/monitor/inbound-context.test-helpers.ts +37 -0
  211. package/src/monitor/inbound-context.test.ts +106 -0
  212. package/src/monitor/inbound-context.ts +103 -0
  213. package/src/monitor/inbound-dedupe.ts +79 -0
  214. package/src/monitor/inbound-job.test.ts +203 -0
  215. package/src/monitor/inbound-job.ts +118 -0
  216. package/src/monitor/listeners.queue.ts +91 -0
  217. package/src/monitor/listeners.reactions.ts +610 -0
  218. package/src/monitor/listeners.test.ts +200 -0
  219. package/src/monitor/listeners.ts +150 -0
  220. package/src/monitor/message-channel-info.ts +96 -0
  221. package/src/monitor/message-forwarded.ts +107 -0
  222. package/src/monitor/message-handler.batch-gate.test.ts +22 -0
  223. package/src/monitor/message-handler.batch-gate.ts +19 -0
  224. package/src/monitor/message-handler.bot-self-filter.test.ts +68 -0
  225. package/src/monitor/message-handler.context.ts +406 -0
  226. package/src/monitor/message-handler.dm-preflight.ts +123 -0
  227. package/src/monitor/message-handler.draft-preview.ts +246 -0
  228. package/src/monitor/message-handler.hydration.test.ts +80 -0
  229. package/src/monitor/message-handler.hydration.ts +198 -0
  230. package/src/monitor/message-handler.inbound-context.test.ts +59 -0
  231. package/src/monitor/message-handler.module-test-helpers.ts +31 -0
  232. package/src/monitor/message-handler.preflight-channel-access.ts +86 -0
  233. package/src/monitor/message-handler.preflight-channel-context.test.ts +18 -0
  234. package/src/monitor/message-handler.preflight-channel-context.ts +58 -0
  235. package/src/monitor/message-handler.preflight-context.ts +54 -0
  236. package/src/monitor/message-handler.preflight-helpers.ts +164 -0
  237. package/src/monitor/message-handler.preflight-history.ts +23 -0
  238. package/src/monitor/message-handler.preflight-logging.ts +36 -0
  239. package/src/monitor/message-handler.preflight-pluralkit.ts +26 -0
  240. package/src/monitor/message-handler.preflight-runtime.ts +28 -0
  241. package/src/monitor/message-handler.preflight-thread.ts +49 -0
  242. package/src/monitor/message-handler.preflight.acp-bindings.test.ts +369 -0
  243. package/src/monitor/message-handler.preflight.test-helpers.ts +111 -0
  244. package/src/monitor/message-handler.preflight.test.ts +1623 -0
  245. package/src/monitor/message-handler.preflight.ts +679 -0
  246. package/src/monitor/message-handler.preflight.types.ts +110 -0
  247. package/src/monitor/message-handler.process.test.ts +1369 -0
  248. package/src/monitor/message-handler.process.ts +686 -0
  249. package/src/monitor/message-handler.queue.test.ts +496 -0
  250. package/src/monitor/message-handler.routing-preflight.ts +112 -0
  251. package/src/monitor/message-handler.test-harness.ts +99 -0
  252. package/src/monitor/message-handler.test-helpers.ts +75 -0
  253. package/src/monitor/message-handler.ts +274 -0
  254. package/src/monitor/message-media.ts +509 -0
  255. package/src/monitor/message-run-queue.ts +101 -0
  256. package/src/monitor/message-text.ts +171 -0
  257. package/src/monitor/message-utils.test.ts +1157 -0
  258. package/src/monitor/message-utils.ts +32 -0
  259. package/src/monitor/model-picker-preferences.test.ts +67 -0
  260. package/src/monitor/model-picker-preferences.ts +184 -0
  261. package/src/monitor/model-picker.state.ts +364 -0
  262. package/src/monitor/model-picker.test-utils.ts +26 -0
  263. package/src/monitor/model-picker.test.ts +794 -0
  264. package/src/monitor/model-picker.ts +38 -0
  265. package/src/monitor/model-picker.view.ts +695 -0
  266. package/src/monitor/monitor.agent-components.test.ts +375 -0
  267. package/src/monitor/monitor.test.ts +849 -0
  268. package/src/monitor/monitor.threading-utils.test.ts +598 -0
  269. package/src/monitor/native-command-agent-reply.ts +125 -0
  270. package/src/monitor/native-command-arg-ui.ts +233 -0
  271. package/src/monitor/native-command-auth.ts +308 -0
  272. package/src/monitor/native-command-bypass.ts +13 -0
  273. package/src/monitor/native-command-context.test.ts +98 -0
  274. package/src/monitor/native-command-context.ts +103 -0
  275. package/src/monitor/native-command-dispatch.ts +35 -0
  276. package/src/monitor/native-command-model-picker-apply.ts +177 -0
  277. package/src/monitor/native-command-model-picker-interaction.ts +461 -0
  278. package/src/monitor/native-command-model-picker-ui.ts +368 -0
  279. package/src/monitor/native-command-reply.test.ts +68 -0
  280. package/src/monitor/native-command-reply.ts +185 -0
  281. package/src/monitor/native-command-route.ts +91 -0
  282. package/src/monitor/native-command-status.ts +76 -0
  283. package/src/monitor/native-command-ui.ts +26 -0
  284. package/src/monitor/native-command-ui.types.ts +20 -0
  285. package/src/monitor/native-command.args.ts +45 -0
  286. package/src/monitor/native-command.command-arg.test.ts +99 -0
  287. package/src/monitor/native-command.commands-allowfrom.test.ts +490 -0
  288. package/src/monitor/native-command.model-picker.test.ts +767 -0
  289. package/src/monitor/native-command.options.test.ts +369 -0
  290. package/src/monitor/native-command.options.ts +153 -0
  291. package/src/monitor/native-command.plugin-dispatch.test.ts +961 -0
  292. package/src/monitor/native-command.runtime.ts +50 -0
  293. package/src/monitor/native-command.status-direct.test.ts +272 -0
  294. package/src/monitor/native-command.test-helpers.ts +64 -0
  295. package/src/monitor/native-command.think-autocomplete.test.ts +416 -0
  296. package/src/monitor/native-command.ts +700 -0
  297. package/src/monitor/native-command.types.ts +9 -0
  298. package/src/monitor/native-interaction-channel-context.ts +50 -0
  299. package/src/monitor/preflight-audio.runtime.ts +9 -0
  300. package/src/monitor/preflight-audio.test.ts +157 -0
  301. package/src/monitor/preflight-audio.ts +130 -0
  302. package/src/monitor/presence-cache.ts +61 -0
  303. package/src/monitor/presence.test.ts +44 -0
  304. package/src/monitor/presence.ts +50 -0
  305. package/src/monitor/provider-session.runtime.ts +12 -0
  306. package/src/monitor/provider.acp.ts +89 -0
  307. package/src/monitor/provider.allowlist.test.ts +149 -0
  308. package/src/monitor/provider.allowlist.ts +394 -0
  309. package/src/monitor/provider.cleanup.ts +41 -0
  310. package/src/monitor/provider.commands.ts +129 -0
  311. package/src/monitor/provider.config-log.ts +45 -0
  312. package/src/monitor/provider.deploy-errors.ts +362 -0
  313. package/src/monitor/provider.deploy.ts +221 -0
  314. package/src/monitor/provider.interactions.ts +160 -0
  315. package/src/monitor/provider.lifecycle.test.ts +713 -0
  316. package/src/monitor/provider.lifecycle.ts +552 -0
  317. package/src/monitor/provider.proxy.test.ts +745 -0
  318. package/src/monitor/provider.rest-proxy.test.ts +121 -0
  319. package/src/monitor/provider.runtime.ts +1 -0
  320. package/src/monitor/provider.skill-dedupe.test.ts +42 -0
  321. package/src/monitor/provider.startup-log.ts +32 -0
  322. package/src/monitor/provider.startup.test.ts +426 -0
  323. package/src/monitor/provider.startup.ts +323 -0
  324. package/src/monitor/provider.test.ts +1111 -0
  325. package/src/monitor/provider.ts +713 -0
  326. package/src/monitor/reply-context.ts +64 -0
  327. package/src/monitor/reply-delivery.test.ts +244 -0
  328. package/src/monitor/reply-delivery.ts +203 -0
  329. package/src/monitor/rest-fetch.ts +43 -0
  330. package/src/monitor/route-resolution.test.ts +204 -0
  331. package/src/monitor/route-resolution.ts +140 -0
  332. package/src/monitor/sender-identity.ts +81 -0
  333. package/src/monitor/startup-status.test.ts +30 -0
  334. package/src/monitor/startup-status.ts +10 -0
  335. package/src/monitor/status.ts +22 -0
  336. package/src/monitor/system-events.ts +55 -0
  337. package/src/monitor/thread-bindings.config.ts +35 -0
  338. package/src/monitor/thread-bindings.discord-api.test.ts +229 -0
  339. package/src/monitor/thread-bindings.discord-api.ts +310 -0
  340. package/src/monitor/thread-bindings.lifecycle.test.ts +1871 -0
  341. package/src/monitor/thread-bindings.lifecycle.ts +354 -0
  342. package/src/monitor/thread-bindings.manager.ts +553 -0
  343. package/src/monitor/thread-bindings.messages.ts +6 -0
  344. package/src/monitor/thread-bindings.persona.test.ts +34 -0
  345. package/src/monitor/thread-bindings.persona.ts +25 -0
  346. package/src/monitor/thread-bindings.session-adapter.ts +229 -0
  347. package/src/monitor/thread-bindings.session-shared.ts +59 -0
  348. package/src/monitor/thread-bindings.session-updates.ts +35 -0
  349. package/src/monitor/thread-bindings.shared-state.test.ts +36 -0
  350. package/src/monitor/thread-bindings.state.ts +540 -0
  351. package/src/monitor/thread-bindings.ts +48 -0
  352. package/src/monitor/thread-bindings.types.ts +83 -0
  353. package/src/monitor/thread-channel-context.ts +112 -0
  354. package/src/monitor/thread-session-close.test.ts +180 -0
  355. package/src/monitor/thread-session-close.ts +63 -0
  356. package/src/monitor/thread-title.generate.test.ts +197 -0
  357. package/src/monitor/thread-title.test.ts +31 -0
  358. package/src/monitor/thread-title.ts +181 -0
  359. package/src/monitor/threading.auto-thread.test.ts +327 -0
  360. package/src/monitor/threading.auto-thread.ts +287 -0
  361. package/src/monitor/threading.cache.ts +45 -0
  362. package/src/monitor/threading.parent-info.test.ts +156 -0
  363. package/src/monitor/threading.starter.test.ts +260 -0
  364. package/src/monitor/threading.starter.ts +287 -0
  365. package/src/monitor/threading.ts +20 -0
  366. package/src/monitor/threading.types.ts +102 -0
  367. package/src/monitor/timeouts.ts +84 -0
  368. package/src/monitor/typing.test.ts +42 -0
  369. package/src/monitor/typing.ts +17 -0
  370. package/src/monitor.gateway.test.ts +187 -0
  371. package/src/monitor.gateway.ts +75 -0
  372. package/src/monitor.test.ts +1397 -0
  373. package/src/monitor.ts +28 -0
  374. package/src/normalize.test.ts +56 -0
  375. package/src/normalize.ts +86 -0
  376. package/src/outbound-adapter.interactive-order.test.ts +64 -0
  377. package/src/outbound-adapter.test-harness.ts +207 -0
  378. package/src/outbound-adapter.test.ts +696 -0
  379. package/src/outbound-adapter.ts +291 -0
  380. package/src/outbound-approval.ts +29 -0
  381. package/src/outbound-components.ts +81 -0
  382. package/src/outbound-payload.contract.test.ts +38 -0
  383. package/src/outbound-payload.ts +134 -0
  384. package/src/outbound-send-context.ts +92 -0
  385. package/src/outbound-session-route.test.ts +34 -0
  386. package/src/outbound-session-route.ts +72 -0
  387. package/src/pluralkit.test.ts +67 -0
  388. package/src/pluralkit.ts +58 -0
  389. package/src/preview-streaming.ts +32 -0
  390. package/src/probe.intents.test.ts +94 -0
  391. package/src/probe.parse-token.test.ts +43 -0
  392. package/src/probe.runtime.ts +1 -0
  393. package/src/probe.ts +237 -0
  394. package/src/proxy-fetch.ts +92 -0
  395. package/src/proxy-request-client.test.ts +78 -0
  396. package/src/proxy-request-client.ts +21 -0
  397. package/src/recipient-resolution.ts +39 -0
  398. package/src/resolve-allowlist-common.test.ts +36 -0
  399. package/src/resolve-allowlist-common.ts +39 -0
  400. package/src/resolve-channels.test.ts +340 -0
  401. package/src/resolve-channels.ts +369 -0
  402. package/src/resolve-users.test.ts +222 -0
  403. package/src/resolve-users.ts +184 -0
  404. package/src/retry.test.ts +83 -0
  405. package/src/retry.ts +98 -0
  406. package/src/runtime-api.ts +64 -0
  407. package/src/runtime.ts +22 -5
  408. package/src/secret-config-contract.ts +140 -0
  409. package/src/security-audit.runtime.ts +1 -0
  410. package/src/security-audit.test.ts +246 -0
  411. package/src/security-audit.ts +208 -0
  412. package/src/security-contract.ts +47 -0
  413. package/src/security-doctor.test.ts +25 -0
  414. package/src/security-doctor.ts +20 -0
  415. package/src/security.ts +60 -0
  416. package/src/send-target-parsing.ts +14 -0
  417. package/src/send.channels.ts +139 -0
  418. package/src/send.components.test.ts +275 -0
  419. package/src/send.components.ts +381 -0
  420. package/src/send.creates-thread.test.ts +643 -0
  421. package/src/send.emojis-stickers.ts +57 -0
  422. package/src/send.guild.ts +170 -0
  423. package/src/send.message-request.ts +97 -0
  424. package/src/send.messages.test.ts +53 -0
  425. package/src/send.messages.ts +225 -0
  426. package/src/send.outbound.ts +413 -0
  427. package/src/send.permissions.authz.test.ts +188 -0
  428. package/src/send.permissions.ts +283 -0
  429. package/src/send.reactions.ts +155 -0
  430. package/src/send.sends-basic-channel-messages.test.ts +941 -0
  431. package/src/send.shared.ts +447 -0
  432. package/src/send.test-harness.ts +56 -0
  433. package/src/send.ts +82 -0
  434. package/src/send.types.ts +188 -0
  435. package/src/send.typing.test.ts +41 -0
  436. package/src/send.typing.ts +9 -0
  437. package/src/send.voice.ts +134 -0
  438. package/src/send.webhook-activity.test.ts +105 -0
  439. package/src/send.webhook.proxy.test.ts +191 -0
  440. package/src/send.webhook.ts +133 -0
  441. package/src/session-contract.ts +3 -0
  442. package/src/session-key-normalization.test.ts +44 -0
  443. package/src/session-key-normalization.ts +47 -0
  444. package/src/setup-account-state.test.ts +91 -0
  445. package/src/setup-account-state.ts +144 -0
  446. package/src/setup-adapter.ts +12 -0
  447. package/src/setup-core.ts +212 -0
  448. package/src/setup-runtime-helpers.ts +10 -0
  449. package/src/setup-surface.test.ts +137 -0
  450. package/src/setup-surface.ts +129 -0
  451. package/src/shared-interactive.test.ts +153 -0
  452. package/src/shared-interactive.ts +124 -0
  453. package/src/shared.test.ts +165 -0
  454. package/src/shared.ts +190 -0
  455. package/src/status-issues.test.ts +70 -0
  456. package/src/status-issues.ts +169 -0
  457. package/src/subagent-hooks.test.ts +130 -81
  458. package/src/subagent-hooks.ts +184 -122
  459. package/src/target-parsing.ts +53 -0
  460. package/src/target-resolver.ts +129 -0
  461. package/src/targets.test.ts +367 -0
  462. package/src/targets.ts +12 -0
  463. package/src/test-http-helpers.ts +10 -0
  464. package/src/test-support/component-runtime.ts +190 -0
  465. package/src/test-support/config.ts +7 -0
  466. package/src/test-support/configured-binding-runtime.ts +29 -0
  467. package/src/test-support/partial-channel.ts +26 -0
  468. package/src/test-support/provider.test-support.ts +545 -0
  469. package/src/token.test.ts +107 -0
  470. package/src/token.ts +60 -0
  471. package/src/ui-colors.ts +27 -0
  472. package/src/ui.ts +20 -0
  473. package/src/voice/access.test.ts +217 -0
  474. package/src/voice/access.ts +124 -0
  475. package/src/voice/audio.ts +173 -0
  476. package/src/voice/capture-state.test.ts +48 -0
  477. package/src/voice/capture-state.ts +120 -0
  478. package/src/voice/command.test.ts +164 -0
  479. package/src/voice/command.ts +283 -0
  480. package/src/voice/config.ts +8 -0
  481. package/src/voice/manager.e2e.test.ts +928 -0
  482. package/src/voice/manager.ready-listener.test.ts +37 -0
  483. package/src/voice/manager.runtime.ts +11 -0
  484. package/src/voice/manager.ts +691 -0
  485. package/src/voice/prompt.test.ts +16 -0
  486. package/src/voice/prompt.ts +17 -0
  487. package/src/voice/receive-recovery.test.ts +79 -0
  488. package/src/voice/receive-recovery.ts +159 -0
  489. package/src/voice/sanitize.test.ts +34 -0
  490. package/src/voice/sanitize.ts +32 -0
  491. package/src/voice/sdk-runtime.ts +14 -0
  492. package/src/voice/segment.ts +156 -0
  493. package/src/voice/session.ts +50 -0
  494. package/src/voice/speaker-context.ts +127 -0
  495. package/src/voice/tts.ts +125 -0
  496. package/src/voice-message.test.ts +234 -0
  497. package/src/voice-message.ts +444 -0
  498. package/subagent-hooks-api.ts +27 -0
  499. package/test-api.ts +4 -0
  500. package/thread-binding-api.ts +1 -0
  501. package/timeouts.ts +6 -0
  502. package/tsconfig.json +16 -0
@@ -1,9 +1,3334 @@
1
1
  {
2
2
  "id": "discord",
3
- "channels": ["discord"],
3
+ "activation": {
4
+ "onStartup": false
5
+ },
6
+ "channels": [
7
+ "discord"
8
+ ],
9
+ "channelEnvVars": {
10
+ "discord": [
11
+ "DISCORD_BOT_TOKEN"
12
+ ]
13
+ },
4
14
  "configSchema": {
5
15
  "type": "object",
6
16
  "additionalProperties": false,
7
17
  "properties": {}
18
+ },
19
+ "channelConfigs": {
20
+ "discord": {
21
+ "schema": {
22
+ "$schema": "http://json-schema.org/draft-07/schema#",
23
+ "type": "object",
24
+ "properties": {
25
+ "name": {
26
+ "type": "string"
27
+ },
28
+ "capabilities": {
29
+ "type": "array",
30
+ "items": {
31
+ "type": "string"
32
+ }
33
+ },
34
+ "markdown": {
35
+ "type": "object",
36
+ "properties": {
37
+ "tables": {
38
+ "type": "string",
39
+ "enum": [
40
+ "off",
41
+ "bullets",
42
+ "code",
43
+ "block"
44
+ ]
45
+ }
46
+ },
47
+ "additionalProperties": false
48
+ },
49
+ "enabled": {
50
+ "type": "boolean"
51
+ },
52
+ "commands": {
53
+ "type": "object",
54
+ "properties": {
55
+ "native": {
56
+ "anyOf": [
57
+ {
58
+ "type": "boolean"
59
+ },
60
+ {
61
+ "type": "string",
62
+ "const": "auto"
63
+ }
64
+ ]
65
+ },
66
+ "nativeSkills": {
67
+ "anyOf": [
68
+ {
69
+ "type": "boolean"
70
+ },
71
+ {
72
+ "type": "string",
73
+ "const": "auto"
74
+ }
75
+ ]
76
+ }
77
+ },
78
+ "additionalProperties": false
79
+ },
80
+ "configWrites": {
81
+ "type": "boolean"
82
+ },
83
+ "token": {
84
+ "anyOf": [
85
+ {
86
+ "type": "string"
87
+ },
88
+ {
89
+ "oneOf": [
90
+ {
91
+ "type": "object",
92
+ "properties": {
93
+ "source": {
94
+ "type": "string",
95
+ "const": "env"
96
+ },
97
+ "provider": {
98
+ "type": "string",
99
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
100
+ },
101
+ "id": {
102
+ "type": "string",
103
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
104
+ }
105
+ },
106
+ "required": [
107
+ "source",
108
+ "provider",
109
+ "id"
110
+ ],
111
+ "additionalProperties": false
112
+ },
113
+ {
114
+ "type": "object",
115
+ "properties": {
116
+ "source": {
117
+ "type": "string",
118
+ "const": "file"
119
+ },
120
+ "provider": {
121
+ "type": "string",
122
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
123
+ },
124
+ "id": {
125
+ "type": "string"
126
+ }
127
+ },
128
+ "required": [
129
+ "source",
130
+ "provider",
131
+ "id"
132
+ ],
133
+ "additionalProperties": false
134
+ },
135
+ {
136
+ "type": "object",
137
+ "properties": {
138
+ "source": {
139
+ "type": "string",
140
+ "const": "exec"
141
+ },
142
+ "provider": {
143
+ "type": "string",
144
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
145
+ },
146
+ "id": {
147
+ "type": "string"
148
+ }
149
+ },
150
+ "required": [
151
+ "source",
152
+ "provider",
153
+ "id"
154
+ ],
155
+ "additionalProperties": false
156
+ }
157
+ ]
158
+ }
159
+ ]
160
+ },
161
+ "applicationId": {
162
+ "type": "string"
163
+ },
164
+ "proxy": {
165
+ "type": "string"
166
+ },
167
+ "gatewayInfoTimeoutMs": {
168
+ "type": "integer",
169
+ "exclusiveMinimum": 0,
170
+ "maximum": 120000
171
+ },
172
+ "gatewayReadyTimeoutMs": {
173
+ "type": "integer",
174
+ "exclusiveMinimum": 0,
175
+ "maximum": 120000
176
+ },
177
+ "gatewayRuntimeReadyTimeoutMs": {
178
+ "type": "integer",
179
+ "exclusiveMinimum": 0,
180
+ "maximum": 120000
181
+ },
182
+ "allowBots": {
183
+ "anyOf": [
184
+ {
185
+ "type": "boolean"
186
+ },
187
+ {
188
+ "type": "string",
189
+ "const": "mentions"
190
+ }
191
+ ]
192
+ },
193
+ "dangerouslyAllowNameMatching": {
194
+ "type": "boolean"
195
+ },
196
+ "mentionAliases": {
197
+ "type": "object",
198
+ "propertyNames": {
199
+ "type": "string"
200
+ },
201
+ "additionalProperties": {
202
+ "type": "string",
203
+ "pattern": "^\\d+$"
204
+ }
205
+ },
206
+ "groupPolicy": {
207
+ "default": "allowlist",
208
+ "type": "string",
209
+ "enum": [
210
+ "open",
211
+ "disabled",
212
+ "allowlist"
213
+ ]
214
+ },
215
+ "contextVisibility": {
216
+ "type": "string",
217
+ "enum": [
218
+ "all",
219
+ "allowlist",
220
+ "allowlist_quote"
221
+ ]
222
+ },
223
+ "historyLimit": {
224
+ "type": "integer",
225
+ "minimum": 0,
226
+ "maximum": 9007199254740991
227
+ },
228
+ "dmHistoryLimit": {
229
+ "type": "integer",
230
+ "minimum": 0,
231
+ "maximum": 9007199254740991
232
+ },
233
+ "dms": {
234
+ "type": "object",
235
+ "propertyNames": {
236
+ "type": "string"
237
+ },
238
+ "additionalProperties": {
239
+ "type": "object",
240
+ "properties": {
241
+ "historyLimit": {
242
+ "type": "integer",
243
+ "minimum": 0,
244
+ "maximum": 9007199254740991
245
+ }
246
+ },
247
+ "additionalProperties": false
248
+ }
249
+ },
250
+ "textChunkLimit": {
251
+ "type": "integer",
252
+ "exclusiveMinimum": 0,
253
+ "maximum": 9007199254740991
254
+ },
255
+ "streaming": {
256
+ "type": "object",
257
+ "properties": {
258
+ "mode": {
259
+ "type": "string",
260
+ "enum": [
261
+ "off",
262
+ "partial",
263
+ "block",
264
+ "progress"
265
+ ]
266
+ },
267
+ "chunkMode": {
268
+ "type": "string",
269
+ "enum": [
270
+ "length",
271
+ "newline"
272
+ ]
273
+ },
274
+ "preview": {
275
+ "type": "object",
276
+ "properties": {
277
+ "chunk": {
278
+ "type": "object",
279
+ "properties": {
280
+ "minChars": {
281
+ "type": "integer",
282
+ "exclusiveMinimum": 0,
283
+ "maximum": 9007199254740991
284
+ },
285
+ "maxChars": {
286
+ "type": "integer",
287
+ "exclusiveMinimum": 0,
288
+ "maximum": 9007199254740991
289
+ },
290
+ "breakPreference": {
291
+ "anyOf": [
292
+ {
293
+ "type": "string",
294
+ "const": "paragraph"
295
+ },
296
+ {
297
+ "type": "string",
298
+ "const": "newline"
299
+ },
300
+ {
301
+ "type": "string",
302
+ "const": "sentence"
303
+ }
304
+ ]
305
+ }
306
+ },
307
+ "additionalProperties": false
308
+ },
309
+ "toolProgress": {
310
+ "type": "boolean"
311
+ }
312
+ },
313
+ "additionalProperties": false
314
+ },
315
+ "block": {
316
+ "type": "object",
317
+ "properties": {
318
+ "enabled": {
319
+ "type": "boolean"
320
+ },
321
+ "coalesce": {
322
+ "type": "object",
323
+ "properties": {
324
+ "minChars": {
325
+ "type": "integer",
326
+ "exclusiveMinimum": 0,
327
+ "maximum": 9007199254740991
328
+ },
329
+ "maxChars": {
330
+ "type": "integer",
331
+ "exclusiveMinimum": 0,
332
+ "maximum": 9007199254740991
333
+ },
334
+ "idleMs": {
335
+ "type": "integer",
336
+ "minimum": 0,
337
+ "maximum": 9007199254740991
338
+ }
339
+ },
340
+ "additionalProperties": false
341
+ }
342
+ },
343
+ "additionalProperties": false
344
+ }
345
+ },
346
+ "additionalProperties": false
347
+ },
348
+ "maxLinesPerMessage": {
349
+ "type": "integer",
350
+ "exclusiveMinimum": 0,
351
+ "maximum": 9007199254740991
352
+ },
353
+ "mediaMaxMb": {
354
+ "type": "number",
355
+ "exclusiveMinimum": 0
356
+ },
357
+ "retry": {
358
+ "type": "object",
359
+ "properties": {
360
+ "attempts": {
361
+ "type": "integer",
362
+ "minimum": 1,
363
+ "maximum": 9007199254740991
364
+ },
365
+ "minDelayMs": {
366
+ "type": "integer",
367
+ "minimum": 0,
368
+ "maximum": 9007199254740991
369
+ },
370
+ "maxDelayMs": {
371
+ "type": "integer",
372
+ "minimum": 0,
373
+ "maximum": 9007199254740991
374
+ },
375
+ "jitter": {
376
+ "type": "number",
377
+ "minimum": 0,
378
+ "maximum": 1
379
+ }
380
+ },
381
+ "additionalProperties": false
382
+ },
383
+ "actions": {
384
+ "type": "object",
385
+ "properties": {
386
+ "reactions": {
387
+ "type": "boolean"
388
+ },
389
+ "stickers": {
390
+ "type": "boolean"
391
+ },
392
+ "emojiUploads": {
393
+ "type": "boolean"
394
+ },
395
+ "stickerUploads": {
396
+ "type": "boolean"
397
+ },
398
+ "polls": {
399
+ "type": "boolean"
400
+ },
401
+ "permissions": {
402
+ "type": "boolean"
403
+ },
404
+ "messages": {
405
+ "type": "boolean"
406
+ },
407
+ "threads": {
408
+ "type": "boolean"
409
+ },
410
+ "pins": {
411
+ "type": "boolean"
412
+ },
413
+ "search": {
414
+ "type": "boolean"
415
+ },
416
+ "memberInfo": {
417
+ "type": "boolean"
418
+ },
419
+ "roleInfo": {
420
+ "type": "boolean"
421
+ },
422
+ "roles": {
423
+ "type": "boolean"
424
+ },
425
+ "channelInfo": {
426
+ "type": "boolean"
427
+ },
428
+ "voiceStatus": {
429
+ "type": "boolean"
430
+ },
431
+ "events": {
432
+ "type": "boolean"
433
+ },
434
+ "moderation": {
435
+ "type": "boolean"
436
+ },
437
+ "channels": {
438
+ "type": "boolean"
439
+ },
440
+ "presence": {
441
+ "type": "boolean"
442
+ }
443
+ },
444
+ "additionalProperties": false
445
+ },
446
+ "replyToMode": {
447
+ "anyOf": [
448
+ {
449
+ "type": "string",
450
+ "const": "off"
451
+ },
452
+ {
453
+ "type": "string",
454
+ "const": "first"
455
+ },
456
+ {
457
+ "type": "string",
458
+ "const": "all"
459
+ },
460
+ {
461
+ "type": "string",
462
+ "const": "batched"
463
+ }
464
+ ]
465
+ },
466
+ "thread": {
467
+ "type": "object",
468
+ "properties": {
469
+ "inheritParent": {
470
+ "type": "boolean"
471
+ }
472
+ },
473
+ "additionalProperties": false
474
+ },
475
+ "dmPolicy": {
476
+ "type": "string",
477
+ "enum": [
478
+ "pairing",
479
+ "allowlist",
480
+ "open",
481
+ "disabled"
482
+ ]
483
+ },
484
+ "allowFrom": {
485
+ "type": "array",
486
+ "items": {
487
+ "type": "string"
488
+ }
489
+ },
490
+ "defaultTo": {
491
+ "type": "string"
492
+ },
493
+ "dm": {
494
+ "type": "object",
495
+ "properties": {
496
+ "enabled": {
497
+ "type": "boolean"
498
+ },
499
+ "policy": {
500
+ "type": "string",
501
+ "enum": [
502
+ "pairing",
503
+ "allowlist",
504
+ "open",
505
+ "disabled"
506
+ ]
507
+ },
508
+ "allowFrom": {
509
+ "type": "array",
510
+ "items": {
511
+ "type": "string"
512
+ }
513
+ },
514
+ "groupEnabled": {
515
+ "type": "boolean"
516
+ },
517
+ "groupChannels": {
518
+ "type": "array",
519
+ "items": {
520
+ "type": "string"
521
+ }
522
+ }
523
+ },
524
+ "additionalProperties": false
525
+ },
526
+ "guilds": {
527
+ "type": "object",
528
+ "propertyNames": {
529
+ "type": "string"
530
+ },
531
+ "additionalProperties": {
532
+ "type": "object",
533
+ "properties": {
534
+ "slug": {
535
+ "type": "string"
536
+ },
537
+ "requireMention": {
538
+ "type": "boolean"
539
+ },
540
+ "ignoreOtherMentions": {
541
+ "type": "boolean"
542
+ },
543
+ "tools": {
544
+ "type": "object",
545
+ "properties": {
546
+ "allow": {
547
+ "type": "array",
548
+ "items": {
549
+ "type": "string"
550
+ }
551
+ },
552
+ "alsoAllow": {
553
+ "type": "array",
554
+ "items": {
555
+ "type": "string"
556
+ }
557
+ },
558
+ "deny": {
559
+ "type": "array",
560
+ "items": {
561
+ "type": "string"
562
+ }
563
+ }
564
+ },
565
+ "additionalProperties": false
566
+ },
567
+ "toolsBySender": {
568
+ "type": "object",
569
+ "propertyNames": {
570
+ "type": "string"
571
+ },
572
+ "additionalProperties": {
573
+ "type": "object",
574
+ "properties": {
575
+ "allow": {
576
+ "type": "array",
577
+ "items": {
578
+ "type": "string"
579
+ }
580
+ },
581
+ "alsoAllow": {
582
+ "type": "array",
583
+ "items": {
584
+ "type": "string"
585
+ }
586
+ },
587
+ "deny": {
588
+ "type": "array",
589
+ "items": {
590
+ "type": "string"
591
+ }
592
+ }
593
+ },
594
+ "additionalProperties": false
595
+ }
596
+ },
597
+ "reactionNotifications": {
598
+ "type": "string",
599
+ "enum": [
600
+ "off",
601
+ "own",
602
+ "all",
603
+ "allowlist"
604
+ ]
605
+ },
606
+ "users": {
607
+ "type": "array",
608
+ "items": {
609
+ "type": "string"
610
+ }
611
+ },
612
+ "roles": {
613
+ "type": "array",
614
+ "items": {
615
+ "type": "string"
616
+ }
617
+ },
618
+ "channels": {
619
+ "type": "object",
620
+ "propertyNames": {
621
+ "type": "string"
622
+ },
623
+ "additionalProperties": {
624
+ "type": "object",
625
+ "properties": {
626
+ "requireMention": {
627
+ "type": "boolean"
628
+ },
629
+ "ignoreOtherMentions": {
630
+ "type": "boolean"
631
+ },
632
+ "tools": {
633
+ "type": "object",
634
+ "properties": {
635
+ "allow": {
636
+ "type": "array",
637
+ "items": {
638
+ "type": "string"
639
+ }
640
+ },
641
+ "alsoAllow": {
642
+ "type": "array",
643
+ "items": {
644
+ "type": "string"
645
+ }
646
+ },
647
+ "deny": {
648
+ "type": "array",
649
+ "items": {
650
+ "type": "string"
651
+ }
652
+ }
653
+ },
654
+ "additionalProperties": false
655
+ },
656
+ "toolsBySender": {
657
+ "type": "object",
658
+ "propertyNames": {
659
+ "type": "string"
660
+ },
661
+ "additionalProperties": {
662
+ "type": "object",
663
+ "properties": {
664
+ "allow": {
665
+ "type": "array",
666
+ "items": {
667
+ "type": "string"
668
+ }
669
+ },
670
+ "alsoAllow": {
671
+ "type": "array",
672
+ "items": {
673
+ "type": "string"
674
+ }
675
+ },
676
+ "deny": {
677
+ "type": "array",
678
+ "items": {
679
+ "type": "string"
680
+ }
681
+ }
682
+ },
683
+ "additionalProperties": false
684
+ }
685
+ },
686
+ "skills": {
687
+ "type": "array",
688
+ "items": {
689
+ "type": "string"
690
+ }
691
+ },
692
+ "enabled": {
693
+ "type": "boolean"
694
+ },
695
+ "users": {
696
+ "type": "array",
697
+ "items": {
698
+ "type": "string"
699
+ }
700
+ },
701
+ "roles": {
702
+ "type": "array",
703
+ "items": {
704
+ "type": "string"
705
+ }
706
+ },
707
+ "systemPrompt": {
708
+ "type": "string"
709
+ },
710
+ "includeThreadStarter": {
711
+ "type": "boolean"
712
+ },
713
+ "autoThread": {
714
+ "type": "boolean"
715
+ },
716
+ "autoThreadName": {
717
+ "type": "string",
718
+ "enum": [
719
+ "message",
720
+ "generated"
721
+ ]
722
+ },
723
+ "autoArchiveDuration": {
724
+ "anyOf": [
725
+ {
726
+ "type": "string",
727
+ "enum": [
728
+ "60",
729
+ "1440",
730
+ "4320",
731
+ "10080"
732
+ ]
733
+ },
734
+ {
735
+ "type": "number",
736
+ "const": 60
737
+ },
738
+ {
739
+ "type": "number",
740
+ "const": 1440
741
+ },
742
+ {
743
+ "type": "number",
744
+ "const": 4320
745
+ },
746
+ {
747
+ "type": "number",
748
+ "const": 10080
749
+ }
750
+ ]
751
+ }
752
+ },
753
+ "additionalProperties": false
754
+ }
755
+ }
756
+ },
757
+ "additionalProperties": false
758
+ }
759
+ },
760
+ "heartbeat": {
761
+ "type": "object",
762
+ "properties": {
763
+ "showOk": {
764
+ "type": "boolean"
765
+ },
766
+ "showAlerts": {
767
+ "type": "boolean"
768
+ },
769
+ "useIndicator": {
770
+ "type": "boolean"
771
+ }
772
+ },
773
+ "additionalProperties": false
774
+ },
775
+ "healthMonitor": {
776
+ "type": "object",
777
+ "properties": {
778
+ "enabled": {
779
+ "type": "boolean"
780
+ }
781
+ },
782
+ "additionalProperties": false
783
+ },
784
+ "execApprovals": {
785
+ "type": "object",
786
+ "properties": {
787
+ "enabled": {
788
+ "type": "boolean"
789
+ },
790
+ "approvers": {
791
+ "type": "array",
792
+ "items": {
793
+ "type": "string"
794
+ }
795
+ },
796
+ "agentFilter": {
797
+ "type": "array",
798
+ "items": {
799
+ "type": "string"
800
+ }
801
+ },
802
+ "sessionFilter": {
803
+ "type": "array",
804
+ "items": {
805
+ "type": "string"
806
+ }
807
+ },
808
+ "cleanupAfterResolve": {
809
+ "type": "boolean"
810
+ },
811
+ "target": {
812
+ "type": "string",
813
+ "enum": [
814
+ "dm",
815
+ "channel",
816
+ "both"
817
+ ]
818
+ }
819
+ },
820
+ "additionalProperties": false
821
+ },
822
+ "agentComponents": {
823
+ "type": "object",
824
+ "properties": {
825
+ "enabled": {
826
+ "type": "boolean"
827
+ }
828
+ },
829
+ "additionalProperties": false
830
+ },
831
+ "ui": {
832
+ "type": "object",
833
+ "properties": {
834
+ "components": {
835
+ "type": "object",
836
+ "properties": {
837
+ "accentColor": {
838
+ "type": "string",
839
+ "pattern": "^#?[0-9a-fA-F]{6}$"
840
+ }
841
+ },
842
+ "additionalProperties": false
843
+ }
844
+ },
845
+ "additionalProperties": false
846
+ },
847
+ "slashCommand": {
848
+ "type": "object",
849
+ "properties": {
850
+ "ephemeral": {
851
+ "type": "boolean"
852
+ }
853
+ },
854
+ "additionalProperties": false
855
+ },
856
+ "threadBindings": {
857
+ "type": "object",
858
+ "properties": {
859
+ "enabled": {
860
+ "type": "boolean"
861
+ },
862
+ "idleHours": {
863
+ "type": "number",
864
+ "minimum": 0
865
+ },
866
+ "maxAgeHours": {
867
+ "type": "number",
868
+ "minimum": 0
869
+ },
870
+ "spawnSessions": {
871
+ "type": "boolean"
872
+ },
873
+ "defaultSpawnContext": {
874
+ "type": "string",
875
+ "enum": [
876
+ "isolated",
877
+ "fork"
878
+ ]
879
+ },
880
+ "spawnSubagentSessions": {
881
+ "type": "boolean"
882
+ },
883
+ "spawnAcpSessions": {
884
+ "type": "boolean"
885
+ }
886
+ },
887
+ "additionalProperties": false
888
+ },
889
+ "intents": {
890
+ "type": "object",
891
+ "properties": {
892
+ "presence": {
893
+ "type": "boolean"
894
+ },
895
+ "guildMembers": {
896
+ "type": "boolean"
897
+ },
898
+ "voiceStates": {
899
+ "type": "boolean"
900
+ }
901
+ },
902
+ "additionalProperties": false
903
+ },
904
+ "voice": {
905
+ "type": "object",
906
+ "properties": {
907
+ "enabled": {
908
+ "type": "boolean"
909
+ },
910
+ "model": {
911
+ "type": "string",
912
+ "minLength": 1
913
+ },
914
+ "autoJoin": {
915
+ "type": "array",
916
+ "items": {
917
+ "type": "object",
918
+ "properties": {
919
+ "guildId": {
920
+ "type": "string",
921
+ "minLength": 1
922
+ },
923
+ "channelId": {
924
+ "type": "string",
925
+ "minLength": 1
926
+ }
927
+ },
928
+ "required": [
929
+ "guildId",
930
+ "channelId"
931
+ ],
932
+ "additionalProperties": false
933
+ }
934
+ },
935
+ "daveEncryption": {
936
+ "type": "boolean"
937
+ },
938
+ "decryptionFailureTolerance": {
939
+ "type": "integer",
940
+ "minimum": 0,
941
+ "maximum": 9007199254740991
942
+ },
943
+ "connectTimeoutMs": {
944
+ "type": "integer",
945
+ "exclusiveMinimum": 0,
946
+ "maximum": 120000
947
+ },
948
+ "reconnectGraceMs": {
949
+ "type": "integer",
950
+ "exclusiveMinimum": 0,
951
+ "maximum": 120000
952
+ },
953
+ "tts": {
954
+ "type": "object",
955
+ "properties": {
956
+ "auto": {
957
+ "type": "string",
958
+ "enum": [
959
+ "off",
960
+ "always",
961
+ "inbound",
962
+ "tagged"
963
+ ]
964
+ },
965
+ "enabled": {
966
+ "type": "boolean"
967
+ },
968
+ "mode": {
969
+ "type": "string",
970
+ "enum": [
971
+ "final",
972
+ "all"
973
+ ]
974
+ },
975
+ "provider": {
976
+ "type": "string",
977
+ "minLength": 1
978
+ },
979
+ "persona": {
980
+ "type": "string"
981
+ },
982
+ "personas": {
983
+ "type": "object",
984
+ "propertyNames": {
985
+ "type": "string"
986
+ },
987
+ "additionalProperties": {
988
+ "type": "object",
989
+ "properties": {
990
+ "label": {
991
+ "type": "string"
992
+ },
993
+ "description": {
994
+ "type": "string"
995
+ },
996
+ "provider": {
997
+ "type": "string",
998
+ "minLength": 1
999
+ },
1000
+ "fallbackPolicy": {
1001
+ "anyOf": [
1002
+ {
1003
+ "type": "string",
1004
+ "const": "preserve-persona"
1005
+ },
1006
+ {
1007
+ "type": "string",
1008
+ "const": "provider-defaults"
1009
+ },
1010
+ {
1011
+ "type": "string",
1012
+ "const": "fail"
1013
+ }
1014
+ ]
1015
+ },
1016
+ "prompt": {
1017
+ "type": "object",
1018
+ "properties": {
1019
+ "profile": {
1020
+ "type": "string"
1021
+ },
1022
+ "scene": {
1023
+ "type": "string"
1024
+ },
1025
+ "sampleContext": {
1026
+ "type": "string"
1027
+ },
1028
+ "style": {
1029
+ "type": "string"
1030
+ },
1031
+ "accent": {
1032
+ "type": "string"
1033
+ },
1034
+ "pacing": {
1035
+ "type": "string"
1036
+ },
1037
+ "constraints": {
1038
+ "type": "array",
1039
+ "items": {
1040
+ "type": "string"
1041
+ }
1042
+ }
1043
+ },
1044
+ "additionalProperties": false
1045
+ },
1046
+ "providers": {
1047
+ "type": "object",
1048
+ "propertyNames": {
1049
+ "type": "string"
1050
+ },
1051
+ "additionalProperties": {
1052
+ "type": "object",
1053
+ "properties": {
1054
+ "apiKey": {
1055
+ "anyOf": [
1056
+ {
1057
+ "type": "string"
1058
+ },
1059
+ {
1060
+ "oneOf": [
1061
+ {
1062
+ "type": "object",
1063
+ "properties": {
1064
+ "source": {
1065
+ "type": "string",
1066
+ "const": "env"
1067
+ },
1068
+ "provider": {
1069
+ "type": "string",
1070
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
1071
+ },
1072
+ "id": {
1073
+ "type": "string",
1074
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
1075
+ }
1076
+ },
1077
+ "required": [
1078
+ "source",
1079
+ "provider",
1080
+ "id"
1081
+ ],
1082
+ "additionalProperties": false
1083
+ },
1084
+ {
1085
+ "type": "object",
1086
+ "properties": {
1087
+ "source": {
1088
+ "type": "string",
1089
+ "const": "file"
1090
+ },
1091
+ "provider": {
1092
+ "type": "string",
1093
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
1094
+ },
1095
+ "id": {
1096
+ "type": "string"
1097
+ }
1098
+ },
1099
+ "required": [
1100
+ "source",
1101
+ "provider",
1102
+ "id"
1103
+ ],
1104
+ "additionalProperties": false
1105
+ },
1106
+ {
1107
+ "type": "object",
1108
+ "properties": {
1109
+ "source": {
1110
+ "type": "string",
1111
+ "const": "exec"
1112
+ },
1113
+ "provider": {
1114
+ "type": "string",
1115
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
1116
+ },
1117
+ "id": {
1118
+ "type": "string"
1119
+ }
1120
+ },
1121
+ "required": [
1122
+ "source",
1123
+ "provider",
1124
+ "id"
1125
+ ],
1126
+ "additionalProperties": false
1127
+ }
1128
+ ]
1129
+ }
1130
+ ]
1131
+ }
1132
+ },
1133
+ "additionalProperties": {
1134
+ "anyOf": [
1135
+ {
1136
+ "type": "string"
1137
+ },
1138
+ {
1139
+ "type": "number"
1140
+ },
1141
+ {
1142
+ "type": "boolean"
1143
+ },
1144
+ {
1145
+ "type": "null"
1146
+ },
1147
+ {
1148
+ "type": "array",
1149
+ "items": {}
1150
+ },
1151
+ {
1152
+ "type": "object",
1153
+ "propertyNames": {
1154
+ "type": "string"
1155
+ },
1156
+ "additionalProperties": {}
1157
+ }
1158
+ ]
1159
+ }
1160
+ }
1161
+ }
1162
+ },
1163
+ "additionalProperties": false
1164
+ }
1165
+ },
1166
+ "summaryModel": {
1167
+ "type": "string"
1168
+ },
1169
+ "modelOverrides": {
1170
+ "type": "object",
1171
+ "properties": {
1172
+ "enabled": {
1173
+ "type": "boolean"
1174
+ },
1175
+ "allowText": {
1176
+ "type": "boolean"
1177
+ },
1178
+ "allowProvider": {
1179
+ "type": "boolean"
1180
+ },
1181
+ "allowVoice": {
1182
+ "type": "boolean"
1183
+ },
1184
+ "allowModelId": {
1185
+ "type": "boolean"
1186
+ },
1187
+ "allowVoiceSettings": {
1188
+ "type": "boolean"
1189
+ },
1190
+ "allowNormalization": {
1191
+ "type": "boolean"
1192
+ },
1193
+ "allowSeed": {
1194
+ "type": "boolean"
1195
+ }
1196
+ },
1197
+ "additionalProperties": false
1198
+ },
1199
+ "providers": {
1200
+ "type": "object",
1201
+ "propertyNames": {
1202
+ "type": "string"
1203
+ },
1204
+ "additionalProperties": {
1205
+ "type": "object",
1206
+ "properties": {
1207
+ "apiKey": {
1208
+ "anyOf": [
1209
+ {
1210
+ "type": "string"
1211
+ },
1212
+ {
1213
+ "oneOf": [
1214
+ {
1215
+ "type": "object",
1216
+ "properties": {
1217
+ "source": {
1218
+ "type": "string",
1219
+ "const": "env"
1220
+ },
1221
+ "provider": {
1222
+ "type": "string",
1223
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
1224
+ },
1225
+ "id": {
1226
+ "type": "string",
1227
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
1228
+ }
1229
+ },
1230
+ "required": [
1231
+ "source",
1232
+ "provider",
1233
+ "id"
1234
+ ],
1235
+ "additionalProperties": false
1236
+ },
1237
+ {
1238
+ "type": "object",
1239
+ "properties": {
1240
+ "source": {
1241
+ "type": "string",
1242
+ "const": "file"
1243
+ },
1244
+ "provider": {
1245
+ "type": "string",
1246
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
1247
+ },
1248
+ "id": {
1249
+ "type": "string"
1250
+ }
1251
+ },
1252
+ "required": [
1253
+ "source",
1254
+ "provider",
1255
+ "id"
1256
+ ],
1257
+ "additionalProperties": false
1258
+ },
1259
+ {
1260
+ "type": "object",
1261
+ "properties": {
1262
+ "source": {
1263
+ "type": "string",
1264
+ "const": "exec"
1265
+ },
1266
+ "provider": {
1267
+ "type": "string",
1268
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
1269
+ },
1270
+ "id": {
1271
+ "type": "string"
1272
+ }
1273
+ },
1274
+ "required": [
1275
+ "source",
1276
+ "provider",
1277
+ "id"
1278
+ ],
1279
+ "additionalProperties": false
1280
+ }
1281
+ ]
1282
+ }
1283
+ ]
1284
+ }
1285
+ },
1286
+ "additionalProperties": {
1287
+ "anyOf": [
1288
+ {
1289
+ "type": "string"
1290
+ },
1291
+ {
1292
+ "type": "number"
1293
+ },
1294
+ {
1295
+ "type": "boolean"
1296
+ },
1297
+ {
1298
+ "type": "null"
1299
+ },
1300
+ {
1301
+ "type": "array",
1302
+ "items": {}
1303
+ },
1304
+ {
1305
+ "type": "object",
1306
+ "propertyNames": {
1307
+ "type": "string"
1308
+ },
1309
+ "additionalProperties": {}
1310
+ }
1311
+ ]
1312
+ }
1313
+ }
1314
+ },
1315
+ "prefsPath": {
1316
+ "type": "string"
1317
+ },
1318
+ "maxTextLength": {
1319
+ "type": "integer",
1320
+ "minimum": 1,
1321
+ "maximum": 9007199254740991
1322
+ },
1323
+ "timeoutMs": {
1324
+ "type": "integer",
1325
+ "minimum": 1000,
1326
+ "maximum": 120000
1327
+ }
1328
+ },
1329
+ "additionalProperties": false
1330
+ }
1331
+ },
1332
+ "additionalProperties": false
1333
+ },
1334
+ "pluralkit": {
1335
+ "type": "object",
1336
+ "properties": {
1337
+ "enabled": {
1338
+ "type": "boolean"
1339
+ },
1340
+ "token": {
1341
+ "anyOf": [
1342
+ {
1343
+ "type": "string"
1344
+ },
1345
+ {
1346
+ "oneOf": [
1347
+ {
1348
+ "type": "object",
1349
+ "properties": {
1350
+ "source": {
1351
+ "type": "string",
1352
+ "const": "env"
1353
+ },
1354
+ "provider": {
1355
+ "type": "string",
1356
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
1357
+ },
1358
+ "id": {
1359
+ "type": "string",
1360
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
1361
+ }
1362
+ },
1363
+ "required": [
1364
+ "source",
1365
+ "provider",
1366
+ "id"
1367
+ ],
1368
+ "additionalProperties": false
1369
+ },
1370
+ {
1371
+ "type": "object",
1372
+ "properties": {
1373
+ "source": {
1374
+ "type": "string",
1375
+ "const": "file"
1376
+ },
1377
+ "provider": {
1378
+ "type": "string",
1379
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
1380
+ },
1381
+ "id": {
1382
+ "type": "string"
1383
+ }
1384
+ },
1385
+ "required": [
1386
+ "source",
1387
+ "provider",
1388
+ "id"
1389
+ ],
1390
+ "additionalProperties": false
1391
+ },
1392
+ {
1393
+ "type": "object",
1394
+ "properties": {
1395
+ "source": {
1396
+ "type": "string",
1397
+ "const": "exec"
1398
+ },
1399
+ "provider": {
1400
+ "type": "string",
1401
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
1402
+ },
1403
+ "id": {
1404
+ "type": "string"
1405
+ }
1406
+ },
1407
+ "required": [
1408
+ "source",
1409
+ "provider",
1410
+ "id"
1411
+ ],
1412
+ "additionalProperties": false
1413
+ }
1414
+ ]
1415
+ }
1416
+ ]
1417
+ }
1418
+ },
1419
+ "additionalProperties": false
1420
+ },
1421
+ "responsePrefix": {
1422
+ "type": "string"
1423
+ },
1424
+ "ackReaction": {
1425
+ "type": "string"
1426
+ },
1427
+ "ackReactionScope": {
1428
+ "type": "string",
1429
+ "enum": [
1430
+ "group-mentions",
1431
+ "group-all",
1432
+ "direct",
1433
+ "all",
1434
+ "off",
1435
+ "none"
1436
+ ]
1437
+ },
1438
+ "activity": {
1439
+ "type": "string"
1440
+ },
1441
+ "status": {
1442
+ "type": "string",
1443
+ "enum": [
1444
+ "online",
1445
+ "dnd",
1446
+ "idle",
1447
+ "invisible"
1448
+ ]
1449
+ },
1450
+ "autoPresence": {
1451
+ "type": "object",
1452
+ "properties": {
1453
+ "enabled": {
1454
+ "type": "boolean"
1455
+ },
1456
+ "intervalMs": {
1457
+ "type": "integer",
1458
+ "exclusiveMinimum": 0,
1459
+ "maximum": 9007199254740991
1460
+ },
1461
+ "minUpdateIntervalMs": {
1462
+ "type": "integer",
1463
+ "exclusiveMinimum": 0,
1464
+ "maximum": 9007199254740991
1465
+ },
1466
+ "healthyText": {
1467
+ "type": "string"
1468
+ },
1469
+ "degradedText": {
1470
+ "type": "string"
1471
+ },
1472
+ "exhaustedText": {
1473
+ "type": "string"
1474
+ }
1475
+ },
1476
+ "additionalProperties": false
1477
+ },
1478
+ "activityType": {
1479
+ "anyOf": [
1480
+ {
1481
+ "type": "number",
1482
+ "const": 0
1483
+ },
1484
+ {
1485
+ "type": "number",
1486
+ "const": 1
1487
+ },
1488
+ {
1489
+ "type": "number",
1490
+ "const": 2
1491
+ },
1492
+ {
1493
+ "type": "number",
1494
+ "const": 3
1495
+ },
1496
+ {
1497
+ "type": "number",
1498
+ "const": 4
1499
+ },
1500
+ {
1501
+ "type": "number",
1502
+ "const": 5
1503
+ }
1504
+ ]
1505
+ },
1506
+ "activityUrl": {
1507
+ "type": "string",
1508
+ "format": "uri"
1509
+ },
1510
+ "inboundWorker": {
1511
+ "type": "object",
1512
+ "properties": {
1513
+ "runTimeoutMs": {
1514
+ "type": "integer",
1515
+ "minimum": 0,
1516
+ "maximum": 9007199254740991
1517
+ }
1518
+ },
1519
+ "additionalProperties": false
1520
+ },
1521
+ "eventQueue": {
1522
+ "type": "object",
1523
+ "properties": {
1524
+ "listenerTimeout": {
1525
+ "type": "integer",
1526
+ "exclusiveMinimum": 0,
1527
+ "maximum": 9007199254740991
1528
+ },
1529
+ "maxQueueSize": {
1530
+ "type": "integer",
1531
+ "exclusiveMinimum": 0,
1532
+ "maximum": 9007199254740991
1533
+ },
1534
+ "maxConcurrency": {
1535
+ "type": "integer",
1536
+ "exclusiveMinimum": 0,
1537
+ "maximum": 9007199254740991
1538
+ }
1539
+ },
1540
+ "additionalProperties": false
1541
+ },
1542
+ "accounts": {
1543
+ "type": "object",
1544
+ "propertyNames": {
1545
+ "type": "string"
1546
+ },
1547
+ "additionalProperties": {
1548
+ "type": "object",
1549
+ "properties": {
1550
+ "name": {
1551
+ "type": "string"
1552
+ },
1553
+ "capabilities": {
1554
+ "type": "array",
1555
+ "items": {
1556
+ "type": "string"
1557
+ }
1558
+ },
1559
+ "markdown": {
1560
+ "type": "object",
1561
+ "properties": {
1562
+ "tables": {
1563
+ "type": "string",
1564
+ "enum": [
1565
+ "off",
1566
+ "bullets",
1567
+ "code",
1568
+ "block"
1569
+ ]
1570
+ }
1571
+ },
1572
+ "additionalProperties": false
1573
+ },
1574
+ "enabled": {
1575
+ "type": "boolean"
1576
+ },
1577
+ "commands": {
1578
+ "type": "object",
1579
+ "properties": {
1580
+ "native": {
1581
+ "anyOf": [
1582
+ {
1583
+ "type": "boolean"
1584
+ },
1585
+ {
1586
+ "type": "string",
1587
+ "const": "auto"
1588
+ }
1589
+ ]
1590
+ },
1591
+ "nativeSkills": {
1592
+ "anyOf": [
1593
+ {
1594
+ "type": "boolean"
1595
+ },
1596
+ {
1597
+ "type": "string",
1598
+ "const": "auto"
1599
+ }
1600
+ ]
1601
+ }
1602
+ },
1603
+ "additionalProperties": false
1604
+ },
1605
+ "configWrites": {
1606
+ "type": "boolean"
1607
+ },
1608
+ "token": {
1609
+ "anyOf": [
1610
+ {
1611
+ "type": "string"
1612
+ },
1613
+ {
1614
+ "oneOf": [
1615
+ {
1616
+ "type": "object",
1617
+ "properties": {
1618
+ "source": {
1619
+ "type": "string",
1620
+ "const": "env"
1621
+ },
1622
+ "provider": {
1623
+ "type": "string",
1624
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
1625
+ },
1626
+ "id": {
1627
+ "type": "string",
1628
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
1629
+ }
1630
+ },
1631
+ "required": [
1632
+ "source",
1633
+ "provider",
1634
+ "id"
1635
+ ],
1636
+ "additionalProperties": false
1637
+ },
1638
+ {
1639
+ "type": "object",
1640
+ "properties": {
1641
+ "source": {
1642
+ "type": "string",
1643
+ "const": "file"
1644
+ },
1645
+ "provider": {
1646
+ "type": "string",
1647
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
1648
+ },
1649
+ "id": {
1650
+ "type": "string"
1651
+ }
1652
+ },
1653
+ "required": [
1654
+ "source",
1655
+ "provider",
1656
+ "id"
1657
+ ],
1658
+ "additionalProperties": false
1659
+ },
1660
+ {
1661
+ "type": "object",
1662
+ "properties": {
1663
+ "source": {
1664
+ "type": "string",
1665
+ "const": "exec"
1666
+ },
1667
+ "provider": {
1668
+ "type": "string",
1669
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
1670
+ },
1671
+ "id": {
1672
+ "type": "string"
1673
+ }
1674
+ },
1675
+ "required": [
1676
+ "source",
1677
+ "provider",
1678
+ "id"
1679
+ ],
1680
+ "additionalProperties": false
1681
+ }
1682
+ ]
1683
+ }
1684
+ ]
1685
+ },
1686
+ "applicationId": {
1687
+ "type": "string"
1688
+ },
1689
+ "proxy": {
1690
+ "type": "string"
1691
+ },
1692
+ "gatewayInfoTimeoutMs": {
1693
+ "type": "integer",
1694
+ "exclusiveMinimum": 0,
1695
+ "maximum": 120000
1696
+ },
1697
+ "gatewayReadyTimeoutMs": {
1698
+ "type": "integer",
1699
+ "exclusiveMinimum": 0,
1700
+ "maximum": 120000
1701
+ },
1702
+ "gatewayRuntimeReadyTimeoutMs": {
1703
+ "type": "integer",
1704
+ "exclusiveMinimum": 0,
1705
+ "maximum": 120000
1706
+ },
1707
+ "allowBots": {
1708
+ "anyOf": [
1709
+ {
1710
+ "type": "boolean"
1711
+ },
1712
+ {
1713
+ "type": "string",
1714
+ "const": "mentions"
1715
+ }
1716
+ ]
1717
+ },
1718
+ "dangerouslyAllowNameMatching": {
1719
+ "type": "boolean"
1720
+ },
1721
+ "mentionAliases": {
1722
+ "type": "object",
1723
+ "propertyNames": {
1724
+ "type": "string"
1725
+ },
1726
+ "additionalProperties": {
1727
+ "type": "string",
1728
+ "pattern": "^\\d+$"
1729
+ }
1730
+ },
1731
+ "groupPolicy": {
1732
+ "default": "allowlist",
1733
+ "type": "string",
1734
+ "enum": [
1735
+ "open",
1736
+ "disabled",
1737
+ "allowlist"
1738
+ ]
1739
+ },
1740
+ "contextVisibility": {
1741
+ "type": "string",
1742
+ "enum": [
1743
+ "all",
1744
+ "allowlist",
1745
+ "allowlist_quote"
1746
+ ]
1747
+ },
1748
+ "historyLimit": {
1749
+ "type": "integer",
1750
+ "minimum": 0,
1751
+ "maximum": 9007199254740991
1752
+ },
1753
+ "dmHistoryLimit": {
1754
+ "type": "integer",
1755
+ "minimum": 0,
1756
+ "maximum": 9007199254740991
1757
+ },
1758
+ "dms": {
1759
+ "type": "object",
1760
+ "propertyNames": {
1761
+ "type": "string"
1762
+ },
1763
+ "additionalProperties": {
1764
+ "type": "object",
1765
+ "properties": {
1766
+ "historyLimit": {
1767
+ "type": "integer",
1768
+ "minimum": 0,
1769
+ "maximum": 9007199254740991
1770
+ }
1771
+ },
1772
+ "additionalProperties": false
1773
+ }
1774
+ },
1775
+ "textChunkLimit": {
1776
+ "type": "integer",
1777
+ "exclusiveMinimum": 0,
1778
+ "maximum": 9007199254740991
1779
+ },
1780
+ "streaming": {
1781
+ "type": "object",
1782
+ "properties": {
1783
+ "mode": {
1784
+ "type": "string",
1785
+ "enum": [
1786
+ "off",
1787
+ "partial",
1788
+ "block",
1789
+ "progress"
1790
+ ]
1791
+ },
1792
+ "chunkMode": {
1793
+ "type": "string",
1794
+ "enum": [
1795
+ "length",
1796
+ "newline"
1797
+ ]
1798
+ },
1799
+ "preview": {
1800
+ "type": "object",
1801
+ "properties": {
1802
+ "chunk": {
1803
+ "type": "object",
1804
+ "properties": {
1805
+ "minChars": {
1806
+ "type": "integer",
1807
+ "exclusiveMinimum": 0,
1808
+ "maximum": 9007199254740991
1809
+ },
1810
+ "maxChars": {
1811
+ "type": "integer",
1812
+ "exclusiveMinimum": 0,
1813
+ "maximum": 9007199254740991
1814
+ },
1815
+ "breakPreference": {
1816
+ "anyOf": [
1817
+ {
1818
+ "type": "string",
1819
+ "const": "paragraph"
1820
+ },
1821
+ {
1822
+ "type": "string",
1823
+ "const": "newline"
1824
+ },
1825
+ {
1826
+ "type": "string",
1827
+ "const": "sentence"
1828
+ }
1829
+ ]
1830
+ }
1831
+ },
1832
+ "additionalProperties": false
1833
+ },
1834
+ "toolProgress": {
1835
+ "type": "boolean"
1836
+ }
1837
+ },
1838
+ "additionalProperties": false
1839
+ },
1840
+ "block": {
1841
+ "type": "object",
1842
+ "properties": {
1843
+ "enabled": {
1844
+ "type": "boolean"
1845
+ },
1846
+ "coalesce": {
1847
+ "type": "object",
1848
+ "properties": {
1849
+ "minChars": {
1850
+ "type": "integer",
1851
+ "exclusiveMinimum": 0,
1852
+ "maximum": 9007199254740991
1853
+ },
1854
+ "maxChars": {
1855
+ "type": "integer",
1856
+ "exclusiveMinimum": 0,
1857
+ "maximum": 9007199254740991
1858
+ },
1859
+ "idleMs": {
1860
+ "type": "integer",
1861
+ "minimum": 0,
1862
+ "maximum": 9007199254740991
1863
+ }
1864
+ },
1865
+ "additionalProperties": false
1866
+ }
1867
+ },
1868
+ "additionalProperties": false
1869
+ }
1870
+ },
1871
+ "additionalProperties": false
1872
+ },
1873
+ "maxLinesPerMessage": {
1874
+ "type": "integer",
1875
+ "exclusiveMinimum": 0,
1876
+ "maximum": 9007199254740991
1877
+ },
1878
+ "mediaMaxMb": {
1879
+ "type": "number",
1880
+ "exclusiveMinimum": 0
1881
+ },
1882
+ "retry": {
1883
+ "type": "object",
1884
+ "properties": {
1885
+ "attempts": {
1886
+ "type": "integer",
1887
+ "minimum": 1,
1888
+ "maximum": 9007199254740991
1889
+ },
1890
+ "minDelayMs": {
1891
+ "type": "integer",
1892
+ "minimum": 0,
1893
+ "maximum": 9007199254740991
1894
+ },
1895
+ "maxDelayMs": {
1896
+ "type": "integer",
1897
+ "minimum": 0,
1898
+ "maximum": 9007199254740991
1899
+ },
1900
+ "jitter": {
1901
+ "type": "number",
1902
+ "minimum": 0,
1903
+ "maximum": 1
1904
+ }
1905
+ },
1906
+ "additionalProperties": false
1907
+ },
1908
+ "actions": {
1909
+ "type": "object",
1910
+ "properties": {
1911
+ "reactions": {
1912
+ "type": "boolean"
1913
+ },
1914
+ "stickers": {
1915
+ "type": "boolean"
1916
+ },
1917
+ "emojiUploads": {
1918
+ "type": "boolean"
1919
+ },
1920
+ "stickerUploads": {
1921
+ "type": "boolean"
1922
+ },
1923
+ "polls": {
1924
+ "type": "boolean"
1925
+ },
1926
+ "permissions": {
1927
+ "type": "boolean"
1928
+ },
1929
+ "messages": {
1930
+ "type": "boolean"
1931
+ },
1932
+ "threads": {
1933
+ "type": "boolean"
1934
+ },
1935
+ "pins": {
1936
+ "type": "boolean"
1937
+ },
1938
+ "search": {
1939
+ "type": "boolean"
1940
+ },
1941
+ "memberInfo": {
1942
+ "type": "boolean"
1943
+ },
1944
+ "roleInfo": {
1945
+ "type": "boolean"
1946
+ },
1947
+ "roles": {
1948
+ "type": "boolean"
1949
+ },
1950
+ "channelInfo": {
1951
+ "type": "boolean"
1952
+ },
1953
+ "voiceStatus": {
1954
+ "type": "boolean"
1955
+ },
1956
+ "events": {
1957
+ "type": "boolean"
1958
+ },
1959
+ "moderation": {
1960
+ "type": "boolean"
1961
+ },
1962
+ "channels": {
1963
+ "type": "boolean"
1964
+ },
1965
+ "presence": {
1966
+ "type": "boolean"
1967
+ }
1968
+ },
1969
+ "additionalProperties": false
1970
+ },
1971
+ "replyToMode": {
1972
+ "anyOf": [
1973
+ {
1974
+ "type": "string",
1975
+ "const": "off"
1976
+ },
1977
+ {
1978
+ "type": "string",
1979
+ "const": "first"
1980
+ },
1981
+ {
1982
+ "type": "string",
1983
+ "const": "all"
1984
+ },
1985
+ {
1986
+ "type": "string",
1987
+ "const": "batched"
1988
+ }
1989
+ ]
1990
+ },
1991
+ "thread": {
1992
+ "type": "object",
1993
+ "properties": {
1994
+ "inheritParent": {
1995
+ "type": "boolean"
1996
+ }
1997
+ },
1998
+ "additionalProperties": false
1999
+ },
2000
+ "dmPolicy": {
2001
+ "type": "string",
2002
+ "enum": [
2003
+ "pairing",
2004
+ "allowlist",
2005
+ "open",
2006
+ "disabled"
2007
+ ]
2008
+ },
2009
+ "allowFrom": {
2010
+ "type": "array",
2011
+ "items": {
2012
+ "type": "string"
2013
+ }
2014
+ },
2015
+ "defaultTo": {
2016
+ "type": "string"
2017
+ },
2018
+ "dm": {
2019
+ "type": "object",
2020
+ "properties": {
2021
+ "enabled": {
2022
+ "type": "boolean"
2023
+ },
2024
+ "policy": {
2025
+ "type": "string",
2026
+ "enum": [
2027
+ "pairing",
2028
+ "allowlist",
2029
+ "open",
2030
+ "disabled"
2031
+ ]
2032
+ },
2033
+ "allowFrom": {
2034
+ "type": "array",
2035
+ "items": {
2036
+ "type": "string"
2037
+ }
2038
+ },
2039
+ "groupEnabled": {
2040
+ "type": "boolean"
2041
+ },
2042
+ "groupChannels": {
2043
+ "type": "array",
2044
+ "items": {
2045
+ "type": "string"
2046
+ }
2047
+ }
2048
+ },
2049
+ "additionalProperties": false
2050
+ },
2051
+ "guilds": {
2052
+ "type": "object",
2053
+ "propertyNames": {
2054
+ "type": "string"
2055
+ },
2056
+ "additionalProperties": {
2057
+ "type": "object",
2058
+ "properties": {
2059
+ "slug": {
2060
+ "type": "string"
2061
+ },
2062
+ "requireMention": {
2063
+ "type": "boolean"
2064
+ },
2065
+ "ignoreOtherMentions": {
2066
+ "type": "boolean"
2067
+ },
2068
+ "tools": {
2069
+ "type": "object",
2070
+ "properties": {
2071
+ "allow": {
2072
+ "type": "array",
2073
+ "items": {
2074
+ "type": "string"
2075
+ }
2076
+ },
2077
+ "alsoAllow": {
2078
+ "type": "array",
2079
+ "items": {
2080
+ "type": "string"
2081
+ }
2082
+ },
2083
+ "deny": {
2084
+ "type": "array",
2085
+ "items": {
2086
+ "type": "string"
2087
+ }
2088
+ }
2089
+ },
2090
+ "additionalProperties": false
2091
+ },
2092
+ "toolsBySender": {
2093
+ "type": "object",
2094
+ "propertyNames": {
2095
+ "type": "string"
2096
+ },
2097
+ "additionalProperties": {
2098
+ "type": "object",
2099
+ "properties": {
2100
+ "allow": {
2101
+ "type": "array",
2102
+ "items": {
2103
+ "type": "string"
2104
+ }
2105
+ },
2106
+ "alsoAllow": {
2107
+ "type": "array",
2108
+ "items": {
2109
+ "type": "string"
2110
+ }
2111
+ },
2112
+ "deny": {
2113
+ "type": "array",
2114
+ "items": {
2115
+ "type": "string"
2116
+ }
2117
+ }
2118
+ },
2119
+ "additionalProperties": false
2120
+ }
2121
+ },
2122
+ "reactionNotifications": {
2123
+ "type": "string",
2124
+ "enum": [
2125
+ "off",
2126
+ "own",
2127
+ "all",
2128
+ "allowlist"
2129
+ ]
2130
+ },
2131
+ "users": {
2132
+ "type": "array",
2133
+ "items": {
2134
+ "type": "string"
2135
+ }
2136
+ },
2137
+ "roles": {
2138
+ "type": "array",
2139
+ "items": {
2140
+ "type": "string"
2141
+ }
2142
+ },
2143
+ "channels": {
2144
+ "type": "object",
2145
+ "propertyNames": {
2146
+ "type": "string"
2147
+ },
2148
+ "additionalProperties": {
2149
+ "type": "object",
2150
+ "properties": {
2151
+ "requireMention": {
2152
+ "type": "boolean"
2153
+ },
2154
+ "ignoreOtherMentions": {
2155
+ "type": "boolean"
2156
+ },
2157
+ "tools": {
2158
+ "type": "object",
2159
+ "properties": {
2160
+ "allow": {
2161
+ "type": "array",
2162
+ "items": {
2163
+ "type": "string"
2164
+ }
2165
+ },
2166
+ "alsoAllow": {
2167
+ "type": "array",
2168
+ "items": {
2169
+ "type": "string"
2170
+ }
2171
+ },
2172
+ "deny": {
2173
+ "type": "array",
2174
+ "items": {
2175
+ "type": "string"
2176
+ }
2177
+ }
2178
+ },
2179
+ "additionalProperties": false
2180
+ },
2181
+ "toolsBySender": {
2182
+ "type": "object",
2183
+ "propertyNames": {
2184
+ "type": "string"
2185
+ },
2186
+ "additionalProperties": {
2187
+ "type": "object",
2188
+ "properties": {
2189
+ "allow": {
2190
+ "type": "array",
2191
+ "items": {
2192
+ "type": "string"
2193
+ }
2194
+ },
2195
+ "alsoAllow": {
2196
+ "type": "array",
2197
+ "items": {
2198
+ "type": "string"
2199
+ }
2200
+ },
2201
+ "deny": {
2202
+ "type": "array",
2203
+ "items": {
2204
+ "type": "string"
2205
+ }
2206
+ }
2207
+ },
2208
+ "additionalProperties": false
2209
+ }
2210
+ },
2211
+ "skills": {
2212
+ "type": "array",
2213
+ "items": {
2214
+ "type": "string"
2215
+ }
2216
+ },
2217
+ "enabled": {
2218
+ "type": "boolean"
2219
+ },
2220
+ "users": {
2221
+ "type": "array",
2222
+ "items": {
2223
+ "type": "string"
2224
+ }
2225
+ },
2226
+ "roles": {
2227
+ "type": "array",
2228
+ "items": {
2229
+ "type": "string"
2230
+ }
2231
+ },
2232
+ "systemPrompt": {
2233
+ "type": "string"
2234
+ },
2235
+ "includeThreadStarter": {
2236
+ "type": "boolean"
2237
+ },
2238
+ "autoThread": {
2239
+ "type": "boolean"
2240
+ },
2241
+ "autoThreadName": {
2242
+ "type": "string",
2243
+ "enum": [
2244
+ "message",
2245
+ "generated"
2246
+ ]
2247
+ },
2248
+ "autoArchiveDuration": {
2249
+ "anyOf": [
2250
+ {
2251
+ "type": "string",
2252
+ "enum": [
2253
+ "60",
2254
+ "1440",
2255
+ "4320",
2256
+ "10080"
2257
+ ]
2258
+ },
2259
+ {
2260
+ "type": "number",
2261
+ "const": 60
2262
+ },
2263
+ {
2264
+ "type": "number",
2265
+ "const": 1440
2266
+ },
2267
+ {
2268
+ "type": "number",
2269
+ "const": 4320
2270
+ },
2271
+ {
2272
+ "type": "number",
2273
+ "const": 10080
2274
+ }
2275
+ ]
2276
+ }
2277
+ },
2278
+ "additionalProperties": false
2279
+ }
2280
+ }
2281
+ },
2282
+ "additionalProperties": false
2283
+ }
2284
+ },
2285
+ "heartbeat": {
2286
+ "type": "object",
2287
+ "properties": {
2288
+ "showOk": {
2289
+ "type": "boolean"
2290
+ },
2291
+ "showAlerts": {
2292
+ "type": "boolean"
2293
+ },
2294
+ "useIndicator": {
2295
+ "type": "boolean"
2296
+ }
2297
+ },
2298
+ "additionalProperties": false
2299
+ },
2300
+ "healthMonitor": {
2301
+ "type": "object",
2302
+ "properties": {
2303
+ "enabled": {
2304
+ "type": "boolean"
2305
+ }
2306
+ },
2307
+ "additionalProperties": false
2308
+ },
2309
+ "execApprovals": {
2310
+ "type": "object",
2311
+ "properties": {
2312
+ "enabled": {
2313
+ "type": "boolean"
2314
+ },
2315
+ "approvers": {
2316
+ "type": "array",
2317
+ "items": {
2318
+ "type": "string"
2319
+ }
2320
+ },
2321
+ "agentFilter": {
2322
+ "type": "array",
2323
+ "items": {
2324
+ "type": "string"
2325
+ }
2326
+ },
2327
+ "sessionFilter": {
2328
+ "type": "array",
2329
+ "items": {
2330
+ "type": "string"
2331
+ }
2332
+ },
2333
+ "cleanupAfterResolve": {
2334
+ "type": "boolean"
2335
+ },
2336
+ "target": {
2337
+ "type": "string",
2338
+ "enum": [
2339
+ "dm",
2340
+ "channel",
2341
+ "both"
2342
+ ]
2343
+ }
2344
+ },
2345
+ "additionalProperties": false
2346
+ },
2347
+ "agentComponents": {
2348
+ "type": "object",
2349
+ "properties": {
2350
+ "enabled": {
2351
+ "type": "boolean"
2352
+ }
2353
+ },
2354
+ "additionalProperties": false
2355
+ },
2356
+ "ui": {
2357
+ "type": "object",
2358
+ "properties": {
2359
+ "components": {
2360
+ "type": "object",
2361
+ "properties": {
2362
+ "accentColor": {
2363
+ "type": "string",
2364
+ "pattern": "^#?[0-9a-fA-F]{6}$"
2365
+ }
2366
+ },
2367
+ "additionalProperties": false
2368
+ }
2369
+ },
2370
+ "additionalProperties": false
2371
+ },
2372
+ "slashCommand": {
2373
+ "type": "object",
2374
+ "properties": {
2375
+ "ephemeral": {
2376
+ "type": "boolean"
2377
+ }
2378
+ },
2379
+ "additionalProperties": false
2380
+ },
2381
+ "threadBindings": {
2382
+ "type": "object",
2383
+ "properties": {
2384
+ "enabled": {
2385
+ "type": "boolean"
2386
+ },
2387
+ "idleHours": {
2388
+ "type": "number",
2389
+ "minimum": 0
2390
+ },
2391
+ "maxAgeHours": {
2392
+ "type": "number",
2393
+ "minimum": 0
2394
+ },
2395
+ "spawnSessions": {
2396
+ "type": "boolean"
2397
+ },
2398
+ "defaultSpawnContext": {
2399
+ "type": "string",
2400
+ "enum": [
2401
+ "isolated",
2402
+ "fork"
2403
+ ]
2404
+ },
2405
+ "spawnSubagentSessions": {
2406
+ "type": "boolean"
2407
+ },
2408
+ "spawnAcpSessions": {
2409
+ "type": "boolean"
2410
+ }
2411
+ },
2412
+ "additionalProperties": false
2413
+ },
2414
+ "intents": {
2415
+ "type": "object",
2416
+ "properties": {
2417
+ "presence": {
2418
+ "type": "boolean"
2419
+ },
2420
+ "guildMembers": {
2421
+ "type": "boolean"
2422
+ },
2423
+ "voiceStates": {
2424
+ "type": "boolean"
2425
+ }
2426
+ },
2427
+ "additionalProperties": false
2428
+ },
2429
+ "voice": {
2430
+ "type": "object",
2431
+ "properties": {
2432
+ "enabled": {
2433
+ "type": "boolean"
2434
+ },
2435
+ "model": {
2436
+ "type": "string",
2437
+ "minLength": 1
2438
+ },
2439
+ "autoJoin": {
2440
+ "type": "array",
2441
+ "items": {
2442
+ "type": "object",
2443
+ "properties": {
2444
+ "guildId": {
2445
+ "type": "string",
2446
+ "minLength": 1
2447
+ },
2448
+ "channelId": {
2449
+ "type": "string",
2450
+ "minLength": 1
2451
+ }
2452
+ },
2453
+ "required": [
2454
+ "guildId",
2455
+ "channelId"
2456
+ ],
2457
+ "additionalProperties": false
2458
+ }
2459
+ },
2460
+ "daveEncryption": {
2461
+ "type": "boolean"
2462
+ },
2463
+ "decryptionFailureTolerance": {
2464
+ "type": "integer",
2465
+ "minimum": 0,
2466
+ "maximum": 9007199254740991
2467
+ },
2468
+ "connectTimeoutMs": {
2469
+ "type": "integer",
2470
+ "exclusiveMinimum": 0,
2471
+ "maximum": 120000
2472
+ },
2473
+ "reconnectGraceMs": {
2474
+ "type": "integer",
2475
+ "exclusiveMinimum": 0,
2476
+ "maximum": 120000
2477
+ },
2478
+ "tts": {
2479
+ "type": "object",
2480
+ "properties": {
2481
+ "auto": {
2482
+ "type": "string",
2483
+ "enum": [
2484
+ "off",
2485
+ "always",
2486
+ "inbound",
2487
+ "tagged"
2488
+ ]
2489
+ },
2490
+ "enabled": {
2491
+ "type": "boolean"
2492
+ },
2493
+ "mode": {
2494
+ "type": "string",
2495
+ "enum": [
2496
+ "final",
2497
+ "all"
2498
+ ]
2499
+ },
2500
+ "provider": {
2501
+ "type": "string",
2502
+ "minLength": 1
2503
+ },
2504
+ "persona": {
2505
+ "type": "string"
2506
+ },
2507
+ "personas": {
2508
+ "type": "object",
2509
+ "propertyNames": {
2510
+ "type": "string"
2511
+ },
2512
+ "additionalProperties": {
2513
+ "type": "object",
2514
+ "properties": {
2515
+ "label": {
2516
+ "type": "string"
2517
+ },
2518
+ "description": {
2519
+ "type": "string"
2520
+ },
2521
+ "provider": {
2522
+ "type": "string",
2523
+ "minLength": 1
2524
+ },
2525
+ "fallbackPolicy": {
2526
+ "anyOf": [
2527
+ {
2528
+ "type": "string",
2529
+ "const": "preserve-persona"
2530
+ },
2531
+ {
2532
+ "type": "string",
2533
+ "const": "provider-defaults"
2534
+ },
2535
+ {
2536
+ "type": "string",
2537
+ "const": "fail"
2538
+ }
2539
+ ]
2540
+ },
2541
+ "prompt": {
2542
+ "type": "object",
2543
+ "properties": {
2544
+ "profile": {
2545
+ "type": "string"
2546
+ },
2547
+ "scene": {
2548
+ "type": "string"
2549
+ },
2550
+ "sampleContext": {
2551
+ "type": "string"
2552
+ },
2553
+ "style": {
2554
+ "type": "string"
2555
+ },
2556
+ "accent": {
2557
+ "type": "string"
2558
+ },
2559
+ "pacing": {
2560
+ "type": "string"
2561
+ },
2562
+ "constraints": {
2563
+ "type": "array",
2564
+ "items": {
2565
+ "type": "string"
2566
+ }
2567
+ }
2568
+ },
2569
+ "additionalProperties": false
2570
+ },
2571
+ "providers": {
2572
+ "type": "object",
2573
+ "propertyNames": {
2574
+ "type": "string"
2575
+ },
2576
+ "additionalProperties": {
2577
+ "type": "object",
2578
+ "properties": {
2579
+ "apiKey": {
2580
+ "anyOf": [
2581
+ {
2582
+ "type": "string"
2583
+ },
2584
+ {
2585
+ "oneOf": [
2586
+ {
2587
+ "type": "object",
2588
+ "properties": {
2589
+ "source": {
2590
+ "type": "string",
2591
+ "const": "env"
2592
+ },
2593
+ "provider": {
2594
+ "type": "string",
2595
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
2596
+ },
2597
+ "id": {
2598
+ "type": "string",
2599
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
2600
+ }
2601
+ },
2602
+ "required": [
2603
+ "source",
2604
+ "provider",
2605
+ "id"
2606
+ ],
2607
+ "additionalProperties": false
2608
+ },
2609
+ {
2610
+ "type": "object",
2611
+ "properties": {
2612
+ "source": {
2613
+ "type": "string",
2614
+ "const": "file"
2615
+ },
2616
+ "provider": {
2617
+ "type": "string",
2618
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
2619
+ },
2620
+ "id": {
2621
+ "type": "string"
2622
+ }
2623
+ },
2624
+ "required": [
2625
+ "source",
2626
+ "provider",
2627
+ "id"
2628
+ ],
2629
+ "additionalProperties": false
2630
+ },
2631
+ {
2632
+ "type": "object",
2633
+ "properties": {
2634
+ "source": {
2635
+ "type": "string",
2636
+ "const": "exec"
2637
+ },
2638
+ "provider": {
2639
+ "type": "string",
2640
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
2641
+ },
2642
+ "id": {
2643
+ "type": "string"
2644
+ }
2645
+ },
2646
+ "required": [
2647
+ "source",
2648
+ "provider",
2649
+ "id"
2650
+ ],
2651
+ "additionalProperties": false
2652
+ }
2653
+ ]
2654
+ }
2655
+ ]
2656
+ }
2657
+ },
2658
+ "additionalProperties": {
2659
+ "anyOf": [
2660
+ {
2661
+ "type": "string"
2662
+ },
2663
+ {
2664
+ "type": "number"
2665
+ },
2666
+ {
2667
+ "type": "boolean"
2668
+ },
2669
+ {
2670
+ "type": "null"
2671
+ },
2672
+ {
2673
+ "type": "array",
2674
+ "items": {}
2675
+ },
2676
+ {
2677
+ "type": "object",
2678
+ "propertyNames": {
2679
+ "type": "string"
2680
+ },
2681
+ "additionalProperties": {}
2682
+ }
2683
+ ]
2684
+ }
2685
+ }
2686
+ }
2687
+ },
2688
+ "additionalProperties": false
2689
+ }
2690
+ },
2691
+ "summaryModel": {
2692
+ "type": "string"
2693
+ },
2694
+ "modelOverrides": {
2695
+ "type": "object",
2696
+ "properties": {
2697
+ "enabled": {
2698
+ "type": "boolean"
2699
+ },
2700
+ "allowText": {
2701
+ "type": "boolean"
2702
+ },
2703
+ "allowProvider": {
2704
+ "type": "boolean"
2705
+ },
2706
+ "allowVoice": {
2707
+ "type": "boolean"
2708
+ },
2709
+ "allowModelId": {
2710
+ "type": "boolean"
2711
+ },
2712
+ "allowVoiceSettings": {
2713
+ "type": "boolean"
2714
+ },
2715
+ "allowNormalization": {
2716
+ "type": "boolean"
2717
+ },
2718
+ "allowSeed": {
2719
+ "type": "boolean"
2720
+ }
2721
+ },
2722
+ "additionalProperties": false
2723
+ },
2724
+ "providers": {
2725
+ "type": "object",
2726
+ "propertyNames": {
2727
+ "type": "string"
2728
+ },
2729
+ "additionalProperties": {
2730
+ "type": "object",
2731
+ "properties": {
2732
+ "apiKey": {
2733
+ "anyOf": [
2734
+ {
2735
+ "type": "string"
2736
+ },
2737
+ {
2738
+ "oneOf": [
2739
+ {
2740
+ "type": "object",
2741
+ "properties": {
2742
+ "source": {
2743
+ "type": "string",
2744
+ "const": "env"
2745
+ },
2746
+ "provider": {
2747
+ "type": "string",
2748
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
2749
+ },
2750
+ "id": {
2751
+ "type": "string",
2752
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
2753
+ }
2754
+ },
2755
+ "required": [
2756
+ "source",
2757
+ "provider",
2758
+ "id"
2759
+ ],
2760
+ "additionalProperties": false
2761
+ },
2762
+ {
2763
+ "type": "object",
2764
+ "properties": {
2765
+ "source": {
2766
+ "type": "string",
2767
+ "const": "file"
2768
+ },
2769
+ "provider": {
2770
+ "type": "string",
2771
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
2772
+ },
2773
+ "id": {
2774
+ "type": "string"
2775
+ }
2776
+ },
2777
+ "required": [
2778
+ "source",
2779
+ "provider",
2780
+ "id"
2781
+ ],
2782
+ "additionalProperties": false
2783
+ },
2784
+ {
2785
+ "type": "object",
2786
+ "properties": {
2787
+ "source": {
2788
+ "type": "string",
2789
+ "const": "exec"
2790
+ },
2791
+ "provider": {
2792
+ "type": "string",
2793
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
2794
+ },
2795
+ "id": {
2796
+ "type": "string"
2797
+ }
2798
+ },
2799
+ "required": [
2800
+ "source",
2801
+ "provider",
2802
+ "id"
2803
+ ],
2804
+ "additionalProperties": false
2805
+ }
2806
+ ]
2807
+ }
2808
+ ]
2809
+ }
2810
+ },
2811
+ "additionalProperties": {
2812
+ "anyOf": [
2813
+ {
2814
+ "type": "string"
2815
+ },
2816
+ {
2817
+ "type": "number"
2818
+ },
2819
+ {
2820
+ "type": "boolean"
2821
+ },
2822
+ {
2823
+ "type": "null"
2824
+ },
2825
+ {
2826
+ "type": "array",
2827
+ "items": {}
2828
+ },
2829
+ {
2830
+ "type": "object",
2831
+ "propertyNames": {
2832
+ "type": "string"
2833
+ },
2834
+ "additionalProperties": {}
2835
+ }
2836
+ ]
2837
+ }
2838
+ }
2839
+ },
2840
+ "prefsPath": {
2841
+ "type": "string"
2842
+ },
2843
+ "maxTextLength": {
2844
+ "type": "integer",
2845
+ "minimum": 1,
2846
+ "maximum": 9007199254740991
2847
+ },
2848
+ "timeoutMs": {
2849
+ "type": "integer",
2850
+ "minimum": 1000,
2851
+ "maximum": 120000
2852
+ }
2853
+ },
2854
+ "additionalProperties": false
2855
+ }
2856
+ },
2857
+ "additionalProperties": false
2858
+ },
2859
+ "pluralkit": {
2860
+ "type": "object",
2861
+ "properties": {
2862
+ "enabled": {
2863
+ "type": "boolean"
2864
+ },
2865
+ "token": {
2866
+ "anyOf": [
2867
+ {
2868
+ "type": "string"
2869
+ },
2870
+ {
2871
+ "oneOf": [
2872
+ {
2873
+ "type": "object",
2874
+ "properties": {
2875
+ "source": {
2876
+ "type": "string",
2877
+ "const": "env"
2878
+ },
2879
+ "provider": {
2880
+ "type": "string",
2881
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
2882
+ },
2883
+ "id": {
2884
+ "type": "string",
2885
+ "pattern": "^[A-Z][A-Z0-9_]{0,127}$"
2886
+ }
2887
+ },
2888
+ "required": [
2889
+ "source",
2890
+ "provider",
2891
+ "id"
2892
+ ],
2893
+ "additionalProperties": false
2894
+ },
2895
+ {
2896
+ "type": "object",
2897
+ "properties": {
2898
+ "source": {
2899
+ "type": "string",
2900
+ "const": "file"
2901
+ },
2902
+ "provider": {
2903
+ "type": "string",
2904
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
2905
+ },
2906
+ "id": {
2907
+ "type": "string"
2908
+ }
2909
+ },
2910
+ "required": [
2911
+ "source",
2912
+ "provider",
2913
+ "id"
2914
+ ],
2915
+ "additionalProperties": false
2916
+ },
2917
+ {
2918
+ "type": "object",
2919
+ "properties": {
2920
+ "source": {
2921
+ "type": "string",
2922
+ "const": "exec"
2923
+ },
2924
+ "provider": {
2925
+ "type": "string",
2926
+ "pattern": "^[a-z][a-z0-9_-]{0,63}$"
2927
+ },
2928
+ "id": {
2929
+ "type": "string"
2930
+ }
2931
+ },
2932
+ "required": [
2933
+ "source",
2934
+ "provider",
2935
+ "id"
2936
+ ],
2937
+ "additionalProperties": false
2938
+ }
2939
+ ]
2940
+ }
2941
+ ]
2942
+ }
2943
+ },
2944
+ "additionalProperties": false
2945
+ },
2946
+ "responsePrefix": {
2947
+ "type": "string"
2948
+ },
2949
+ "ackReaction": {
2950
+ "type": "string"
2951
+ },
2952
+ "ackReactionScope": {
2953
+ "type": "string",
2954
+ "enum": [
2955
+ "group-mentions",
2956
+ "group-all",
2957
+ "direct",
2958
+ "all",
2959
+ "off",
2960
+ "none"
2961
+ ]
2962
+ },
2963
+ "activity": {
2964
+ "type": "string"
2965
+ },
2966
+ "status": {
2967
+ "type": "string",
2968
+ "enum": [
2969
+ "online",
2970
+ "dnd",
2971
+ "idle",
2972
+ "invisible"
2973
+ ]
2974
+ },
2975
+ "autoPresence": {
2976
+ "type": "object",
2977
+ "properties": {
2978
+ "enabled": {
2979
+ "type": "boolean"
2980
+ },
2981
+ "intervalMs": {
2982
+ "type": "integer",
2983
+ "exclusiveMinimum": 0,
2984
+ "maximum": 9007199254740991
2985
+ },
2986
+ "minUpdateIntervalMs": {
2987
+ "type": "integer",
2988
+ "exclusiveMinimum": 0,
2989
+ "maximum": 9007199254740991
2990
+ },
2991
+ "healthyText": {
2992
+ "type": "string"
2993
+ },
2994
+ "degradedText": {
2995
+ "type": "string"
2996
+ },
2997
+ "exhaustedText": {
2998
+ "type": "string"
2999
+ }
3000
+ },
3001
+ "additionalProperties": false
3002
+ },
3003
+ "activityType": {
3004
+ "anyOf": [
3005
+ {
3006
+ "type": "number",
3007
+ "const": 0
3008
+ },
3009
+ {
3010
+ "type": "number",
3011
+ "const": 1
3012
+ },
3013
+ {
3014
+ "type": "number",
3015
+ "const": 2
3016
+ },
3017
+ {
3018
+ "type": "number",
3019
+ "const": 3
3020
+ },
3021
+ {
3022
+ "type": "number",
3023
+ "const": 4
3024
+ },
3025
+ {
3026
+ "type": "number",
3027
+ "const": 5
3028
+ }
3029
+ ]
3030
+ },
3031
+ "activityUrl": {
3032
+ "type": "string",
3033
+ "format": "uri"
3034
+ },
3035
+ "inboundWorker": {
3036
+ "type": "object",
3037
+ "properties": {
3038
+ "runTimeoutMs": {
3039
+ "type": "integer",
3040
+ "minimum": 0,
3041
+ "maximum": 9007199254740991
3042
+ }
3043
+ },
3044
+ "additionalProperties": false
3045
+ },
3046
+ "eventQueue": {
3047
+ "type": "object",
3048
+ "properties": {
3049
+ "listenerTimeout": {
3050
+ "type": "integer",
3051
+ "exclusiveMinimum": 0,
3052
+ "maximum": 9007199254740991
3053
+ },
3054
+ "maxQueueSize": {
3055
+ "type": "integer",
3056
+ "exclusiveMinimum": 0,
3057
+ "maximum": 9007199254740991
3058
+ },
3059
+ "maxConcurrency": {
3060
+ "type": "integer",
3061
+ "exclusiveMinimum": 0,
3062
+ "maximum": 9007199254740991
3063
+ }
3064
+ },
3065
+ "additionalProperties": false
3066
+ }
3067
+ },
3068
+ "required": [
3069
+ "groupPolicy"
3070
+ ],
3071
+ "additionalProperties": false
3072
+ }
3073
+ },
3074
+ "defaultAccount": {
3075
+ "type": "string"
3076
+ }
3077
+ },
3078
+ "required": [
3079
+ "groupPolicy"
3080
+ ],
3081
+ "additionalProperties": false
3082
+ },
3083
+ "label": "Discord",
3084
+ "description": "very well supported right now.",
3085
+ "uiHints": {
3086
+ "": {
3087
+ "label": "Discord",
3088
+ "help": "Discord channel provider configuration for bot auth, retry policy, streaming, thread bindings, and optional voice capabilities. Keep privileged intents and advanced features disabled unless needed."
3089
+ },
3090
+ "dmPolicy": {
3091
+ "label": "Discord DM Policy",
3092
+ "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.discord.allowFrom=[\"*\"]."
3093
+ },
3094
+ "dm.policy": {
3095
+ "label": "Discord DM Policy",
3096
+ "help": "Direct message access control (\"pairing\" recommended). \"open\" requires channels.discord.allowFrom=[\"*\"] (legacy: channels.discord.dm.allowFrom)."
3097
+ },
3098
+ "configWrites": {
3099
+ "label": "Discord Config Writes",
3100
+ "help": "Allow Discord to write config in response to channel events/commands (default: true)."
3101
+ },
3102
+ "proxy": {
3103
+ "label": "Discord Proxy URL",
3104
+ "help": "Proxy URL for Discord gateway + API requests (app-id lookup and allowlist resolution). Set per account via channels.discord.accounts.<id>.proxy."
3105
+ },
3106
+ "commands.native": {
3107
+ "label": "Discord Native Commands",
3108
+ "help": "Override native commands for Discord (bool or \"auto\")."
3109
+ },
3110
+ "commands.nativeSkills": {
3111
+ "label": "Discord Native Skill Commands",
3112
+ "help": "Override native skill commands for Discord (bool or \"auto\")."
3113
+ },
3114
+ "streaming": {
3115
+ "label": "Discord Streaming Mode",
3116
+ "help": "Unified Discord stream preview mode: \"off\" | \"partial\" | \"block\" | \"progress\". \"progress\" maps to \"partial\" on Discord. Legacy boolean/streamMode keys are auto-mapped."
3117
+ },
3118
+ "streaming.mode": {
3119
+ "label": "Discord Streaming Mode",
3120
+ "help": "Canonical Discord preview mode: \"off\" | \"partial\" | \"block\" | \"progress\". \"progress\" maps to \"partial\" on Discord."
3121
+ },
3122
+ "streaming.chunkMode": {
3123
+ "label": "Discord Chunk Mode",
3124
+ "help": "Chunking mode for outbound Discord text delivery: \"length\" (default) or \"newline\"."
3125
+ },
3126
+ "streaming.block.enabled": {
3127
+ "label": "Discord Block Streaming Enabled",
3128
+ "help": "Enable chunked block-style Discord preview delivery when channels.discord.streaming.mode=\"block\"."
3129
+ },
3130
+ "streaming.block.coalesce": {
3131
+ "label": "Discord Block Streaming Coalesce",
3132
+ "help": "Merge streamed Discord block replies before final delivery."
3133
+ },
3134
+ "streaming.preview.chunk.minChars": {
3135
+ "label": "Discord Draft Chunk Min Chars",
3136
+ "help": "Minimum chars before emitting a Discord stream preview update when channels.discord.streaming.mode=\"block\" (default: 200)."
3137
+ },
3138
+ "streaming.preview.chunk.maxChars": {
3139
+ "label": "Discord Draft Chunk Max Chars",
3140
+ "help": "Target max size for a Discord stream preview chunk when channels.discord.streaming.mode=\"block\" (default: 800; clamped to channels.discord.textChunkLimit)."
3141
+ },
3142
+ "streaming.preview.chunk.breakPreference": {
3143
+ "label": "Discord Draft Chunk Break Preference",
3144
+ "help": "Preferred breakpoints for Discord draft chunks (paragraph | newline | sentence). Default: paragraph."
3145
+ },
3146
+ "streaming.preview.toolProgress": {
3147
+ "label": "Discord Draft Tool Progress",
3148
+ "help": "Show tool/progress activity in the live draft preview message (default: true). Set false to keep tool updates as separate messages."
3149
+ },
3150
+ "retry.attempts": {
3151
+ "label": "Discord Retry Attempts",
3152
+ "help": "Max retry attempts for outbound Discord API calls (default: 3)."
3153
+ },
3154
+ "retry.minDelayMs": {
3155
+ "label": "Discord Retry Min Delay (ms)",
3156
+ "help": "Minimum retry delay in ms for Discord outbound calls."
3157
+ },
3158
+ "retry.maxDelayMs": {
3159
+ "label": "Discord Retry Max Delay (ms)",
3160
+ "help": "Maximum retry delay cap in ms for Discord outbound calls."
3161
+ },
3162
+ "retry.jitter": {
3163
+ "label": "Discord Retry Jitter",
3164
+ "help": "Jitter factor (0-1) applied to Discord retry delays."
3165
+ },
3166
+ "maxLinesPerMessage": {
3167
+ "label": "Discord Max Lines Per Message",
3168
+ "help": "Soft max line count per Discord message (default: 17)."
3169
+ },
3170
+ "thread.inheritParent": {
3171
+ "label": "Discord Thread Parent Inheritance",
3172
+ "help": "If true, Discord thread sessions inherit the parent channel transcript (default: false)."
3173
+ },
3174
+ "eventQueue.listenerTimeout": {
3175
+ "label": "Discord EventQueue Listener Timeout (ms)",
3176
+ "help": "Canonical Discord listener timeout control in ms for gateway normalization/enqueue handlers. Default is 120000 in OpenClaw; set per account via channels.discord.accounts.<id>.eventQueue.listenerTimeout."
3177
+ },
3178
+ "eventQueue.maxQueueSize": {
3179
+ "label": "Discord EventQueue Max Queue Size",
3180
+ "help": "Optional Discord EventQueue capacity override (max queued events before backpressure). Set per account via channels.discord.accounts.<id>.eventQueue.maxQueueSize."
3181
+ },
3182
+ "eventQueue.maxConcurrency": {
3183
+ "label": "Discord EventQueue Max Concurrency",
3184
+ "help": "Optional Discord EventQueue concurrency override (max concurrent handler executions). Set per account via channels.discord.accounts.<id>.eventQueue.maxConcurrency."
3185
+ },
3186
+ "threadBindings.enabled": {
3187
+ "label": "Discord Thread Binding Enabled",
3188
+ "help": "Enable Discord thread binding features (/focus, bound-thread routing/delivery, and thread-bound subagent sessions). Overrides session.threadBindings.enabled when set."
3189
+ },
3190
+ "threadBindings.idleHours": {
3191
+ "label": "Discord Thread Binding Idle Timeout (hours)",
3192
+ "help": "Inactivity window in hours for Discord thread-bound sessions (/focus and spawned thread sessions). Set 0 to disable idle auto-unfocus (default: 24). Overrides session.threadBindings.idleHours when set."
3193
+ },
3194
+ "threadBindings.maxAgeHours": {
3195
+ "label": "Discord Thread Binding Max Age (hours)",
3196
+ "help": "Optional hard max age in hours for Discord thread-bound sessions. Set 0 to disable hard cap (default: 0). Overrides session.threadBindings.maxAgeHours when set."
3197
+ },
3198
+ "threadBindings.spawnSessions": {
3199
+ "label": "Discord Thread-Bound Session Spawn",
3200
+ "help": "Allow sessions_spawn(thread=true) and ACP thread spawns to auto-create and bind Discord threads (default: true). Set false to disable for this account/channel."
3201
+ },
3202
+ "threadBindings.defaultSpawnContext": {
3203
+ "label": "Discord Thread Spawn Context",
3204
+ "help": "Default native subagent context for thread-bound spawns. \"fork\" starts from the requester transcript; \"isolated\" starts clean. Default: \"fork\"."
3205
+ },
3206
+ "ui.components.accentColor": {
3207
+ "label": "Discord Component Accent Color",
3208
+ "help": "Accent color for Discord component containers (hex). Set per account via channels.discord.accounts.<id>.ui.components.accentColor."
3209
+ },
3210
+ "intents.presence": {
3211
+ "label": "Discord Presence Intent",
3212
+ "help": "Enable the Guild Presences privileged intent. Must also be enabled in the Discord Developer Portal. Allows tracking user activities (e.g. Spotify). Default: false."
3213
+ },
3214
+ "intents.guildMembers": {
3215
+ "label": "Discord Guild Members Intent",
3216
+ "help": "Enable the Guild Members privileged intent. Must also be enabled in the Discord Developer Portal. Default: false."
3217
+ },
3218
+ "intents.voiceStates": {
3219
+ "label": "Discord Voice States Intent",
3220
+ "help": "Enable the Guild Voice States intent. Defaults to the effective Discord voice setting; set true only for Discord voice channel conversations."
3221
+ },
3222
+ "gatewayInfoTimeoutMs": {
3223
+ "label": "Discord Gateway Metadata Timeout (ms)",
3224
+ "help": "Timeout for Discord /gateway/bot metadata lookup before falling back to the default gateway URL. Default is 30000; OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS can override when config is unset."
3225
+ },
3226
+ "gatewayReadyTimeoutMs": {
3227
+ "label": "Discord Gateway READY Timeout (ms)",
3228
+ "help": "Startup wait for the Discord gateway READY event before restarting the socket. Default is 15000; OPENCLAW_DISCORD_READY_TIMEOUT_MS can override when config is unset."
3229
+ },
3230
+ "gatewayRuntimeReadyTimeoutMs": {
3231
+ "label": "Discord Gateway Runtime READY Timeout (ms)",
3232
+ "help": "Runtime reconnect wait for the Discord gateway READY event before force-stopping the lifecycle. Default is 30000; OPENCLAW_DISCORD_RUNTIME_READY_TIMEOUT_MS can override when config is unset."
3233
+ },
3234
+ "voice.enabled": {
3235
+ "label": "Discord Voice Enabled",
3236
+ "help": "Enable Discord voice channel conversations. Text-only Discord configs leave voice off by default; set true to enable /vc commands and the Guild Voice States intent."
3237
+ },
3238
+ "voice.model": {
3239
+ "label": "Discord Voice Model",
3240
+ "help": "Optional LLM model override for Discord voice channel responses (for example openai/gpt-5.4-mini). Leave unset to inherit the routed agent model."
3241
+ },
3242
+ "voice.autoJoin": {
3243
+ "label": "Discord Voice Auto-Join",
3244
+ "help": "Voice channels to auto-join on startup (list of guildId/channelId entries)."
3245
+ },
3246
+ "voice.daveEncryption": {
3247
+ "label": "Discord Voice DAVE Encryption",
3248
+ "help": "Toggle DAVE end-to-end encryption for Discord voice joins (default: true in @discordjs/voice; Discord may require this)."
3249
+ },
3250
+ "voice.decryptionFailureTolerance": {
3251
+ "label": "Discord Voice Decrypt Failure Tolerance",
3252
+ "help": "Consecutive decrypt failures before DAVE attempts session recovery (passed to @discordjs/voice; default: 24)."
3253
+ },
3254
+ "voice.connectTimeoutMs": {
3255
+ "label": "Discord Voice Connect Timeout (ms)",
3256
+ "help": "Initial @discordjs/voice Ready wait before a join is treated as failed. Default: 30000."
3257
+ },
3258
+ "voice.reconnectGraceMs": {
3259
+ "label": "Discord Voice Reconnect Grace (ms)",
3260
+ "help": "Grace period for a disconnected Discord voice session to enter Signalling or Connecting before OpenClaw destroys it. Default: 15000."
3261
+ },
3262
+ "voice.tts": {
3263
+ "label": "Discord Voice Text-to-Speech",
3264
+ "help": "Optional TTS overrides for Discord voice playback (merged with messages.tts)."
3265
+ },
3266
+ "pluralkit.enabled": {
3267
+ "label": "Discord PluralKit Enabled",
3268
+ "help": "Resolve PluralKit proxied messages and treat system members as distinct senders."
3269
+ },
3270
+ "pluralkit.token": {
3271
+ "label": "Discord PluralKit Token",
3272
+ "help": "Optional PluralKit token for resolving private systems or members."
3273
+ },
3274
+ "activity": {
3275
+ "label": "Discord Presence Activity",
3276
+ "help": "Discord presence activity text (defaults to custom status)."
3277
+ },
3278
+ "status": {
3279
+ "label": "Discord Presence Status",
3280
+ "help": "Discord presence status (online, dnd, idle, invisible)."
3281
+ },
3282
+ "autoPresence.enabled": {
3283
+ "label": "Discord Auto Presence Enabled",
3284
+ "help": "Enable automatic Discord bot presence updates based on runtime/model availability signals. When enabled: healthy=>online, degraded/unknown=>idle, exhausted/unavailable=>dnd."
3285
+ },
3286
+ "autoPresence.intervalMs": {
3287
+ "label": "Discord Auto Presence Check Interval (ms)",
3288
+ "help": "How often to evaluate Discord auto-presence state in milliseconds (default: 30000)."
3289
+ },
3290
+ "autoPresence.minUpdateIntervalMs": {
3291
+ "label": "Discord Auto Presence Min Update Interval (ms)",
3292
+ "help": "Minimum time between actual Discord presence update calls in milliseconds (default: 15000). Prevents status spam on noisy state changes."
3293
+ },
3294
+ "autoPresence.healthyText": {
3295
+ "label": "Discord Auto Presence Healthy Text",
3296
+ "help": "Optional custom status text while runtime is healthy (online). If omitted, falls back to static channels.discord.activity when set."
3297
+ },
3298
+ "autoPresence.degradedText": {
3299
+ "label": "Discord Auto Presence Degraded Text",
3300
+ "help": "Optional custom status text while runtime/model availability is degraded or unknown (idle)."
3301
+ },
3302
+ "autoPresence.exhaustedText": {
3303
+ "label": "Discord Auto Presence Exhausted Text",
3304
+ "help": "Optional custom status text while runtime detects exhausted/unavailable model quota (dnd). Supports {reason} template placeholder."
3305
+ },
3306
+ "activityType": {
3307
+ "label": "Discord Presence Activity Type",
3308
+ "help": "Discord presence activity type (0=Playing,1=Streaming,2=Listening,3=Watching,4=Custom,5=Competing)."
3309
+ },
3310
+ "activityUrl": {
3311
+ "label": "Discord Presence Activity URL",
3312
+ "help": "Discord presence streaming URL (required for activityType=1)."
3313
+ },
3314
+ "allowBots": {
3315
+ "label": "Discord Allow Bot Messages",
3316
+ "help": "Allow bot-authored messages to trigger Discord replies (default: false). Set \"mentions\" to only accept bot messages that mention the bot."
3317
+ },
3318
+ "mentionAliases": {
3319
+ "label": "Discord Mention Aliases",
3320
+ "help": "Map outbound @handle text to stable Discord user IDs before sending. Set per account via channels.discord.accounts.<id>.mentionAliases."
3321
+ },
3322
+ "token": {
3323
+ "label": "Discord Bot Token",
3324
+ "help": "Discord bot token used for gateway and REST API authentication for this provider account. Keep this secret out of committed config and rotate immediately after any leak.",
3325
+ "sensitive": true
3326
+ },
3327
+ "applicationId": {
3328
+ "label": "Discord Application ID",
3329
+ "help": "Optional Discord application/client ID. Set this when hosted environments cannot reach Discord's application lookup endpoint during startup."
3330
+ }
3331
+ }
3332
+ }
8
3333
  }
9
3334
  }