@spinabot/brigade 1.6.0 → 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.
Files changed (194) hide show
  1. package/dist/agents/agent-loop.d.ts.map +1 -1
  2. package/dist/agents/agent-loop.js +51 -1
  3. package/dist/agents/agent-loop.js.map +1 -1
  4. package/dist/agents/channels/bundled-channel-metas.d.ts +2 -0
  5. package/dist/agents/channels/bundled-channel-metas.d.ts.map +1 -1
  6. package/dist/agents/channels/bundled-channel-metas.js +11 -0
  7. package/dist/agents/channels/bundled-channel-metas.js.map +1 -1
  8. package/dist/agents/channels/discord/account-config.d.ts +177 -0
  9. package/dist/agents/channels/discord/account-config.d.ts.map +1 -0
  10. package/dist/agents/channels/discord/account-config.js +349 -0
  11. package/dist/agents/channels/discord/account-config.js.map +1 -0
  12. package/dist/agents/channels/discord/adapter.d.ts +79 -0
  13. package/dist/agents/channels/discord/adapter.d.ts.map +1 -0
  14. package/dist/agents/channels/discord/adapter.js +693 -0
  15. package/dist/agents/channels/discord/adapter.js.map +1 -0
  16. package/dist/agents/channels/discord/approval-authorize.d.ts +43 -0
  17. package/dist/agents/channels/discord/approval-authorize.d.ts.map +1 -0
  18. package/dist/agents/channels/discord/approval-authorize.js +71 -0
  19. package/dist/agents/channels/discord/approval-authorize.js.map +1 -0
  20. package/dist/agents/channels/discord/approval-native.d.ts +68 -0
  21. package/dist/agents/channels/discord/approval-native.d.ts.map +1 -0
  22. package/dist/agents/channels/discord/approval-native.js +81 -0
  23. package/dist/agents/channels/discord/approval-native.js.map +1 -0
  24. package/dist/agents/channels/discord/command-menu.d.ts +49 -0
  25. package/dist/agents/channels/discord/command-menu.d.ts.map +1 -0
  26. package/dist/agents/channels/discord/command-menu.js +73 -0
  27. package/dist/agents/channels/discord/command-menu.js.map +1 -0
  28. package/dist/agents/channels/discord/component-blocks.d.ts +108 -0
  29. package/dist/agents/channels/discord/component-blocks.d.ts.map +1 -0
  30. package/dist/agents/channels/discord/component-blocks.js +113 -0
  31. package/dist/agents/channels/discord/component-blocks.js.map +1 -0
  32. package/dist/agents/channels/discord/components.d.ts +175 -0
  33. package/dist/agents/channels/discord/components.d.ts.map +1 -0
  34. package/dist/agents/channels/discord/components.js +220 -0
  35. package/dist/agents/channels/discord/components.js.map +1 -0
  36. package/dist/agents/channels/discord/connection.d.ts +570 -0
  37. package/dist/agents/channels/discord/connection.d.ts.map +1 -0
  38. package/dist/agents/channels/discord/connection.js +1600 -0
  39. package/dist/agents/channels/discord/connection.js.map +1 -0
  40. package/dist/agents/channels/discord/directory-cache.d.ts +47 -0
  41. package/dist/agents/channels/discord/directory-cache.d.ts.map +1 -0
  42. package/dist/agents/channels/discord/directory-cache.js +131 -0
  43. package/dist/agents/channels/discord/directory-cache.js.map +1 -0
  44. package/dist/agents/channels/discord/directory-live.d.ts +61 -0
  45. package/dist/agents/channels/discord/directory-live.d.ts.map +1 -0
  46. package/dist/agents/channels/discord/directory-live.js +140 -0
  47. package/dist/agents/channels/discord/directory-live.js.map +1 -0
  48. package/dist/agents/channels/discord/draft-stream.d.ts +92 -0
  49. package/dist/agents/channels/discord/draft-stream.d.ts.map +1 -0
  50. package/dist/agents/channels/discord/draft-stream.js +213 -0
  51. package/dist/agents/channels/discord/draft-stream.js.map +1 -0
  52. package/dist/agents/channels/discord/format.d.ts +70 -0
  53. package/dist/agents/channels/discord/format.d.ts.map +1 -0
  54. package/dist/agents/channels/discord/format.js +303 -0
  55. package/dist/agents/channels/discord/format.js.map +1 -0
  56. package/dist/agents/channels/discord/guilds.d.ts +25 -0
  57. package/dist/agents/channels/discord/guilds.d.ts.map +1 -0
  58. package/dist/agents/channels/discord/guilds.js +46 -0
  59. package/dist/agents/channels/discord/guilds.js.map +1 -0
  60. package/dist/agents/channels/discord/inbound-extras.d.ts +377 -0
  61. package/dist/agents/channels/discord/inbound-extras.d.ts.map +1 -0
  62. package/dist/agents/channels/discord/inbound-extras.js +589 -0
  63. package/dist/agents/channels/discord/inbound-extras.js.map +1 -0
  64. package/dist/agents/channels/discord/index.d.ts +21 -0
  65. package/dist/agents/channels/discord/index.d.ts.map +1 -0
  66. package/dist/agents/channels/discord/index.js +21 -0
  67. package/dist/agents/channels/discord/index.js.map +1 -0
  68. package/dist/agents/channels/discord/media.d.ts +85 -0
  69. package/dist/agents/channels/discord/media.d.ts.map +1 -0
  70. package/dist/agents/channels/discord/media.js +242 -0
  71. package/dist/agents/channels/discord/media.js.map +1 -0
  72. package/dist/agents/channels/discord/modal-registry.d.ts +89 -0
  73. package/dist/agents/channels/discord/modal-registry.d.ts.map +1 -0
  74. package/dist/agents/channels/discord/modal-registry.js +104 -0
  75. package/dist/agents/channels/discord/modal-registry.js.map +1 -0
  76. package/dist/agents/channels/discord/modals.d.ts +100 -0
  77. package/dist/agents/channels/discord/modals.d.ts.map +1 -0
  78. package/dist/agents/channels/discord/modals.js +124 -0
  79. package/dist/agents/channels/discord/modals.js.map +1 -0
  80. package/dist/agents/channels/discord/module.d.ts +15 -0
  81. package/dist/agents/channels/discord/module.d.ts.map +1 -0
  82. package/dist/agents/channels/discord/module.js +22 -0
  83. package/dist/agents/channels/discord/module.js.map +1 -0
  84. package/dist/agents/channels/discord/permission-audit.d.ts +43 -0
  85. package/dist/agents/channels/discord/permission-audit.d.ts.map +1 -0
  86. package/dist/agents/channels/discord/permission-audit.js +192 -0
  87. package/dist/agents/channels/discord/permission-audit.js.map +1 -0
  88. package/dist/agents/channels/discord/plugin.d.ts +89 -0
  89. package/dist/agents/channels/discord/plugin.d.ts.map +1 -0
  90. package/dist/agents/channels/discord/plugin.js +372 -0
  91. package/dist/agents/channels/discord/plugin.js.map +1 -0
  92. package/dist/agents/channels/discord/probe.d.ts +115 -0
  93. package/dist/agents/channels/discord/probe.d.ts.map +1 -0
  94. package/dist/agents/channels/discord/probe.js +193 -0
  95. package/dist/agents/channels/discord/probe.js.map +1 -0
  96. package/dist/agents/channels/discord/reasoning-lane.d.ts +42 -0
  97. package/dist/agents/channels/discord/reasoning-lane.d.ts.map +1 -0
  98. package/dist/agents/channels/discord/reasoning-lane.js +68 -0
  99. package/dist/agents/channels/discord/reasoning-lane.js.map +1 -0
  100. package/dist/agents/channels/discord/rest-actions.d.ts +346 -0
  101. package/dist/agents/channels/discord/rest-actions.d.ts.map +1 -0
  102. package/dist/agents/channels/discord/rest-actions.js +559 -0
  103. package/dist/agents/channels/discord/rest-actions.js.map +1 -0
  104. package/dist/agents/channels/discord/rest-components.d.ts +122 -0
  105. package/dist/agents/channels/discord/rest-components.d.ts.map +1 -0
  106. package/dist/agents/channels/discord/rest-components.js +243 -0
  107. package/dist/agents/channels/discord/rest-components.js.map +1 -0
  108. package/dist/agents/channels/discord/security-audit.d.ts +29 -0
  109. package/dist/agents/channels/discord/security-audit.d.ts.map +1 -0
  110. package/dist/agents/channels/discord/security-audit.js +94 -0
  111. package/dist/agents/channels/discord/security-audit.js.map +1 -0
  112. package/dist/agents/channels/discord/security-doctor.d.ts +43 -0
  113. package/dist/agents/channels/discord/security-doctor.d.ts.map +1 -0
  114. package/dist/agents/channels/discord/security-doctor.js +83 -0
  115. package/dist/agents/channels/discord/security-doctor.js.map +1 -0
  116. package/dist/agents/channels/discord/status-issues.d.ts +37 -0
  117. package/dist/agents/channels/discord/status-issues.d.ts.map +1 -0
  118. package/dist/agents/channels/discord/status-issues.js +66 -0
  119. package/dist/agents/channels/discord/status-issues.js.map +1 -0
  120. package/dist/agents/channels/discord/subagent-thread-binding-store.d.ts +57 -0
  121. package/dist/agents/channels/discord/subagent-thread-binding-store.d.ts.map +1 -0
  122. package/dist/agents/channels/discord/subagent-thread-binding-store.js +98 -0
  123. package/dist/agents/channels/discord/subagent-thread-binding-store.js.map +1 -0
  124. package/dist/agents/channels/discord/subagent-thread-binding.d.ts +95 -0
  125. package/dist/agents/channels/discord/subagent-thread-binding.d.ts.map +1 -0
  126. package/dist/agents/channels/discord/subagent-thread-binding.js +208 -0
  127. package/dist/agents/channels/discord/subagent-thread-binding.js.map +1 -0
  128. package/dist/agents/channels/discord/system-events.d.ts +31 -0
  129. package/dist/agents/channels/discord/system-events.d.ts.map +1 -0
  130. package/dist/agents/channels/discord/system-events.js +74 -0
  131. package/dist/agents/channels/discord/system-events.js.map +1 -0
  132. package/dist/agents/channels/general-callback.d.ts +12 -0
  133. package/dist/agents/channels/general-callback.d.ts.map +1 -1
  134. package/dist/agents/channels/general-callback.js +18 -0
  135. package/dist/agents/channels/general-callback.js.map +1 -1
  136. package/dist/agents/channels/inbound-pipeline.d.ts.map +1 -1
  137. package/dist/agents/channels/inbound-pipeline.js +70 -10
  138. package/dist/agents/channels/inbound-pipeline.js.map +1 -1
  139. package/dist/agents/channels/sdk.d.ts +2 -0
  140. package/dist/agents/channels/sdk.d.ts.map +1 -1
  141. package/dist/agents/channels/sdk.js +2 -0
  142. package/dist/agents/channels/sdk.js.map +1 -1
  143. package/dist/agents/extensions/modules/index.d.ts.map +1 -1
  144. package/dist/agents/extensions/modules/index.js +5 -0
  145. package/dist/agents/extensions/modules/index.js.map +1 -1
  146. package/dist/agents/extensions/types.d.ts +7 -0
  147. package/dist/agents/extensions/types.d.ts.map +1 -1
  148. package/dist/agents/extensions/types.js.map +1 -1
  149. package/dist/agents/subagent-announce-delivery.d.ts +10 -0
  150. package/dist/agents/subagent-announce-delivery.d.ts.map +1 -1
  151. package/dist/agents/subagent-announce-delivery.js +1 -0
  152. package/dist/agents/subagent-announce-delivery.js.map +1 -1
  153. package/dist/agents/subagent-completion-bridge.d.ts.map +1 -1
  154. package/dist/agents/subagent-completion-bridge.js +81 -0
  155. package/dist/agents/subagent-completion-bridge.js.map +1 -1
  156. package/dist/agents/subagent-spawn.d.ts.map +1 -1
  157. package/dist/agents/subagent-spawn.js +57 -4
  158. package/dist/agents/subagent-spawn.js.map +1 -1
  159. package/dist/agents/tools/cron-tool.d.ts.map +1 -1
  160. package/dist/agents/tools/cron-tool.js +4 -1
  161. package/dist/agents/tools/cron-tool.js.map +1 -1
  162. package/dist/agents/tools/discord-action-tool.d.ts +224 -0
  163. package/dist/agents/tools/discord-action-tool.d.ts.map +1 -0
  164. package/dist/agents/tools/discord-action-tool.js +848 -0
  165. package/dist/agents/tools/discord-action-tool.js.map +1 -0
  166. package/dist/agents/tools/registry.d.ts.map +1 -1
  167. package/dist/agents/tools/registry.js +21 -0
  168. package/dist/agents/tools/registry.js.map +1 -1
  169. package/dist/agents/tools/sessions/index.d.ts +8 -0
  170. package/dist/agents/tools/sessions/index.d.ts.map +1 -1
  171. package/dist/agents/tools/sessions/index.js +15 -3
  172. package/dist/agents/tools/sessions/index.js.map +1 -1
  173. package/dist/buildstamp.json +1 -1
  174. package/dist/cli/commands/channels.d.ts +2 -0
  175. package/dist/cli/commands/channels.d.ts.map +1 -1
  176. package/dist/cli/commands/channels.js +58 -1
  177. package/dist/cli/commands/channels.js.map +1 -1
  178. package/dist/core/auth-bridge.d.ts +1 -0
  179. package/dist/core/auth-bridge.d.ts.map +1 -1
  180. package/dist/core/auth-bridge.js +46 -1
  181. package/dist/core/auth-bridge.js.map +1 -1
  182. package/dist/core/server.d.ts.map +1 -1
  183. package/dist/core/server.js +18 -2
  184. package/dist/core/server.js.map +1 -1
  185. package/dist/cron/isolated-agent/run-executor.d.ts +11 -0
  186. package/dist/cron/isolated-agent/run-executor.d.ts.map +1 -1
  187. package/dist/cron/isolated-agent/run-executor.js +20 -4
  188. package/dist/cron/isolated-agent/run-executor.js.map +1 -1
  189. package/dist/cron/types.d.ts +8 -0
  190. package/dist/cron/types.d.ts.map +1 -1
  191. package/dist/system-prompt/assembler.d.ts.map +1 -1
  192. package/dist/system-prompt/assembler.js +4 -2
  193. package/dist/system-prompt/assembler.js.map +1 -1
  194. package/package.json +2 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/agents/channels/discord/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Discord inline-approval authorization.
