@kodelyth/discord 2026.5.42 → 2026.6.2

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