@animalabs/agent-framework 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +233 -0
  3. package/dist/src/agent.d.ts +130 -0
  4. package/dist/src/agent.d.ts.map +1 -0
  5. package/dist/src/agent.js +406 -0
  6. package/dist/src/agent.js.map +1 -0
  7. package/dist/src/api/mcp-server.d.ts +37 -0
  8. package/dist/src/api/mcp-server.d.ts.map +1 -0
  9. package/dist/src/api/mcp-server.js +598 -0
  10. package/dist/src/api/mcp-server.js.map +1 -0
  11. package/dist/src/api/server.d.ts +83 -0
  12. package/dist/src/api/server.d.ts.map +1 -0
  13. package/dist/src/api/server.js +785 -0
  14. package/dist/src/api/server.js.map +1 -0
  15. package/dist/src/api/types.d.ts +395 -0
  16. package/dist/src/api/types.d.ts.map +1 -0
  17. package/dist/src/api/types.js +5 -0
  18. package/dist/src/api/types.js.map +1 -0
  19. package/dist/src/framework.d.ts +309 -0
  20. package/dist/src/framework.d.ts.map +1 -0
  21. package/dist/src/framework.js +2309 -0
  22. package/dist/src/framework.js.map +1 -0
  23. package/dist/src/gate/event-gate.d.ts +75 -0
  24. package/dist/src/gate/event-gate.d.ts.map +1 -0
  25. package/dist/src/gate/event-gate.js +503 -0
  26. package/dist/src/gate/event-gate.js.map +1 -0
  27. package/dist/src/gate/index.d.ts +3 -0
  28. package/dist/src/gate/index.d.ts.map +1 -0
  29. package/dist/src/gate/index.js +2 -0
  30. package/dist/src/gate/index.js.map +1 -0
  31. package/dist/src/gate/types.d.ts +82 -0
  32. package/dist/src/gate/types.d.ts.map +1 -0
  33. package/dist/src/gate/types.js +9 -0
  34. package/dist/src/gate/types.js.map +1 -0
  35. package/dist/src/index.d.ts +17 -0
  36. package/dist/src/index.d.ts.map +1 -0
  37. package/dist/src/index.js +18 -0
  38. package/dist/src/index.js.map +1 -0
  39. package/dist/src/mcpl/channel-registry.d.ts +141 -0
  40. package/dist/src/mcpl/channel-registry.d.ts.map +1 -0
  41. package/dist/src/mcpl/channel-registry.js +647 -0
  42. package/dist/src/mcpl/channel-registry.js.map +1 -0
  43. package/dist/src/mcpl/checkpoint-manager.d.ts +79 -0
  44. package/dist/src/mcpl/checkpoint-manager.d.ts.map +1 -0
  45. package/dist/src/mcpl/checkpoint-manager.js +430 -0
  46. package/dist/src/mcpl/checkpoint-manager.js.map +1 -0
  47. package/dist/src/mcpl/errors.d.ts +52 -0
  48. package/dist/src/mcpl/errors.d.ts.map +1 -0
  49. package/dist/src/mcpl/errors.js +93 -0
  50. package/dist/src/mcpl/errors.js.map +1 -0
  51. package/dist/src/mcpl/feature-set-manager.d.ts +91 -0
  52. package/dist/src/mcpl/feature-set-manager.d.ts.map +1 -0
  53. package/dist/src/mcpl/feature-set-manager.js +250 -0
  54. package/dist/src/mcpl/feature-set-manager.js.map +1 -0
  55. package/dist/src/mcpl/hook-orchestrator.d.ts +51 -0
  56. package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -0
  57. package/dist/src/mcpl/hook-orchestrator.js +217 -0
  58. package/dist/src/mcpl/hook-orchestrator.js.map +1 -0
  59. package/dist/src/mcpl/index.d.ts +14 -0
  60. package/dist/src/mcpl/index.d.ts.map +1 -0
  61. package/dist/src/mcpl/index.js +21 -0
  62. package/dist/src/mcpl/index.js.map +1 -0
  63. package/dist/src/mcpl/inference-router.d.ts +67 -0
  64. package/dist/src/mcpl/inference-router.d.ts.map +1 -0
  65. package/dist/src/mcpl/inference-router.js +249 -0
  66. package/dist/src/mcpl/inference-router.js.map +1 -0
  67. package/dist/src/mcpl/push-handler.d.ts +60 -0
  68. package/dist/src/mcpl/push-handler.d.ts.map +1 -0
  69. package/dist/src/mcpl/push-handler.js +162 -0
  70. package/dist/src/mcpl/push-handler.js.map +1 -0
  71. package/dist/src/mcpl/scope-manager.d.ts +76 -0
  72. package/dist/src/mcpl/scope-manager.d.ts.map +1 -0
  73. package/dist/src/mcpl/scope-manager.js +213 -0
  74. package/dist/src/mcpl/scope-manager.js.map +1 -0
  75. package/dist/src/mcpl/server-connection.d.ts +174 -0
  76. package/dist/src/mcpl/server-connection.d.ts.map +1 -0
  77. package/dist/src/mcpl/server-connection.js +559 -0
  78. package/dist/src/mcpl/server-connection.js.map +1 -0
  79. package/dist/src/mcpl/server-registry.d.ts +63 -0
  80. package/dist/src/mcpl/server-registry.d.ts.map +1 -0
  81. package/dist/src/mcpl/server-registry.js +119 -0
  82. package/dist/src/mcpl/server-registry.js.map +1 -0
  83. package/dist/src/mcpl/types.d.ts +755 -0
  84. package/dist/src/mcpl/types.d.ts.map +1 -0
  85. package/dist/src/mcpl/types.js +48 -0
  86. package/dist/src/mcpl/types.js.map +1 -0
  87. package/dist/src/module-registry.d.ts +93 -0
  88. package/dist/src/module-registry.d.ts.map +1 -0
  89. package/dist/src/module-registry.js +386 -0
  90. package/dist/src/module-registry.js.map +1 -0
  91. package/dist/src/modules/api/index.d.ts +22 -0
  92. package/dist/src/modules/api/index.d.ts.map +1 -0
  93. package/dist/src/modules/api/index.js +63 -0
  94. package/dist/src/modules/api/index.js.map +1 -0
  95. package/dist/src/modules/discord/discord-js-client.d.ts +58 -0
  96. package/dist/src/modules/discord/discord-js-client.d.ts.map +1 -0
  97. package/dist/src/modules/discord/discord-js-client.js +273 -0
  98. package/dist/src/modules/discord/discord-js-client.js.map +1 -0
  99. package/dist/src/modules/discord/index.d.ts +82 -0
  100. package/dist/src/modules/discord/index.d.ts.map +1 -0
  101. package/dist/src/modules/discord/index.js +959 -0
  102. package/dist/src/modules/discord/index.js.map +1 -0
  103. package/dist/src/modules/discord/types.d.ts +327 -0
  104. package/dist/src/modules/discord/types.d.ts.map +1 -0
  105. package/dist/src/modules/discord/types.js +5 -0
  106. package/dist/src/modules/discord/types.js.map +1 -0
  107. package/dist/src/modules/index.d.ts +11 -0
  108. package/dist/src/modules/index.d.ts.map +1 -0
  109. package/dist/src/modules/index.js +7 -0
  110. package/dist/src/modules/index.js.map +1 -0
  111. package/dist/src/modules/workspace/index.d.ts +59 -0
  112. package/dist/src/modules/workspace/index.d.ts.map +1 -0
  113. package/dist/src/modules/workspace/index.js +831 -0
  114. package/dist/src/modules/workspace/index.js.map +1 -0
  115. package/dist/src/modules/workspace/sync.d.ts +48 -0
  116. package/dist/src/modules/workspace/sync.d.ts.map +1 -0
  117. package/dist/src/modules/workspace/sync.js +253 -0
  118. package/dist/src/modules/workspace/sync.js.map +1 -0
  119. package/dist/src/modules/workspace/types.d.ts +166 -0
  120. package/dist/src/modules/workspace/types.d.ts.map +1 -0
  121. package/dist/src/modules/workspace/types.js +5 -0
  122. package/dist/src/modules/workspace/types.js.map +1 -0
  123. package/dist/src/modules/workspace/watcher.d.ts +43 -0
  124. package/dist/src/modules/workspace/watcher.d.ts.map +1 -0
  125. package/dist/src/modules/workspace/watcher.js +120 -0
  126. package/dist/src/modules/workspace/watcher.js.map +1 -0
  127. package/dist/src/queue.d.ts +50 -0
  128. package/dist/src/queue.d.ts.map +1 -0
  129. package/dist/src/queue.js +95 -0
  130. package/dist/src/queue.js.map +1 -0
  131. package/dist/src/safe-slice.d.ts +8 -0
  132. package/dist/src/safe-slice.d.ts.map +1 -0
  133. package/dist/src/safe-slice.js +18 -0
  134. package/dist/src/safe-slice.js.map +1 -0
  135. package/dist/src/types/agent.d.ts +118 -0
  136. package/dist/src/types/agent.d.ts.map +1 -0
  137. package/dist/src/types/agent.js +2 -0
  138. package/dist/src/types/agent.js.map +1 -0
  139. package/dist/src/types/events.d.ts +220 -0
  140. package/dist/src/types/events.d.ts.map +1 -0
  141. package/dist/src/types/events.js +2 -0
  142. package/dist/src/types/events.js.map +1 -0
  143. package/dist/src/types/framework.d.ts +184 -0
  144. package/dist/src/types/framework.d.ts.map +1 -0
  145. package/dist/src/types/framework.js +2 -0
  146. package/dist/src/types/framework.js.map +1 -0
  147. package/dist/src/types/index.d.ts +7 -0
  148. package/dist/src/types/index.d.ts.map +1 -0
  149. package/dist/src/types/index.js +7 -0
  150. package/dist/src/types/index.js.map +1 -0
  151. package/dist/src/types/inference-log.d.ts +64 -0
  152. package/dist/src/types/inference-log.d.ts.map +1 -0
  153. package/dist/src/types/inference-log.js +5 -0
  154. package/dist/src/types/inference-log.js.map +1 -0
  155. package/dist/src/types/module.d.ts +302 -0
  156. package/dist/src/types/module.d.ts.map +1 -0
  157. package/dist/src/types/module.js +2 -0
  158. package/dist/src/types/module.js.map +1 -0
  159. package/dist/src/types/trace.d.ts +173 -0
  160. package/dist/src/types/trace.d.ts.map +1 -0
  161. package/dist/src/types/trace.js +2 -0
  162. package/dist/src/types/trace.js.map +1 -0
  163. package/dist/test/event-gate.test.d.ts +2 -0
  164. package/dist/test/event-gate.test.d.ts.map +1 -0
  165. package/dist/test/event-gate.test.js +535 -0
  166. package/dist/test/event-gate.test.js.map +1 -0
  167. package/dist/test/framework.test.d.ts +5 -0
  168. package/dist/test/framework.test.d.ts.map +1 -0
  169. package/dist/test/framework.test.js +738 -0
  170. package/dist/test/framework.test.js.map +1 -0
  171. package/dist/tsconfig.tsbuildinfo +1 -0
  172. package/package.json +58 -0
  173. package/src/agent.ts +512 -0
  174. package/src/api/mcp-server.ts +687 -0
  175. package/src/api/server.ts +1023 -0
  176. package/src/api/types.ts +542 -0
  177. package/src/framework.ts +2784 -0
  178. package/src/gate/event-gate.ts +623 -0
  179. package/src/gate/index.ts +12 -0
  180. package/src/gate/types.ts +112 -0
  181. package/src/index.ts +63 -0
  182. package/src/mcpl/channel-registry.ts +824 -0
  183. package/src/mcpl/checkpoint-manager.ts +545 -0
  184. package/src/mcpl/errors.ts +114 -0
  185. package/src/mcpl/feature-set-manager.ts +333 -0
  186. package/src/mcpl/hook-orchestrator.ts +281 -0
  187. package/src/mcpl/index.ts +134 -0
  188. package/src/mcpl/inference-router.ts +335 -0
  189. package/src/mcpl/push-handler.ts +232 -0
  190. package/src/mcpl/scope-manager.ts +262 -0
  191. package/src/mcpl/server-connection.ts +694 -0
  192. package/src/mcpl/server-registry.ts +144 -0
  193. package/src/mcpl/types.ts +991 -0
  194. package/src/module-registry.ts +547 -0
  195. package/src/modules/api/index.ts +94 -0
  196. package/src/modules/discord/discord-js-client.ts +353 -0
  197. package/src/modules/discord/index.ts +1146 -0
  198. package/src/modules/discord/types.ts +465 -0
  199. package/src/modules/index.ts +43 -0
  200. package/src/modules/workspace/index.ts +969 -0
  201. package/src/modules/workspace/sync.ts +314 -0
  202. package/src/modules/workspace/types.ts +202 -0
  203. package/src/modules/workspace/watcher.ts +142 -0
  204. package/src/queue.ts +106 -0
  205. package/src/safe-slice.ts +18 -0
  206. package/src/types/agent.ts +119 -0
  207. package/src/types/events.ts +252 -0
  208. package/src/types/framework.ts +211 -0
  209. package/src/types/index.ts +6 -0
  210. package/src/types/inference-log.ts +64 -0
  211. package/src/types/module.ts +367 -0
  212. package/src/types/trace.ts +196 -0
