@gakr-gakr/discord 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/account-inspect-api.ts +6 -0
  2. package/action-runtime-api.ts +1 -0
  3. package/api.ts +130 -0
  4. package/autobot.plugin.json +15 -0
  5. package/channel-config-api.ts +1 -0
  6. package/channel-plugin-api.ts +3 -0
  7. package/config-api.ts +4 -0
  8. package/configured-state.ts +6 -0
  9. package/contract-api.ts +21 -0
  10. package/directory-contract-api.ts +4 -0
  11. package/doctor-contract-api.ts +1 -0
  12. package/index.ts +24 -0
  13. package/package.json +79 -0
  14. package/runtime-api.actions.ts +15 -0
  15. package/runtime-api.lookup.ts +22 -0
  16. package/runtime-api.monitor.ts +50 -0
  17. package/runtime-api.send.ts +79 -0
  18. package/runtime-api.threads.ts +31 -0
  19. package/runtime-api.ts +181 -0
  20. package/runtime-setter-api.ts +3 -0
  21. package/secret-contract-api.ts +4 -0
  22. package/security-audit-contract-api.ts +1 -0
  23. package/security-contract-api.ts +4 -0
  24. package/session-key-api.ts +1 -0
  25. package/setup-entry.ts +9 -0
  26. package/setup-plugin-api.ts +3 -0
  27. package/src/account-inspect.ts +131 -0
  28. package/src/accounts.ts +205 -0
  29. package/src/actions/handle-action.guild-admin.ts +421 -0
  30. package/src/actions/handle-action.ts +402 -0
  31. package/src/actions/runtime.guild.ts +446 -0
  32. package/src/actions/runtime.messaging.messages.ts +226 -0
  33. package/src/actions/runtime.messaging.reactions.ts +67 -0
  34. package/src/actions/runtime.messaging.runtime.ts +73 -0
  35. package/src/actions/runtime.messaging.send.ts +336 -0
  36. package/src/actions/runtime.messaging.shared.ts +97 -0
  37. package/src/actions/runtime.messaging.ts +37 -0
  38. package/src/actions/runtime.moderation-shared.ts +48 -0
  39. package/src/actions/runtime.moderation.ts +116 -0
  40. package/src/actions/runtime.presence.ts +117 -0
  41. package/src/actions/runtime.shared.ts +86 -0
  42. package/src/actions/runtime.ts +87 -0
  43. package/src/api.ts +219 -0
  44. package/src/approval-handler.runtime.ts +636 -0
  45. package/src/approval-native.ts +219 -0
  46. package/src/approval-runtime.ts +14 -0
  47. package/src/approval-shared.ts +56 -0
  48. package/src/audit-core.ts +178 -0
  49. package/src/audit.ts +32 -0
  50. package/src/channel-actions.runtime.ts +1 -0
  51. package/src/channel-actions.ts +254 -0
  52. package/src/channel-api.ts +29 -0
  53. package/src/channel.conversation.ts +159 -0
  54. package/src/channel.loaders.ts +50 -0
  55. package/src/channel.runtime.ts +1 -0
  56. package/src/channel.setup.ts +12 -0
  57. package/src/channel.ts +728 -0
  58. package/src/chunk.ts +321 -0
  59. package/src/client.ts +143 -0
  60. package/src/component-custom-id.ts +72 -0
  61. package/src/components-registry.ts +356 -0
  62. package/src/components.builders.ts +410 -0
  63. package/src/components.modal.ts +124 -0
  64. package/src/components.parse.ts +407 -0
  65. package/src/components.ts +54 -0
  66. package/src/components.types.ts +187 -0
  67. package/src/config-schema.ts +6 -0
  68. package/src/config-ui-hints.ts +354 -0
  69. package/src/conversation-identity.ts +58 -0
  70. package/src/delivery-retry.ts +56 -0
  71. package/src/directory-cache.ts +116 -0
  72. package/src/directory-config.ts +58 -0
  73. package/src/directory-live.ts +135 -0
  74. package/src/doctor-contract.ts +477 -0
  75. package/src/doctor-shared.ts +5 -0
  76. package/src/doctor.ts +340 -0
  77. package/src/draft-chunking.ts +43 -0
  78. package/src/draft-stream.ts +162 -0
  79. package/src/error-body.ts +38 -0
  80. package/src/exec-approvals.ts +110 -0
  81. package/src/gateway-logging.ts +67 -0
  82. package/src/group-policy.ts +113 -0
  83. package/src/guilds.ts +29 -0
  84. package/src/inbound-event-delivery.ts +135 -0
  85. package/src/interactive-dispatch.ts +104 -0
  86. package/src/internal/api.commands.ts +51 -0
  87. package/src/internal/api.guild.ts +164 -0
  88. package/src/internal/api.interactions.ts +53 -0
  89. package/src/internal/api.messages.ts +113 -0
  90. package/src/internal/api.reactions.ts +38 -0
  91. package/src/internal/api.ts +61 -0
  92. package/src/internal/api.users.ts +19 -0
  93. package/src/internal/api.webhooks.ts +13 -0
  94. package/src/internal/client.ts +310 -0
  95. package/src/internal/command-deploy.ts +352 -0
  96. package/src/internal/commands.ts +188 -0
  97. package/src/internal/components.base.ts +65 -0
  98. package/src/internal/components.message.ts +279 -0
  99. package/src/internal/components.modal.ts +95 -0
  100. package/src/internal/components.ts +31 -0
  101. package/src/internal/discord.ts +11 -0
  102. package/src/internal/embeds.ts +35 -0
  103. package/src/internal/entity-cache.ts +98 -0
  104. package/src/internal/event-queue.ts +185 -0
  105. package/src/internal/gateway-close-codes.ts +25 -0
  106. package/src/internal/gateway-dispatch.ts +96 -0
  107. package/src/internal/gateway-identify-limiter.ts +26 -0
  108. package/src/internal/gateway-lifecycle.ts +75 -0
  109. package/src/internal/gateway-rate-limit.ts +104 -0
  110. package/src/internal/gateway.ts +479 -0
  111. package/src/internal/interaction-dispatch.ts +162 -0
  112. package/src/internal/interaction-options.ts +98 -0
  113. package/src/internal/interaction-response.ts +53 -0
  114. package/src/internal/interactions.ts +378 -0
  115. package/src/internal/listeners.ts +91 -0
  116. package/src/internal/modal-fields.ts +95 -0
  117. package/src/internal/payload.ts +69 -0
  118. package/src/internal/rest-body.ts +115 -0
  119. package/src/internal/rest-errors.ts +88 -0
  120. package/src/internal/rest-routes.ts +50 -0
  121. package/src/internal/rest-scheduler.ts +557 -0
  122. package/src/internal/rest.ts +322 -0
  123. package/src/internal/schemas.ts +36 -0
  124. package/src/internal/structures.ts +280 -0
  125. package/src/internal/test-builders.test-support.ts +167 -0
  126. package/src/internal/voice.ts +49 -0
  127. package/src/media-detection.ts +28 -0
  128. package/src/mentions.ts +147 -0
  129. package/src/monitor/ack-reactions.ts +70 -0
  130. package/src/monitor/agent-components-auth.ts +7 -0
  131. package/src/monitor/agent-components-context.ts +154 -0
  132. package/src/monitor/agent-components-data.ts +224 -0
  133. package/src/monitor/agent-components-dm-auth.ts +177 -0
  134. package/src/monitor/agent-components-guild-auth.ts +322 -0
  135. package/src/monitor/agent-components-helpers.runtime.ts +3 -0
  136. package/src/monitor/agent-components-helpers.ts +34 -0
  137. package/src/monitor/agent-components-reply.ts +10 -0
  138. package/src/monitor/agent-components.deps.runtime.ts +2 -0
  139. package/src/monitor/agent-components.dispatch.ts +359 -0
  140. package/src/monitor/agent-components.handlers.ts +303 -0
  141. package/src/monitor/agent-components.modal.ts +160 -0
  142. package/src/monitor/agent-components.plugin-interactive.ts +187 -0
  143. package/src/monitor/agent-components.runtime.ts +14 -0
  144. package/src/monitor/agent-components.system-controls.ts +215 -0
  145. package/src/monitor/agent-components.ts +70 -0
  146. package/src/monitor/agent-components.types.ts +58 -0
  147. package/src/monitor/agent-components.wildcard-controls.ts +171 -0
  148. package/src/monitor/allow-list.ts +631 -0
  149. package/src/monitor/auto-presence.ts +356 -0
  150. package/src/monitor/channel-access.ts +102 -0
  151. package/src/monitor/commands.ts +9 -0
  152. package/src/monitor/dm-command-auth.ts +259 -0
  153. package/src/monitor/dm-command-decision.ts +49 -0
  154. package/src/monitor/exec-approvals.ts +161 -0
  155. package/src/monitor/format.ts +45 -0
  156. package/src/monitor/gateway-handle.ts +34 -0
  157. package/src/monitor/gateway-metadata.ts +298 -0
  158. package/src/monitor/gateway-plugin.ts +302 -0
  159. package/src/monitor/gateway-registry.ts +37 -0
  160. package/src/monitor/gateway-supervisor.ts +206 -0
  161. package/src/monitor/inbound-context.ts +95 -0
  162. package/src/monitor/inbound-dedupe.ts +79 -0
  163. package/src/monitor/inbound-job.ts +118 -0
  164. package/src/monitor/listeners.queue.ts +91 -0
  165. package/src/monitor/listeners.reactions.ts +594 -0
  166. package/src/monitor/listeners.ts +150 -0
  167. package/src/monitor/message-channel-info.ts +96 -0
  168. package/src/monitor/message-forwarded.ts +114 -0
  169. package/src/monitor/message-handler.batch-gate.ts +19 -0
  170. package/src/monitor/message-handler.context.ts +492 -0
  171. package/src/monitor/message-handler.dm-preflight.ts +119 -0
  172. package/src/monitor/message-handler.draft-preview.ts +436 -0
  173. package/src/monitor/message-handler.hydration.ts +198 -0
  174. package/src/monitor/message-handler.module-test-helpers.ts +31 -0
  175. package/src/monitor/message-handler.preflight-channel-access.ts +86 -0
  176. package/src/monitor/message-handler.preflight-channel-context.ts +58 -0
  177. package/src/monitor/message-handler.preflight-context.ts +54 -0
  178. package/src/monitor/message-handler.preflight-helpers.ts +164 -0
  179. package/src/monitor/message-handler.preflight-history.ts +23 -0
  180. package/src/monitor/message-handler.preflight-logging.ts +36 -0
  181. package/src/monitor/message-handler.preflight-pluralkit.ts +28 -0
  182. package/src/monitor/message-handler.preflight-runtime.ts +28 -0
  183. package/src/monitor/message-handler.preflight-thread.ts +49 -0
  184. package/src/monitor/message-handler.preflight.ts +822 -0
  185. package/src/monitor/message-handler.preflight.types.ts +115 -0
  186. package/src/monitor/message-handler.process.ts +1033 -0
  187. package/src/monitor/message-handler.routing-preflight.ts +112 -0
  188. package/src/monitor/message-handler.ts +309 -0
  189. package/src/monitor/message-media.ts +536 -0
  190. package/src/monitor/message-run-queue.ts +101 -0
  191. package/src/monitor/message-text.ts +171 -0
  192. package/src/monitor/message-utils.ts +34 -0
  193. package/src/monitor/model-picker-preferences.ts +184 -0
  194. package/src/monitor/model-picker.state.ts +364 -0
  195. package/src/monitor/model-picker.test-utils.ts +26 -0
  196. package/src/monitor/model-picker.ts +38 -0
  197. package/src/monitor/model-picker.view.ts +722 -0
  198. package/src/monitor/native-command-agent-reply.ts +125 -0
  199. package/src/monitor/native-command-arg-ui.ts +233 -0
  200. package/src/monitor/native-command-auth.ts +309 -0
  201. package/src/monitor/native-command-bypass.ts +13 -0
  202. package/src/monitor/native-command-context.ts +109 -0
  203. package/src/monitor/native-command-dispatch.ts +35 -0
  204. package/src/monitor/native-command-model-picker-apply.ts +209 -0
  205. package/src/monitor/native-command-model-picker-interaction.ts +516 -0
  206. package/src/monitor/native-command-model-picker-ui.ts +357 -0
  207. package/src/monitor/native-command-reply.ts +185 -0
  208. package/src/monitor/native-command-route.ts +91 -0
  209. package/src/monitor/native-command-status.ts +76 -0
  210. package/src/monitor/native-command-ui.ts +26 -0
  211. package/src/monitor/native-command-ui.types.ts +20 -0
  212. package/src/monitor/native-command.args.ts +45 -0
  213. package/src/monitor/native-command.options.ts +153 -0
  214. package/src/monitor/native-command.runtime.ts +51 -0
  215. package/src/monitor/native-command.ts +747 -0
  216. package/src/monitor/native-command.types.ts +9 -0
  217. package/src/monitor/native-interaction-channel-context.ts +50 -0
  218. package/src/monitor/preflight-audio.runtime.ts +9 -0
  219. package/src/monitor/preflight-audio.ts +130 -0
  220. package/src/monitor/presence-cache.ts +61 -0
  221. package/src/monitor/presence.ts +50 -0
  222. package/src/monitor/provider-session.runtime.ts +12 -0
  223. package/src/monitor/provider.acp.ts +89 -0
  224. package/src/monitor/provider.allowlist.ts +398 -0
  225. package/src/monitor/provider.cleanup.ts +41 -0
  226. package/src/monitor/provider.commands.ts +129 -0
  227. package/src/monitor/provider.config-log.ts +45 -0
  228. package/src/monitor/provider.deploy-errors.ts +362 -0
  229. package/src/monitor/provider.deploy.ts +221 -0
  230. package/src/monitor/provider.interactions.ts +160 -0
  231. package/src/monitor/provider.lifecycle.ts +562 -0
  232. package/src/monitor/provider.runtime.ts +1 -0
  233. package/src/monitor/provider.startup-log.ts +32 -0
  234. package/src/monitor/provider.startup.ts +323 -0
  235. package/src/monitor/provider.ts +688 -0
  236. package/src/monitor/reply-context.ts +64 -0
  237. package/src/monitor/reply-delivery.ts +216 -0
  238. package/src/monitor/reply-safety.ts +96 -0
  239. package/src/monitor/rest-fetch.ts +97 -0
  240. package/src/monitor/route-resolution.ts +140 -0
  241. package/src/monitor/sender-identity.ts +81 -0
  242. package/src/monitor/startup-status.ts +10 -0
  243. package/src/monitor/status.ts +22 -0
  244. package/src/monitor/system-events.ts +55 -0
  245. package/src/monitor/thread-bindings.config.ts +35 -0
  246. package/src/monitor/thread-bindings.discord-api.ts +310 -0
  247. package/src/monitor/thread-bindings.lifecycle.ts +354 -0
  248. package/src/monitor/thread-bindings.manager.ts +554 -0
  249. package/src/monitor/thread-bindings.messages.ts +6 -0
  250. package/src/monitor/thread-bindings.persona.ts +25 -0
  251. package/src/monitor/thread-bindings.session-adapter.ts +229 -0
  252. package/src/monitor/thread-bindings.session-shared.ts +59 -0
  253. package/src/monitor/thread-bindings.session-updates.ts +35 -0
  254. package/src/monitor/thread-bindings.state.ts +540 -0
  255. package/src/monitor/thread-bindings.ts +48 -0
  256. package/src/monitor/thread-bindings.types.ts +83 -0
  257. package/src/monitor/thread-channel-context.ts +112 -0
  258. package/src/monitor/thread-session-close.ts +63 -0
  259. package/src/monitor/thread-title.ts +181 -0
  260. package/src/monitor/threading.auto-thread.ts +287 -0
  261. package/src/monitor/threading.cache.ts +45 -0
  262. package/src/monitor/threading.starter.ts +288 -0
  263. package/src/monitor/threading.ts +20 -0
  264. package/src/monitor/threading.types.ts +102 -0
  265. package/src/monitor/timeouts.ts +84 -0
  266. package/src/monitor/typing.ts +17 -0
  267. package/src/monitor.gateway.ts +75 -0
  268. package/src/monitor.ts +28 -0
  269. package/src/network-config.ts +79 -0
  270. package/src/normalize.ts +86 -0
  271. package/src/outbound-adapter.ts +327 -0
  272. package/src/outbound-approval.ts +29 -0
  273. package/src/outbound-components.ts +86 -0
  274. package/src/outbound-payload.ts +208 -0
  275. package/src/outbound-send-context.ts +92 -0
  276. package/src/outbound-session-route.ts +72 -0
  277. package/src/pluralkit.ts +58 -0
  278. package/src/preview-streaming.ts +18 -0
  279. package/src/probe.runtime.ts +1 -0
  280. package/src/probe.ts +237 -0
  281. package/src/proxy-fetch.ts +92 -0
  282. package/src/proxy-request-client.ts +21 -0
  283. package/src/recipient-resolution.ts +39 -0
  284. package/src/resolve-allowlist-common.ts +39 -0
  285. package/src/resolve-channels.ts +369 -0
  286. package/src/resolve-users.ts +184 -0
  287. package/src/retry.ts +98 -0
  288. package/src/runtime-api.ts +64 -0
  289. package/src/runtime-config.ts +16 -0
  290. package/src/runtime.ts +23 -0
  291. package/src/secret-config-contract.ts +140 -0
  292. package/src/security-audit.runtime.ts +1 -0
  293. package/src/security-audit.ts +208 -0
  294. package/src/security-contract.ts +47 -0
  295. package/src/security-doctor.ts +20 -0
  296. package/src/security.ts +60 -0
  297. package/src/send-target-parsing.ts +14 -0
  298. package/src/send.channels.ts +139 -0
  299. package/src/send.components.ts +391 -0
  300. package/src/send.emojis-stickers.ts +57 -0
  301. package/src/send.guild.ts +170 -0
  302. package/src/send.message-request.ts +112 -0
  303. package/src/send.messages.ts +229 -0
  304. package/src/send.outbound.ts +459 -0
  305. package/src/send.permissions.ts +283 -0
  306. package/src/send.reactions.ts +155 -0
  307. package/src/send.receipt.ts +69 -0
  308. package/src/send.shared.ts +469 -0
  309. package/src/send.ts +82 -0
  310. package/src/send.types.ts +191 -0
  311. package/src/send.typing.ts +9 -0
  312. package/src/send.voice.ts +140 -0
  313. package/src/send.webhook.ts +137 -0
  314. package/src/session-contract.ts +3 -0
  315. package/src/session-key-normalization.ts +47 -0
  316. package/src/setup-account-state.ts +144 -0
  317. package/src/setup-adapter.ts +14 -0
  318. package/src/setup-core.ts +215 -0
  319. package/src/setup-runtime-helpers.ts +10 -0
  320. package/src/setup-surface.ts +132 -0
  321. package/src/shared-interactive.ts +167 -0
  322. package/src/shared.ts +197 -0
  323. package/src/status-issues.ts +201 -0
  324. package/src/subagent-hooks.ts +232 -0
  325. package/src/target-parsing.ts +70 -0
  326. package/src/target-resolver.ts +129 -0
  327. package/src/targets.ts +12 -0
  328. package/src/token.ts +107 -0
  329. package/src/ui-colors.ts +27 -0
  330. package/src/ui.ts +20 -0
  331. package/src/voice/access.ts +126 -0
  332. package/src/voice/audio.ts +249 -0
  333. package/src/voice/capture-state.ts +120 -0
  334. package/src/voice/command.ts +284 -0
  335. package/src/voice/config.ts +8 -0
  336. package/src/voice/ingress.ts +164 -0
  337. package/src/voice/manager.runtime.ts +14 -0
  338. package/src/voice/manager.ts +1155 -0
  339. package/src/voice/prompt.ts +22 -0
  340. package/src/voice/realtime.ts +1370 -0
  341. package/src/voice/receive-recovery.ts +159 -0
  342. package/src/voice/sanitize.ts +29 -0
  343. package/src/voice/sdk-runtime.ts +14 -0
  344. package/src/voice/segment.ts +160 -0
  345. package/src/voice/session.ts +81 -0
  346. package/src/voice/speaker-context.ts +127 -0
  347. package/src/voice/tts.ts +151 -0
  348. package/src/voice-message.ts +474 -0
  349. package/subagent-hooks-api.ts +27 -0
  350. package/test-api.ts +4 -0
  351. package/thread-binding-api.ts +1 -0
  352. package/timeouts.ts +6 -0
  353. package/tsconfig.json +16 -0
