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