@@ -0,0 +1,63 @@
1
+ /**
2
+ * API Module - handles events from the API server
3
+ *
4
+ * This bundled module processes api:* events and converts them
5
+ * into conversation messages and inference requests.
6
+ */
7
+ // ============================================================================
8
+ // API Module
9
+ // ============================================================================
10
+ export class ApiModule {
11
+ name = 'api';
12
+ ctx;
13
+ async start(ctx) {
14
+ this.ctx = ctx;
15
+ }
16
+ async stop() {
17
+ // Nothing to clean up
18
+ }
19
+ async handleToolCall(_call) {
20
+ // API module has no tools
21
+ return { success: false, error: 'Unknown tool' };
22
+ }
23
+ async onProcess(event, _state) {
24
+ if (!event.type.startsWith('api:')) {
25
+ return {};
26
+ }
27
+ switch (event.type) {
28
+ case 'api:message':
29
+ return this.handleMessage(event);
30
+ case 'api:inference-request':
31
+ return this.handleInferenceRequest(event);
32
+ default:
33
+ return {};
34
+ }
35
+ }
36
+ handleMessage(event) {
37
+ const response = {
38
+ addMessages: [
39
+ {
40
+ participant: event.participant,
41
+ content: [{ type: 'text', text: event.content }],
42
+ metadata: event.metadata,
43
+ },
44
+ ],
45
+ };
46
+ if (event.triggerInference !== false) {
47
+ response.requestInference = event.targetAgents ?? true;
48
+ }
49
+ return response;
50
+ }
51
+ handleInferenceRequest(event) {
52
+ if (event.agentName) {
53
+ return { requestInference: [event.agentName] };
54
+ }
55
+ return { requestInference: true };
56
+ }
57
+ getTools() {
58
+ return [];
59
+ }
60
+ }
61
+ // Default export for convenience
62
+ export default ApiModule;
63
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/api/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E,MAAM,OAAO,SAAS;IACX,IAAI,GAAG,KAAK,CAAC;IAEd,GAAG,CAAiB;IAE5B,KAAK,CAAC,KAAK,CAAC,GAAkB;QAC5B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,sBAAsB;IACxB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAe;QAClC,0BAA0B;QAC1B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAmB,EAAE,MAAoB;QACvD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,aAAa;gBAChB,OAAO,IAAI,CAAC,aAAa,CAAC,KAAwB,CAAC,CAAC;YAEtD,KAAK,uBAAuB;gBAC1B,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAiC,CAAC,CAAC;YAExE;gBACE,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,KAAsB;QAC1C,MAAM,QAAQ,GAAkB;YAC9B,WAAW,EAAE;gBACX;oBACE,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;oBAChD,QAAQ,EAAE,KAAK,CAAC,QAAQ;iBACzB;aACF;SACF,CAAC;QAEF,IAAI,KAAK,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;YACrC,QAAQ,CAAC,gBAAgB,GAAG,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC;QACzD,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,sBAAsB,CAAC,KAA+B;QAC5D,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,EAAE,gBAAgB,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;IACpC,CAAC;IAED,QAAQ;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAED,iCAAiC;AACjC,eAAe,SAAS,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Discord.js client adapter implementing DiscordClientInterface
3
+ */
4
+ import type { DiscordClientInterface, DiscordMessageData, DiscordGuild, DiscordChannel, HistoryMessage } from './types.js';
5
+ export interface DiscordJsClientConfig {
6
+ token: string;
7
+ guildIds?: string[];
8
+ channelIds?: string[];
9
+ }
10
+ export declare class DiscordJsClient implements DiscordClientInterface {
11
+ private client;
12
+ private token;
13
+ private guildIds?;
14
+ private channelIds?;
15
+ private messageHandler?;
16
+ private editHandler?;
17
+ private deleteHandler?;
18
+ private readyHandler?;
19
+ constructor(config: DiscordJsClientConfig);
20
+ private setupEventHandlers;
21
+ private shouldHandleMessage;
22
+ private convertMessage;
23
+ connect(): Promise<void>;
24
+ disconnect(): Promise<void>;
25
+ isConnected(): boolean;
26
+ sendMessage(channelId: string, content: string, options?: {
27
+ replyTo?: string;
28
+ createThread?: {
29
+ name: string;
30
+ };
31
+ }): Promise<{
32
+ messageId: string;
33
+ }>;
34
+ sendDM(userId: string, content: string): Promise<{
35
+ messageId: string;
36
+ }>;
37
+ fetchMessage(channelId: string, messageId: string): Promise<string>;
38
+ editMessage(channelId: string, messageId: string, content: string): Promise<void>;
39
+ deleteMessage(channelId: string, messageId: string): Promise<void>;
40
+ addReaction(channelId: string, messageId: string, emoji: string): Promise<void>;
41
+ createThread(channelId: string, messageId: string, name: string, autoArchiveDuration?: number): Promise<{
42
+ threadId: string;
43
+ }>;
44
+ onMessage(handler: (message: DiscordMessageData) => void): void;
45
+ onMessageEdit(handler: (messageId: string, newContent: string) => void): void;
46
+ onMessageDelete(handler: (messageId: string) => void): void;
47
+ onReady(handler: () => void): void;
48
+ getBotUserId(): string | null;
49
+ sendTyping(channelId: string): Promise<void>;
50
+ listGuilds(): Promise<DiscordGuild[]>;
51
+ listChannels(guildId: string): Promise<DiscordChannel[]>;
52
+ private mapChannelType;
53
+ fetchHistory(channelId: string, options?: {
54
+ limit?: number;
55
+ before?: string;
56
+ }): Promise<HistoryMessage[]>;
57
+ }
58
+ //# sourceMappingURL=discord-js-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord-js-client.d.ts","sourceRoot":"","sources":["../../../../src/modules/discord/discord-js-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Discord.js client adapter implementing DiscordClientInterface
3
+ */
4
+ import { Client, GatewayIntentBits, Partials, } from 'discord.js';
5
+ export class DiscordJsClient {
6
+ client;
7
+ token;
8
+ guildIds;
9
+ channelIds;
10
+ messageHandler;
11
+ editHandler;
12
+ deleteHandler;
13
+ readyHandler;
14
+ constructor(config) {
15
+ this.token = config.token;
16
+ this.guildIds = config.guildIds;
17
+ this.channelIds = config.channelIds;
18
+ this.client = new Client({
19
+ intents: [
20
+ GatewayIntentBits.Guilds,
21
+ GatewayIntentBits.GuildMessages,
22
+ GatewayIntentBits.MessageContent,
23
+ GatewayIntentBits.DirectMessages,
24
+ GatewayIntentBits.GuildMessageReactions,
25
+ ],
26
+ partials: [Partials.Channel, Partials.Message],
27
+ });
28
+ this.setupEventHandlers();
29
+ }
30
+ setupEventHandlers() {
31
+ this.client.on('messageCreate', (message) => {
32
+ if (!this.shouldHandleMessage(message))
33
+ return;
34
+ if (this.messageHandler) {
35
+ this.messageHandler(this.convertMessage(message));
36
+ }
37
+ });
38
+ this.client.on('messageUpdate', (_oldMessage, newMessage) => {
39
+ if (!newMessage.content || !this.editHandler)
40
+ return;
41
+ this.editHandler(newMessage.id, newMessage.content);
42
+ });
43
+ this.client.on('messageDelete', (message) => {
44
+ if (this.deleteHandler) {
45
+ this.deleteHandler(message.id);
46
+ }
47
+ });
48
+ this.client.on('ready', () => {
49
+ console.log(`[Discord] Logged in as ${this.client.user?.tag}`);
50
+ if (this.readyHandler) {
51
+ this.readyHandler();
52
+ }
53
+ });
54
+ this.client.on('error', (error) => {
55
+ console.error('[Discord] Client error:', error);
56
+ });
57
+ }
58
+ shouldHandleMessage(message) {
59
+ // Never process our own messages (prevents feedback loop)
60
+ if (message.author.id === this.client.user?.id) {
61
+ return false;
62
+ }
63
+ // Filter by guild
64
+ if (this.guildIds && this.guildIds.length > 0) {
65
+ if (!message.guildId || !this.guildIds.includes(message.guildId)) {
66
+ return false;
67
+ }
68
+ }
69
+ // Filter by channel
70
+ if (this.channelIds && this.channelIds.length > 0) {
71
+ if (!this.channelIds.includes(message.channelId)) {
72
+ return false;
73
+ }
74
+ }
75
+ return true;
76
+ }
77
+ convertMessage(message) {
78
+ const attachments = message.attachments.map((a) => ({
79
+ id: a.id,
80
+ filename: a.name ?? 'unknown',
81
+ url: a.url,
82
+ contentType: a.contentType ?? undefined,
83
+ size: a.size,
84
+ }));
85
+ // Extract mentioned user IDs
86
+ const mentionedUserIds = message.mentions.users.map((u) => u.id);
87
+ return {
88
+ id: message.id,
89
+ content: message.content,
90
+ authorId: message.author.id,
91
+ authorName: message.author.username,
92
+ isBot: message.author.bot,
93
+ channelId: message.channelId,
94
+ guildId: message.guildId ?? null,
95
+ isReply: message.reference !== null,
96
+ replyToId: message.reference?.messageId ?? undefined,
97
+ // Note: replyToAuthorId requires fetching the referenced message
98
+ // We'll leave it undefined for now - can be enhanced later if needed
99
+ replyToAuthorId: undefined,
100
+ mentionedUserIds,
101
+ attachments,
102
+ timestamp: message.createdAt,
103
+ };
104
+ }
105
+ async connect() {
106
+ await this.client.login(this.token);
107
+ }
108
+ async disconnect() {
109
+ this.client.destroy();
110
+ }
111
+ isConnected() {
112
+ return this.client.isReady();
113
+ }
114
+ async sendMessage(channelId, content, options) {
115
+ const channel = await this.client.channels.fetch(channelId);
116
+ if (!channel || !('send' in channel)) {
117
+ throw new Error(`Channel ${channelId} not found or not a text channel`);
118
+ }
119
+ const textChannel = channel;
120
+ const message = await textChannel.send({
121
+ content,
122
+ reply: options?.replyTo ? { messageReference: options.replyTo } : undefined,
123
+ });
124
+ if (options?.createThread && 'threads' in textChannel) {
125
+ await message.startThread({ name: options.createThread.name });
126
+ }
127
+ return { messageId: message.id };
128
+ }
129
+ async sendDM(userId, content) {
130
+ const user = await this.client.users.fetch(userId);
131
+ const message = await user.send(content);
132
+ return { messageId: message.id };
133
+ }
134
+ async fetchMessage(channelId, messageId) {
135
+ const channel = await this.client.channels.fetch(channelId);
136
+ if (!channel || !('messages' in channel)) {
137
+ throw new Error(`Channel ${channelId} not found`);
138
+ }
139
+ const message = await channel.messages.fetch(messageId);
140
+ return message.content;
141
+ }
142
+ async editMessage(channelId, messageId, content) {
143
+ const channel = await this.client.channels.fetch(channelId);
144
+ if (!channel || !('messages' in channel)) {
145
+ throw new Error(`Channel ${channelId} not found`);
146
+ }
147
+ const message = await channel.messages.fetch(messageId);
148
+ await message.edit(content);
149
+ }
150
+ async deleteMessage(channelId, messageId) {
151
+ const channel = await this.client.channels.fetch(channelId);
152
+ if (!channel || !('messages' in channel)) {
153
+ throw new Error(`Channel ${channelId} not found`);
154
+ }
155
+ const message = await channel.messages.fetch(messageId);
156
+ await message.delete();
157
+ }
158
+ async addReaction(channelId, messageId, emoji) {
159
+ const channel = await this.client.channels.fetch(channelId);
160
+ if (!channel || !('messages' in channel)) {
161
+ throw new Error(`Channel ${channelId} not found`);
162
+ }
163
+ const message = await channel.messages.fetch(messageId);
164
+ await message.react(emoji);
165
+ }
166
+ async createThread(channelId, messageId, name, autoArchiveDuration) {
167
+ const channel = await this.client.channels.fetch(channelId);
168
+ if (!channel || !('messages' in channel)) {
169
+ throw new Error(`Channel ${channelId} not found`);
170
+ }
171
+ const message = await channel.messages.fetch(messageId);
172
+ const thread = await message.startThread({
173
+ name,
174
+ autoArchiveDuration: autoArchiveDuration ?? 1440,
175
+ });
176
+ return { threadId: thread.id };
177
+ }
178
+ onMessage(handler) {
179
+ this.messageHandler = handler;
180
+ }
181
+ onMessageEdit(handler) {
182
+ this.editHandler = handler;
183
+ }
184
+ onMessageDelete(handler) {
185
+ this.deleteHandler = handler;
186
+ }
187
+ onReady(handler) {
188
+ this.readyHandler = handler;
189
+ }
190
+ getBotUserId() {
191
+ return this.client.user?.id ?? null;
192
+ }
193
+ async sendTyping(channelId) {
194
+ const channel = await this.client.channels.fetch(channelId);
195
+ if (!channel || !('sendTyping' in channel)) {
196
+ throw new Error(`Channel ${channelId} not found or not a text channel`);
197
+ }
198
+ await channel.sendTyping();
199
+ }
200
+ async listGuilds() {
201
+ const guilds = this.client.guilds.cache;
202
+ return guilds.map((g) => ({
203
+ id: g.id,
204
+ name: g.name,
205
+ iconUrl: g.iconURL() ?? undefined,
206
+ memberCount: g.memberCount,
207
+ }));
208
+ }
209
+ async listChannels(guildId) {
210
+ const guild = await this.client.guilds.fetch(guildId);
211
+ if (!guild) {
212
+ throw new Error(`Guild ${guildId} not found`);
213
+ }
214
+ // guild.channels might be undefined if the guild was fetched without full data
215
+ if (!guild.channels) {
216
+ throw new Error(`Guild ${guildId} channels not available - may need to re-fetch with force`);
217
+ }
218
+ const channels = await guild.channels.fetch();
219
+ const result = [];
220
+ channels.forEach((c) => {
221
+ if (c) {
222
+ result.push({
223
+ id: c.id,
224
+ name: c.name,
225
+ type: this.mapChannelType(c.type),
226
+ parentId: c.parentId ?? undefined,
227
+ position: 'position' in c ? c.position : undefined,
228
+ });
229
+ }
230
+ });
231
+ return result;
232
+ }
233
+ mapChannelType(type) {
234
+ if (type === undefined)
235
+ return 'unknown';
236
+ // Discord.js channel types: 0=text, 2=voice, 4=category, 11=thread, 15=forum
237
+ switch (type) {
238
+ case 0: return 'text';
239
+ case 2: return 'voice';
240
+ case 4: return 'category';
241
+ case 11:
242
+ case 12: return 'thread';
243
+ case 15: return 'forum';
244
+ default: return 'unknown';
245
+ }
246
+ }
247
+ async fetchHistory(channelId, options) {
248
+ const channel = await this.client.channels.fetch(channelId);
249
+ if (!channel || !('messages' in channel)) {
250
+ throw new Error(`Channel ${channelId} not found or not a text channel`);
251
+ }
252
+ const textChannel = channel;
253
+ const messages = await textChannel.messages.fetch({
254
+ limit: options?.limit ?? 50,
255
+ before: options?.before,
256
+ });
257
+ return messages.map((m) => ({
258
+ id: m.id,
259
+ authorId: m.author.id,
260
+ authorName: m.author.username,
261
+ isBot: m.author.bot,
262
+ content: m.content,
263
+ timestamp: m.createdAt,
264
+ replyTo: m.reference
265
+ ? {
266
+ messageId: m.reference.messageId ?? '',
267
+ authorId: '', // Would need additional fetch to get this
268
+ }
269
+ : undefined,
270
+ }));
271
+ }
272
+ }
273
+ //# sourceMappingURL=discord-js-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord-js-client.js","sourceRoot":"","sources":["../../../../src/modules/discord/discord-js-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Discord Module - Discord integration for agent framework
3
+ *
4
+ * Provides:
5
+ * - Listening to Discord messages and routing to agents
6
+ * - Sending agent speech to Discord channels
7
+ * - Tools for explicit Discord operations (send, DM, react, etc.)
8
+ */
9
+ import type { ContentBlock } from '@animalabs/membrane';
10
+ import type { Module, ModuleContext, ProcessState, ProcessEvent, EventResponse, ToolDefinition, ToolCall, ToolResult, SpeechContext } from '../../types/index.js';
11
+ import type { DiscordModuleConfig, DiscordClientInterface } from './types.js';
12
+ export type { DiscordMessageEvent, DiscordEditEvent, DiscordDeleteEvent } from './types.js';
13
+ export * from './types.js';
14
+ export { DiscordJsClient, type DiscordJsClientConfig } from './discord-js-client.js';
15
+ /**
16
+ * Discord module for the agent framework.
17
+ */
18
+ export declare class DiscordModule implements Module {
19
+ readonly name = "discord";
20
+ private config;
21
+ private ctx;
22
+ private client;
23
+ private state;
24
+ private replyContexts;
25
+ private lastSentMessage;
26
+ constructor(client: DiscordClientInterface, config: DiscordModuleConfig);
27
+ start(ctx: ModuleContext): Promise<void>;
28
+ stop(): Promise<void>;
29
+ getTools(): ToolDefinition[];
30
+ handleToolCall(call: ToolCall): Promise<ToolResult>;
31
+ onProcess(event: ProcessEvent, state: ProcessState): Promise<EventResponse>;
32
+ /**
33
+ * Handle agent speech - send to Discord.
34
+ */
35
+ onAgentSpeech(agentName: string, content: ContentBlock[], context: SpeechContext): Promise<void>;
36
+ /**
37
+ * Edit a sent message to prepend thought text as spoilers.
38
+ */
39
+ private editWithThoughts;
40
+ /**
41
+ * Handle Discord ready event - sync history for all tracked channels.
42
+ */
43
+ private handleReady;
44
+ /**
45
+ * Sync history for all channels we have conversations in.
46
+ */
47
+ private syncAllChannelHistory;
48
+ /**
49
+ * Sync history for a specific channel - compare with Context Manager and update.
50
+ * Uses queryMessages() to enumerate stored messages for proper edit/delete detection.
51
+ */
52
+ private syncChannelHistory;
53
+ private handleDiscordMessage;
54
+ /**
55
+ * Convert Discord message to ContentBlock array.
56
+ * Includes text content and any supported attachments (images, text files).
57
+ */
58
+ private convertMessageToContent;
59
+ /**
60
+ * Determine if a message should trigger agent inference based on config.
61
+ */
62
+ private shouldTriggerInference;
63
+ private handleDiscordMessageEdit;
64
+ private handleDiscordMessageDelete;
65
+ private handleSend;
66
+ private handleDM;
67
+ private handleReply;
68
+ private handleReact;
69
+ private handleEdit;
70
+ private handleDelete;
71
+ private handleCreateThread;
72
+ private handleSetReplyContext;
73
+ private handleActivate;
74
+ private handleDeactivate;
75
+ private handleListGuilds;
76
+ private handleListChannels;
77
+ private handleFetchHistory;
78
+ private extractText;
79
+ private checkRateLimit;
80
+ private cleanupOldConversations;
81
+ }
82
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/discord/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,MAAM,EACN,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,QAAQ,EACR,UAAU,EACV,aAAa,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,mBAAmB,EAGnB,sBAAsB,EAgBvB,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE5F,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AA4BrF;;GAEG;AACH,qBAAa,aAAc,YAAW,MAAM;IAC1C,QAAQ,CAAC,IAAI,aAAa;IAE1B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,GAAG,CAA8B;IACzC,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,KAAK,CAKX;IAGF,OAAO,CAAC,aAAa,CAA+C;IAGpE,OAAO,CAAC,eAAe,CAAyD;gBAEpE,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,mBAAmB;IAKjE,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAwCxC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B,QAAQ,IAAI,cAAc,EAAE;IA4KtB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAyCnD,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAqGjF;;OAEG;IACG,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC;IAwDhB;;OAEG;YACW,gBAAgB;IAgB9B;;OAEG;YACW,WAAW;IAYzB;;OAEG;YACW,qBAAqB;IA2DnC;;;OAGG;YACW,kBAAkB;YA4GlB,oBAAoB;IAuDlC;;;OAGG;YACW,uBAAuB;IA8DrC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqC9B,OAAO,CAAC,wBAAwB;IAWhC,OAAO,CAAC,0BAA0B;YAcpB,UAAU;YAgBV,QAAQ;YAKR,WAAW;YA8BX,WAAW;YAKX,UAAU;YAKV,YAAY;YAKZ,kBAAkB;YAiBlB,qBAAqB;YAoBrB,cAAc;YASd,gBAAgB;YAShB,gBAAgB;YAchB,kBAAkB;YAgBlB,kBAAkB;IAoChC,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,uBAAuB;CAQhC"}