3
+ *
4
+ * When an approval prompt is rendered as buttons, ANY member who can see the
5
+ * message could press a button. Brigade's central inbound pipeline already runs
6
+ * the access-control gate before a button press reaches the approval-callback
7
+ * path, so only an admitted (allow-listed / owner) peer gets here at all — but a
8
+ * SHARED Discord guild channel is the edge case: in a channel the bot is in, an
9
+ * admitted member's button press should still be allowed only when that presser
10
+ * is an approved approver, not merely present in the room. Discord's
11
+ * multi-member guilds make this gate more load-bearing than a 1:1 DM.
12
+ *
13
+ * This predicate is the channel's `approvalCapability.authorizeApprover`. It is
14
+ * invoked CENTRALLY by `tryConsumeChannelApprovalCallback` with the presser's
15
+ * `senderId` (the Discord user id, a snowflake); returning `{ authorized: false,
16
+ * reason }` refuses the press without consuming the operator's pending approval
17
+ * (so the real operator can still answer). Policy:
18
+ *
19
+ * - When the channel has an explicit allow-from list configured (the approved
20
+ * senders), only those ids may approve.
21
+ * - When NO allow-from list is configured, defer to the access gate that
22
+ * already admitted the inbound and authorize the press (matches the text-
23
+ * reply path, which has no extra approver gate).
24
+ *
25
+ * Pure + deterministic over its `cfg` + `senderId` inputs — no I/O. Discord
26
+ * mirror of `slack/approval-authorize.ts`.
27
+ */
28
+ import type { BrigadeConfig } from "../../../config/io.js";
29
+ /**
30
+ * Resolve whether `senderId` is allowed to answer a Discord inline approval.
31
+ * Returns `{ authorized: true }` when no explicit allow-from gate applies (the
32
+ * central access gate already admitted the inbound), or when the presser is on
33
+ * the configured allow-from list. Otherwise refuses with a reason.
34
+ */
35
+ export declare function resolveDiscordApprover(args: {
36
+ cfg: BrigadeConfig;
37
+ senderId?: string;
38
+ accountId?: string;
39
+ }): {
40
+ authorized: boolean;
41
+ reason?: string;
42
+ };
43
+ //# sourceMappingURL=approval-authorize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-authorize.d.ts","sourceRoot":"","sources":["../../../../src/agents/channels/discord/approval-authorize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AA0B3D;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC5C,GAAG,EAAE,aAAa,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAU3C"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Discord inline-approval authorization.
3
+ *
4
+ * When an approval prompt is rendered as buttons, ANY member who can see the
5
+ * message could press a button. Brigade's central inbound pipeline already runs
6
+ * the access-control gate before a button press reaches the approval-callback
7
+ * path, so only an admitted (allow-listed / owner) peer gets here at all — but a
8
+ * SHARED Discord guild channel is the edge case: in a channel the bot is in, an
9
+ * admitted member's button press should still be allowed only when that presser
10
+ * is an approved approver, not merely present in the room. Discord's
11
+ * multi-member guilds make this gate more load-bearing than a 1:1 DM.
12
+ *
13
+ * This predicate is the channel's `approvalCapability.authorizeApprover`. It is
14
+ * invoked CENTRALLY by `tryConsumeChannelApprovalCallback` with the presser's
15
+ * `senderId` (the Discord user id, a snowflake); returning `{ authorized: false,
16
+ * reason }` refuses the press without consuming the operator's pending approval
17
+ * (so the real operator can still answer). Policy:
18
+ *
19
+ * - When the channel has an explicit allow-from list configured (the approved
20
+ * senders), only those ids may approve.
21
+ * - When NO allow-from list is configured, defer to the access gate that
22
+ * already admitted the inbound and authorize the press (matches the text-
23
+ * reply path, which has no extra approver gate).
24
+ *
25
+ * Pure + deterministic over its `cfg` + `senderId` inputs — no I/O. Discord
26
+ * mirror of `slack/approval-authorize.ts`.
27
+ */
28
+ /** Read the channel's configured allow-from sender ids (string-normalized). */
29
+ function configuredAllowFrom(cfg, accountId) {
30
+ const channels = cfg.channels;
31
+ const slot = channels?.discord;
32
+ if (!slot)
33
+ return [];
34
+ const ids = [];
35
+ const push = (list) => {
36
+ for (const v of list ?? []) {
37
+ const s = String(v).trim();
38
+ if (s)
39
+ ids.push(s);
40
+ }
41
+ };
42
+ push(slot.allowFrom);
43
+ // Per-account allow-from (multi-account shape) when an accountId is supplied.
44
+ if (accountId && Array.isArray(slot.accounts)) {
45
+ for (const entry of slot.accounts) {
46
+ if (entry && typeof entry.id === "string" && entry.id.trim() === accountId.trim())
47
+ push(entry.allowFrom);
48
+ }
49
+ }
50
+ return ids;
51
+ }
52
+ /**
53
+ * Resolve whether `senderId` is allowed to answer a Discord inline approval.
54
+ * Returns `{ authorized: true }` when no explicit allow-from gate applies (the
55
+ * central access gate already admitted the inbound), or when the presser is on
56
+ * the configured allow-from list. Otherwise refuses with a reason.
57
+ */
58
+ export function resolveDiscordApprover(args) {
59
+ const allow = configuredAllowFrom(args.cfg, args.accountId);
60
+ // No explicit allow list → defer to the access gate that already ran.
61
+ if (allow.length === 0)
62
+ return { authorized: true };
63
+ const sender = (args.senderId ?? "").trim();
64
+ if (sender && allow.includes(sender))
65
+ return { authorized: true };
66
+ return {
67
+ authorized: false,
68
+ reason: "Only an approved sender can answer that approval.",
69
+ };
70
+ }
71
+ //# sourceMappingURL=approval-authorize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-authorize.js","sourceRoot":"","sources":["../../../../src/agents/channels/discord/approval-authorize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,+EAA+E;AAC/E,SAAS,mBAAmB,CAAC,GAAkB,EAAE,SAAkB;IAClE,MAAM,QAAQ,GAAI,GAA8C,CAAC,QAAQ,CAAC;IAC1E,MAAM,IAAI,GAAG,QAAQ,EAAE,OAEX,CAAC;IACb,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,CAAC,IAA6B,EAAE,EAAE;QAC9C,KAAK,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACF,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrB,8EAA8E;IAC9E,IAAI,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,SAAS,CAAC,IAAI,EAAE;gBAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1G,CAAC;IACF,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAItC;IACA,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5D,sEAAsE;IACtE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACpD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5C,IAAI,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAClE,OAAO;QACN,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,mDAAmD;KAC3D,CAAC;AACH,CAAC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Discord message-component rendering for native approval prompts.
3
+ *
4
+ * When a channel-routed turn raises an exec/plugin approval AND the Discord
5
+ * adapter has opted into `approvalCapability.sendApprovalPrompt`, the central
6
+ * approval-router asks this channel to render the question as native BUTTONS
7
+ * instead of the default "reply yes/no" text card. The button payloads are
8
+ * produced by the CENTRAL codec (`buildApprovalCallbackButtons`) so the press
9
+ * comes back as an `InboundMessage.callbackQuery` the central
10
+ * `tryConsumeChannelApprovalCallback` decodes + resolves — this file only maps
11
+ * the codec's `{ label, data }` specs onto Discord's component-row shape (via
12
+ * `components.ts`) and assembles the prompt text.
13
+ *
14
+ * SAFETY: every button `custom_id` here is the codec's output — versioned,
15
+ * base64url + printable-ASCII, already proven `<= 64` UTF-8 bytes by
16
+ * `encodeApprovalCallback` (and well under Discord's 100-char custom_id cap).
17
+ * This module never mints its own payloads.
18
+ *
19
+ * Discord mirror of `slack/approval-native.ts`.
20
+ */
21
+ import { type DiscordActionRow } from "./components.js";
22
+ /** The Discord message payload an approval prompt sends: prompt `text` + button `rows`. */
23
+ export interface DiscordApprovalMessage {
24
+ /** Prompt body rendered above the buttons. */
25
+ text: string;
26
+ /** The component rows (a row of up to 5 buttons; up to 5 rows). */
27
+ rows: DiscordActionRow[];
28
+ }
29
+ /**
30
+ * Build the component approval message for an approval prompt from the central
31
+ * codec. Returns `null` when fewer than two byte-safe buttons could be minted (a
32
+ * pathologically long approval id) — the caller then falls back to the text
33
+ * prompt rather than ship a half-rendered prompt.
34
+ *
35
+ * `allowAlways: false` drops the "Allow always" button (approvals where
36
+ * persisting an allowlist entry doesn't apply).
37
+ */
38
+ export declare function buildDiscordApprovalMessage(args: {
39
+ approvalId: string;
40
+ command: string;
41
+ approvalKind: "exec" | "plugin";
42
+ toolName?: string;
43
+ allowAlways?: boolean;
44
+ }): DiscordApprovalMessage | null;
45
+ /**
46
+ * Compose the operator-facing approval question text rendered ABOVE the buttons.
47
+ * Kept short + control-char-scrubbed; the buttons carry the action, so the text
48
+ * only needs the command preview + a one-line ask. The 🦁 mark is the Brigade
49
+ * brand-stamp so the operator recognises this as a Brigade prompt. The command
50
+ * preview is wrapped in a Discord inline code span (single backticks) so it
51
+ * renders verbatim.
52
+ */
53
+ export declare function buildDiscordApprovalText(args: {
54
+ command: string;
55
+ approvalKind: "exec" | "plugin";
56
+ toolName?: string;
57
+ agentId?: string;
58
+ }): string;
59
+ /**
60
+ * Parse a pressed button's `custom_id` into the pending-approval id + decision,
61
+ * via the CENTRAL codec. Returns `null` when the press wasn't an approval button
62
+ * (a general button, or a foreign id) so the caller can fall through.
63
+ */
64
+ export declare function parseDiscordApprovalAction(customId: string | undefined): {
65
+ approvalId: string;
66
+ decision: "allow-once" | "allow-always" | "deny";
67
+ } | null;
68
+ //# sourceMappingURL=approval-native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-native.d.ts","sourceRoot":"","sources":["../../../../src/agents/channels/discord/approval-native.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAA4B,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKlF,2FAA2F;AAC3F,MAAM,WAAW,sBAAsB;IACtC,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,IAAI,EAAE,gBAAgB,EAAE,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,QAAQ,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB,GAAG,sBAAsB,GAAG,IAAI,CAchC;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,QAAQ,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAWT;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACzC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC1B;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,YAAY,GAAG,cAAc,GAAG,MAAM,CAAA;CAAE,GAAG,IAAI,CAGjF"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Discord message-component rendering for native approval prompts.
3
+ *
4
+ * When a channel-routed turn raises an exec/plugin approval AND the Discord
5
+ * adapter has opted into `approvalCapability.sendApprovalPrompt`, the central
6
+ * approval-router asks this channel to render the question as native BUTTONS
7
+ * instead of the default "reply yes/no" text card. The button payloads are
8
+ * produced by the CENTRAL codec (`buildApprovalCallbackButtons`) so the press
9
+ * comes back as an `InboundMessage.callbackQuery` the central
10
+ * `tryConsumeChannelApprovalCallback` decodes + resolves — this file only maps
11
+ * the codec's `{ label, data }` specs onto Discord's component-row shape (via
12
+ * `components.ts`) and assembles the prompt text.
13
+ *
14
+ * SAFETY: every button `custom_id` here is the codec's output — versioned,
15
+ * base64url + printable-ASCII, already proven `<= 64` UTF-8 bytes by
16
+ * `encodeApprovalCallback` (and well under Discord's 100-char custom_id cap).
17
+ * This module never mints its own payloads.
18
+ *
19
+ * Discord mirror of `slack/approval-native.ts`.
20
+ */
21
+ import { buildApprovalCallbackButtons, decodeApprovalCallback } from "../sdk.js";
22
+ import { buildDiscordApprovalRows } from "./components.js";
23
+ /** C0/C1 control-character class (incl. NUL) — never a raw control byte in source. */
24
+ const CONTROL_CHARS_RE = /[\x00-\x1f\x7f-\x9f]/g;
25
+ /**
26
+ * Build the component approval message for an approval prompt from the central
27
+ * codec. Returns `null` when fewer than two byte-safe buttons could be minted (a
28
+ * pathologically long approval id) — the caller then falls back to the text
29
+ * prompt rather than ship a half-rendered prompt.
30
+ *
31
+ * `allowAlways: false` drops the "Allow always" button (approvals where
32
+ * persisting an allowlist entry doesn't apply).
33
+ */
34
+ export function buildDiscordApprovalMessage(args) {
35
+ const specs = buildApprovalCallbackButtons({
36
+ approvalId: args.approvalId,
37
+ ...(args.allowAlways === false ? { allowAlways: false } : {}),
38
+ });
39
+ if (specs.length < 2)
40
+ return null; // not enough buttons → caller uses text prompt
41
+ const rows = buildDiscordApprovalRows(specs);
42
+ if (rows.length === 0)
43
+ return null;
44
+ const text = buildDiscordApprovalText({
45
+ command: args.command,
46
+ approvalKind: args.approvalKind,
47
+ ...(args.toolName !== undefined ? { toolName: args.toolName } : {}),
48
+ });
49
+ return { text, rows };
50
+ }
51
+ /**
52
+ * Compose the operator-facing approval question text rendered ABOVE the buttons.
53
+ * Kept short + control-char-scrubbed; the buttons carry the action, so the text
54
+ * only needs the command preview + a one-line ask. The 🦁 mark is the Brigade
55
+ * brand-stamp so the operator recognises this as a Brigade prompt. The command
56
+ * preview is wrapped in a Discord inline code span (single backticks) so it
57
+ * renders verbatim.
58
+ */
59
+ export function buildDiscordApprovalText(args) {
60
+ const flat = args.command
61
+ .replace(/[\r\n]+/g, " ")
62
+ // oxlint-disable-next-line no-control-regex
63
+ .replace(CONTROL_CHARS_RE, " ")
64
+ .replace(/\s+/g, " ")
65
+ .trim();
66
+ const preview = flat.length <= 180 ? flat : `${flat.slice(0, 177)}…`;
67
+ const what = args.approvalKind === "plugin" ? "run a plugin action" : "run a shell command";
68
+ const lines = [`🦁 Brigade wants to ${what}:`, `\`${preview}\``, "", "Choose below — times out in 5 minutes."];
69
+ return lines.join("\n");
70
+ }
71
+ /**
72
+ * Parse a pressed button's `custom_id` into the pending-approval id + decision,
73
+ * via the CENTRAL codec. Returns `null` when the press wasn't an approval button
74
+ * (a general button, or a foreign id) so the caller can fall through.
75
+ */
76
+ export function parseDiscordApprovalAction(customId) {
77
+ if (!customId)
78
+ return null;
79
+ return decodeApprovalCallback(customId);
80
+ }
81
+ //# sourceMappingURL=approval-native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-native.js","sourceRoot":"","sources":["../../../../src/agents/channels/discord/approval-native.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAyB,MAAM,iBAAiB,CAAC;AAElF,sFAAsF;AACtF,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAUjD;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAM3C;IACA,MAAM,KAAK,GAAG,4BAA4B,CAAC;QAC1C,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7D,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,+CAA+C;IAClF,MAAM,IAAI,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,IAAI,GAAG,wBAAwB,CAAC;QACrC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnE,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACvB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAKxC;IACA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;SACvB,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;QACzB,4CAA4C;SAC3C,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;IACT,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;IACrE,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,qBAAqB,CAAC;IAC5F,MAAM,KAAK,GAAG,CAAC,uBAAuB,IAAI,GAAG,EAAE,KAAK,OAAO,IAAI,EAAE,EAAE,EAAE,wCAAwC,CAAC,CAAC;IAC/G,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACzC,QAA4B;IAE5B,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Discord native command menu — map Brigade's central channel commands onto the
3
+ * application-command payload that Discord's REST `PUT /applications/{id}/commands`
4
+ * (or the per-guild variant) registers, so the operator sees `/help`, `/status`,
5
+ * … as native Discord slash commands.
6
+ *
7
+ * Brigade owns the command set centrally (`buildBundledCommands` → `/help`,
8
+ * `/status`, `/allowlist`, `/agent`, `/agents`, `/whoami`, `/org`, plus any
9
+ * module-registered channel commands). Discord — like Telegram's `setMyCommands`
10
+ * but UNLIKE Slack (whose slash commands are configured by hand in the app UI) —
11
+ * accepts a programmatic registration, so on connect the connection PUTs this
12
+ * manifest. (Discord slash commands carry no positional args by default, so the
13
+ * agent receives `/status` etc. as a bare command; an inbound interaction is
14
+ * normalized back into a `/command` text turn.)
15
+ *
16
+ * Discord's constraints (enforced here so a malformed command never makes the
17
+ * whole `PUT` reject):
18
+ * - command name: 1–32 chars, lowercase, `[a-z0-9_-]` only (leading `/` stripped).
19
+ * - description: 1–100 chars (clamped; a non-empty fallback is always emitted
20
+ * since Discord rejects an empty description).
21
+ * - at most 100 global commands.
22
+ * - CHAT_INPUT command type = 1.
23
+ *
24
+ * Pure / deterministic — no I/O. Output command names are printable ASCII
25
+ * (`[a-z0-9_-]`), so no NUL / control byte can appear.
26
+ */
27
+ import type { ChannelCommand } from "../sdk.js";
28
+ /** A Discord application-command (CHAT_INPUT) registration entry. */
29
+ export interface DiscordApplicationCommand {
30
+ /** Command WITHOUT the leading slash, e.g. `status`. */
31
+ name: string;
32
+ /** Short description shown in the Discord command hint (1–100 chars). */
33
+ description: string;
34
+ /** CHAT_INPUT command type (1). */
35
+ type: 1;
36
+ }
37
+ /**
38
+ * Normalize a command word to Discord's `[a-z0-9_-]{1,32}` shape, or null if
39
+ * unusable. Strips a leading `/`, lowercases, and drops disallowed chars.
40
+ */
41
+ export declare function normalizeDiscordCommandName(raw: string): string | null;
42
+ /**
43
+ * Build the Discord application-command manifest from Brigade's central channel
44
+ * commands. De-dupes by normalized name (first wins), drops unusable names, and
45
+ * caps at Discord's 100-command ceiling. Returns `[]` when nothing maps (the
46
+ * connection then skips the REST `PUT` entirely).
47
+ */
48
+ export declare function buildDiscordCommandManifest(commands: ReadonlyArray<ChannelCommand>): DiscordApplicationCommand[];
49
+ //# sourceMappingURL=command-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-menu.d.ts","sourceRoot":"","sources":["../../../../src/agents/channels/discord/command-menu.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD,qEAAqE;AACrE,MAAM,WAAW,yBAAyB;IACzC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,IAAI,EAAE,CAAC,CAAC;CACR;AAWD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKtE;AAUD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,aAAa,CAAC,cAAc,CAAC,GAAG,yBAAyB,EAAE,CAWhH"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Discord native command menu — map Brigade's central channel commands onto the
3
+ * application-command payload that Discord's REST `PUT /applications/{id}/commands`
4
+ * (or the per-guild variant) registers, so the operator sees `/help`, `/status`,
5
+ * … as native Discord slash commands.
6
+ *
7
+ * Brigade owns the command set centrally (`buildBundledCommands` → `/help`,
8
+ * `/status`, `/allowlist`, `/agent`, `/agents`, `/whoami`, `/org`, plus any
9
+ * module-registered channel commands). Discord — like Telegram's `setMyCommands`
10
+ * but UNLIKE Slack (whose slash commands are configured by hand in the app UI) —
11
+ * accepts a programmatic registration, so on connect the connection PUTs this
12
+ * manifest. (Discord slash commands carry no positional args by default, so the
13
+ * agent receives `/status` etc. as a bare command; an inbound interaction is
14
+ * normalized back into a `/command` text turn.)
15
+ *
16
+ * Discord's constraints (enforced here so a malformed command never makes the
17
+ * whole `PUT` reject):
18
+ * - command name: 1–32 chars, lowercase, `[a-z0-9_-]` only (leading `/` stripped).
19
+ * - description: 1–100 chars (clamped; a non-empty fallback is always emitted
20
+ * since Discord rejects an empty description).
21
+ * - at most 100 global commands.
22
+ * - CHAT_INPUT command type = 1.
23
+ *
24
+ * Pure / deterministic — no I/O. Output command names are printable ASCII
25
+ * (`[a-z0-9_-]`), so no NUL / control byte can appear.
26
+ */
27
+ /** Discord application-command limits. */
28
+ const MAX_COMMANDS = 100;
29
+ const MAX_NAME_LEN = 32;
30
+ const MAX_DESC_LEN = 100;
31
+ /** Discord allows lowercase `[a-z0-9_-]` (1–32) in a CHAT_INPUT command name. */
32
+ const COMMAND_NAME_RE = /^[a-z0-9_-]{1,32}$/;
33
+ /** CHAT_INPUT application-command type. */
34
+ const CHAT_INPUT = 1;
35
+ /**
36
+ * Normalize a command word to Discord's `[a-z0-9_-]{1,32}` shape, or null if
37
+ * unusable. Strips a leading `/`, lowercases, and drops disallowed chars.
38
+ */
39
+ export function normalizeDiscordCommandName(raw) {
40
+ const stripped = raw.trim().replace(/^\/+/, "").toLowerCase();
41
+ const cleaned = stripped.replace(/[^a-z0-9_-]/g, "").slice(0, MAX_NAME_LEN);
42
+ if (!cleaned || !COMMAND_NAME_RE.test(cleaned))
43
+ return null;
44
+ return cleaned;
45
+ }
46
+ /** Clamp + flatten a description to a single printable line within Discord's cap (never empty). */
47
+ function normalizeDescription(desc, fallback) {
48
+ const raw = (desc ?? "").replace(/\s+/g, " ").trim() || fallback;
49
+ const clamped = raw.length > MAX_DESC_LEN ? `${raw.slice(0, MAX_DESC_LEN - 1)}…` : raw;
50
+ // Discord rejects an empty description — guarantee at least the fallback name.
51
+ return clamped || fallback;
52
+ }
53
+ /**
54
+ * Build the Discord application-command manifest from Brigade's central channel
55
+ * commands. De-dupes by normalized name (first wins), drops unusable names, and
56
+ * caps at Discord's 100-command ceiling. Returns `[]` when nothing maps (the
57
+ * connection then skips the REST `PUT` entirely).
58
+ */
59
+ export function buildDiscordCommandManifest(commands) {
60
+ const out = [];
61
+ const seen = new Set();
62
+ for (const cmd of commands) {
63
+ if (out.length >= MAX_COMMANDS)
64
+ break;
65
+ const name = normalizeDiscordCommandName(cmd.name);
66
+ if (!name || seen.has(name))
67
+ continue;
68
+ seen.add(name);
69
+ out.push({ name, description: normalizeDescription(cmd.description, name), type: CHAT_INPUT });
70
+ }
71
+ return out;
72
+ }
73
+ //# sourceMappingURL=command-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-menu.js","sourceRoot":"","sources":["../../../../src/agents/channels/discord/command-menu.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAcH,0CAA0C;AAC1C,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,iFAAiF;AACjF,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAC7C,2CAA2C;AAC3C,MAAM,UAAU,GAAG,CAAU,CAAC;AAE9B;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAW;IACtD,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9D,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC5E,IAAI,CAAC,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5D,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,mGAAmG;AACnG,SAAS,oBAAoB,CAAC,IAAwB,EAAE,QAAgB;IACvE,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC;IACjE,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACvF,+EAA+E;IAC/E,OAAO,OAAO,IAAI,QAAQ,CAAC;AAC5B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,QAAuC;IAClF,MAAM,GAAG,GAAgC,EAAE,CAAC;IAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,MAAM,IAAI,YAAY;YAAE,MAAM;QACtC,MAAM,IAAI,GAAG,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QACtC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,oBAAoB,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Discord Components-V2 layout-block specs (Fix 3c).
3
+ *
4
+ * Components V2 lets a message carry rich layout — containers, sections,
5
+ * separators, media galleries, files, and free-standing text — instead of a
6
+ * plain `content` string + button rows. A V2 message MUST set the
7
+ * `IsComponentsV2` flag and CANNOT carry plain `content`; all text moves into
8
+ * `TextDisplay` blocks. Link buttons (a button with a `url` + no custom_id) are
9
+ * the one button kind that fits naturally in a V2 layout.
10
+ *
11
+ * This module mirrors `components.ts`: it emits PLAIN serializable specs (a
12
+ * `DiscordBlockSpec` list) and never imports discord.js, so it stays pure +
13
+ * unit-testable. The connection turns each spec into the matching discord.js V2
14
+ * builder at send time (`ContainerBuilder` / `SectionBuilder` / `SeparatorBuilder`
15
+ * / `TextDisplayBuilder` / `MediaGalleryBuilder` / `FileBuilder`).
16
+ *
17
+ * Pure / deterministic — no I/O, no globals.
18
+ */
19
+ import { type DiscordButtonStyleValue } from "./components.js";
20
+ /** `MessageFlags.IsComponentsV2` (1 << 15). A V2 message sets this + drops plain content. */
21
+ export declare const DISCORD_FLAG_IS_COMPONENTS_V2: number;
22
+ /** discord.js `ButtonStyle.Link` value (a URL button, no custom_id). */
23
+ export declare const DISCORD_BUTTON_STYLE_LINK = 5;
24
+ /** A link button — opens a URL; carries NO custom_id, so it never routes a turn. */
25
+ export interface DiscordLinkButtonSpec {
26
+ /** Button label (≤ 80 chars). */
27
+ label: string;
28
+ /** Destination URL. */
29
+ url: string;
30
+ }
31
+ /** An interactive button inside a V2 actions block (general-prefixed customId). */
32
+ export interface DiscordV2ButtonSpec {
33
+ label: string;
34
+ /** Already general-prefixed + sanitized customId (a press routes a turn). */
35
+ customId: string;
36
+ style?: DiscordButtonStyleValue;
37
+ }
38
+ /** A media-gallery item (an image/video URL + optional alt + spoiler). */
39
+ export interface DiscordMediaItem {
40
+ url: string;
41
+ description?: string;
42
+ spoiler?: boolean;
43
+ }
44
+ /**
45
+ * A single V2 layout block. Discriminated by `type`. Sections may carry an
46
+ * optional accessory (a thumbnail URL or a button). `actions` carries link
47
+ * and/or interactive buttons.
48
+ */
49
+ export type DiscordBlockSpec = {
50
+ type: "text";
51
+ text: string;
52
+ } | {
53
+ type: "section";
54
+ /** One to three text lines rendered in the section body. */
55
+ texts: string[];
56
+ accessory?: {
57
+ kind: "thumbnail";
58
+ url: string;
59
+ } | {
60
+ kind: "button";
61
+ button: DiscordLinkButtonSpec | DiscordV2ButtonSpec;
62
+ };
63
+ } | {
64
+ type: "separator";
65
+ divider?: boolean;
66
+ spacing?: "small" | "large";
67
+ } | {
68
+ type: "actions";
69
+ buttons: Array<DiscordLinkButtonSpec | DiscordV2ButtonSpec>;
70
+ } | {
71
+ type: "media-gallery";
72
+ items: DiscordMediaItem[];
73
+ } | {
74
+ type: "file";
75
+ url: `attachment://${string}`;
76
+ spoiler?: boolean;
77
+ };
78
+ /**
79
+ * A serializable Components-V2 message spec — a `container` (the top-level V2
80
+ * wrapper) holding ordered blocks. The connection wraps it in a single
81
+ * `ContainerBuilder` and sets the V2 flag. `accentColor` tints the container
82
+ * stripe (a Discord color int).
83
+ */
84
+ export interface DiscordV2MessageSpec {
85
+ /** Discriminator marking this row as a V2 container (vs a button/select row). */
86
+ readonly row: "v2";
87
+ blocks: DiscordBlockSpec[];
88
+ accentColor?: number;
89
+ }
90
+ /** True when a `buildComponentRows` entry is a V2 container marker. */
91
+ export declare function isDiscordV2MessageSpec(row: unknown): row is DiscordV2MessageSpec;
92
+ /** True when a button spec is a LINK button (URL, no custom_id). */
93
+ export declare function isDiscordLinkButton(b: DiscordLinkButtonSpec | DiscordV2ButtonSpec): b is DiscordLinkButtonSpec;
94
+ /** The attachment-ref prefix a `file` block expects (Discord requires it). */
95
+ export declare const DISCORD_ATTACHMENT_REF_PREFIX = "attachment://";
96
+ /**
97
+ * Shape a high-level V2 message into a serializable container spec, or `null`
98
+ * when nothing renderable remains. Defensive caps mirror Discord's limits
99
+ * (section ≤ 3 texts, button label ≤ 80). A `file` block whose url isn't an
100
+ * `attachment://` ref is dropped (Discord rejects external file refs). Returns
101
+ * `null` when the resulting container would be empty so the caller can fall back
102
+ * to a plain text send.
103
+ */
104
+ export declare function buildDiscordV2Message(spec: {
105
+ blocks: DiscordBlockSpec[];
106
+ accentColor?: number;
107
+ }): DiscordV2MessageSpec | null;
108
+ //# sourceMappingURL=component-blocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-blocks.d.ts","sourceRoot":"","sources":["../../../../src/agents/channels/discord/component-blocks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAwB,KAAK,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAErF,6FAA6F;AAC7F,eAAO,MAAM,6BAA6B,QAAU,CAAC;AAErD,wEAAwE;AACxE,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,oFAAoF;AACpF,MAAM,WAAW,qBAAqB;IACrC,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,mFAAmF;AACnF,MAAM,WAAW,mBAAmB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,uBAAuB,CAAC;CAChC;AAED,0EAA0E;AAC1E,MAAM,WAAW,gBAAgB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GACzB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IACA,IAAI,EAAE,SAAS,CAAC;IAChB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,qBAAqB,GAAG,mBAAmB,CAAA;KAAE,CAAC;CACxH,GACD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC,qBAAqB,GAAG,mBAAmB,CAAC,CAAA;CAAE,GAChF;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,gBAAgB,EAAE,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,gBAAgB,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACpC,iFAAiF;IACjF,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,uEAAuE;AACvE,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,oBAAoB,CAEhF;AAED,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,qBAAqB,GAAG,mBAAmB,GAAG,CAAC,IAAI,qBAAqB,CAE9G;AAED,8EAA8E;AAC9E,eAAO,MAAM,6BAA6B,kBAAkB,CAAC;AAK7D;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,oBAAoB,GAAG,IAAI,CAyD7H"}