@spinabot/brigade 1.6.1 → 1.7.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.
- package/dist/agents/channels/discord/account-config.d.ts +60 -0
- package/dist/agents/channels/discord/account-config.d.ts.map +1 -1
- package/dist/agents/channels/discord/account-config.js +89 -0
- package/dist/agents/channels/discord/account-config.js.map +1 -1
- package/dist/agents/channels/discord/adapter.d.ts +24 -1
- package/dist/agents/channels/discord/adapter.d.ts.map +1 -1
- package/dist/agents/channels/discord/adapter.js +208 -41
- package/dist/agents/channels/discord/adapter.js.map +1 -1
- package/dist/agents/channels/discord/component-blocks.d.ts +108 -0
- package/dist/agents/channels/discord/component-blocks.d.ts.map +1 -0
- package/dist/agents/channels/discord/component-blocks.js +113 -0
- package/dist/agents/channels/discord/component-blocks.js.map +1 -0
- package/dist/agents/channels/discord/components.d.ts +78 -0
- package/dist/agents/channels/discord/components.d.ts.map +1 -1
- package/dist/agents/channels/discord/components.js +89 -0
- package/dist/agents/channels/discord/components.js.map +1 -1
- package/dist/agents/channels/discord/connection.d.ts +195 -12
- package/dist/agents/channels/discord/connection.d.ts.map +1 -1
- package/dist/agents/channels/discord/connection.js +852 -38
- package/dist/agents/channels/discord/connection.js.map +1 -1
- package/dist/agents/channels/discord/directory-cache.d.ts +47 -0
- package/dist/agents/channels/discord/directory-cache.d.ts.map +1 -0
- package/dist/agents/channels/discord/directory-cache.js +131 -0
- package/dist/agents/channels/discord/directory-cache.js.map +1 -0
- package/dist/agents/channels/discord/directory-live.d.ts +61 -0
- package/dist/agents/channels/discord/directory-live.d.ts.map +1 -0
- package/dist/agents/channels/discord/directory-live.js +140 -0
- package/dist/agents/channels/discord/directory-live.js.map +1 -0
- package/dist/agents/channels/discord/format.d.ts +15 -0
- package/dist/agents/channels/discord/format.d.ts.map +1 -1
- package/dist/agents/channels/discord/format.js +56 -0
- package/dist/agents/channels/discord/format.js.map +1 -1
- package/dist/agents/channels/discord/guilds.d.ts +25 -0
- package/dist/agents/channels/discord/guilds.d.ts.map +1 -0
- package/dist/agents/channels/discord/guilds.js +46 -0
- package/dist/agents/channels/discord/guilds.js.map +1 -0
- package/dist/agents/channels/discord/inbound-extras.d.ts +166 -9
- package/dist/agents/channels/discord/inbound-extras.d.ts.map +1 -1
- package/dist/agents/channels/discord/inbound-extras.js +246 -8
- package/dist/agents/channels/discord/inbound-extras.js.map +1 -1
- package/dist/agents/channels/discord/index.d.ts +10 -3
- package/dist/agents/channels/discord/index.d.ts.map +1 -1
- package/dist/agents/channels/discord/index.js +10 -3
- package/dist/agents/channels/discord/index.js.map +1 -1
- package/dist/agents/channels/discord/modal-registry.d.ts +89 -0
- package/dist/agents/channels/discord/modal-registry.d.ts.map +1 -0
- package/dist/agents/channels/discord/modal-registry.js +104 -0
- package/dist/agents/channels/discord/modal-registry.js.map +1 -0
- package/dist/agents/channels/discord/modals.d.ts +100 -0
- package/dist/agents/channels/discord/modals.d.ts.map +1 -0
- package/dist/agents/channels/discord/modals.js +124 -0
- package/dist/agents/channels/discord/modals.js.map +1 -0
- package/dist/agents/channels/discord/permission-audit.d.ts +43 -0
- package/dist/agents/channels/discord/permission-audit.d.ts.map +1 -0
- package/dist/agents/channels/discord/permission-audit.js +192 -0
- package/dist/agents/channels/discord/permission-audit.js.map +1 -0
- package/dist/agents/channels/discord/plugin.d.ts +18 -2
- package/dist/agents/channels/discord/plugin.d.ts.map +1 -1
- package/dist/agents/channels/discord/plugin.js +73 -4
- package/dist/agents/channels/discord/plugin.js.map +1 -1
- package/dist/agents/channels/discord/probe.d.ts +23 -1
- package/dist/agents/channels/discord/probe.d.ts.map +1 -1
- package/dist/agents/channels/discord/probe.js +40 -5
- package/dist/agents/channels/discord/probe.js.map +1 -1
- package/dist/agents/channels/discord/rest-actions.d.ts +346 -0
- package/dist/agents/channels/discord/rest-actions.d.ts.map +1 -0
- package/dist/agents/channels/discord/rest-actions.js +559 -0
- package/dist/agents/channels/discord/rest-actions.js.map +1 -0
- package/dist/agents/channels/discord/rest-components.d.ts +122 -0
- package/dist/agents/channels/discord/rest-components.d.ts.map +1 -0
- package/dist/agents/channels/discord/rest-components.js +243 -0
- package/dist/agents/channels/discord/rest-components.js.map +1 -0
- package/dist/agents/channels/discord/security-audit.d.ts +29 -0
- package/dist/agents/channels/discord/security-audit.d.ts.map +1 -0
- package/dist/agents/channels/discord/security-audit.js +94 -0
- package/dist/agents/channels/discord/security-audit.js.map +1 -0
- package/dist/agents/channels/discord/security-doctor.d.ts +43 -0
- package/dist/agents/channels/discord/security-doctor.d.ts.map +1 -0
- package/dist/agents/channels/discord/security-doctor.js +83 -0
- package/dist/agents/channels/discord/security-doctor.js.map +1 -0
- package/dist/agents/channels/discord/status-issues.d.ts +37 -0
- package/dist/agents/channels/discord/status-issues.d.ts.map +1 -0
- package/dist/agents/channels/discord/status-issues.js +66 -0
- package/dist/agents/channels/discord/status-issues.js.map +1 -0
- package/dist/agents/channels/discord/subagent-thread-binding-store.d.ts +57 -0
- package/dist/agents/channels/discord/subagent-thread-binding-store.d.ts.map +1 -0
- package/dist/agents/channels/discord/subagent-thread-binding-store.js +98 -0
- package/dist/agents/channels/discord/subagent-thread-binding-store.js.map +1 -0
- package/dist/agents/channels/discord/subagent-thread-binding.d.ts +95 -0
- package/dist/agents/channels/discord/subagent-thread-binding.d.ts.map +1 -0
- package/dist/agents/channels/discord/subagent-thread-binding.js +208 -0
- package/dist/agents/channels/discord/subagent-thread-binding.js.map +1 -0
- package/dist/agents/channels/discord/system-events.d.ts +31 -0
- package/dist/agents/channels/discord/system-events.d.ts.map +1 -0
- package/dist/agents/channels/discord/system-events.js +74 -0
- package/dist/agents/channels/discord/system-events.js.map +1 -0
- package/dist/agents/channels/general-callback.d.ts +12 -0
- package/dist/agents/channels/general-callback.d.ts.map +1 -1
- package/dist/agents/channels/general-callback.js +18 -0
- package/dist/agents/channels/general-callback.js.map +1 -1
- package/dist/agents/channels/inbound-pipeline.d.ts.map +1 -1
- package/dist/agents/channels/inbound-pipeline.js +5 -3
- package/dist/agents/channels/inbound-pipeline.js.map +1 -1
- package/dist/agents/extensions/types.d.ts +7 -0
- package/dist/agents/extensions/types.d.ts.map +1 -1
- package/dist/agents/extensions/types.js.map +1 -1
- package/dist/agents/subagent-announce-delivery.d.ts +10 -0
- package/dist/agents/subagent-announce-delivery.d.ts.map +1 -1
- package/dist/agents/subagent-announce-delivery.js +1 -0
- package/dist/agents/subagent-announce-delivery.js.map +1 -1
- package/dist/agents/subagent-completion-bridge.d.ts.map +1 -1
- package/dist/agents/subagent-completion-bridge.js +81 -0
- package/dist/agents/subagent-completion-bridge.js.map +1 -1
- package/dist/agents/subagent-spawn.d.ts.map +1 -1
- package/dist/agents/subagent-spawn.js +57 -4
- package/dist/agents/subagent-spawn.js.map +1 -1
- package/dist/agents/tools/discord-action-tool.d.ts +224 -0
- package/dist/agents/tools/discord-action-tool.d.ts.map +1 -0
- package/dist/agents/tools/discord-action-tool.js +848 -0
- package/dist/agents/tools/discord-action-tool.js.map +1 -0
- package/dist/agents/tools/registry.d.ts.map +1 -1
- package/dist/agents/tools/registry.js +21 -0
- package/dist/agents/tools/registry.js.map +1 -1
- package/dist/agents/tools/sessions/index.d.ts +8 -0
- package/dist/agents/tools/sessions/index.d.ts.map +1 -1
- package/dist/agents/tools/sessions/index.js +15 -3
- package/dist/agents/tools/sessions/index.js.map +1 -1
- package/dist/buildstamp.json +1 -1
- package/dist/cli/commands/channels.d.ts +2 -0
- package/dist/cli/commands/channels.d.ts.map +1 -1
- package/dist/cli/commands/channels.js +58 -1
- package/dist/cli/commands/channels.js.map +1 -1
- package/package.json +1 -1
|
@@ -104,6 +104,137 @@ export function extractDiscordText(message, resolve) {
|
|
|
104
104
|
return "";
|
|
105
105
|
return expandDiscordTokens(raw, resolve).trim();
|
|
106
106
|
}
|
|
107
|
+
/* ───────────────────────── embeds / stickers / forwards (assembled text) ───────────────────────── */
|
|
108
|
+
const FORWARD_REFERENCE_TYPE = 1;
|
|
109
|
+
/**
|
|
110
|
+
* True when the message is a FORWARD (reference kind `1`) rather than a reply
|
|
111
|
+
* (kind `0` / absent). discord.js exposes the kind on `reference.type`; the raw
|
|
112
|
+
* gateway shape carries it on `messageReference.type`. Used so a forward isn't
|
|
113
|
+
* mistaken for a reply by the reply-context resolver.
|
|
114
|
+
*/
|
|
115
|
+
export function isDiscordForward(message) {
|
|
116
|
+
const t = message.reference?.type ?? message.messageReference?.type;
|
|
117
|
+
return typeof t === "number" && t === FORWARD_REFERENCE_TYPE;
|
|
118
|
+
}
|
|
119
|
+
/** A short author label for a forwarded snapshot (globalName → username → id). */
|
|
120
|
+
function snapshotAuthorLabel(author) {
|
|
121
|
+
if (!author)
|
|
122
|
+
return undefined;
|
|
123
|
+
const display = author.globalName ?? author.global_name ?? undefined;
|
|
124
|
+
if (typeof display === "string" && display.trim())
|
|
125
|
+
return display.trim();
|
|
126
|
+
const username = author.username;
|
|
127
|
+
if (typeof username === "string" && username.trim())
|
|
128
|
+
return username.trim();
|
|
129
|
+
return typeof author.id === "string" && author.id ? author.id : undefined;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* The first embed's text folded into a readable run: `title` + `description` +
|
|
133
|
+
* (a bare `url` when neither carries it). Returns "" when the message has no
|
|
134
|
+
* embed text. Pure + deterministic.
|
|
135
|
+
*/
|
|
136
|
+
export function extractDiscordEmbedText(message) {
|
|
137
|
+
const embed = Array.isArray(message.embeds) ? message.embeds[0] : undefined;
|
|
138
|
+
if (!embed)
|
|
139
|
+
return "";
|
|
140
|
+
const title = typeof embed.title === "string" ? embed.title.trim() : "";
|
|
141
|
+
const description = typeof embed.description === "string" ? embed.description.trim() : "";
|
|
142
|
+
const url = typeof embed.url === "string" ? embed.url.trim() : "";
|
|
143
|
+
const parts = [];
|
|
144
|
+
if (title)
|
|
145
|
+
parts.push(title);
|
|
146
|
+
if (description)
|
|
147
|
+
parts.push(description);
|
|
148
|
+
// Surface the link only when there's no title/description carrying it already.
|
|
149
|
+
if (url && parts.length === 0)
|
|
150
|
+
parts.push(url);
|
|
151
|
+
return parts.join("\n");
|
|
152
|
+
}
|
|
153
|
+
/** The sticker items on a message (the `.stickers` collection, then raw `sticker_items`). */
|
|
154
|
+
export function resolveInboundStickers(message) {
|
|
155
|
+
const fromCollection = toArray(message.stickers ?? undefined).filter((s) => Boolean(s) && typeof s === "object");
|
|
156
|
+
if (fromCollection.length > 0)
|
|
157
|
+
return fromCollection;
|
|
158
|
+
const raw = Array.isArray(message.sticker_items) ? message.sticker_items : [];
|
|
159
|
+
return raw.filter((s) => Boolean(s) && typeof s === "object");
|
|
160
|
+
}
|
|
161
|
+
/** A `<sticker: name>` placeholder line per sticker, joined by newlines. Returns "" when none. */
|
|
162
|
+
export function extractDiscordStickerText(message) {
|
|
163
|
+
const stickers = resolveInboundStickers(message);
|
|
164
|
+
if (stickers.length === 0)
|
|
165
|
+
return "";
|
|
166
|
+
return stickers
|
|
167
|
+
.map((s) => {
|
|
168
|
+
const name = typeof s.name === "string" && s.name.trim() ? s.name.trim() : "sticker";
|
|
169
|
+
return `<sticker: ${name}>`;
|
|
170
|
+
})
|
|
171
|
+
.join("\n");
|
|
172
|
+
}
|
|
173
|
+
/** The forwarded-message snapshots on a message (discord.js Collection or raw array). */
|
|
174
|
+
export function resolveDiscordSnapshots(message) {
|
|
175
|
+
const fromCollection = toArray(message.messageSnapshots ?? undefined).filter((s) => Boolean(s) && typeof s === "object");
|
|
176
|
+
if (fromCollection.length > 0)
|
|
177
|
+
return fromCollection;
|
|
178
|
+
const raw = Array.isArray(message.message_snapshots) ? message.message_snapshots : [];
|
|
179
|
+
return raw.filter((s) => Boolean(s) && typeof s === "object");
|
|
180
|
+
}
|
|
181
|
+
/** The plain text of ONE forwarded snapshot's inner message (content → sticker → embed). */
|
|
182
|
+
function snapshotInnerText(snap, resolve) {
|
|
183
|
+
const content = typeof snap.content === "string" && !isBinaryContent(snap.content) ? expandDiscordTokens(snap.content, resolve).trim() : "";
|
|
184
|
+
const stickerText = extractDiscordStickerText(snap);
|
|
185
|
+
const embedText = extractDiscordEmbedText(snap);
|
|
186
|
+
return content || stickerText || embedText || "";
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* The `[Forwarded from <author>]` block(s) for any forwarded snapshots on the
|
|
190
|
+
* message. Each snapshot becomes a heading + its inner text. A forward whose
|
|
191
|
+
* snapshot has no text still surfaces the heading so the agent learns a forward
|
|
192
|
+
* happened. Returns "" when the message carries no forward snapshots.
|
|
193
|
+
*/
|
|
194
|
+
export function extractDiscordForwardedText(message, resolve) {
|
|
195
|
+
const snapshots = resolveDiscordSnapshots(message);
|
|
196
|
+
if (snapshots.length === 0)
|
|
197
|
+
return "";
|
|
198
|
+
const blocks = [];
|
|
199
|
+
for (const snap of snapshots) {
|
|
200
|
+
const inner = snap.message ?? undefined;
|
|
201
|
+
const author = inner ? snapshotAuthorLabel(inner.author) : undefined;
|
|
202
|
+
const heading = author ? `[Forwarded from ${author}]` : "[Forwarded message]";
|
|
203
|
+
const text = inner ? snapshotInnerText(inner, resolve) : "";
|
|
204
|
+
blocks.push(text ? `${heading}\n${text}` : heading);
|
|
205
|
+
}
|
|
206
|
+
return blocks.join("\n\n");
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* The full agent-facing text Brigade routes for a Discord message. The message
|
|
210
|
+
* `content` leads (token-expanded); when content is empty we FALL BACK to the
|
|
211
|
+
* first embed's title/description so an embed-only message isn't dropped. A
|
|
212
|
+
* `<sticker: name>` placeholder is APPENDED for any stickers, and a
|
|
213
|
+
* `[Forwarded from …]` block is APPENDED for any forwarded snapshots — so a
|
|
214
|
+
* sticker-only or forward-only message carries real text instead of "".
|
|
215
|
+
*
|
|
216
|
+
* Pure + deterministic; the connection passes a `resolve` lookup so mention
|
|
217
|
+
* tokens expand to readable names.
|
|
218
|
+
*/
|
|
219
|
+
export function assembleDiscordText(message, resolve) {
|
|
220
|
+
const content = extractDiscordText(message, resolve);
|
|
221
|
+
const parts = [];
|
|
222
|
+
if (content) {
|
|
223
|
+
parts.push(content);
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
const embedText = extractDiscordEmbedText(message);
|
|
227
|
+
if (embedText)
|
|
228
|
+
parts.push(embedText);
|
|
229
|
+
}
|
|
230
|
+
const stickerText = extractDiscordStickerText(message);
|
|
231
|
+
if (stickerText)
|
|
232
|
+
parts.push(stickerText);
|
|
233
|
+
const forwardedText = extractDiscordForwardedText(message, resolve);
|
|
234
|
+
if (forwardedText)
|
|
235
|
+
parts.push(forwardedText);
|
|
236
|
+
return parts.join("\n").trim();
|
|
237
|
+
}
|
|
107
238
|
/* ───────────────────────── chat type + thread + reply ───────────────────────── */
|
|
108
239
|
/** Discord channel-type enum values Brigade distinguishes. */
|
|
109
240
|
const CHANNEL_TYPE_DM = 1;
|
|
@@ -157,13 +288,32 @@ export function discordThreadId(message) {
|
|
|
157
288
|
* inline that message's text — so the context surfaces the parent message id and
|
|
158
289
|
* leaves `body` undefined (the connection can fetch the parent if it needs the
|
|
159
290
|
* excerpt). Returns undefined for a non-reply.
|
|
291
|
+
*
|
|
292
|
+
* When discord.js already resolved the reply parent (`message.referencedMessage`,
|
|
293
|
+
* which rides inline on a Gateway reply MESSAGE_CREATE), the parent's author id is
|
|
294
|
+
* captured SYNCHRONOUSLY into `from`. This matters because the central pipeline's
|
|
295
|
+
* group-addressing `isReplyToBot` depends on `replyTo.from === selfId` — if `from`
|
|
296
|
+
* were populated ONLY by the async body-backfill (connection.ts), a guild
|
|
297
|
+
* reply-to-bot whose backfill fetch failed would lose its implicit-mention
|
|
298
|
+
* admission and be dropped. The async backfill still fills `body` (the excerpt).
|
|
160
299
|
*/
|
|
161
300
|
export function extractDiscordReplyContext(message) {
|
|
301
|
+
// A FORWARD (reference kind 1) also carries a `reference.messageId`, but it's a
|
|
302
|
+
// forward — its content rides in the snapshot, not a quoted reply. Don't surface
|
|
303
|
+
// it as reply context (the assembled text already carries the forwarded block).
|
|
304
|
+
if (isDiscordForward(message))
|
|
305
|
+
return undefined;
|
|
162
306
|
const ref = message.reference;
|
|
163
307
|
const id = ref?.messageId;
|
|
164
308
|
if (typeof id !== "string" || !id)
|
|
165
309
|
return undefined;
|
|
166
|
-
|
|
310
|
+
const out = { messageId: id };
|
|
311
|
+
// Synchronously resolve the parent author from the already-cached referenced
|
|
312
|
+
// message when discord.js handed one — no async fetch needed.
|
|
313
|
+
const parentAuthorId = message.referencedMessage?.author?.id;
|
|
314
|
+
if (typeof parentAuthorId === "string" && parentAuthorId)
|
|
315
|
+
out.from = parentAuthorId;
|
|
316
|
+
return out;
|
|
167
317
|
}
|
|
168
318
|
/* ───────────────────────── mentions ───────────────────────── */
|
|
169
319
|
/**
|
|
@@ -304,18 +454,106 @@ const VOICE_MESSAGE_FLAG = 1 << 13;
|
|
|
304
454
|
function isDownloadableAttachment(a) {
|
|
305
455
|
return Boolean(a && (a.url || a.proxyURL));
|
|
306
456
|
}
|
|
457
|
+
/** discord.js sticker `format` / raw `format_type` enum: 1=PNG, 2=APNG, 3=Lottie, 4=GIF. */
|
|
458
|
+
const STICKER_FORMAT_PNG = 1;
|
|
459
|
+
const STICKER_FORMAT_APNG = 2;
|
|
460
|
+
const STICKER_FORMAT_LOTTIE = 3;
|
|
461
|
+
const STICKER_FORMAT_GIF = 4;
|
|
462
|
+
/** The CDN host stickers download from — already in the SSRF host allowlist (`media.discordapp.net`). */
|
|
463
|
+
const STICKER_ASSET_BASE_URL = "https://media.discordapp.net/stickers";
|
|
307
464
|
/**
|
|
308
|
-
*
|
|
309
|
-
*
|
|
310
|
-
*
|
|
311
|
-
* the
|
|
465
|
+
* The downloadable CDN URL + content-type for ONE sticker, derived from its
|
|
466
|
+
* `format` enum. PNG/APNG → `.png`, GIF → `.gif`, Lottie (vector) → `.json`
|
|
467
|
+
* (the raw Lottie animation; we don't rasterize). The host is `media.discordapp.net`,
|
|
468
|
+
* already covered by the inbound SSRF allowlist. Returns null when the sticker
|
|
469
|
+
* has no id.
|
|
470
|
+
*/
|
|
471
|
+
export function stickerToAttachment(sticker) {
|
|
472
|
+
const id = typeof sticker.id === "string" ? sticker.id.trim() : "";
|
|
473
|
+
if (!id)
|
|
474
|
+
return null;
|
|
475
|
+
const format = typeof sticker.format === "number" ? sticker.format : typeof sticker.format_type === "number" ? sticker.format_type : STICKER_FORMAT_PNG;
|
|
476
|
+
const baseName = typeof sticker.name === "string" && sticker.name.trim() ? sticker.name.trim().replace(/[^A-Za-z0-9_-]/g, "_") : `sticker-${id}`;
|
|
477
|
+
let ext;
|
|
478
|
+
let contentType;
|
|
479
|
+
switch (format) {
|
|
480
|
+
case STICKER_FORMAT_GIF:
|
|
481
|
+
ext = "gif";
|
|
482
|
+
contentType = "image/gif";
|
|
483
|
+
break;
|
|
484
|
+
case STICKER_FORMAT_LOTTIE:
|
|
485
|
+
ext = "json";
|
|
486
|
+
contentType = "application/json";
|
|
487
|
+
break;
|
|
488
|
+
case STICKER_FORMAT_APNG:
|
|
489
|
+
case STICKER_FORMAT_PNG:
|
|
490
|
+
default:
|
|
491
|
+
ext = "png";
|
|
492
|
+
contentType = "image/png";
|
|
493
|
+
break;
|
|
494
|
+
}
|
|
495
|
+
return {
|
|
496
|
+
id,
|
|
497
|
+
name: `${baseName}.${ext}`,
|
|
498
|
+
url: `${STICKER_ASSET_BASE_URL}/${id}.${ext}`,
|
|
499
|
+
contentType,
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
/** Sticker assets on a message, mapped to downloadable attachment descriptors. */
|
|
503
|
+
export function resolveInboundStickerAttachments(message) {
|
|
504
|
+
const out = [];
|
|
505
|
+
for (const sticker of resolveInboundStickers(message)) {
|
|
506
|
+
const att = stickerToAttachment(sticker);
|
|
507
|
+
if (att)
|
|
508
|
+
out.push(att);
|
|
509
|
+
}
|
|
510
|
+
return out;
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Downloadable attachments carried INSIDE forwarded snapshots (attachments +
|
|
514
|
+
* stickers of each forwarded message). A forward arrives as a frozen snapshot,
|
|
515
|
+
* so its media never appears on `message.attachments` — it has to be pulled out
|
|
516
|
+
* of the snapshot.
|
|
517
|
+
*/
|
|
518
|
+
export function resolveForwardedAttachments(message) {
|
|
519
|
+
const out = [];
|
|
520
|
+
for (const snap of resolveDiscordSnapshots(message)) {
|
|
521
|
+
const inner = snap.message;
|
|
522
|
+
if (!inner)
|
|
523
|
+
continue;
|
|
524
|
+
for (const a of toArray(inner.attachments ?? undefined)) {
|
|
525
|
+
if (isDownloadableAttachment(a))
|
|
526
|
+
out.push(a);
|
|
527
|
+
}
|
|
528
|
+
out.push(...resolveInboundStickerAttachments(inner));
|
|
529
|
+
}
|
|
530
|
+
return out;
|
|
531
|
+
}
|
|
532
|
+
/**
|
|
533
|
+
* Cheap presence probe — does this message carry ANY downloadable media? Walks
|
|
534
|
+
* direct attachments, stickers, AND forwarded-snapshot media but never touches
|
|
535
|
+
* the network, so the connection layer can DEFER the actual download until AFTER
|
|
536
|
+
* the central access gate admits the sender (mirrors Slack/Telegram).
|
|
312
537
|
*/
|
|
313
538
|
export function hasInboundMedia(message) {
|
|
314
|
-
|
|
539
|
+
if (toArray(message.attachments).some(isDownloadableAttachment))
|
|
540
|
+
return true;
|
|
541
|
+
if (resolveInboundStickers(message).length > 0)
|
|
542
|
+
return true;
|
|
543
|
+
if (resolveForwardedAttachments(message).length > 0)
|
|
544
|
+
return true;
|
|
545
|
+
return false;
|
|
315
546
|
}
|
|
316
|
-
/**
|
|
547
|
+
/**
|
|
548
|
+
* The full list of downloadable attachments to fetch for a message: direct
|
|
549
|
+
* attachments, sticker assets (downloaded from the Discord sticker CDN), and any
|
|
550
|
+
* media carried inside forwarded snapshots.
|
|
551
|
+
*/
|
|
317
552
|
export function resolveInboundAttachments(message) {
|
|
318
|
-
|
|
553
|
+
const direct = toArray(message.attachments).filter(isDownloadableAttachment);
|
|
554
|
+
const stickers = resolveInboundStickerAttachments(message);
|
|
555
|
+
const forwarded = resolveForwardedAttachments(message);
|
|
556
|
+
return [...direct, ...stickers, ...forwarded];
|
|
319
557
|
}
|
|
320
558
|
/** True when an attachment carries the Discord voice-message flag. */
|
|
321
559
|
function isVoiceAttachment(a) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-extras.js","sourceRoot":"","sources":["../../../../src/agents/channels/discord/inbound-extras.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"inbound-extras.js","sourceRoot":"","sources":["../../../../src/agents/channels/discord/inbound-extras.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
/** Discord channel — public surface. */
|
|
2
2
|
export { createDiscordAdapter, buildReactionNote, DISCORD_CAPABILITIES, type CreateDiscordAdapterOptions, type DiscordAdapter, } from "./adapter.js";
|
|
3
|
-
export { listDiscordAccountIds, resolveDiscordAccount, resolveDiscordBotToken, resolveDiscordProxyUrl, discordChannelEnabled, discordLiveStreamEnabled, discordStreamThrottleMs, discordSurfaceReasoning, discordThreadIdleTtlMs, maskProxyUrl, stripBotPrefix, DISCORD_BOT_TOKEN_ENV_VAR, DISCORD_CHANNEL_ID, DISCORD_DEFAULT_ACCOUNT_ID, type ResolvedDiscordAccount, } from "./account-config.js";
|
|
3
|
+
export { listDiscordAccountIds, resolveDiscordAccount, resolveDiscordAutoThread, resolveDiscordBotToken, resolveDiscordPresence, resolveDiscordProxyUrl, discordChannelEnabled, discordLiveStreamEnabled, discordReactionNotifications, discordStreamThrottleMs, discordSurfaceReasoning, discordThreadIdleTtlMs, maskProxyUrl, stripBotPrefix, DISCORD_BOT_TOKEN_ENV_VAR, DISCORD_CHANNEL_ID, DISCORD_DEFAULT_ACCOUNT_ID, type DiscordAutoThreadNameMode, type DiscordPresenceActivityType, type DiscordPresenceStatus, type DiscordReactionNotificationMode, type ResolvedDiscordAccount, type ResolvedDiscordAutoThread, type ResolvedDiscordPresence, } from "./account-config.js";
|
|
4
4
|
export { buildDiscordApprovalMessage, buildDiscordApprovalText, parseDiscordApprovalAction, type DiscordApprovalMessage, } from "./approval-native.js";
|
|
5
5
|
export { resolveDiscordApprover } from "./approval-authorize.js";
|
|
6
6
|
export { buildDiscordApprovalRows, buildDiscordButtonRows, sanitizeDiscordCustomId, DISCORD_BUTTON_STYLE, DISCORD_BUTTONS_PER_ROW, DISCORD_CUSTOM_ID_MAX_CHARS, DISCORD_MAX_ROWS, type DiscordActionRow, type DiscordButtonSpec, } from "./components.js";
|
|
7
7
|
export { buildDiscordCommandManifest, normalizeDiscordCommandName, type DiscordApplicationCommand, } from "./command-menu.js";
|
|
8
|
-
export { connectDiscord, discordBackoffDelay, isDiscordUnauthorized, redactDiscordToken, type ConnectDiscordArgs, type DiscordConnection, type DiscordInboundMessage, } from "./connection.js";
|
|
8
|
+
export { connectDiscord, discordBackoffDelay, isDiscordUnauthorized, redactDiscordToken, sanitizeThreadName, type ConnectDiscordArgs, type DiscordConnection, type DiscordInboundMessage, type DiscordPresencePayload, } from "./connection.js";
|
|
9
9
|
export { downloadDiscordAttachment, buildDiscordAttachment, isAllowedDiscordAttachmentUrl, type DiscordOutboundAttachment, } from "./media.js";
|
|
10
10
|
export { markdownToDiscord, discordTextIsEmpty, DISCORD_MESSAGE_LIMIT } from "./format.js";
|
|
11
11
|
export { createDiscordPlugin, type DiscordPluginDeps, type DiscordPluginHandle } from "./plugin.js";
|
|
12
|
-
export { probeDiscord, decodeMessageContentIntent, MESSAGE_CONTENT_DISABLED_WARNING, type DiscordProbeResult, type DiscordProbeBot, type MessageContentIntentState, } from "./probe.js";
|
|
12
|
+
export { probeDiscord, decodeMessageContentIntent, decodePrivilegedIntents, MESSAGE_CONTENT_DISABLED_WARNING, type DiscordPrivilegedIntents, type DiscordProbeResult, type DiscordProbeBot, type MessageContentIntentState, type PrivilegedIntentState, } from "./probe.js";
|
|
13
|
+
export { listDiscordGuilds, type DiscordGuildSummary } from "./guilds.js";
|
|
14
|
+
export { listDiscordDirectoryPeers, listDiscordDirectoryGroups, type DiscordDirectoryEntry, type DiscordDirectoryQuery, } from "./directory-live.js";
|
|
15
|
+
export { auditDiscordChannelPermissions, type DiscordChannelPermissionResult, type DiscordPermissionAuditResult, } from "./permission-audit.js";
|
|
16
|
+
export { collectDiscordStatusIssues, type DiscordStatusAccount } from "./status-issues.js";
|
|
17
|
+
export { collectDiscordSecurityAuditFindings } from "./security-audit.js";
|
|
18
|
+
export { isDiscordMutableAllowEntry, scanDiscordNumericIdHazards, type DiscordNumericIdHazard, } from "./security-doctor.js";
|
|
19
|
+
export { collectConfiguredDiscordChannelIds, type DiscordProbeWithAudit } from "./plugin.js";
|
|
13
20
|
export { discordModule } from "./module.js";
|
|
14
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/agents/channels/discord/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,OAAO,EACN,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,2BAA2B,EAChC,KAAK,cAAc,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,EAC1B,KAAK,sBAAsB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/agents/channels/discord/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,OAAO,EACN,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,2BAA2B,EAChC,KAAK,cAAc,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,4BAA4B,EAC5B,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,qBAAqB,EAC1B,KAAK,+BAA+B,EACpC,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,EAC1B,KAAK,sBAAsB,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACN,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,2BAA2B,EAC3B,2BAA2B,EAC3B,KAAK,yBAAyB,GAC9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,yBAAyB,EACzB,sBAAsB,EACtB,6BAA6B,EAC7B,KAAK,yBAAyB,GAC9B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACpG,OAAO,EACN,YAAY,EACZ,0BAA0B,EAC1B,uBAAuB,EACvB,gCAAgC,EAChC,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,GAC1B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EACN,yBAAyB,EACzB,0BAA0B,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,8BAA8B,EAC9B,KAAK,8BAA8B,EACnC,KAAK,4BAA4B,GACjC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,0BAA0B,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,mCAAmC,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EACN,0BAA0B,EAC1B,2BAA2B,EAC3B,KAAK,sBAAsB,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kCAAkC,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
/** Discord channel — public surface. */
|
|
2
2
|
export { createDiscordAdapter, buildReactionNote, DISCORD_CAPABILITIES, } from "./adapter.js";
|
|
3
|
-
export { listDiscordAccountIds, resolveDiscordAccount, resolveDiscordBotToken, resolveDiscordProxyUrl, discordChannelEnabled, discordLiveStreamEnabled, discordStreamThrottleMs, discordSurfaceReasoning, discordThreadIdleTtlMs, maskProxyUrl, stripBotPrefix, DISCORD_BOT_TOKEN_ENV_VAR, DISCORD_CHANNEL_ID, DISCORD_DEFAULT_ACCOUNT_ID, } from "./account-config.js";
|
|
3
|
+
export { listDiscordAccountIds, resolveDiscordAccount, resolveDiscordAutoThread, resolveDiscordBotToken, resolveDiscordPresence, resolveDiscordProxyUrl, discordChannelEnabled, discordLiveStreamEnabled, discordReactionNotifications, discordStreamThrottleMs, discordSurfaceReasoning, discordThreadIdleTtlMs, maskProxyUrl, stripBotPrefix, DISCORD_BOT_TOKEN_ENV_VAR, DISCORD_CHANNEL_ID, DISCORD_DEFAULT_ACCOUNT_ID, } from "./account-config.js";
|
|
4
4
|
export { buildDiscordApprovalMessage, buildDiscordApprovalText, parseDiscordApprovalAction, } from "./approval-native.js";
|
|
5
5
|
export { resolveDiscordApprover } from "./approval-authorize.js";
|
|
6
6
|
export { buildDiscordApprovalRows, buildDiscordButtonRows, sanitizeDiscordCustomId, DISCORD_BUTTON_STYLE, DISCORD_BUTTONS_PER_ROW, DISCORD_CUSTOM_ID_MAX_CHARS, DISCORD_MAX_ROWS, } from "./components.js";
|
|
7
7
|
export { buildDiscordCommandManifest, normalizeDiscordCommandName, } from "./command-menu.js";
|
|
8
|
-
export { connectDiscord, discordBackoffDelay, isDiscordUnauthorized, redactDiscordToken, } from "./connection.js";
|
|
8
|
+
export { connectDiscord, discordBackoffDelay, isDiscordUnauthorized, redactDiscordToken, sanitizeThreadName, } from "./connection.js";
|
|
9
9
|
export { downloadDiscordAttachment, buildDiscordAttachment, isAllowedDiscordAttachmentUrl, } from "./media.js";
|
|
10
10
|
export { markdownToDiscord, discordTextIsEmpty, DISCORD_MESSAGE_LIMIT } from "./format.js";
|
|
11
11
|
export { createDiscordPlugin } from "./plugin.js";
|
|
12
|
-
export { probeDiscord, decodeMessageContentIntent, MESSAGE_CONTENT_DISABLED_WARNING, } from "./probe.js";
|
|
12
|
+
export { probeDiscord, decodeMessageContentIntent, decodePrivilegedIntents, MESSAGE_CONTENT_DISABLED_WARNING, } from "./probe.js";
|
|
13
|
+
export { listDiscordGuilds } from "./guilds.js";
|
|
14
|
+
export { listDiscordDirectoryPeers, listDiscordDirectoryGroups, } from "./directory-live.js";
|
|
15
|
+
export { auditDiscordChannelPermissions, } from "./permission-audit.js";
|
|
16
|
+
export { collectDiscordStatusIssues } from "./status-issues.js";
|
|
17
|
+
export { collectDiscordSecurityAuditFindings } from "./security-audit.js";
|
|
18
|
+
export { isDiscordMutableAllowEntry, scanDiscordNumericIdHazards, } from "./security-doctor.js";
|
|
19
|
+
export { collectConfiguredDiscordChannelIds } from "./plugin.js";
|
|
13
20
|
export { discordModule } from "./module.js";
|
|
14
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/agents/channels/discord/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,OAAO,EACN,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,GAGpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/agents/channels/discord/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,OAAO,EACN,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,GAGpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,4BAA4B,EAC5B,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,GAQ1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,GAE1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACN,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,gBAAgB,GAGhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,2BAA2B,EAC3B,2BAA2B,GAE3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,GAKlB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,yBAAyB,EACzB,sBAAsB,EACtB,6BAA6B,GAE7B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAoD,MAAM,aAAa,CAAC;AACpG,OAAO,EACN,YAAY,EACZ,0BAA0B,EAC1B,uBAAuB,EACvB,gCAAgC,GAMhC,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAA4B,MAAM,aAAa,CAAC;AAC1E,OAAO,EACN,yBAAyB,EACzB,0BAA0B,GAG1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,8BAA8B,GAG9B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,0BAA0B,EAA6B,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,mCAAmC,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EACN,0BAA0B,EAC1B,2BAA2B,GAE3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kCAAkC,EAA8B,MAAM,aAAa,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory registry of pending Discord modal (form) definitions (Fix 3b).
|
|
3
|
+
*
|
|
4
|
+
* A Discord modal carries up to five text-input fields, each with a label,
|
|
5
|
+
* style, placeholder, and required flag. A modal is OPENED by pressing a
|
|
6
|
+
* "modal-trigger" button; on submit Discord delivers the field values keyed by
|
|
7
|
+
* each field's custom_id. The full field definition is far larger than the
|
|
8
|
+
* 100-char `custom_id` budget a button/modal can carry, so it CANNOT ride inline
|
|
9
|
+
* — hence this small side registry. The trigger button + the modal both carry
|
|
10
|
+
* only a short `modal:<modalId>` marker; the heavy definition lives here, keyed
|
|
11
|
+
* by that id.
|
|
12
|
+
*
|
|
13
|
+
* Entries expire after {@link MODAL_ENTRY_TTL_MS} so a never-submitted form
|
|
14
|
+
* doesn't leak. `consume` removes the entry (a modal is single-use by default);
|
|
15
|
+
* `get` peeks without removing (for the trigger → showModal lookup). A
|
|
16
|
+
* reset hook is exported for tests.
|
|
17
|
+
*
|
|
18
|
+
* Pure module-level state — no I/O.
|
|
19
|
+
*/
|
|
20
|
+
/** A modal lives for 30 minutes before it's reaped (the form was abandoned). */
|
|
21
|
+
export declare const MODAL_ENTRY_TTL_MS: number;
|
|
22
|
+
/** Discord supports at most 5 inputs per modal. */
|
|
23
|
+
export declare const DISCORD_MODAL_FIELD_MAX = 5;
|
|
24
|
+
/** discord.js `TextInputStyle` values (Short = single line, Paragraph = multi-line). */
|
|
25
|
+
export declare const DISCORD_TEXT_INPUT_STYLE: {
|
|
26
|
+
readonly short: 1;
|
|
27
|
+
readonly paragraph: 2;
|
|
28
|
+
};
|
|
29
|
+
/** A single text-input field definition for a modal. */
|
|
30
|
+
export interface DiscordModalField {
|
|
31
|
+
/** Field custom_id — Discord echoes this back keying the submitted value. */
|
|
32
|
+
id: string;
|
|
33
|
+
/** Label shown above the input. */
|
|
34
|
+
label: string;
|
|
35
|
+
/** `short` (single line) or `paragraph` (multi-line). Defaults to `short`. */
|
|
36
|
+
style?: "short" | "paragraph";
|
|
37
|
+
/** Whether the field must be filled before submit (default true). */
|
|
38
|
+
required?: boolean;
|
|
39
|
+
/** Placeholder hint shown in the empty input. */
|
|
40
|
+
placeholder?: string;
|
|
41
|
+
}
|
|
42
|
+
/** A registered modal definition (the heavy form spec the custom_id can't carry). */
|
|
43
|
+
export interface DiscordModalEntry {
|
|
44
|
+
/** Modal heading shown above the form. */
|
|
45
|
+
title: string;
|
|
46
|
+
/** Text-input fields (1..5). */
|
|
47
|
+
fields: DiscordModalField[];
|
|
48
|
+
/** Session the form belongs to (so a submit routes back to the right turn). */
|
|
49
|
+
sessionKey?: string;
|
|
50
|
+
/** Agent that attached the form. */
|
|
51
|
+
agentId?: string;
|
|
52
|
+
/** Account namespace. */
|
|
53
|
+
accountId?: string;
|
|
54
|
+
/** Optional allowlist of user ids permitted to submit. */
|
|
55
|
+
allowedUsers?: string[];
|
|
56
|
+
/** Epoch ms the entry was registered. */
|
|
57
|
+
createdAt: number;
|
|
58
|
+
/** Epoch ms the entry expires. */
|
|
59
|
+
expiresAt: number;
|
|
60
|
+
}
|
|
61
|
+
/** What a caller supplies when registering a modal (timestamps are filled in). */
|
|
62
|
+
export interface DiscordModalRegistration {
|
|
63
|
+
/** Modal heading (defaults to "Form" when empty). */
|
|
64
|
+
title?: string;
|
|
65
|
+
fields: DiscordModalField[];
|
|
66
|
+
sessionKey?: string;
|
|
67
|
+
agentId?: string;
|
|
68
|
+
accountId?: string;
|
|
69
|
+
allowedUsers?: string[];
|
|
70
|
+
}
|
|
71
|
+
/** Mint a short, unique modal id (fits the `modal:<id>` marker budget). */
|
|
72
|
+
export declare function nextDiscordModalId(): string;
|
|
73
|
+
/**
|
|
74
|
+
* Register a modal definition, returning the modal id the trigger button carries.
|
|
75
|
+
* The entry expires after {@link MODAL_ENTRY_TTL_MS}. Fields beyond the Discord
|
|
76
|
+
* 5-input cap are dropped.
|
|
77
|
+
*/
|
|
78
|
+
export declare function registerDiscordModal(reg: DiscordModalRegistration): string;
|
|
79
|
+
/** Peek at a registered modal WITHOUT removing it (the trigger → showModal lookup). */
|
|
80
|
+
export declare function getDiscordModal(modalId: string): DiscordModalEntry | undefined;
|
|
81
|
+
/**
|
|
82
|
+
* Consume a registered modal — return it AND remove it (a modal is single-use, so
|
|
83
|
+
* a second submit of the same id degrades gracefully to `undefined`). Returns
|
|
84
|
+
* `undefined` for a missing / expired id.
|
|
85
|
+
*/
|
|
86
|
+
export declare function consumeDiscordModal(modalId: string): DiscordModalEntry | undefined;
|
|
87
|
+
/** TEST-ONLY: clear the registry + reset the clock + id counter. */
|
|
88
|
+
export declare function __resetDiscordModalRegistryForTest(clock?: () => number): void;
|
|
89
|
+
//# sourceMappingURL=modal-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal-registry.d.ts","sourceRoot":"","sources":["../../../../src/agents/channels/discord/modal-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,QAAkB,CAAC;AAElD,mDAAmD;AACnD,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,wFAAwF;AACxF,eAAO,MAAM,wBAAwB;;;CAG3B,CAAC;AAEX,wDAAwD;AACxD,MAAM,WAAW,iBAAiB;IACjC,6EAA6E;IAC7E,EAAE,EAAE,MAAM,CAAC;IACX,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,KAAK,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAC9B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qFAAqF;AACrF,MAAM,WAAW,iBAAiB;IACjC,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,kFAAkF;AAClF,MAAM,WAAW,wBAAwB;IACxC,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAWD,2EAA2E;AAC3E,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AAUD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,wBAAwB,GAAG,MAAM,CAiB1E;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAS9E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAIlF;AAED,oEAAoE;AACpE,wBAAgB,kCAAkC,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAI7E"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory registry of pending Discord modal (form) definitions (Fix 3b).
|
|
3
|
+
*
|
|
4
|
+
* A Discord modal carries up to five text-input fields, each with a label,
|
|
5
|
+
* style, placeholder, and required flag. A modal is OPENED by pressing a
|
|
6
|
+
* "modal-trigger" button; on submit Discord delivers the field values keyed by
|
|
7
|
+
* each field's custom_id. The full field definition is far larger than the
|
|
8
|
+
* 100-char `custom_id` budget a button/modal can carry, so it CANNOT ride inline
|
|
9
|
+
* — hence this small side registry. The trigger button + the modal both carry
|
|
10
|
+
* only a short `modal:<modalId>` marker; the heavy definition lives here, keyed
|
|
11
|
+
* by that id.
|
|
12
|
+
*
|
|
13
|
+
* Entries expire after {@link MODAL_ENTRY_TTL_MS} so a never-submitted form
|
|
14
|
+
* doesn't leak. `consume` removes the entry (a modal is single-use by default);
|
|
15
|
+
* `get` peeks without removing (for the trigger → showModal lookup). A
|
|
16
|
+
* reset hook is exported for tests.
|
|
17
|
+
*
|
|
18
|
+
* Pure module-level state — no I/O.
|
|
19
|
+
*/
|
|
20
|
+
/** A modal lives for 30 minutes before it's reaped (the form was abandoned). */
|
|
21
|
+
export const MODAL_ENTRY_TTL_MS = 30 * 60 * 1_000;
|
|
22
|
+
/** Discord supports at most 5 inputs per modal. */
|
|
23
|
+
export const DISCORD_MODAL_FIELD_MAX = 5;
|
|
24
|
+
/** discord.js `TextInputStyle` values (Short = single line, Paragraph = multi-line). */
|
|
25
|
+
export const DISCORD_TEXT_INPUT_STYLE = {
|
|
26
|
+
short: 1,
|
|
27
|
+
paragraph: 2,
|
|
28
|
+
};
|
|
29
|
+
/** modalId → entry. Insertion-ordered; pruned lazily on access. */
|
|
30
|
+
const registry = new Map();
|
|
31
|
+
/** Monotonic counter feeding the generated modal ids (collision-free per process). */
|
|
32
|
+
let modalSeq = 0;
|
|
33
|
+
/** A clock seam so tests can drive expiry deterministically. */
|
|
34
|
+
let nowFn = () => Date.now();
|
|
35
|
+
/** Mint a short, unique modal id (fits the `modal:<id>` marker budget). */
|
|
36
|
+
export function nextDiscordModalId() {
|
|
37
|
+
modalSeq += 1;
|
|
38
|
+
return `m${modalSeq.toString(36)}${nowFn().toString(36).slice(-4)}`;
|
|
39
|
+
}
|
|
40
|
+
/** Drop every entry whose `expiresAt` is in the past. */
|
|
41
|
+
function pruneExpired() {
|
|
42
|
+
const now = nowFn();
|
|
43
|
+
for (const [id, entry] of registry) {
|
|
44
|
+
if (entry.expiresAt <= now)
|
|
45
|
+
registry.delete(id);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Register a modal definition, returning the modal id the trigger button carries.
|
|
50
|
+
* The entry expires after {@link MODAL_ENTRY_TTL_MS}. Fields beyond the Discord
|
|
51
|
+
* 5-input cap are dropped.
|
|
52
|
+
*/
|
|
53
|
+
export function registerDiscordModal(reg) {
|
|
54
|
+
pruneExpired();
|
|
55
|
+
const id = nextDiscordModalId();
|
|
56
|
+
const now = nowFn();
|
|
57
|
+
const fields = (reg.fields ?? []).slice(0, DISCORD_MODAL_FIELD_MAX);
|
|
58
|
+
const entry = {
|
|
59
|
+
title: (reg.title ?? "").trim() || "Form",
|
|
60
|
+
fields,
|
|
61
|
+
createdAt: now,
|
|
62
|
+
expiresAt: now + MODAL_ENTRY_TTL_MS,
|
|
63
|
+
};
|
|
64
|
+
if (reg.sessionKey !== undefined)
|
|
65
|
+
entry.sessionKey = reg.sessionKey;
|
|
66
|
+
if (reg.agentId !== undefined)
|
|
67
|
+
entry.agentId = reg.agentId;
|
|
68
|
+
if (reg.accountId !== undefined)
|
|
69
|
+
entry.accountId = reg.accountId;
|
|
70
|
+
if (reg.allowedUsers !== undefined)
|
|
71
|
+
entry.allowedUsers = reg.allowedUsers;
|
|
72
|
+
registry.set(id, entry);
|
|
73
|
+
return id;
|
|
74
|
+
}
|
|
75
|
+
/** Peek at a registered modal WITHOUT removing it (the trigger → showModal lookup). */
|
|
76
|
+
export function getDiscordModal(modalId) {
|
|
77
|
+
pruneExpired();
|
|
78
|
+
const entry = registry.get(modalId);
|
|
79
|
+
if (!entry)
|
|
80
|
+
return undefined;
|
|
81
|
+
if (entry.expiresAt <= nowFn()) {
|
|
82
|
+
registry.delete(modalId);
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
return entry;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Consume a registered modal — return it AND remove it (a modal is single-use, so
|
|
89
|
+
* a second submit of the same id degrades gracefully to `undefined`). Returns
|
|
90
|
+
* `undefined` for a missing / expired id.
|
|
91
|
+
*/
|
|
92
|
+
export function consumeDiscordModal(modalId) {
|
|
93
|
+
const entry = getDiscordModal(modalId);
|
|
94
|
+
if (entry)
|
|
95
|
+
registry.delete(modalId);
|
|
96
|
+
return entry;
|
|
97
|
+
}
|
|
98
|
+
/** TEST-ONLY: clear the registry + reset the clock + id counter. */
|
|
99
|
+
export function __resetDiscordModalRegistryForTest(clock) {
|
|
100
|
+
registry.clear();
|
|
101
|
+
modalSeq = 0;
|
|
102
|
+
nowFn = clock ?? (() => Date.now());
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=modal-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal-registry.js","sourceRoot":"","sources":["../../../../src/agents/channels/discord/modal-registry.ts"],"names":[],"mappings":"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"}
|