package/runtime-api.ts ADDED
@@ -0,0 +1,181 @@
1
+ export {
2
+ discordMessageActions,
3
+ handleDiscordAction,
4
+ isDiscordModerationAction,
5
+ readDiscordChannelCreateParams,
6
+ readDiscordChannelEditParams,
7
+ readDiscordChannelMoveParams,
8
+ readDiscordModerationCommand,
9
+ readDiscordParentIdParam,
10
+ requiredGuildPermissionForModerationAction,
11
+ type DiscordModerationAction,
12
+ type DiscordModerationCommand,
13
+ } from "./runtime-api.actions.js";
14
+ export {
15
+ auditDiscordChannelPermissions,
16
+ collectDiscordAuditChannelIds,
17
+ fetchDiscordApplicationId,
18
+ fetchDiscordApplicationSummary,
19
+ listDiscordDirectoryGroupsLive,
20
+ listDiscordDirectoryPeersLive,
21
+ parseApplicationIdFromToken,
22
+ probeDiscord,
23
+ resolveDiscordChannelAllowlist,
24
+ resolveDiscordPrivilegedIntentsFromFlags,
25
+ resolveDiscordUserAllowlist,
26
+ setDiscordRuntime,
27
+ type DiscordApplicationSummary,
28
+ type DiscordChannelResolution,
29
+ type DiscordPrivilegedIntentsSummary,
30
+ type DiscordPrivilegedIntentStatus,
31
+ type DiscordProbe,
32
+ type DiscordUserResolution,
33
+ } from "./runtime-api.lookup.js";
34
+ export {
35
+ DISCORD_ATTACHMENT_IDLE_TIMEOUT_MS,
36
+ DISCORD_ATTACHMENT_TOTAL_TIMEOUT_MS,
37
+ DISCORD_DEFAULT_INBOUND_WORKER_TIMEOUT_MS,
38
+ DISCORD_DEFAULT_LISTENER_TIMEOUT_MS,
39
+ allowListMatches,
40
+ buildDiscordMediaPayload,
41
+ clearGateways,
42
+ clearPresences,
43
+ createDiscordGatewayPlugin,
44
+ createDiscordMessageHandler,
45
+ createDiscordNativeCommand,
46
+ getGateway,
47
+ getPresence,
48
+ isDiscordGroupAllowedByPolicy,
49
+ mergeAbortSignals,
50
+ monitorDiscordProvider,
51
+ normalizeDiscordAllowList,
52
+ normalizeDiscordSlug,
53
+ presenceCacheSize,
54
+ registerDiscordListener,
55
+ registerGateway,
56
+ resolveDiscordChannelConfig,
57
+ resolveDiscordChannelConfigWithFallback,
58
+ resolveDiscordCommandAuthorized,
59
+ resolveDiscordGatewayIntents,
60
+ resolveDiscordGuildEntry,
61
+ resolveDiscordReplyTarget,
62
+ resolveDiscordShouldRequireMention,
63
+ resolveGroupDmAllow,
64
+ sanitizeDiscordThreadName,
65
+ setPresence,
66
+ shouldEmitDiscordReactionNotification,
67
+ unregisterGateway,
68
+ waitForDiscordGatewayPluginRegistration,
69
+ type DiscordAllowList,
70
+ type DiscordChannelConfigResolved,
71
+ type DiscordGuildEntryResolved,
72
+ type DiscordMessageEvent,
73
+ type DiscordMessageHandler,
74
+ type MonitorDiscordOpts,
75
+ } from "./runtime-api.monitor.js";
76
+ export {
77
+ DiscordSendError,
78
+ addRoleDiscord,
79
+ banMemberDiscord,
80
+ createChannelDiscord,
81
+ createScheduledEventDiscord,
82
+ createThreadDiscord,
83
+ deleteChannelDiscord,
84
+ deleteMessageDiscord,
85
+ editChannelDiscord,
86
+ editDiscordComponentMessage,
87
+ editMessageDiscord,
88
+ fetchChannelInfoDiscord,
89
+ fetchChannelPermissionsDiscord,
90
+ fetchMemberGuildPermissionsDiscord,
91
+ fetchMemberInfoDiscord,
92
+ fetchMessageDiscord,
93
+ fetchReactionsDiscord,
94
+ fetchRoleInfoDiscord,
95
+ fetchVoiceStatusDiscord,
96
+ hasAllGuildPermissionsDiscord,
97
+ hasAnyGuildPermissionDiscord,
98
+ kickMemberDiscord,
99
+ listGuildChannelsDiscord,
100
+ listGuildEmojisDiscord,
101
+ listPinsDiscord,
102
+ listScheduledEventsDiscord,
103
+ listThreadsDiscord,
104
+ moveChannelDiscord,
105
+ pinMessageDiscord,
106
+ reactMessageDiscord,
107
+ readMessagesDiscord,
108
+ registerBuiltDiscordComponentMessage,
109
+ removeChannelPermissionDiscord,
110
+ removeOwnReactionsDiscord,
111
+ removeReactionDiscord,
112
+ removeRoleDiscord,
113
+ resolveDiscordOutboundSessionRoute,
114
+ resolveEventCoverImage,
115
+ searchMessagesDiscord,
116
+ sendDiscordComponentMessage,
117
+ sendMessageDiscord,
118
+ sendPollDiscord,
119
+ sendStickerDiscord,
120
+ sendTypingDiscord,
121
+ sendVoiceMessageDiscord,
122
+ sendWebhookMessageDiscord,
123
+ setChannelPermissionDiscord,
124
+ timeoutMemberDiscord,
125
+ unpinMessageDiscord,
126
+ uploadEmojiDiscord,
127
+ uploadStickerDiscord,
128
+ type DiscordChannelCreate,
129
+ type DiscordChannelEdit,
130
+ type DiscordChannelMove,
131
+ type DiscordChannelPermissionSet,
132
+ type DiscordEmojiUpload,
133
+ type DiscordMessageEdit,
134
+ type DiscordMessageQuery,
135
+ type DiscordModerationTarget,
136
+ type DiscordPermissionsSummary,
137
+ type DiscordReactionRuntimeContext,
138
+ type DiscordReactionSummary,
139
+ type DiscordReactionUser,
140
+ type DiscordReactOpts,
141
+ type DiscordRoleChange,
142
+ type DiscordRuntimeAccountContext,
143
+ type DiscordSearchQuery,
144
+ type DiscordSendResult,
145
+ type DiscordStickerUpload,
146
+ type DiscordThreadCreate,
147
+ type DiscordThreadList,
148
+ type DiscordTimeoutTarget,
149
+ type ResolveDiscordOutboundSessionRouteParams,
150
+ } from "./runtime-api.send.js";
151
+ export {
152
+ testing as __testing,
153
+ testing,
154
+ autoBindSpawnedDiscordSubagent,
155
+ createNoopThreadBindingManager,
156
+ createThreadBindingManager,
157
+ formatThreadBindingDurationLabel,
158
+ getThreadBindingManager,
159
+ isRecentlyUnboundThreadWebhookMessage,
160
+ listThreadBindingsBySessionKey,
161
+ listThreadBindingsForAccount,
162
+ reconcileAcpThreadBindingsOnStartup,
163
+ resolveDiscordThreadBindingIdleTimeoutMs,
164
+ resolveDiscordThreadBindingMaxAgeMs,
165
+ resolveThreadBindingIdleTimeoutMs,
166
+ resolveThreadBindingInactivityExpiresAt,
167
+ resolveThreadBindingIntroText,
168
+ resolveThreadBindingMaxAgeExpiresAt,
169
+ resolveThreadBindingMaxAgeMs,
170
+ resolveThreadBindingPersona,
171
+ resolveThreadBindingPersonaFromRecord,
172
+ resolveThreadBindingsEnabled,
173
+ resolveThreadBindingThreadName,
174
+ setThreadBindingIdleTimeoutBySessionKey,
175
+ setThreadBindingMaxAgeBySessionKey,
176
+ unbindThreadBindingsBySessionKey,
177
+ type AcpThreadBindingReconciliationResult,
178
+ type ThreadBindingManager,
179
+ type ThreadBindingRecord,
180
+ type ThreadBindingTargetKind,
181
+ } from "./runtime-api.threads.js";
@@ -0,0 +1,3 @@
1
+ // Keep bundled registration fast: runtime wiring only needs the store setter,
2
+ // while runtime-api.js remains the broad runtime surface.
3
+ export { setDiscordRuntime } from "./src/runtime.js";
@@ -0,0 +1,4 @@
1
+ export {
2
+ collectRuntimeConfigAssignments,
3
+ secretTargetRegistryEntries,
4
+ } from "./src/secret-config-contract.js";
@@ -0,0 +1 @@
1
+ export { collectDiscordSecurityAuditFindings } from "./src/security-audit.js";
@@ -0,0 +1,4 @@
1
+ export {
2
+ collectUnsupportedSecretRefConfigCandidates,
3
+ unsupportedSecretRefSurfacePatterns,
4
+ } from "./src/security-contract.js";
@@ -0,0 +1 @@
1
+ export { normalizeExplicitDiscordSessionKey } from "./src/session-key-normalization.js";
package/setup-entry.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { defineBundledChannelSetupEntry } from "autobot/plugin-sdk/channel-entry-contract";
2
+
3
+ export default defineBundledChannelSetupEntry({
4
+ importMetaUrl: import.meta.url,
5
+ plugin: {
6
+ specifier: "./setup-plugin-api.js",
7
+ exportName: "discordSetupPlugin",
8
+ },
9
+ });
@@ -0,0 +1,3 @@
1
+ // Keep bundled setup entry imports narrow so setup loads do not pull the
2
+ // broader Discord channel plugin surface.
3
+ export { discordSetupPlugin } from "./src/channel.setup.js";
@@ -0,0 +1,131 @@
1
+ import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "autobot/plugin-sdk/account-id";
2
+ import {
3
+ hasConfiguredSecretInput,
4
+ normalizeSecretInputString,
5
+ } from "autobot/plugin-sdk/secret-input";
6
+ import { normalizeOptionalString } from "autobot/plugin-sdk/string-coerce-runtime";
7
+ import {
8
+ mergeDiscordAccountConfig,
9
+ resolveDefaultDiscordAccountId,
10
+ resolveDiscordAccountConfig,
11
+ } from "./accounts.js";
12
+ import type { DiscordAccountConfig, AutoBotConfig } from "./runtime-api.js";
13
+ import type { DiscordCredentialStatus } from "./token.js";
14
+
15
+ export type InspectedDiscordAccount = {
16
+ accountId: string;
17
+ enabled: boolean;
18
+ name?: string;
19
+ token: string;
20
+ tokenSource: "env" | "config" | "none";
21
+ tokenStatus: DiscordCredentialStatus;
22
+ configured: boolean;
23
+ config: DiscordAccountConfig;
24
+ };
25
+
26
+ function inspectDiscordTokenValue(value: unknown): {
27
+ token: string;
28
+ tokenSource: "config";
29
+ tokenStatus: Exclude<DiscordCredentialStatus, "missing">;
30
+ } | null {
31
+ const normalized = normalizeSecretInputString(value);
32
+ if (normalized) {
33
+ return {
34
+ token: normalized.replace(/^Bot\s+/i, ""),
35
+ tokenSource: "config",
36
+ tokenStatus: "available",
37
+ };
38
+ }
39
+ if (hasConfiguredSecretInput(value)) {
40
+ return {
41
+ token: "",
42
+ tokenSource: "config",
43
+ tokenStatus: "configured_unavailable",
44
+ };
45
+ }
46
+ return null;
47
+ }
48
+
49
+ export function inspectDiscordAccount(params: {
50
+ cfg: AutoBotConfig;
51
+ accountId?: string | null;
52
+ envToken?: string | null;
53
+ }): InspectedDiscordAccount {
54
+ const accountId = normalizeAccountId(
55
+ params.accountId ?? resolveDefaultDiscordAccountId(params.cfg),
56
+ );
57
+ const merged = mergeDiscordAccountConfig(params.cfg, accountId);
58
+ const enabled = params.cfg.channels?.discord?.enabled !== false && merged.enabled !== false;
59
+ const accountConfig = resolveDiscordAccountConfig(params.cfg, accountId);
60
+ const hasAccountToken = Boolean(
61
+ accountConfig &&
62
+ Object.prototype.hasOwnProperty.call(accountConfig as Record<string, unknown>, "token"),
63
+ );
64
+ const accountToken = inspectDiscordTokenValue(accountConfig?.token);
65
+ if (accountToken) {
66
+ return {
67
+ accountId,
68
+ enabled,
69
+ name: normalizeOptionalString(merged.name),
70
+ token: accountToken.token,
71
+ tokenSource: accountToken.tokenSource,
72
+ tokenStatus: accountToken.tokenStatus,
73
+ configured: true,
74
+ config: merged,
75
+ };
76
+ }
77
+ if (hasAccountToken) {
78
+ return {
79
+ accountId,
80
+ enabled,
81
+ name: normalizeOptionalString(merged.name),
82
+ token: "",
83
+ tokenSource: "none",
84
+ tokenStatus: "missing",
85
+ configured: false,
86
+ config: merged,
87
+ };
88
+ }
89
+
90
+ const channelToken = inspectDiscordTokenValue(params.cfg.channels?.discord?.token);
91
+ if (channelToken) {
92
+ return {
93
+ accountId,
94
+ enabled,
95
+ name: normalizeOptionalString(merged.name),
96
+ token: channelToken.token,
97
+ tokenSource: channelToken.tokenSource,
98
+ tokenStatus: channelToken.tokenStatus,
99
+ configured: true,
100
+ config: merged,
101
+ };
102
+ }
103
+
104
+ const allowEnv = accountId === DEFAULT_ACCOUNT_ID;
105
+ const envToken = allowEnv
106
+ ? normalizeSecretInputString(params.envToken ?? process.env.DISCORD_BOT_TOKEN)
107
+ : undefined;
108
+ if (envToken) {
109
+ return {
110
+ accountId,
111
+ enabled,
112
+ name: normalizeOptionalString(merged.name),
113
+ token: envToken.replace(/^Bot\s+/i, ""),
114
+ tokenSource: "env",
115
+ tokenStatus: "available",
116
+ configured: true,
117
+ config: merged,
118
+ };
119
+ }
120
+
121
+ return {
122
+ accountId,
123
+ enabled,
124
+ name: normalizeOptionalString(merged.name),
125
+ token: "",
126
+ tokenSource: "none",
127
+ tokenStatus: "missing",
128
+ configured: false,
129
+ config: merged,
130
+ };
131
+ }
@@ -0,0 +1,205 @@
1
+ import {
2
+ createAccountActionGate,
3
+ createAccountListHelpers,
4
+ resolveMergedAccountConfig,
5
+ } from "autobot/plugin-sdk/account-helpers";
6
+ import { normalizeAccountId } from "autobot/plugin-sdk/account-id";
7
+ import {
8
+ mapAllowFromEntries,
9
+ normalizeChannelDmPolicy,
10
+ resolveChannelDmAllowFrom,
11
+ resolveChannelDmPolicy,
12
+ type ChannelDmPolicy,
13
+ } from "autobot/plugin-sdk/channel-config-helpers";
14
+ import { resolveAccountEntry } from "autobot/plugin-sdk/routing";
15
+ import { normalizeOptionalString } from "autobot/plugin-sdk/string-coerce-runtime";
16
+ import type { DiscordAccountConfig, DiscordActionConfig, AutoBotConfig } from "./runtime-api.js";
17
+ import { selectDiscordRuntimeConfig } from "./runtime-config.js";
18
+ import { resolveDiscordToken, type DiscordCredentialStatus } from "./token.js";
19
+
20
+ export type ResolvedDiscordAccount = {
21
+ accountId: string;
22
+ enabled: boolean;
23
+ name?: string;
24
+ token: string;
25
+ tokenSource: "env" | "config" | "none";
26
+ tokenStatus: DiscordCredentialStatus;
27
+ config: DiscordAccountConfig;
28
+ };
29
+
30
+ const { listAccountIds, resolveDefaultAccountId } = createAccountListHelpers("discord", {
31
+ implicitDefaultAccount: {
32
+ channelKeys: ["token"],
33
+ envVars: ["DISCORD_BOT_TOKEN"],
34
+ },
35
+ });
36
+ export const listDiscordAccountIds = listAccountIds;
37
+ export const resolveDefaultDiscordAccountId = resolveDefaultAccountId;
38
+
39
+ export function resolveDiscordAccountConfig(
40
+ cfg: AutoBotConfig,
41
+ accountId: string,
42
+ ): DiscordAccountConfig | undefined {
43
+ return resolveAccountEntry(cfg.channels?.discord?.accounts, accountId);
44
+ }
45
+
46
+ export function mergeDiscordAccountConfig(
47
+ cfg: AutoBotConfig,
48
+ accountId: string,
49
+ ): DiscordAccountConfig {
50
+ const merged = resolveMergedAccountConfig<DiscordAccountConfig>({
51
+ channelConfig: cfg.channels?.discord as DiscordAccountConfig | undefined,
52
+ accounts: cfg.channels?.discord?.accounts as
53
+ | Record<string, Partial<DiscordAccountConfig>>
54
+ | undefined,
55
+ accountId,
56
+ nestedObjectKeys: ["botLoopProtection"],
57
+ });
58
+ return merged;
59
+ }
60
+
61
+ export function resolveDiscordAccountAllowFrom(params: {
62
+ cfg: AutoBotConfig;
63
+ accountId?: string | null;
64
+ }): string[] | undefined {
65
+ const accountId = normalizeAccountId(
66
+ params.accountId ?? resolveDefaultDiscordAccountId(params.cfg),
67
+ );
68
+ const accountConfig = resolveDiscordAccountConfig(params.cfg, accountId);
69
+ const rootConfig = params.cfg.channels?.discord as DiscordAccountConfig | undefined;
70
+
71
+ const allowFrom = resolveChannelDmAllowFrom({
72
+ account: accountConfig as Record<string, unknown> | undefined,
73
+ parent: rootConfig as Record<string, unknown> | undefined,
74
+ });
75
+ return allowFrom ? mapAllowFromEntries(allowFrom) : undefined;
76
+ }
77
+
78
+ export function resolveDiscordAccountDmPolicy(params: {
79
+ cfg: AutoBotConfig;
80
+ accountId?: string | null;
81
+ }): ChannelDmPolicy | undefined {
82
+ const accountId = normalizeAccountId(
83
+ params.accountId ?? resolveDefaultDiscordAccountId(params.cfg),
84
+ );
85
+ const accountConfig = resolveDiscordAccountConfig(params.cfg, accountId);
86
+ const rootConfig = params.cfg.channels?.discord as DiscordAccountConfig | undefined;
87
+ const policy = resolveChannelDmPolicy({
88
+ account: accountConfig as Record<string, unknown> | undefined,
89
+ parent: rootConfig as Record<string, unknown> | undefined,
90
+ defaultPolicy: "pairing",
91
+ });
92
+ return normalizeChannelDmPolicy(policy);
93
+ }
94
+
95
+ export function createDiscordActionGate(params: {
96
+ cfg: AutoBotConfig;
97
+ accountId?: string | null;
98
+ }): (key: keyof DiscordActionConfig, defaultValue?: boolean) => boolean {
99
+ const accountId = normalizeAccountId(
100
+ params.accountId ?? resolveDefaultDiscordAccountId(params.cfg),
101
+ );
102
+ return createAccountActionGate({
103
+ baseActions: params.cfg.channels?.discord?.actions,
104
+ accountActions: resolveDiscordAccountConfig(params.cfg, accountId)?.actions,
105
+ });
106
+ }
107
+
108
+ export function resolveDiscordAccount(params: {
109
+ cfg: AutoBotConfig;
110
+ accountId?: string | null;
111
+ }): ResolvedDiscordAccount {
112
+ const cfg = selectDiscordRuntimeConfig(params.cfg);
113
+ const accountId = normalizeAccountId(params.accountId ?? resolveDefaultDiscordAccountId(cfg));
114
+ const baseEnabled = cfg.channels?.discord?.enabled !== false;
115
+ const merged = mergeDiscordAccountConfig(cfg, accountId);
116
+ const accountEnabled = merged.enabled !== false;
117
+ const enabled = baseEnabled && accountEnabled;
118
+ const tokenResolution = resolveDiscordToken(cfg, { accountId });
119
+ return {
120
+ accountId,
121
+ enabled,
122
+ name: normalizeOptionalString(merged.name),
123
+ token: tokenResolution.token,
124
+ tokenSource: tokenResolution.source,
125
+ tokenStatus: tokenResolution.tokenStatus,
126
+ config: merged,
127
+ };
128
+ }
129
+
130
+ export function resolveDiscordMaxLinesPerMessage(params: {
131
+ cfg: AutoBotConfig;
132
+ discordConfig?: DiscordAccountConfig | null;
133
+ accountId?: string | null;
134
+ }): number | undefined {
135
+ if (typeof params.discordConfig?.maxLinesPerMessage === "number") {
136
+ return params.discordConfig.maxLinesPerMessage;
137
+ }
138
+ return resolveDiscordAccount({
139
+ cfg: params.cfg,
140
+ accountId: params.accountId,
141
+ }).config.maxLinesPerMessage;
142
+ }
143
+
144
+ function resolveDiscordAccountTokenOwner(params: {
145
+ cfg: AutoBotConfig;
146
+ token: string;
147
+ }): string | undefined {
148
+ const token = params.token.trim();
149
+ if (!token) {
150
+ return undefined;
151
+ }
152
+ let owner: { accountId: string; priority: number; index: number } | undefined;
153
+ const accountIds = listDiscordAccountIds(params.cfg);
154
+ for (const [index, accountId] of accountIds.entries()) {
155
+ const account = resolveDiscordAccount({ cfg: params.cfg, accountId });
156
+ const accountToken = account.token.trim();
157
+ if (!account.enabled || accountToken !== token) {
158
+ continue;
159
+ }
160
+ const priority = account.tokenSource === "config" ? 2 : account.tokenSource === "env" ? 1 : 0;
161
+ if (!owner || priority > owner.priority) {
162
+ owner = { accountId: account.accountId, priority, index };
163
+ continue;
164
+ }
165
+ if (priority === owner.priority && index < owner.index) {
166
+ owner = { accountId: account.accountId, priority, index };
167
+ }
168
+ }
169
+ return owner?.accountId;
170
+ }
171
+
172
+ function resolveDiscordDuplicateTokenOwner(params: {
173
+ cfg: AutoBotConfig;
174
+ account: ResolvedDiscordAccount;
175
+ }): string | undefined {
176
+ const owner = resolveDiscordAccountTokenOwner({
177
+ cfg: params.cfg,
178
+ token: params.account.token,
179
+ });
180
+ return owner && owner !== params.account.accountId ? owner : undefined;
181
+ }
182
+
183
+ export function isDiscordAccountEnabledForRuntime(
184
+ account: ResolvedDiscordAccount,
185
+ cfg: AutoBotConfig,
186
+ ): boolean {
187
+ return account.enabled && !resolveDiscordDuplicateTokenOwner({ cfg, account });
188
+ }
189
+
190
+ export function resolveDiscordAccountDisabledReason(
191
+ account: ResolvedDiscordAccount,
192
+ cfg: AutoBotConfig,
193
+ ): string {
194
+ if (!account.enabled) {
195
+ return "disabled";
196
+ }
197
+ const owner = resolveDiscordDuplicateTokenOwner({ cfg, account });
198
+ return owner ? `duplicate bot token; using account "${owner}"` : "disabled";
199
+ }
200
+
201
+ export function listEnabledDiscordAccounts(cfg: AutoBotConfig): ResolvedDiscordAccount[] {
202
+ return listDiscordAccountIds(cfg)
203
+ .map((accountId) => resolveDiscordAccount({ cfg, accountId }))
204
+ .filter((account) => isDiscordAccountEnabledForRuntime(account, cfg));
205
+ }