@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.
- package/LICENSE +21 -0
- package/README.md +233 -0
- package/dist/src/agent.d.ts +130 -0
- package/dist/src/agent.d.ts.map +1 -0
- package/dist/src/agent.js +406 -0
- package/dist/src/agent.js.map +1 -0
- package/dist/src/api/mcp-server.d.ts +37 -0
- package/dist/src/api/mcp-server.d.ts.map +1 -0
- package/dist/src/api/mcp-server.js +598 -0
- package/dist/src/api/mcp-server.js.map +1 -0
- package/dist/src/api/server.d.ts +83 -0
- package/dist/src/api/server.d.ts.map +1 -0
- package/dist/src/api/server.js +785 -0
- package/dist/src/api/server.js.map +1 -0
- package/dist/src/api/types.d.ts +395 -0
- package/dist/src/api/types.d.ts.map +1 -0
- package/dist/src/api/types.js +5 -0
- package/dist/src/api/types.js.map +1 -0
- package/dist/src/framework.d.ts +309 -0
- package/dist/src/framework.d.ts.map +1 -0
- package/dist/src/framework.js +2309 -0
- package/dist/src/framework.js.map +1 -0
- package/dist/src/gate/event-gate.d.ts +75 -0
- package/dist/src/gate/event-gate.d.ts.map +1 -0
- package/dist/src/gate/event-gate.js +503 -0
- package/dist/src/gate/event-gate.js.map +1 -0
- package/dist/src/gate/index.d.ts +3 -0
- package/dist/src/gate/index.d.ts.map +1 -0
- package/dist/src/gate/index.js +2 -0
- package/dist/src/gate/index.js.map +1 -0
- package/dist/src/gate/types.d.ts +82 -0
- package/dist/src/gate/types.d.ts.map +1 -0
- package/dist/src/gate/types.js +9 -0
- package/dist/src/gate/types.js.map +1 -0
- package/dist/src/index.d.ts +17 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +18 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mcpl/channel-registry.d.ts +141 -0
- package/dist/src/mcpl/channel-registry.d.ts.map +1 -0
- package/dist/src/mcpl/channel-registry.js +647 -0
- package/dist/src/mcpl/channel-registry.js.map +1 -0
- package/dist/src/mcpl/checkpoint-manager.d.ts +79 -0
- package/dist/src/mcpl/checkpoint-manager.d.ts.map +1 -0
- package/dist/src/mcpl/checkpoint-manager.js +430 -0
- package/dist/src/mcpl/checkpoint-manager.js.map +1 -0
- package/dist/src/mcpl/errors.d.ts +52 -0
- package/dist/src/mcpl/errors.d.ts.map +1 -0
- package/dist/src/mcpl/errors.js +93 -0
- package/dist/src/mcpl/errors.js.map +1 -0
- package/dist/src/mcpl/feature-set-manager.d.ts +91 -0
- package/dist/src/mcpl/feature-set-manager.d.ts.map +1 -0
- package/dist/src/mcpl/feature-set-manager.js +250 -0
- package/dist/src/mcpl/feature-set-manager.js.map +1 -0
- package/dist/src/mcpl/hook-orchestrator.d.ts +51 -0
- package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -0
- package/dist/src/mcpl/hook-orchestrator.js +217 -0
- package/dist/src/mcpl/hook-orchestrator.js.map +1 -0
- package/dist/src/mcpl/index.d.ts +14 -0
- package/dist/src/mcpl/index.d.ts.map +1 -0
- package/dist/src/mcpl/index.js +21 -0
- package/dist/src/mcpl/index.js.map +1 -0
- package/dist/src/mcpl/inference-router.d.ts +67 -0
- package/dist/src/mcpl/inference-router.d.ts.map +1 -0
- package/dist/src/mcpl/inference-router.js +249 -0
- package/dist/src/mcpl/inference-router.js.map +1 -0
- package/dist/src/mcpl/push-handler.d.ts +60 -0
- package/dist/src/mcpl/push-handler.d.ts.map +1 -0
- package/dist/src/mcpl/push-handler.js +162 -0
- package/dist/src/mcpl/push-handler.js.map +1 -0
- package/dist/src/mcpl/scope-manager.d.ts +76 -0
- package/dist/src/mcpl/scope-manager.d.ts.map +1 -0
- package/dist/src/mcpl/scope-manager.js +213 -0
- package/dist/src/mcpl/scope-manager.js.map +1 -0
- package/dist/src/mcpl/server-connection.d.ts +174 -0
- package/dist/src/mcpl/server-connection.d.ts.map +1 -0
- package/dist/src/mcpl/server-connection.js +559 -0
- package/dist/src/mcpl/server-connection.js.map +1 -0
- package/dist/src/mcpl/server-registry.d.ts +63 -0
- package/dist/src/mcpl/server-registry.d.ts.map +1 -0
- package/dist/src/mcpl/server-registry.js +119 -0
- package/dist/src/mcpl/server-registry.js.map +1 -0
- package/dist/src/mcpl/types.d.ts +755 -0
- package/dist/src/mcpl/types.d.ts.map +1 -0
- package/dist/src/mcpl/types.js +48 -0
- package/dist/src/mcpl/types.js.map +1 -0
- package/dist/src/module-registry.d.ts +93 -0
- package/dist/src/module-registry.d.ts.map +1 -0
- package/dist/src/module-registry.js +386 -0
- package/dist/src/module-registry.js.map +1 -0
- package/dist/src/modules/api/index.d.ts +22 -0
- package/dist/src/modules/api/index.d.ts.map +1 -0
- package/dist/src/modules/api/index.js +63 -0
- package/dist/src/modules/api/index.js.map +1 -0
- package/dist/src/modules/discord/discord-js-client.d.ts +58 -0
- package/dist/src/modules/discord/discord-js-client.d.ts.map +1 -0
- package/dist/src/modules/discord/discord-js-client.js +273 -0
- package/dist/src/modules/discord/discord-js-client.js.map +1 -0
- package/dist/src/modules/discord/index.d.ts +82 -0
- package/dist/src/modules/discord/index.d.ts.map +1 -0
- package/dist/src/modules/discord/index.js +959 -0
- package/dist/src/modules/discord/index.js.map +1 -0
- package/dist/src/modules/discord/types.d.ts +327 -0
- package/dist/src/modules/discord/types.d.ts.map +1 -0
- package/dist/src/modules/discord/types.js +5 -0
- package/dist/src/modules/discord/types.js.map +1 -0
- package/dist/src/modules/index.d.ts +11 -0
- package/dist/src/modules/index.d.ts.map +1 -0
- package/dist/src/modules/index.js +7 -0
- package/dist/src/modules/index.js.map +1 -0
- package/dist/src/modules/workspace/index.d.ts +59 -0
- package/dist/src/modules/workspace/index.d.ts.map +1 -0
- package/dist/src/modules/workspace/index.js +831 -0
- package/dist/src/modules/workspace/index.js.map +1 -0
- package/dist/src/modules/workspace/sync.d.ts +48 -0
- package/dist/src/modules/workspace/sync.d.ts.map +1 -0
- package/dist/src/modules/workspace/sync.js +253 -0
- package/dist/src/modules/workspace/sync.js.map +1 -0
- package/dist/src/modules/workspace/types.d.ts +166 -0
- package/dist/src/modules/workspace/types.d.ts.map +1 -0
- package/dist/src/modules/workspace/types.js +5 -0
- package/dist/src/modules/workspace/types.js.map +1 -0
- package/dist/src/modules/workspace/watcher.d.ts +43 -0
- package/dist/src/modules/workspace/watcher.d.ts.map +1 -0
- package/dist/src/modules/workspace/watcher.js +120 -0
- package/dist/src/modules/workspace/watcher.js.map +1 -0
- package/dist/src/queue.d.ts +50 -0
- package/dist/src/queue.d.ts.map +1 -0
- package/dist/src/queue.js +95 -0
- package/dist/src/queue.js.map +1 -0
- package/dist/src/safe-slice.d.ts +8 -0
- package/dist/src/safe-slice.d.ts.map +1 -0
- package/dist/src/safe-slice.js +18 -0
- package/dist/src/safe-slice.js.map +1 -0
- package/dist/src/types/agent.d.ts +118 -0
- package/dist/src/types/agent.d.ts.map +1 -0
- package/dist/src/types/agent.js +2 -0
- package/dist/src/types/agent.js.map +1 -0
- package/dist/src/types/events.d.ts +220 -0
- package/dist/src/types/events.d.ts.map +1 -0
- package/dist/src/types/events.js +2 -0
- package/dist/src/types/events.js.map +1 -0
- package/dist/src/types/framework.d.ts +184 -0
- package/dist/src/types/framework.d.ts.map +1 -0
- package/dist/src/types/framework.js +2 -0
- package/dist/src/types/framework.js.map +1 -0
- package/dist/src/types/index.d.ts +7 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +7 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/inference-log.d.ts +64 -0
- package/dist/src/types/inference-log.d.ts.map +1 -0
- package/dist/src/types/inference-log.js +5 -0
- package/dist/src/types/inference-log.js.map +1 -0
- package/dist/src/types/module.d.ts +302 -0
- package/dist/src/types/module.d.ts.map +1 -0
- package/dist/src/types/module.js +2 -0
- package/dist/src/types/module.js.map +1 -0
- package/dist/src/types/trace.d.ts +173 -0
- package/dist/src/types/trace.d.ts.map +1 -0
- package/dist/src/types/trace.js +2 -0
- package/dist/src/types/trace.js.map +1 -0
- package/dist/test/event-gate.test.d.ts +2 -0
- package/dist/test/event-gate.test.d.ts.map +1 -0
- package/dist/test/event-gate.test.js +535 -0
- package/dist/test/event-gate.test.js.map +1 -0
- package/dist/test/framework.test.d.ts +5 -0
- package/dist/test/framework.test.d.ts.map +1 -0
- package/dist/test/framework.test.js +738 -0
- package/dist/test/framework.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +58 -0
- package/src/agent.ts +512 -0
- package/src/api/mcp-server.ts +687 -0
- package/src/api/server.ts +1023 -0
- package/src/api/types.ts +542 -0
- package/src/framework.ts +2784 -0
- package/src/gate/event-gate.ts +623 -0
- package/src/gate/index.ts +12 -0
- package/src/gate/types.ts +112 -0
- package/src/index.ts +63 -0
- package/src/mcpl/channel-registry.ts +824 -0
- package/src/mcpl/checkpoint-manager.ts +545 -0
- package/src/mcpl/errors.ts +114 -0
- package/src/mcpl/feature-set-manager.ts +333 -0
- package/src/mcpl/hook-orchestrator.ts +281 -0
- package/src/mcpl/index.ts +134 -0
- package/src/mcpl/inference-router.ts +335 -0
- package/src/mcpl/push-handler.ts +232 -0
- package/src/mcpl/scope-manager.ts +262 -0
- package/src/mcpl/server-connection.ts +694 -0
- package/src/mcpl/server-registry.ts +144 -0
- package/src/mcpl/types.ts +991 -0
- package/src/module-registry.ts +547 -0
- package/src/modules/api/index.ts +94 -0
- package/src/modules/discord/discord-js-client.ts +353 -0
- package/src/modules/discord/index.ts +1146 -0
- package/src/modules/discord/types.ts +465 -0
- package/src/modules/index.ts +43 -0
- package/src/modules/workspace/index.ts +969 -0
- package/src/modules/workspace/sync.ts +314 -0
- package/src/modules/workspace/types.ts +202 -0
- package/src/modules/workspace/watcher.ts +142 -0
- package/src/queue.ts +106 -0
- package/src/safe-slice.ts +18 -0
- package/src/types/agent.ts +119 -0
- package/src/types/events.ts +252 -0
- package/src/types/framework.ts +211 -0
- package/src/types/index.ts +6 -0
- package/src/types/inference-log.ts +64 -0
- package/src/types/module.ts +367 -0
- 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"}
|