@openclaw/discord 2026.5.2 → 2026.5.3-beta.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.
- package/dist/access-B9ujuUtS.js +89 -0
- package/dist/account-inspect-C2UEUhbG.js +81 -0
- package/dist/account-inspect-api.js +10 -0
- package/dist/accounts-BKnkNaoA.js +128 -0
- package/dist/action-runtime-api.js +2 -0
- package/dist/agent-components.runtime-DUhLr9hy.js +4 -0
- package/dist/allow-list-ek-1hMKN.js +336 -0
- package/dist/api-DzNBVTto.js +130 -0
- package/dist/api.js +24 -0
- package/dist/approval-handler.runtime-v8nzQHlT.js +426 -0
- package/dist/approval-native-DqWGp0bM.js +153 -0
- package/dist/approval-shared-DKnwwjZM.js +93 -0
- package/dist/audit-CJ92YD6J.js +102 -0
- package/dist/channel-B3aTtBj1.js +745 -0
- package/dist/channel-access-ewDxhd9q.js +62 -0
- package/dist/channel-actions-TNih7k3w.js +140 -0
- package/dist/channel-actions.runtime-CaPytiY4.js +236 -0
- package/dist/channel-api-CTSWMrnD.js +21 -0
- package/dist/channel-config-api.js +2 -0
- package/dist/channel-plugin-api.js +2 -0
- package/dist/channel.setup-Dt4tIDrl.js +336 -0
- package/dist/components-BapWDmDM.js +760 -0
- package/dist/config-api-CFZtoMaS.js +2 -0
- package/dist/config-schema-DwFkL904.js +252 -0
- package/dist/configured-state.js +6 -0
- package/dist/contract-api.js +8 -0
- package/dist/conversation-identity-BN9wSmxJ.js +31 -0
- package/dist/directory-cache-D93eSrpB.js +62 -0
- package/dist/directory-config-LyMP0sdv.js +49 -0
- package/dist/directory-contract-api.js +2 -0
- package/dist/directory-live-BQapdpkZ.js +101 -0
- package/dist/discord-D1kDh0X_.js +2751 -0
- package/dist/doctor-B2G7WqO0.js +244 -0
- package/dist/doctor-contract-D3pSutkb.js +383 -0
- package/dist/doctor-contract-api.js +2 -0
- package/dist/doctor-shared-DU8RcnF5.js +4 -0
- package/dist/format-D8TsaXxW.js +24 -0
- package/dist/gateway-registry-BKG4KIVC.js +74 -0
- package/dist/handle-action.guild-admin-BuqsSVXu.js +283 -0
- package/dist/inbound-context-e_oBBJtF.js +51 -0
- package/dist/index.js +26 -0
- package/dist/manager.runtime-M2aAa7qA.js +1019 -0
- package/dist/mentions-BPZUaFk7.js +88 -0
- package/dist/message-handler-D6JfFV3P.js +381 -0
- package/dist/message-handler.preflight-DqaF3vHm.js +1022 -0
- package/dist/message-handler.process-tl3Nwnhr.js +1124 -0
- package/dist/message-utils-Dmgu-7fC.js +512 -0
- package/dist/normalize-B-ktw-T_.js +275 -0
- package/dist/outbound-adapter-DJf9_sfH.js +451 -0
- package/dist/outbound-session-route-uHGLDP-Y.js +43 -0
- package/dist/pluralkit-voQvSN3g.js +22 -0
- package/dist/preflight-audio-BpYtUAT6.js +72 -0
- package/dist/preflight-audio.runtime-BAGmU6uO.js +7 -0
- package/dist/preview-streaming-C0O92Qqz.js +14 -0
- package/dist/probe-DcNEodPI.js +139 -0
- package/dist/probe.runtime-P-e4r1Hl.js +2 -0
- package/dist/provider-CMvXOp-3.js +8440 -0
- package/dist/provider-session.runtime-JFemrDZT.js +6 -0
- package/dist/provider.runtime-BO007oR2.js +2 -0
- package/dist/reply-delivery-D9So77a6.js +131 -0
- package/dist/resolve-allowlist-common-DqqFY_qa.js +34 -0
- package/dist/resolve-channels-CGPntufJ.js +265 -0
- package/dist/resolve-users-CDvSlW0V.js +120 -0
- package/dist/rolldown-runtime-C3SqQTfK.js +28 -0
- package/dist/route-resolution-BYiC-6Cc.js +236 -0
- package/dist/runtime-K9RT6Egn.js +8 -0
- package/dist/runtime-api.actions.js +3 -0
- package/dist/runtime-api.js +31 -0
- package/dist/runtime-api.lookup.js +7 -0
- package/dist/runtime-api.monitor-BC-XN0tY.js +6 -0
- package/dist/runtime-api.monitor.js +9 -0
- package/dist/runtime-api.send.js +6 -0
- package/dist/runtime-api.threads.js +6 -0
- package/dist/runtime-n5xZHW55.js +1001 -0
- package/dist/runtime-setter-api.js +2 -0
- package/dist/secret-config-contract-CoGryS5c.js +115 -0
- package/dist/secret-contract-api.js +2 -0
- package/dist/security-audit-Cdz2iq3m.js +120 -0
- package/dist/security-audit-contract-api.js +2 -0
- package/dist/security-audit.runtime-DBV1T1_N.js +2 -0
- package/dist/security-contract-api.js +2 -0
- package/dist/security-contract-ei3Mz8Sa.js +26 -0
- package/dist/security-doctor-CzTzpXV8.js +18 -0
- package/dist/send-B_frVn_Q.js +845 -0
- package/dist/send.components-B1EgHAds.js +468 -0
- package/dist/send.outbound-DlBAuW7y.js +211 -0
- package/dist/send.shared-Db0opnak.js +708 -0
- package/dist/sender-identity-BiSDAk2P.js +43 -0
- package/dist/session-contract-goJZckp2.js +6 -0
- package/dist/session-key-api.js +2 -0
- package/dist/session-key-normalization-Daag9II6.js +23 -0
- package/dist/setup-entry.js +11 -0
- package/dist/setup-plugin-api.js +2 -0
- package/dist/shared-CqlrJmSs.js +166 -0
- package/dist/shared-interactive-KgJjCqnB.js +79 -0
- package/dist/subagent-hooks-api.js +22 -0
- package/dist/subagent-hooks-mEK5ARfP.js +113 -0
- package/dist/system-events-Bu9jmO4W.js +34 -0
- package/dist/targets-kKlbZ4ai.js +3 -0
- package/dist/test-api.js +45 -0
- package/dist/thread-binding-api.js +4 -0
- package/dist/thread-bindings-Bj1R-6QH.js +256 -0
- package/dist/thread-bindings.discord-api-ClPMuIr8.js +184 -0
- package/dist/thread-bindings.manager-BaN0l4y8.js +535 -0
- package/dist/thread-bindings.session-updates-TTP020qQ.js +54 -0
- package/dist/thread-bindings.state-Dzu1gCE7.js +318 -0
- package/dist/threading-CWhdYHVx.js +475 -0
- package/dist/timeouts-C7jeTtGs.js +52 -0
- package/dist/timeouts.js +2 -0
- package/dist/token-D-w3Rigl.js +42 -0
- package/dist/typing-CJiowRTZ.js +15 -0
- package/package.json +14 -6
- package/account-inspect-api.ts +0 -6
- package/action-runtime-api.ts +0 -1
- package/api.ts +0 -132
- package/channel-config-api.ts +0 -1
- package/channel-plugin-api.ts +0 -3
- package/config-api.ts +0 -4
- package/configured-state.ts +0 -6
- package/contract-api.ts +0 -21
- package/directory-contract-api.ts +0 -4
- package/doctor-contract-api.ts +0 -1
- package/index.test.ts +0 -13
- package/index.ts +0 -24
- package/runtime-api.actions.ts +0 -15
- package/runtime-api.lookup.ts +0 -22
- package/runtime-api.monitor.ts +0 -50
- package/runtime-api.send.ts +0 -79
- package/runtime-api.threads.ts +0 -30
- package/runtime-api.ts +0 -180
- package/runtime-setter-api.ts +0 -3
- package/secret-contract-api.ts +0 -4
- package/security-audit-contract-api.ts +0 -1
- package/security-contract-api.ts +0 -4
- package/session-key-api.ts +0 -1
- package/setup-entry.ts +0 -9
- package/setup-plugin-api.ts +0 -3
- package/src/account-inspect.test.ts +0 -126
- package/src/account-inspect.ts +0 -132
- package/src/accounts.test.ts +0 -247
- package/src/accounts.ts +0 -196
- package/src/actions/handle-action.guild-admin.ts +0 -411
- package/src/actions/handle-action.test.ts +0 -306
- package/src/actions/handle-action.ts +0 -372
- package/src/actions/runtime.guild.ts +0 -446
- package/src/actions/runtime.messaging.messages.ts +0 -205
- package/src/actions/runtime.messaging.reactions.ts +0 -67
- package/src/actions/runtime.messaging.runtime.ts +0 -69
- package/src/actions/runtime.messaging.send.ts +0 -248
- package/src/actions/runtime.messaging.shared.ts +0 -97
- package/src/actions/runtime.messaging.ts +0 -37
- package/src/actions/runtime.moderation-shared.ts +0 -48
- package/src/actions/runtime.moderation.authz.test.ts +0 -151
- package/src/actions/runtime.moderation.ts +0 -116
- package/src/actions/runtime.presence.test.ts +0 -160
- package/src/actions/runtime.presence.ts +0 -117
- package/src/actions/runtime.shared.ts +0 -83
- package/src/actions/runtime.test.ts +0 -1087
- package/src/actions/runtime.ts +0 -87
- package/src/api-barrel.test.ts +0 -80
- package/src/api.test.ts +0 -130
- package/src/api.ts +0 -169
- package/src/approval-handler.runtime.test.ts +0 -41
- package/src/approval-handler.runtime.ts +0 -632
- package/src/approval-native.test.ts +0 -330
- package/src/approval-native.ts +0 -219
- package/src/approval-runtime.ts +0 -14
- package/src/approval-shared.ts +0 -53
- package/src/audit-core.ts +0 -141
- package/src/audit.test.ts +0 -145
- package/src/audit.ts +0 -32
- package/src/channel-actions.contract.test.ts +0 -45
- package/src/channel-actions.runtime.ts +0 -1
- package/src/channel-actions.test.ts +0 -275
- package/src/channel-actions.ts +0 -203
- package/src/channel-api.ts +0 -29
- package/src/channel.conversation.ts +0 -159
- package/src/channel.loaders.ts +0 -47
- package/src/channel.runtime.ts +0 -1
- package/src/channel.setup.ts +0 -12
- package/src/channel.test.ts +0 -571
- package/src/channel.ts +0 -629
- package/src/chunk.test.ts +0 -157
- package/src/chunk.ts +0 -321
- package/src/client.proxy.test.ts +0 -176
- package/src/client.test.ts +0 -76
- package/src/client.ts +0 -132
- package/src/component-custom-id.ts +0 -72
- package/src/components-registry.ts +0 -356
- package/src/components.builders.ts +0 -409
- package/src/components.modal.ts +0 -124
- package/src/components.parse.ts +0 -407
- package/src/components.test.ts +0 -312
- package/src/components.ts +0 -54
- package/src/components.types.ts +0 -187
- package/src/config-schema.test.ts +0 -325
- package/src/config-schema.ts +0 -6
- package/src/config-ui-hints.ts +0 -249
- package/src/conversation-identity.ts +0 -58
- package/src/delivery-retry.ts +0 -56
- package/src/directory-cache.ts +0 -116
- package/src/directory-config.ts +0 -58
- package/src/directory-contract.test.ts +0 -129
- package/src/directory-live.test.ts +0 -126
- package/src/directory-live.ts +0 -135
- package/src/doctor-contract.ts +0 -477
- package/src/doctor-shared.ts +0 -5
- package/src/doctor.test.ts +0 -405
- package/src/doctor.ts +0 -340
- package/src/draft-chunking.test.ts +0 -64
- package/src/draft-chunking.ts +0 -43
- package/src/draft-stream.test.ts +0 -159
- package/src/draft-stream.ts +0 -154
- package/src/error-body.ts +0 -38
- package/src/exec-approvals.test.ts +0 -88
- package/src/exec-approvals.ts +0 -110
- package/src/gateway-logging.test.ts +0 -98
- package/src/gateway-logging.ts +0 -67
- package/src/group-policy.ts +0 -113
- package/src/guilds.ts +0 -29
- package/src/inbound-context.contract.test.ts +0 -11
- package/src/interactive-dispatch.ts +0 -104
- package/src/internal/api.commands.ts +0 -51
- package/src/internal/api.guild.ts +0 -164
- package/src/internal/api.interactions.ts +0 -53
- package/src/internal/api.messages.ts +0 -113
- package/src/internal/api.reactions.ts +0 -38
- package/src/internal/api.test.ts +0 -262
- package/src/internal/api.ts +0 -61
- package/src/internal/api.users.ts +0 -19
- package/src/internal/api.webhooks.ts +0 -13
- package/src/internal/client.test.ts +0 -440
- package/src/internal/client.ts +0 -310
- package/src/internal/command-deploy.ts +0 -297
- package/src/internal/commands.ts +0 -188
- package/src/internal/components.base.ts +0 -65
- package/src/internal/components.message.ts +0 -279
- package/src/internal/components.modal.ts +0 -95
- package/src/internal/components.ts +0 -31
- package/src/internal/discord.ts +0 -11
- package/src/internal/embeds.ts +0 -35
- package/src/internal/entity-cache.ts +0 -98
- package/src/internal/event-queue.ts +0 -162
- package/src/internal/gateway-close-codes.ts +0 -25
- package/src/internal/gateway-dispatch.ts +0 -96
- package/src/internal/gateway-identify-limiter.ts +0 -26
- package/src/internal/gateway-lifecycle.ts +0 -61
- package/src/internal/gateway-rate-limit.ts +0 -104
- package/src/internal/gateway.test.ts +0 -603
- package/src/internal/gateway.ts +0 -476
- package/src/internal/interaction-dispatch.test.ts +0 -148
- package/src/internal/interaction-dispatch.ts +0 -162
- package/src/internal/interaction-options.ts +0 -98
- package/src/internal/interaction-response.ts +0 -53
- package/src/internal/interactions.test.ts +0 -325
- package/src/internal/interactions.ts +0 -378
- package/src/internal/listeners.ts +0 -85
- package/src/internal/live-smoke.live.test.ts +0 -26
- package/src/internal/modal-fields.ts +0 -95
- package/src/internal/payload.ts +0 -69
- package/src/internal/rest-body.ts +0 -115
- package/src/internal/rest-errors.ts +0 -88
- package/src/internal/rest-routes.ts +0 -50
- package/src/internal/rest-scheduler.ts +0 -557
- package/src/internal/rest.test.ts +0 -673
- package/src/internal/rest.ts +0 -322
- package/src/internal/schemas.ts +0 -36
- package/src/internal/structures.test.ts +0 -43
- package/src/internal/structures.ts +0 -280
- package/src/internal/test-builders.test-support.ts +0 -167
- package/src/internal/voice.ts +0 -49
- package/src/media-detection.ts +0 -28
- package/src/mentions.test.ts +0 -111
- package/src/mentions.ts +0 -147
- package/src/monitor/access-groups.ts +0 -55
- package/src/monitor/ack-reactions.ts +0 -70
- package/src/monitor/acp-bind-here.integration.test.ts +0 -211
- package/src/monitor/agent-components-auth.ts +0 -7
- package/src/monitor/agent-components-context.ts +0 -154
- package/src/monitor/agent-components-data.ts +0 -224
- package/src/monitor/agent-components-dm-auth.ts +0 -221
- package/src/monitor/agent-components-guild-auth.ts +0 -322
- package/src/monitor/agent-components-helpers.runtime.ts +0 -5
- package/src/monitor/agent-components-helpers.ts +0 -34
- package/src/monitor/agent-components-reply.ts +0 -10
- package/src/monitor/agent-components.deps.runtime.ts +0 -2
- package/src/monitor/agent-components.dispatch.ts +0 -366
- package/src/monitor/agent-components.handlers.ts +0 -303
- package/src/monitor/agent-components.modal.ts +0 -160
- package/src/monitor/agent-components.plugin-interactive.ts +0 -187
- package/src/monitor/agent-components.runtime.ts +0 -14
- package/src/monitor/agent-components.system-controls.ts +0 -211
- package/src/monitor/agent-components.ts +0 -70
- package/src/monitor/agent-components.types.ts +0 -58
- package/src/monitor/agent-components.wildcard-controls.ts +0 -168
- package/src/monitor/agent-components.wildcard.test.ts +0 -71
- package/src/monitor/allow-list.test.ts +0 -14
- package/src/monitor/allow-list.ts +0 -633
- package/src/monitor/auto-presence.test.ts +0 -156
- package/src/monitor/auto-presence.ts +0 -356
- package/src/monitor/channel-access.test.ts +0 -99
- package/src/monitor/channel-access.ts +0 -102
- package/src/monitor/commands.test.ts +0 -24
- package/src/monitor/commands.ts +0 -9
- package/src/monitor/dm-command-auth.test.ts +0 -197
- package/src/monitor/dm-command-auth.ts +0 -158
- package/src/monitor/dm-command-decision.test.ts +0 -113
- package/src/monitor/dm-command-decision.ts +0 -49
- package/src/monitor/exec-approvals.test.ts +0 -226
- package/src/monitor/exec-approvals.ts +0 -158
- package/src/monitor/format.ts +0 -45
- package/src/monitor/gateway-handle.ts +0 -34
- package/src/monitor/gateway-metadata.test.ts +0 -29
- package/src/monitor/gateway-metadata.ts +0 -298
- package/src/monitor/gateway-plugin.test.ts +0 -297
- package/src/monitor/gateway-plugin.ts +0 -294
- package/src/monitor/gateway-registry.ts +0 -37
- package/src/monitor/gateway-supervisor.test.ts +0 -150
- package/src/monitor/gateway-supervisor.ts +0 -206
- package/src/monitor/inbound-context.test-helpers.ts +0 -37
- package/src/monitor/inbound-context.test.ts +0 -106
- package/src/monitor/inbound-context.ts +0 -103
- package/src/monitor/inbound-dedupe.ts +0 -79
- package/src/monitor/inbound-job.test.ts +0 -203
- package/src/monitor/inbound-job.ts +0 -118
- package/src/monitor/listeners.queue.ts +0 -91
- package/src/monitor/listeners.reactions.ts +0 -610
- package/src/monitor/listeners.test.ts +0 -200
- package/src/monitor/listeners.ts +0 -150
- package/src/monitor/message-channel-info.ts +0 -96
- package/src/monitor/message-forwarded.ts +0 -107
- package/src/monitor/message-handler.batch-gate.test.ts +0 -22
- package/src/monitor/message-handler.batch-gate.ts +0 -19
- package/src/monitor/message-handler.bot-self-filter.test.ts +0 -68
- package/src/monitor/message-handler.context.ts +0 -406
- package/src/monitor/message-handler.dm-preflight.ts +0 -123
- package/src/monitor/message-handler.draft-preview.ts +0 -246
- package/src/monitor/message-handler.hydration.test.ts +0 -80
- package/src/monitor/message-handler.hydration.ts +0 -198
- package/src/monitor/message-handler.inbound-context.test.ts +0 -59
- package/src/monitor/message-handler.module-test-helpers.ts +0 -31
- package/src/monitor/message-handler.preflight-channel-access.ts +0 -86
- package/src/monitor/message-handler.preflight-channel-context.test.ts +0 -18
- package/src/monitor/message-handler.preflight-channel-context.ts +0 -58
- package/src/monitor/message-handler.preflight-context.ts +0 -54
- package/src/monitor/message-handler.preflight-helpers.ts +0 -164
- package/src/monitor/message-handler.preflight-history.ts +0 -23
- package/src/monitor/message-handler.preflight-logging.ts +0 -36
- package/src/monitor/message-handler.preflight-pluralkit.ts +0 -26
- package/src/monitor/message-handler.preflight-runtime.ts +0 -28
- package/src/monitor/message-handler.preflight-thread.ts +0 -49
- package/src/monitor/message-handler.preflight.acp-bindings.test.ts +0 -369
- package/src/monitor/message-handler.preflight.test-helpers.ts +0 -111
- package/src/monitor/message-handler.preflight.test.ts +0 -1623
- package/src/monitor/message-handler.preflight.ts +0 -679
- package/src/monitor/message-handler.preflight.types.ts +0 -110
- package/src/monitor/message-handler.process.test.ts +0 -1369
- package/src/monitor/message-handler.process.ts +0 -686
- package/src/monitor/message-handler.queue.test.ts +0 -496
- package/src/monitor/message-handler.routing-preflight.ts +0 -112
- package/src/monitor/message-handler.test-harness.ts +0 -99
- package/src/monitor/message-handler.test-helpers.ts +0 -75
- package/src/monitor/message-handler.ts +0 -274
- package/src/monitor/message-media.ts +0 -509
- package/src/monitor/message-run-queue.ts +0 -101
- package/src/monitor/message-text.ts +0 -171
- package/src/monitor/message-utils.test.ts +0 -1157
- package/src/monitor/message-utils.ts +0 -32
- package/src/monitor/model-picker-preferences.test.ts +0 -67
- package/src/monitor/model-picker-preferences.ts +0 -184
- package/src/monitor/model-picker.state.ts +0 -364
- package/src/monitor/model-picker.test-utils.ts +0 -26
- package/src/monitor/model-picker.test.ts +0 -794
- package/src/monitor/model-picker.ts +0 -38
- package/src/monitor/model-picker.view.ts +0 -695
- package/src/monitor/monitor.agent-components.test.ts +0 -375
- package/src/monitor/monitor.test.ts +0 -849
- package/src/monitor/monitor.threading-utils.test.ts +0 -598
- package/src/monitor/native-command-agent-reply.ts +0 -125
- package/src/monitor/native-command-arg-ui.ts +0 -233
- package/src/monitor/native-command-auth.ts +0 -308
- package/src/monitor/native-command-bypass.ts +0 -13
- package/src/monitor/native-command-context.test.ts +0 -98
- package/src/monitor/native-command-context.ts +0 -103
- package/src/monitor/native-command-dispatch.ts +0 -35
- package/src/monitor/native-command-model-picker-apply.ts +0 -177
- package/src/monitor/native-command-model-picker-interaction.ts +0 -461
- package/src/monitor/native-command-model-picker-ui.ts +0 -368
- package/src/monitor/native-command-reply.test.ts +0 -68
- package/src/monitor/native-command-reply.ts +0 -185
- package/src/monitor/native-command-route.ts +0 -91
- package/src/monitor/native-command-status.ts +0 -76
- package/src/monitor/native-command-ui.ts +0 -26
- package/src/monitor/native-command-ui.types.ts +0 -20
- package/src/monitor/native-command.args.ts +0 -45
- package/src/monitor/native-command.command-arg.test.ts +0 -99
- package/src/monitor/native-command.commands-allowfrom.test.ts +0 -490
- package/src/monitor/native-command.model-picker.test.ts +0 -767
- package/src/monitor/native-command.options.test.ts +0 -369
- package/src/monitor/native-command.options.ts +0 -153
- package/src/monitor/native-command.plugin-dispatch.test.ts +0 -961
- package/src/monitor/native-command.runtime.ts +0 -50
- package/src/monitor/native-command.status-direct.test.ts +0 -272
- package/src/monitor/native-command.test-helpers.ts +0 -64
- package/src/monitor/native-command.think-autocomplete.test.ts +0 -416
- package/src/monitor/native-command.ts +0 -700
- package/src/monitor/native-command.types.ts +0 -9
- package/src/monitor/native-interaction-channel-context.ts +0 -50
- package/src/monitor/preflight-audio.runtime.ts +0 -9
- package/src/monitor/preflight-audio.test.ts +0 -157
- package/src/monitor/preflight-audio.ts +0 -130
- package/src/monitor/presence-cache.ts +0 -61
- package/src/monitor/presence.test.ts +0 -44
- package/src/monitor/presence.ts +0 -50
- package/src/monitor/provider-session.runtime.ts +0 -12
- package/src/monitor/provider.acp.ts +0 -89
- package/src/monitor/provider.allowlist.test.ts +0 -149
- package/src/monitor/provider.allowlist.ts +0 -394
- package/src/monitor/provider.cleanup.ts +0 -41
- package/src/monitor/provider.commands.ts +0 -129
- package/src/monitor/provider.config-log.ts +0 -45
- package/src/monitor/provider.deploy-errors.ts +0 -362
- package/src/monitor/provider.deploy.ts +0 -221
- package/src/monitor/provider.interactions.ts +0 -160
- package/src/monitor/provider.lifecycle.test.ts +0 -713
- package/src/monitor/provider.lifecycle.ts +0 -552
- package/src/monitor/provider.proxy.test.ts +0 -745
- package/src/monitor/provider.rest-proxy.test.ts +0 -121
- package/src/monitor/provider.runtime.ts +0 -1
- package/src/monitor/provider.skill-dedupe.test.ts +0 -42
- package/src/monitor/provider.startup-log.ts +0 -32
- package/src/monitor/provider.startup.test.ts +0 -426
- package/src/monitor/provider.startup.ts +0 -330
- package/src/monitor/provider.test.ts +0 -1111
- package/src/monitor/provider.ts +0 -713
- package/src/monitor/reply-context.ts +0 -64
- package/src/monitor/reply-delivery.test.ts +0 -244
- package/src/monitor/reply-delivery.ts +0 -203
- package/src/monitor/rest-fetch.ts +0 -43
- package/src/monitor/route-resolution.test.ts +0 -204
- package/src/monitor/route-resolution.ts +0 -140
- package/src/monitor/sender-identity.ts +0 -81
- package/src/monitor/startup-status.test.ts +0 -30
- package/src/monitor/startup-status.ts +0 -10
- package/src/monitor/status.ts +0 -22
- package/src/monitor/system-events.ts +0 -55
- package/src/monitor/thread-bindings.config.ts +0 -35
- package/src/monitor/thread-bindings.discord-api.test.ts +0 -229
- package/src/monitor/thread-bindings.discord-api.ts +0 -310
- package/src/monitor/thread-bindings.lifecycle.test.ts +0 -1871
- package/src/monitor/thread-bindings.lifecycle.ts +0 -354
- package/src/monitor/thread-bindings.manager.ts +0 -553
- package/src/monitor/thread-bindings.messages.ts +0 -6
- package/src/monitor/thread-bindings.persona.test.ts +0 -34
- package/src/monitor/thread-bindings.persona.ts +0 -25
- package/src/monitor/thread-bindings.session-adapter.ts +0 -229
- package/src/monitor/thread-bindings.session-shared.ts +0 -59
- package/src/monitor/thread-bindings.session-updates.ts +0 -35
- package/src/monitor/thread-bindings.shared-state.test.ts +0 -36
- package/src/monitor/thread-bindings.state.ts +0 -540
- package/src/monitor/thread-bindings.ts +0 -48
- package/src/monitor/thread-bindings.types.ts +0 -83
- package/src/monitor/thread-channel-context.ts +0 -112
- package/src/monitor/thread-session-close.test.ts +0 -180
- package/src/monitor/thread-session-close.ts +0 -63
- package/src/monitor/thread-title.generate.test.ts +0 -197
- package/src/monitor/thread-title.test.ts +0 -31
- package/src/monitor/thread-title.ts +0 -181
- package/src/monitor/threading.auto-thread.test.ts +0 -327
- package/src/monitor/threading.auto-thread.ts +0 -287
- package/src/monitor/threading.cache.ts +0 -45
- package/src/monitor/threading.parent-info.test.ts +0 -156
- package/src/monitor/threading.starter.test.ts +0 -260
- package/src/monitor/threading.starter.ts +0 -287
- package/src/monitor/threading.ts +0 -20
- package/src/monitor/threading.types.ts +0 -102
- package/src/monitor/timeouts.ts +0 -84
- package/src/monitor/typing.test.ts +0 -42
- package/src/monitor/typing.ts +0 -17
- package/src/monitor.gateway.test.ts +0 -187
- package/src/monitor.gateway.ts +0 -75
- package/src/monitor.test.ts +0 -1397
- package/src/monitor.ts +0 -28
- package/src/normalize.test.ts +0 -56
- package/src/normalize.ts +0 -86
- package/src/outbound-adapter.interactive-order.test.ts +0 -64
- package/src/outbound-adapter.test-harness.ts +0 -207
- package/src/outbound-adapter.test.ts +0 -696
- package/src/outbound-adapter.ts +0 -291
- package/src/outbound-approval.ts +0 -29
- package/src/outbound-components.ts +0 -81
- package/src/outbound-payload.contract.test.ts +0 -38
- package/src/outbound-payload.ts +0 -134
- package/src/outbound-send-context.ts +0 -92
- package/src/outbound-session-route.test.ts +0 -34
- package/src/outbound-session-route.ts +0 -72
- package/src/pluralkit.test.ts +0 -67
- package/src/pluralkit.ts +0 -58
- package/src/preview-streaming.ts +0 -32
- package/src/probe.intents.test.ts +0 -94
- package/src/probe.parse-token.test.ts +0 -43
- package/src/probe.runtime.ts +0 -1
- package/src/probe.ts +0 -237
- package/src/proxy-fetch.ts +0 -92
- package/src/proxy-request-client.test.ts +0 -78
- package/src/proxy-request-client.ts +0 -21
- package/src/recipient-resolution.ts +0 -39
- package/src/resolve-allowlist-common.test.ts +0 -36
- package/src/resolve-allowlist-common.ts +0 -39
- package/src/resolve-channels.test.ts +0 -340
- package/src/resolve-channels.ts +0 -369
- package/src/resolve-users.test.ts +0 -222
- package/src/resolve-users.ts +0 -184
- package/src/retry.test.ts +0 -83
- package/src/retry.ts +0 -98
- package/src/runtime-api.ts +0 -64
- package/src/runtime.ts +0 -23
- package/src/secret-config-contract.ts +0 -140
- package/src/security-audit.runtime.ts +0 -1
- package/src/security-audit.test.ts +0 -246
- package/src/security-audit.ts +0 -208
- package/src/security-contract.ts +0 -47
- package/src/security-doctor.test.ts +0 -25
- package/src/security-doctor.ts +0 -20
- package/src/security.ts +0 -60
- package/src/send-target-parsing.ts +0 -14
- package/src/send.channels.ts +0 -139
- package/src/send.components.test.ts +0 -275
- package/src/send.components.ts +0 -381
- package/src/send.creates-thread.test.ts +0 -643
- package/src/send.emojis-stickers.ts +0 -57
- package/src/send.guild.ts +0 -170
- package/src/send.message-request.ts +0 -97
- package/src/send.messages.test.ts +0 -53
- package/src/send.messages.ts +0 -225
- package/src/send.outbound.ts +0 -413
- package/src/send.permissions.authz.test.ts +0 -188
- package/src/send.permissions.ts +0 -283
- package/src/send.reactions.ts +0 -155
- package/src/send.sends-basic-channel-messages.test.ts +0 -941
- package/src/send.shared.ts +0 -447
- package/src/send.test-harness.ts +0 -56
- package/src/send.ts +0 -82
- package/src/send.types.ts +0 -188
- package/src/send.typing.test.ts +0 -41
- package/src/send.typing.ts +0 -9
- package/src/send.voice.ts +0 -134
- package/src/send.webhook-activity.test.ts +0 -105
- package/src/send.webhook.proxy.test.ts +0 -191
- package/src/send.webhook.ts +0 -133
- package/src/session-contract.ts +0 -3
- package/src/session-key-normalization.test.ts +0 -44
- package/src/session-key-normalization.ts +0 -47
- package/src/setup-account-state.test.ts +0 -91
- package/src/setup-account-state.ts +0 -144
- package/src/setup-adapter.ts +0 -12
- package/src/setup-core.ts +0 -212
- package/src/setup-runtime-helpers.ts +0 -10
- package/src/setup-surface.test.ts +0 -137
- package/src/setup-surface.ts +0 -129
- package/src/shared-interactive.test.ts +0 -153
- package/src/shared-interactive.ts +0 -124
- package/src/shared.test.ts +0 -165
- package/src/shared.ts +0 -190
- package/src/status-issues.test.ts +0 -70
- package/src/status-issues.ts +0 -169
- package/src/subagent-hooks.test.ts +0 -432
- package/src/subagent-hooks.ts +0 -214
- package/src/target-parsing.ts +0 -53
- package/src/target-resolver.ts +0 -129
- package/src/targets.test.ts +0 -367
- package/src/targets.ts +0 -12
- package/src/test-http-helpers.ts +0 -10
- package/src/test-support/component-runtime.ts +0 -190
- package/src/test-support/config.ts +0 -7
- package/src/test-support/configured-binding-runtime.ts +0 -29
- package/src/test-support/partial-channel.ts +0 -26
- package/src/test-support/provider.test-support.ts +0 -545
- package/src/token.test.ts +0 -107
- package/src/token.ts +0 -60
- package/src/ui-colors.ts +0 -27
- package/src/ui.ts +0 -20
- package/src/voice/access.test.ts +0 -217
- package/src/voice/access.ts +0 -124
- package/src/voice/audio.ts +0 -173
- package/src/voice/capture-state.test.ts +0 -48
- package/src/voice/capture-state.ts +0 -120
- package/src/voice/command.test.ts +0 -164
- package/src/voice/command.ts +0 -283
- package/src/voice/config.ts +0 -8
- package/src/voice/manager.e2e.test.ts +0 -928
- package/src/voice/manager.ready-listener.test.ts +0 -37
- package/src/voice/manager.runtime.ts +0 -11
- package/src/voice/manager.ts +0 -691
- package/src/voice/prompt.test.ts +0 -16
- package/src/voice/prompt.ts +0 -17
- package/src/voice/receive-recovery.test.ts +0 -79
- package/src/voice/receive-recovery.ts +0 -159
- package/src/voice/sanitize.test.ts +0 -34
- package/src/voice/sanitize.ts +0 -32
- package/src/voice/sdk-runtime.ts +0 -14
- package/src/voice/segment.ts +0 -156
- package/src/voice/session.ts +0 -50
- package/src/voice/speaker-context.ts +0 -127
- package/src/voice/tts.ts +0 -125
- package/src/voice-message.test.ts +0 -234
- package/src/voice-message.ts +0 -444
- package/subagent-hooks-api.ts +0 -27
- package/test-api.ts +0 -4
- package/thread-binding-api.ts +0 -1
- package/timeouts.ts +0 -6
- package/tsconfig.json +0 -16
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
import { s as resolveDiscordAccount } from "./accounts-BKnkNaoA.js";
|
|
2
|
+
import { a as chunkDiscordTextWithMode, i as normalizeDiscordOutboundTarget } from "./normalize-B-ktw-T_.js";
|
|
3
|
+
import { m as DiscordError } from "./discord-D1kDh0X_.js";
|
|
4
|
+
import { c as readDiscordComponentSpec } from "./components-BapWDmDM.js";
|
|
5
|
+
import { normalizeLowercaseStringOrEmpty, normalizeOptionalString, normalizeOptionalStringifiedId } from "openclaw/plugin-sdk/text-runtime";
|
|
6
|
+
import { resolvePayloadMediaUrls, sendPayloadMediaSequenceOrFallback, sendTextMediaPayload } from "openclaw/plugin-sdk/reply-payload";
|
|
7
|
+
import { resolveRetryConfig, retryAsync } from "openclaw/plugin-sdk/retry-runtime";
|
|
8
|
+
import { attachChannelToResult, createAttachedChannelResultAdapter } from "openclaw/plugin-sdk/channel-send-result";
|
|
9
|
+
import { resolveOutboundSendDep } from "openclaw/plugin-sdk/outbound-send-deps";
|
|
10
|
+
import { createReplyToFanout } from "openclaw/plugin-sdk/outbound-runtime";
|
|
11
|
+
//#region extensions/discord/src/delivery-retry.ts
|
|
12
|
+
const DISCORD_DELIVERY_RETRY_DEFAULTS = {
|
|
13
|
+
attempts: 3,
|
|
14
|
+
minDelayMs: 1e3,
|
|
15
|
+
maxDelayMs: 3e4,
|
|
16
|
+
jitter: 0
|
|
17
|
+
};
|
|
18
|
+
function isRetryableDiscordDeliveryError(err) {
|
|
19
|
+
if (err instanceof DiscordError) return false;
|
|
20
|
+
const status = err.status ?? err.statusCode;
|
|
21
|
+
return status === 429 || status !== void 0 && status >= 500;
|
|
22
|
+
}
|
|
23
|
+
function getDiscordDeliveryRetryAfterMs(err) {
|
|
24
|
+
if (!err || typeof err !== "object") return;
|
|
25
|
+
if ("retryAfter" in err && typeof err.retryAfter === "number" && Number.isFinite(err.retryAfter)) return err.retryAfter * 1e3;
|
|
26
|
+
const retryAfterRaw = err.headers?.["retry-after"];
|
|
27
|
+
if (!retryAfterRaw) return;
|
|
28
|
+
const retryAfterMs = Number(retryAfterRaw) * 1e3;
|
|
29
|
+
return Number.isFinite(retryAfterMs) ? retryAfterMs : void 0;
|
|
30
|
+
}
|
|
31
|
+
async function withDiscordDeliveryRetry(params) {
|
|
32
|
+
const retryConfig = resolveRetryConfig(DISCORD_DELIVERY_RETRY_DEFAULTS, resolveDiscordAccount({
|
|
33
|
+
cfg: params.cfg,
|
|
34
|
+
accountId: params.accountId
|
|
35
|
+
}).config.retry);
|
|
36
|
+
return await retryAsync(params.fn, {
|
|
37
|
+
...retryConfig,
|
|
38
|
+
shouldRetry: (err) => isRetryableDiscordDeliveryError(err),
|
|
39
|
+
retryAfterMs: getDiscordDeliveryRetryAfterMs
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
//#region extensions/discord/src/media-detection.ts
|
|
44
|
+
const DISCORD_VIDEO_MEDIA_EXTENSIONS = new Set([
|
|
45
|
+
".avi",
|
|
46
|
+
".m4v",
|
|
47
|
+
".mkv",
|
|
48
|
+
".mov",
|
|
49
|
+
".mp4",
|
|
50
|
+
".webm"
|
|
51
|
+
]);
|
|
52
|
+
function normalizeMediaPathForExtension(mediaUrl) {
|
|
53
|
+
const trimmed = mediaUrl.trim();
|
|
54
|
+
if (!trimmed) return "";
|
|
55
|
+
try {
|
|
56
|
+
return normalizeLowercaseStringOrEmpty(new URL(trimmed).pathname);
|
|
57
|
+
} catch {
|
|
58
|
+
const withoutHash = trimmed.split("#", 1)[0] ?? trimmed;
|
|
59
|
+
return normalizeLowercaseStringOrEmpty(withoutHash.split("?", 1)[0] ?? withoutHash);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function isLikelyDiscordVideoMedia(mediaUrl) {
|
|
63
|
+
const normalized = normalizeMediaPathForExtension(mediaUrl);
|
|
64
|
+
for (const ext of DISCORD_VIDEO_MEDIA_EXTENSIONS) if (normalized.endsWith(ext)) return true;
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
//#endregion
|
|
68
|
+
//#region extensions/discord/src/outbound-approval.ts
|
|
69
|
+
function hasApprovalChannelData(payload) {
|
|
70
|
+
const channelData = payload.channelData;
|
|
71
|
+
if (!channelData || typeof channelData !== "object" || Array.isArray(channelData)) return false;
|
|
72
|
+
return Boolean(channelData.execApproval);
|
|
73
|
+
}
|
|
74
|
+
function neutralizeDiscordApprovalMentions(value) {
|
|
75
|
+
return value.replace(/@everyone/gi, "@everyone").replace(/@here/gi, "@here").replace(/<@/g, "<@").replace(/<#/g, "<#");
|
|
76
|
+
}
|
|
77
|
+
function normalizeDiscordApprovalPayload(payload) {
|
|
78
|
+
return hasApprovalChannelData(payload) && payload.text ? {
|
|
79
|
+
...payload,
|
|
80
|
+
text: neutralizeDiscordApprovalMentions(payload.text)
|
|
81
|
+
} : payload;
|
|
82
|
+
}
|
|
83
|
+
//#endregion
|
|
84
|
+
//#region extensions/discord/src/outbound-components.ts
|
|
85
|
+
let discordComponentSendPromise;
|
|
86
|
+
let discordSharedInteractivePromise;
|
|
87
|
+
async function sendDiscordComponentMessageLazy(...args) {
|
|
88
|
+
discordComponentSendPromise ??= import("./send.components-B1EgHAds.js").then((n) => n.i).then((module) => module.sendDiscordComponentMessage);
|
|
89
|
+
return await (await discordComponentSendPromise)(...args);
|
|
90
|
+
}
|
|
91
|
+
function loadDiscordSharedInteractive() {
|
|
92
|
+
discordSharedInteractivePromise ??= import("./shared-interactive-KgJjCqnB.js").then((n) => n.r);
|
|
93
|
+
return discordSharedInteractivePromise;
|
|
94
|
+
}
|
|
95
|
+
function addPayloadTextFallback(spec, payload) {
|
|
96
|
+
return spec.text ? spec : {
|
|
97
|
+
...spec,
|
|
98
|
+
text: payload.text?.trim() ? payload.text : void 0
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
async function buildDiscordPresentationPayload(params) {
|
|
102
|
+
const componentSpec = (await loadDiscordSharedInteractive()).buildDiscordPresentationComponents(params.presentation);
|
|
103
|
+
if (!componentSpec) return null;
|
|
104
|
+
return {
|
|
105
|
+
...params.payload,
|
|
106
|
+
channelData: {
|
|
107
|
+
...params.payload.channelData,
|
|
108
|
+
discord: {
|
|
109
|
+
...params.payload.channelData?.discord,
|
|
110
|
+
presentationComponents: componentSpec
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
async function resolveDiscordComponentSpec(payload) {
|
|
116
|
+
const discordData = payload.channelData?.discord;
|
|
117
|
+
const rawComponentSpec = discordData?.presentationComponents ?? readDiscordComponentSpec(discordData?.components);
|
|
118
|
+
if (rawComponentSpec) return addPayloadTextFallback(rawComponentSpec, payload);
|
|
119
|
+
if (!payload.interactive) return;
|
|
120
|
+
const interactiveSpec = (await loadDiscordSharedInteractive()).buildDiscordInteractiveComponents(payload.interactive);
|
|
121
|
+
return interactiveSpec ? addPayloadTextFallback(interactiveSpec, payload) : void 0;
|
|
122
|
+
}
|
|
123
|
+
//#endregion
|
|
124
|
+
//#region extensions/discord/src/outbound-send-context.ts
|
|
125
|
+
let discordSendRuntimePromise;
|
|
126
|
+
async function loadDiscordSendRuntime() {
|
|
127
|
+
discordSendRuntimePromise ??= import("./send-B_frVn_Q.js").then((n) => n.t);
|
|
128
|
+
return await discordSendRuntimePromise;
|
|
129
|
+
}
|
|
130
|
+
function resolveDiscordOutboundTarget(params) {
|
|
131
|
+
if (params.threadId == null) return params.to;
|
|
132
|
+
const threadId = normalizeOptionalStringifiedId(params.threadId) ?? "";
|
|
133
|
+
if (!threadId) return params.to;
|
|
134
|
+
return `channel:${threadId}`;
|
|
135
|
+
}
|
|
136
|
+
function resolveDiscordFormattingOptions(ctx) {
|
|
137
|
+
const formatting = ctx.formatting;
|
|
138
|
+
return {
|
|
139
|
+
textLimit: formatting?.textLimit,
|
|
140
|
+
maxLinesPerMessage: formatting?.maxLinesPerMessage,
|
|
141
|
+
tableMode: formatting?.tableMode,
|
|
142
|
+
chunkMode: formatting?.chunkMode
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
async function createDiscordPayloadSendContext(ctx) {
|
|
146
|
+
const runtime = await loadDiscordSendRuntime();
|
|
147
|
+
return {
|
|
148
|
+
target: resolveDiscordOutboundTarget({
|
|
149
|
+
to: ctx.to,
|
|
150
|
+
threadId: ctx.threadId
|
|
151
|
+
}),
|
|
152
|
+
formatting: resolveDiscordFormattingOptions(ctx),
|
|
153
|
+
resolveReplyTo: createReplyToFanout({
|
|
154
|
+
replyToId: ctx.replyToId,
|
|
155
|
+
replyToIdSource: ctx.replyToIdSource,
|
|
156
|
+
replyToMode: ctx.replyToMode
|
|
157
|
+
}),
|
|
158
|
+
send: resolveOutboundSendDep(ctx.deps, "discord") ?? runtime.sendMessageDiscord,
|
|
159
|
+
sendVoice: resolveOutboundSendDep(ctx.deps, "discordVoice") ?? runtime.sendVoiceMessageDiscord,
|
|
160
|
+
withRetry: async (fn) => await withDiscordDeliveryRetry({
|
|
161
|
+
cfg: ctx.cfg,
|
|
162
|
+
accountId: ctx.accountId,
|
|
163
|
+
fn
|
|
164
|
+
})
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
//#endregion
|
|
168
|
+
//#region extensions/discord/src/outbound-payload.ts
|
|
169
|
+
async function sendDiscordOutboundPayload(params) {
|
|
170
|
+
const ctx = params.ctx;
|
|
171
|
+
const payload = normalizeDiscordApprovalPayload({
|
|
172
|
+
...ctx.payload,
|
|
173
|
+
text: ctx.payload.text ?? ""
|
|
174
|
+
});
|
|
175
|
+
const mediaUrls = resolvePayloadMediaUrls(payload);
|
|
176
|
+
const sendContext = await createDiscordPayloadSendContext(ctx);
|
|
177
|
+
if (payload.audioAsVoice && mediaUrls.length > 0) {
|
|
178
|
+
let lastResult = await sendContext.withRetry(async () => await sendContext.sendVoice(sendContext.target, mediaUrls[0], {
|
|
179
|
+
cfg: ctx.cfg,
|
|
180
|
+
replyTo: sendContext.resolveReplyTo(),
|
|
181
|
+
accountId: ctx.accountId ?? void 0,
|
|
182
|
+
silent: ctx.silent ?? void 0
|
|
183
|
+
}));
|
|
184
|
+
if (payload.text?.trim()) lastResult = await sendContext.withRetry(async () => await sendContext.send(sendContext.target, payload.text, {
|
|
185
|
+
verbose: false,
|
|
186
|
+
replyTo: sendContext.resolveReplyTo(),
|
|
187
|
+
accountId: ctx.accountId ?? void 0,
|
|
188
|
+
silent: ctx.silent ?? void 0,
|
|
189
|
+
cfg: ctx.cfg,
|
|
190
|
+
...sendContext.formatting
|
|
191
|
+
}));
|
|
192
|
+
for (const mediaUrl of mediaUrls.slice(1)) lastResult = await sendContext.withRetry(async () => await sendContext.send(sendContext.target, "", {
|
|
193
|
+
verbose: false,
|
|
194
|
+
mediaUrl,
|
|
195
|
+
mediaAccess: ctx.mediaAccess,
|
|
196
|
+
mediaLocalRoots: ctx.mediaLocalRoots,
|
|
197
|
+
mediaReadFile: ctx.mediaReadFile,
|
|
198
|
+
replyTo: sendContext.resolveReplyTo(),
|
|
199
|
+
accountId: ctx.accountId ?? void 0,
|
|
200
|
+
silent: ctx.silent ?? void 0,
|
|
201
|
+
cfg: ctx.cfg,
|
|
202
|
+
...sendContext.formatting
|
|
203
|
+
}));
|
|
204
|
+
return attachChannelToResult("discord", lastResult);
|
|
205
|
+
}
|
|
206
|
+
const componentSpec = await resolveDiscordComponentSpec(payload);
|
|
207
|
+
if (!componentSpec) return await sendTextMediaPayload({
|
|
208
|
+
channel: "discord",
|
|
209
|
+
ctx: {
|
|
210
|
+
...ctx,
|
|
211
|
+
payload
|
|
212
|
+
},
|
|
213
|
+
adapter: params.fallbackAdapter
|
|
214
|
+
});
|
|
215
|
+
return attachChannelToResult("discord", await sendPayloadMediaSequenceOrFallback({
|
|
216
|
+
text: payload.text ?? "",
|
|
217
|
+
mediaUrls,
|
|
218
|
+
fallbackResult: {
|
|
219
|
+
messageId: "",
|
|
220
|
+
channelId: sendContext.target
|
|
221
|
+
},
|
|
222
|
+
sendNoMedia: async () => await sendContext.withRetry(async () => await sendDiscordComponentMessageLazy(sendContext.target, componentSpec, {
|
|
223
|
+
replyTo: sendContext.resolveReplyTo(),
|
|
224
|
+
accountId: ctx.accountId ?? void 0,
|
|
225
|
+
silent: ctx.silent ?? void 0,
|
|
226
|
+
cfg: ctx.cfg,
|
|
227
|
+
...sendContext.formatting
|
|
228
|
+
})),
|
|
229
|
+
send: async ({ text, mediaUrl, isFirst }) => {
|
|
230
|
+
if (isFirst) return await sendContext.withRetry(async () => await sendDiscordComponentMessageLazy(sendContext.target, componentSpec, {
|
|
231
|
+
mediaUrl,
|
|
232
|
+
mediaAccess: ctx.mediaAccess,
|
|
233
|
+
mediaLocalRoots: ctx.mediaLocalRoots,
|
|
234
|
+
mediaReadFile: ctx.mediaReadFile,
|
|
235
|
+
replyTo: sendContext.resolveReplyTo(),
|
|
236
|
+
accountId: ctx.accountId ?? void 0,
|
|
237
|
+
silent: ctx.silent ?? void 0,
|
|
238
|
+
cfg: ctx.cfg,
|
|
239
|
+
...sendContext.formatting
|
|
240
|
+
}));
|
|
241
|
+
return await sendContext.withRetry(async () => await sendContext.send(sendContext.target, text, {
|
|
242
|
+
verbose: false,
|
|
243
|
+
mediaUrl,
|
|
244
|
+
mediaAccess: ctx.mediaAccess,
|
|
245
|
+
mediaLocalRoots: ctx.mediaLocalRoots,
|
|
246
|
+
mediaReadFile: ctx.mediaReadFile,
|
|
247
|
+
replyTo: sendContext.resolveReplyTo(),
|
|
248
|
+
accountId: ctx.accountId ?? void 0,
|
|
249
|
+
silent: ctx.silent ?? void 0,
|
|
250
|
+
cfg: ctx.cfg,
|
|
251
|
+
...sendContext.formatting
|
|
252
|
+
}));
|
|
253
|
+
}
|
|
254
|
+
}));
|
|
255
|
+
}
|
|
256
|
+
//#endregion
|
|
257
|
+
//#region extensions/discord/src/outbound-adapter.ts
|
|
258
|
+
const DISCORD_TEXT_CHUNK_LIMIT = 2e3;
|
|
259
|
+
const DISCORD_INTERNAL_RUNTIME_SCAFFOLDING_BLOCK_RE = /<\s*(system-reminder|previous_response)\b[^>]*>[\s\S]*?<\s*\/\s*\1\s*>/gi;
|
|
260
|
+
const DISCORD_INTERNAL_RUNTIME_SCAFFOLDING_SELF_CLOSING_RE = /<\s*(?:system-reminder|previous_response)\b[^>]*\/\s*>/gi;
|
|
261
|
+
const DISCORD_INTERNAL_RUNTIME_SCAFFOLDING_TAG_RE = /<\s*\/?\s*(?:system-reminder|previous_response)\b[^>]*>/gi;
|
|
262
|
+
function stripDiscordInternalRuntimeScaffolding(text) {
|
|
263
|
+
return text.replace(DISCORD_INTERNAL_RUNTIME_SCAFFOLDING_BLOCK_RE, "").replace(DISCORD_INTERNAL_RUNTIME_SCAFFOLDING_SELF_CLOSING_RE, "").replace(DISCORD_INTERNAL_RUNTIME_SCAFFOLDING_TAG_RE, "");
|
|
264
|
+
}
|
|
265
|
+
let discordThreadBindingsPromise;
|
|
266
|
+
function loadDiscordThreadBindings() {
|
|
267
|
+
discordThreadBindingsPromise ??= import("./thread-bindings-Bj1R-6QH.js").then((n) => n.t);
|
|
268
|
+
return discordThreadBindingsPromise;
|
|
269
|
+
}
|
|
270
|
+
function resolveDiscordWebhookIdentity(params) {
|
|
271
|
+
const usernameRaw = normalizeOptionalString(params.identity?.name);
|
|
272
|
+
const fallbackUsername = normalizeOptionalString(params.binding.label) ?? params.binding.agentId;
|
|
273
|
+
return {
|
|
274
|
+
username: (usernameRaw || fallbackUsername || "").slice(0, 80) || void 0,
|
|
275
|
+
avatarUrl: normalizeOptionalString(params.identity?.avatarUrl)
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
async function maybeSendDiscordWebhookText(params) {
|
|
279
|
+
if (params.threadId == null) return null;
|
|
280
|
+
const threadId = normalizeOptionalStringifiedId(params.threadId) ?? "";
|
|
281
|
+
if (!threadId) return null;
|
|
282
|
+
const { getThreadBindingManager } = await loadDiscordThreadBindings();
|
|
283
|
+
const manager = getThreadBindingManager(params.accountId ?? void 0);
|
|
284
|
+
if (!manager) return null;
|
|
285
|
+
const binding = manager.getByThreadId(threadId);
|
|
286
|
+
if (!binding?.webhookId || !binding?.webhookToken) return null;
|
|
287
|
+
const persona = resolveDiscordWebhookIdentity({
|
|
288
|
+
identity: params.identity,
|
|
289
|
+
binding
|
|
290
|
+
});
|
|
291
|
+
const { sendWebhookMessageDiscord } = await loadDiscordSendRuntime();
|
|
292
|
+
return await sendWebhookMessageDiscord(params.text, {
|
|
293
|
+
webhookId: binding.webhookId,
|
|
294
|
+
webhookToken: binding.webhookToken,
|
|
295
|
+
accountId: binding.accountId,
|
|
296
|
+
threadId: binding.threadId,
|
|
297
|
+
cfg: params.cfg,
|
|
298
|
+
replyTo: params.replyToId ?? void 0,
|
|
299
|
+
username: persona.username,
|
|
300
|
+
avatarUrl: persona.avatarUrl
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
const discordOutbound = {
|
|
304
|
+
deliveryMode: "direct",
|
|
305
|
+
chunker: (text, limit, ctx) => chunkDiscordTextWithMode(text, {
|
|
306
|
+
maxChars: limit,
|
|
307
|
+
maxLines: ctx?.formatting?.maxLinesPerMessage
|
|
308
|
+
}),
|
|
309
|
+
textChunkLimit: DISCORD_TEXT_CHUNK_LIMIT,
|
|
310
|
+
sanitizeText: ({ text }) => stripDiscordInternalRuntimeScaffolding(text),
|
|
311
|
+
pollMaxOptions: 10,
|
|
312
|
+
normalizePayload: ({ payload }) => normalizeDiscordApprovalPayload(payload),
|
|
313
|
+
presentationCapabilities: {
|
|
314
|
+
supported: true,
|
|
315
|
+
buttons: true,
|
|
316
|
+
selects: true,
|
|
317
|
+
context: true,
|
|
318
|
+
divider: true
|
|
319
|
+
},
|
|
320
|
+
renderPresentation: async ({ payload, presentation }) => {
|
|
321
|
+
return await buildDiscordPresentationPayload({
|
|
322
|
+
payload,
|
|
323
|
+
presentation
|
|
324
|
+
});
|
|
325
|
+
},
|
|
326
|
+
resolveTarget: ({ to, allowFrom }) => normalizeDiscordOutboundTarget(to, allowFrom),
|
|
327
|
+
sendPayload: async (ctx) => await sendDiscordOutboundPayload({
|
|
328
|
+
ctx,
|
|
329
|
+
fallbackAdapter: discordOutbound
|
|
330
|
+
}),
|
|
331
|
+
...createAttachedChannelResultAdapter({
|
|
332
|
+
channel: "discord",
|
|
333
|
+
sendText: async ({ cfg, to, text, accountId, deps, replyToId, threadId, identity, silent, formatting }) => {
|
|
334
|
+
if (!silent) {
|
|
335
|
+
const webhookResult = await maybeSendDiscordWebhookText({
|
|
336
|
+
cfg,
|
|
337
|
+
text,
|
|
338
|
+
threadId,
|
|
339
|
+
accountId,
|
|
340
|
+
identity,
|
|
341
|
+
replyToId
|
|
342
|
+
}).catch(() => null);
|
|
343
|
+
if (webhookResult) return webhookResult;
|
|
344
|
+
}
|
|
345
|
+
const send = resolveOutboundSendDep(deps, "discord") ?? (await loadDiscordSendRuntime()).sendMessageDiscord;
|
|
346
|
+
return await withDiscordDeliveryRetry({
|
|
347
|
+
cfg,
|
|
348
|
+
accountId,
|
|
349
|
+
fn: async () => await send(resolveDiscordOutboundTarget({
|
|
350
|
+
to,
|
|
351
|
+
threadId
|
|
352
|
+
}), text, {
|
|
353
|
+
verbose: false,
|
|
354
|
+
replyTo: replyToId ?? void 0,
|
|
355
|
+
accountId: accountId ?? void 0,
|
|
356
|
+
silent: silent ?? void 0,
|
|
357
|
+
cfg,
|
|
358
|
+
...resolveDiscordFormattingOptions({ formatting })
|
|
359
|
+
})
|
|
360
|
+
});
|
|
361
|
+
},
|
|
362
|
+
sendMedia: async ({ cfg, to, text, mediaUrl, audioAsVoice, mediaAccess, mediaLocalRoots, mediaReadFile, accountId, deps, replyToId, threadId, silent, formatting }) => {
|
|
363
|
+
const send = resolveOutboundSendDep(deps, "discord") ?? (await loadDiscordSendRuntime()).sendMessageDiscord;
|
|
364
|
+
const target = resolveDiscordOutboundTarget({
|
|
365
|
+
to,
|
|
366
|
+
threadId
|
|
367
|
+
});
|
|
368
|
+
const formattingOptions = resolveDiscordFormattingOptions({ formatting });
|
|
369
|
+
if (audioAsVoice && mediaUrl) {
|
|
370
|
+
const sendVoice = resolveOutboundSendDep(deps, "discordVoice") ?? (await loadDiscordSendRuntime()).sendVoiceMessageDiscord;
|
|
371
|
+
return await withDiscordDeliveryRetry({
|
|
372
|
+
cfg,
|
|
373
|
+
accountId,
|
|
374
|
+
fn: async () => await sendVoice(target, mediaUrl, {
|
|
375
|
+
cfg,
|
|
376
|
+
replyTo: replyToId ?? void 0,
|
|
377
|
+
accountId: accountId ?? void 0,
|
|
378
|
+
silent: silent ?? void 0
|
|
379
|
+
})
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
if (text.trim() && mediaUrl && isLikelyDiscordVideoMedia(mediaUrl)) {
|
|
383
|
+
await withDiscordDeliveryRetry({
|
|
384
|
+
cfg,
|
|
385
|
+
accountId,
|
|
386
|
+
fn: async () => await send(target, text, {
|
|
387
|
+
verbose: false,
|
|
388
|
+
replyTo: replyToId ?? void 0,
|
|
389
|
+
accountId: accountId ?? void 0,
|
|
390
|
+
silent: silent ?? void 0,
|
|
391
|
+
cfg,
|
|
392
|
+
...formattingOptions
|
|
393
|
+
})
|
|
394
|
+
});
|
|
395
|
+
return await withDiscordDeliveryRetry({
|
|
396
|
+
cfg,
|
|
397
|
+
accountId,
|
|
398
|
+
fn: async () => await send(target, "", {
|
|
399
|
+
verbose: false,
|
|
400
|
+
mediaUrl,
|
|
401
|
+
mediaAccess,
|
|
402
|
+
mediaLocalRoots,
|
|
403
|
+
mediaReadFile,
|
|
404
|
+
accountId: accountId ?? void 0,
|
|
405
|
+
silent: silent ?? void 0,
|
|
406
|
+
cfg,
|
|
407
|
+
...formattingOptions
|
|
408
|
+
})
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
return await withDiscordDeliveryRetry({
|
|
412
|
+
cfg,
|
|
413
|
+
accountId,
|
|
414
|
+
fn: async () => await send(target, text, {
|
|
415
|
+
verbose: false,
|
|
416
|
+
mediaUrl,
|
|
417
|
+
mediaAccess,
|
|
418
|
+
mediaLocalRoots,
|
|
419
|
+
mediaReadFile,
|
|
420
|
+
replyTo: replyToId ?? void 0,
|
|
421
|
+
accountId: accountId ?? void 0,
|
|
422
|
+
silent: silent ?? void 0,
|
|
423
|
+
cfg,
|
|
424
|
+
...formattingOptions
|
|
425
|
+
})
|
|
426
|
+
});
|
|
427
|
+
},
|
|
428
|
+
sendPoll: async ({ cfg, to, poll, accountId, threadId, silent }) => await withDiscordDeliveryRetry({
|
|
429
|
+
cfg,
|
|
430
|
+
accountId,
|
|
431
|
+
fn: async () => await (await loadDiscordSendRuntime()).sendPollDiscord(resolveDiscordOutboundTarget({
|
|
432
|
+
to,
|
|
433
|
+
threadId
|
|
434
|
+
}), poll, {
|
|
435
|
+
accountId: accountId ?? void 0,
|
|
436
|
+
silent: silent ?? void 0,
|
|
437
|
+
cfg
|
|
438
|
+
})
|
|
439
|
+
})
|
|
440
|
+
}),
|
|
441
|
+
afterDeliverPayload: async ({ target }) => {
|
|
442
|
+
const threadId = normalizeOptionalStringifiedId(target.threadId);
|
|
443
|
+
if (!threadId) return;
|
|
444
|
+
const { getThreadBindingManager } = await loadDiscordThreadBindings();
|
|
445
|
+
const manager = getThreadBindingManager(target.accountId ?? void 0);
|
|
446
|
+
if (!manager?.getByThreadId(threadId)) return;
|
|
447
|
+
manager.touchThread({ threadId });
|
|
448
|
+
}
|
|
449
|
+
};
|
|
450
|
+
//#endregion
|
|
451
|
+
export { discordOutbound as n, DISCORD_TEXT_CHUNK_LIMIT as t };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { o as parseDiscordTarget } from "./normalize-B-ktw-T_.js";
|
|
2
|
+
import { buildOutboundBaseSessionKey } from "openclaw/plugin-sdk/routing";
|
|
3
|
+
import { buildThreadAwareOutboundSessionRoute } from "openclaw/plugin-sdk/channel-core";
|
|
4
|
+
//#region extensions/discord/src/outbound-session-route.ts
|
|
5
|
+
function resolveDiscordOutboundSessionRoute(params) {
|
|
6
|
+
const parsed = parseDiscordTarget(params.target, { defaultKind: resolveDiscordOutboundTargetKindHint(params) });
|
|
7
|
+
if (!parsed) return null;
|
|
8
|
+
const isDm = parsed.kind === "user";
|
|
9
|
+
const peer = {
|
|
10
|
+
kind: isDm ? "direct" : "channel",
|
|
11
|
+
id: parsed.id
|
|
12
|
+
};
|
|
13
|
+
const baseSessionKey = buildOutboundBaseSessionKey({
|
|
14
|
+
cfg: params.cfg,
|
|
15
|
+
agentId: params.agentId,
|
|
16
|
+
channel: "discord",
|
|
17
|
+
accountId: params.accountId,
|
|
18
|
+
peer
|
|
19
|
+
});
|
|
20
|
+
return buildThreadAwareOutboundSessionRoute({
|
|
21
|
+
route: {
|
|
22
|
+
sessionKey: baseSessionKey,
|
|
23
|
+
baseSessionKey,
|
|
24
|
+
peer,
|
|
25
|
+
chatType: isDm ? "direct" : "channel",
|
|
26
|
+
from: isDm ? `discord:${parsed.id}` : `discord:channel:${parsed.id}`,
|
|
27
|
+
to: isDm ? `user:${parsed.id}` : `channel:${parsed.id}`
|
|
28
|
+
},
|
|
29
|
+
threadId: params.threadId,
|
|
30
|
+
precedence: ["threadId"],
|
|
31
|
+
useSuffix: false
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function resolveDiscordOutboundTargetKindHint(params) {
|
|
35
|
+
const resolvedKind = params.resolvedTarget?.kind;
|
|
36
|
+
if (resolvedKind === "user") return "user";
|
|
37
|
+
if (resolvedKind === "group" || resolvedKind === "channel") return "channel";
|
|
38
|
+
const target = params.target.trim();
|
|
39
|
+
if (/^channel:/i.test(target)) return "channel";
|
|
40
|
+
if (/^(user:|discord:|@|<@!?)/i.test(target)) return "user";
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
export { resolveDiscordOutboundSessionRoute as t };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-C3SqQTfK.js";
|
|
2
|
+
import { resolveFetch } from "openclaw/plugin-sdk/fetch-runtime";
|
|
3
|
+
//#region extensions/discord/src/pluralkit.ts
|
|
4
|
+
var pluralkit_exports = /* @__PURE__ */ __exportAll({ fetchPluralKitMessageInfo: () => fetchPluralKitMessageInfo });
|
|
5
|
+
const PLURALKIT_API_BASE = "https://api.pluralkit.me/v2";
|
|
6
|
+
async function fetchPluralKitMessageInfo(params) {
|
|
7
|
+
if (!params.config?.enabled) return null;
|
|
8
|
+
const fetchImpl = resolveFetch(params.fetcher);
|
|
9
|
+
if (!fetchImpl) return null;
|
|
10
|
+
const headers = {};
|
|
11
|
+
if (params.config.token?.trim()) headers.Authorization = params.config.token.trim();
|
|
12
|
+
const res = await fetchImpl(`${PLURALKIT_API_BASE}/messages/${params.messageId}`, { headers });
|
|
13
|
+
if (res.status === 404) return null;
|
|
14
|
+
if (!res.ok) {
|
|
15
|
+
const text = await res.text().catch(() => "");
|
|
16
|
+
const detail = text.trim() ? `: ${text.trim()}` : "";
|
|
17
|
+
throw new Error(`PluralKit API failed (${res.status})${detail}`);
|
|
18
|
+
}
|
|
19
|
+
return await res.json();
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
export { pluralkit_exports as n, fetchPluralKitMessageInfo as t };
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime";
|
|
2
|
+
import { logVerbose } from "openclaw/plugin-sdk/runtime-env";
|
|
3
|
+
import { getFileExtension } from "openclaw/plugin-sdk/media-mime";
|
|
4
|
+
//#region extensions/discord/src/monitor/preflight-audio.ts
|
|
5
|
+
let discordPreflightAudioRuntimePromise;
|
|
6
|
+
function loadDiscordPreflightAudioRuntime() {
|
|
7
|
+
discordPreflightAudioRuntimePromise ??= import("./preflight-audio.runtime-BAGmU6uO.js");
|
|
8
|
+
return discordPreflightAudioRuntimePromise;
|
|
9
|
+
}
|
|
10
|
+
const AUDIO_ATTACHMENT_MIME_BY_EXT = new Map([
|
|
11
|
+
[".aac", "audio/aac"],
|
|
12
|
+
[".caf", "audio/x-caf"],
|
|
13
|
+
[".flac", "audio/flac"],
|
|
14
|
+
[".m4a", "audio/mp4"],
|
|
15
|
+
[".mp3", "audio/mpeg"],
|
|
16
|
+
[".oga", "audio/ogg"],
|
|
17
|
+
[".ogg", "audio/ogg"],
|
|
18
|
+
[".opus", "audio/opus"],
|
|
19
|
+
[".wav", "audio/wav"]
|
|
20
|
+
]);
|
|
21
|
+
function inferAudioAttachmentMime(attachment) {
|
|
22
|
+
const contentType = normalizeOptionalString(attachment.content_type);
|
|
23
|
+
if (contentType?.startsWith("audio/")) return contentType;
|
|
24
|
+
if (typeof attachment.duration_secs === "number" || typeof normalizeOptionalString(attachment.waveform) === "string") return "audio/ogg";
|
|
25
|
+
const ext = getFileExtension(attachment.filename ?? attachment.url);
|
|
26
|
+
return ext ? AUDIO_ATTACHMENT_MIME_BY_EXT.get(ext) : void 0;
|
|
27
|
+
}
|
|
28
|
+
function collectAudioAttachments(attachments) {
|
|
29
|
+
if (!Array.isArray(attachments)) return [];
|
|
30
|
+
return attachments.filter((att) => normalizeOptionalString(att.url) && inferAudioAttachmentMime(att));
|
|
31
|
+
}
|
|
32
|
+
async function resolveDiscordPreflightAudioMentionContext(params) {
|
|
33
|
+
const audioAttachments = collectAudioAttachments(params.message.attachments);
|
|
34
|
+
const hasAudioAttachment = audioAttachments.length > 0;
|
|
35
|
+
const hasTypedText = Boolean(params.message.content?.trim());
|
|
36
|
+
const needsPreflightTranscription = hasAudioAttachment && !hasTypedText && (params.isDirectMessage || params.shouldRequireMention && params.mentionRegexes.length > 0);
|
|
37
|
+
let transcript;
|
|
38
|
+
if (needsPreflightTranscription) {
|
|
39
|
+
if (params.abortSignal?.aborted) return {
|
|
40
|
+
hasAudioAttachment,
|
|
41
|
+
hasTypedText
|
|
42
|
+
};
|
|
43
|
+
try {
|
|
44
|
+
const { transcribeFirstAudio } = await loadDiscordPreflightAudioRuntime();
|
|
45
|
+
if (params.abortSignal?.aborted) return {
|
|
46
|
+
hasAudioAttachment,
|
|
47
|
+
hasTypedText
|
|
48
|
+
};
|
|
49
|
+
const audioUrls = audioAttachments.map((att) => att.url).map((url) => normalizeOptionalString(url)).filter((url) => Boolean(url));
|
|
50
|
+
if (audioUrls.length > 0) {
|
|
51
|
+
transcript = await transcribeFirstAudio({
|
|
52
|
+
ctx: {
|
|
53
|
+
MediaUrls: audioUrls,
|
|
54
|
+
MediaTypes: audioAttachments.map((att) => inferAudioAttachmentMime(att)).filter((contentType) => Boolean(contentType))
|
|
55
|
+
},
|
|
56
|
+
cfg: params.cfg,
|
|
57
|
+
agentDir: void 0
|
|
58
|
+
});
|
|
59
|
+
if (params.abortSignal?.aborted) transcript = void 0;
|
|
60
|
+
}
|
|
61
|
+
} catch (err) {
|
|
62
|
+
logVerbose(`discord: audio preflight transcription failed: ${String(err)}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
hasAudioAttachment,
|
|
67
|
+
hasTypedText,
|
|
68
|
+
transcript
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
//#endregion
|
|
72
|
+
export { resolveDiscordPreflightAudioMentionContext };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { transcribeFirstAudio as transcribeFirstAudio$1 } from "openclaw/plugin-sdk/media-runtime";
|
|
2
|
+
//#region extensions/discord/src/monitor/preflight-audio.runtime.ts
|
|
3
|
+
async function transcribeFirstAudio(...args) {
|
|
4
|
+
return await transcribeFirstAudio$1(...args);
|
|
5
|
+
}
|
|
6
|
+
//#endregion
|
|
7
|
+
export { transcribeFirstAudio };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//#region extensions/discord/src/preview-streaming.ts
|
|
2
|
+
function parsePreviewStreamingMode(value) {
|
|
3
|
+
return value === "off" || value === "partial" || value === "block" ? value : void 0;
|
|
4
|
+
}
|
|
5
|
+
function resolveDiscordPreviewStreamMode(params = {}) {
|
|
6
|
+
const parsedStreaming = params.streaming && typeof params.streaming === "object" && !Array.isArray(params.streaming) ? parsePreviewStreamingMode(params.streaming.mode ?? params.streaming.streaming) : parsePreviewStreamingMode(params.streaming);
|
|
7
|
+
if (parsedStreaming) return parsedStreaming;
|
|
8
|
+
const legacy = parsePreviewStreamingMode(params.streamMode);
|
|
9
|
+
if (legacy) return legacy;
|
|
10
|
+
if (typeof params.streaming === "boolean") return params.streaming ? "partial" : "off";
|
|
11
|
+
return "off";
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { resolveDiscordPreviewStreamMode as t };
|