discord-ops 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/CHANGELOG.md +16 -0
- package/LICENSE +21 -0
- package/README.md +150 -0
- package/dist/cli/health.d.ts +2 -0
- package/dist/cli/health.d.ts.map +1 -0
- package/dist/cli/health.js +2 -0
- package/dist/cli/health.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +98 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/client.d.ts +22 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +87 -0
- package/dist/client.js.map +1 -0
- package/dist/config/index.d.ts +17 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +58 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/profiles.d.ts +18 -0
- package/dist/config/profiles.d.ts.map +1 -0
- package/dist/config/profiles.js +28 -0
- package/dist/config/profiles.js.map +1 -0
- package/dist/config/schema.d.ts +76 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +29 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/routing/fuzzy.d.ts +16 -0
- package/dist/routing/fuzzy.d.ts.map +1 -0
- package/dist/routing/fuzzy.js +67 -0
- package/dist/routing/fuzzy.js.map +1 -0
- package/dist/routing/resolver.d.ts +31 -0
- package/dist/routing/resolver.d.ts.map +1 -0
- package/dist/routing/resolver.js +60 -0
- package/dist/routing/resolver.js.map +1 -0
- package/dist/security/audit.d.ts +9 -0
- package/dist/security/audit.d.ts.map +1 -0
- package/dist/security/audit.js +20 -0
- package/dist/security/audit.js.map +1 -0
- package/dist/security/permissions.d.ts +6 -0
- package/dist/security/permissions.d.ts.map +1 -0
- package/dist/security/permissions.js +15 -0
- package/dist/security/permissions.js.map +1 -0
- package/dist/security/rate-limiter.d.ts +16 -0
- package/dist/security/rate-limiter.d.ts.map +1 -0
- package/dist/security/rate-limiter.js +36 -0
- package/dist/security/rate-limiter.js.map +1 -0
- package/dist/security/sanitizer.d.ts +5 -0
- package/dist/security/sanitizer.d.ts.map +1 -0
- package/dist/security/sanitizer.js +26 -0
- package/dist/security/sanitizer.js.map +1 -0
- package/dist/security/token-validator.d.ts +9 -0
- package/dist/security/token-validator.d.ts.map +1 -0
- package/dist/security/token-validator.js +18 -0
- package/dist/security/token-validator.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +64 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/channels/create-channel.d.ts +3 -0
- package/dist/tools/channels/create-channel.d.ts.map +1 -0
- package/dist/tools/channels/create-channel.js +46 -0
- package/dist/tools/channels/create-channel.js.map +1 -0
- package/dist/tools/channels/delete-channel.d.ts +3 -0
- package/dist/tools/channels/delete-channel.d.ts.map +1 -0
- package/dist/tools/channels/delete-channel.js +20 -0
- package/dist/tools/channels/delete-channel.js.map +1 -0
- package/dist/tools/channels/edit-channel.d.ts +3 -0
- package/dist/tools/channels/edit-channel.d.ts.map +1 -0
- package/dist/tools/channels/edit-channel.js +32 -0
- package/dist/tools/channels/edit-channel.js.map +1 -0
- package/dist/tools/channels/get-channel.d.ts +3 -0
- package/dist/tools/channels/get-channel.d.ts.map +1 -0
- package/dist/tools/channels/get-channel.js +34 -0
- package/dist/tools/channels/get-channel.js.map +1 -0
- package/dist/tools/channels/index.d.ts +6 -0
- package/dist/tools/channels/index.d.ts.map +1 -0
- package/dist/tools/channels/index.js +6 -0
- package/dist/tools/channels/index.js.map +1 -0
- package/dist/tools/channels/list-channels.d.ts +3 -0
- package/dist/tools/channels/list-channels.d.ts.map +1 -0
- package/dist/tools/channels/list-channels.js +47 -0
- package/dist/tools/channels/list-channels.js.map +1 -0
- package/dist/tools/guilds/get-guild.d.ts +3 -0
- package/dist/tools/guilds/get-guild.d.ts.map +1 -0
- package/dist/tools/guilds/get-guild.js +30 -0
- package/dist/tools/guilds/get-guild.js.map +1 -0
- package/dist/tools/guilds/index.d.ts +3 -0
- package/dist/tools/guilds/index.d.ts.map +1 -0
- package/dist/tools/guilds/index.js +3 -0
- package/dist/tools/guilds/index.js.map +1 -0
- package/dist/tools/guilds/list-guilds.d.ts +3 -0
- package/dist/tools/guilds/list-guilds.d.ts.map +1 -0
- package/dist/tools/guilds/list-guilds.js +25 -0
- package/dist/tools/guilds/list-guilds.js.map +1 -0
- package/dist/tools/health-check.d.ts +3 -0
- package/dist/tools/health-check.d.ts.map +1 -0
- package/dist/tools/health-check.js +45 -0
- package/dist/tools/health-check.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +46 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/members/get-member.d.ts +3 -0
- package/dist/tools/members/get-member.d.ts.map +1 -0
- package/dist/tools/members/get-member.js +30 -0
- package/dist/tools/members/get-member.js.map +1 -0
- package/dist/tools/members/index.d.ts +3 -0
- package/dist/tools/members/index.d.ts.map +1 -0
- package/dist/tools/members/index.js +3 -0
- package/dist/tools/members/index.js.map +1 -0
- package/dist/tools/members/list-members.d.ts +3 -0
- package/dist/tools/members/list-members.d.ts.map +1 -0
- package/dist/tools/members/list-members.js +32 -0
- package/dist/tools/members/list-members.js.map +1 -0
- package/dist/tools/messaging/add-reaction.d.ts +3 -0
- package/dist/tools/messaging/add-reaction.d.ts.map +1 -0
- package/dist/tools/messaging/add-reaction.js +28 -0
- package/dist/tools/messaging/add-reaction.js.map +1 -0
- package/dist/tools/messaging/delete-message.d.ts +3 -0
- package/dist/tools/messaging/delete-message.d.ts.map +1 -0
- package/dist/tools/messaging/delete-message.js +28 -0
- package/dist/tools/messaging/delete-message.js.map +1 -0
- package/dist/tools/messaging/edit-message.d.ts +3 -0
- package/dist/tools/messaging/edit-message.d.ts.map +1 -0
- package/dist/tools/messaging/edit-message.js +33 -0
- package/dist/tools/messaging/edit-message.js.map +1 -0
- package/dist/tools/messaging/get-messages.d.ts +3 -0
- package/dist/tools/messaging/get-messages.d.ts.map +1 -0
- package/dist/tools/messaging/get-messages.js +48 -0
- package/dist/tools/messaging/get-messages.js.map +1 -0
- package/dist/tools/messaging/index.d.ts +6 -0
- package/dist/tools/messaging/index.d.ts.map +1 -0
- package/dist/tools/messaging/index.js +6 -0
- package/dist/tools/messaging/index.js.map +1 -0
- package/dist/tools/messaging/send-message.d.ts +3 -0
- package/dist/tools/messaging/send-message.d.ts.map +1 -0
- package/dist/tools/messaging/send-message.js +40 -0
- package/dist/tools/messaging/send-message.js.map +1 -0
- package/dist/tools/roles/index.d.ts +2 -0
- package/dist/tools/roles/index.d.ts.map +1 -0
- package/dist/tools/roles/index.js +2 -0
- package/dist/tools/roles/index.js.map +1 -0
- package/dist/tools/roles/list-roles.d.ts +3 -0
- package/dist/tools/roles/list-roles.d.ts.map +1 -0
- package/dist/tools/roles/list-roles.js +32 -0
- package/dist/tools/roles/list-roles.js.map +1 -0
- package/dist/tools/threads/create-thread.d.ts +3 -0
- package/dist/tools/threads/create-thread.d.ts.map +1 -0
- package/dist/tools/threads/create-thread.js +46 -0
- package/dist/tools/threads/create-thread.js.map +1 -0
- package/dist/tools/threads/index.d.ts +3 -0
- package/dist/tools/threads/index.d.ts.map +1 -0
- package/dist/tools/threads/index.js +3 -0
- package/dist/tools/threads/index.js.map +1 -0
- package/dist/tools/threads/list-threads.d.ts +3 -0
- package/dist/tools/threads/list-threads.d.ts.map +1 -0
- package/dist/tools/threads/list-threads.js +33 -0
- package/dist/tools/threads/list-threads.js.map +1 -0
- package/dist/tools/types.d.ts +29 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +10 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/transport/stdio.d.ts +3 -0
- package/dist/transport/stdio.d.ts.map +1 -0
- package/dist/transport/stdio.js +8 -0
- package/dist/transport/stdio.js.map +1 -0
- package/dist/utils/cache.d.ts +10 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +27 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +32 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/retry.d.ts +7 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +27 -0
- package/dist/utils/retry.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { toolResult } from "../types.js";
|
|
3
|
+
import { resolveTarget } from "../../routing/resolver.js";
|
|
4
|
+
const inputSchema = z.object({
|
|
5
|
+
message_id: z.string().describe("ID of the message to delete"),
|
|
6
|
+
channel_id: z.string().optional().describe("Direct channel ID"),
|
|
7
|
+
guild_id: z.string().optional().describe("Direct guild ID"),
|
|
8
|
+
project: z.string().optional().describe("Project name for routing"),
|
|
9
|
+
channel: z.string().optional().describe("Channel alias within project"),
|
|
10
|
+
});
|
|
11
|
+
export const deleteMessage = {
|
|
12
|
+
name: "delete_message",
|
|
13
|
+
description: "Delete a message. Bot can only delete its own messages or messages in channels where it has Manage Messages permission.",
|
|
14
|
+
category: "messaging",
|
|
15
|
+
inputSchema,
|
|
16
|
+
destructive: true,
|
|
17
|
+
handle: async (input, ctx) => {
|
|
18
|
+
const target = resolveTarget(input, ctx.config);
|
|
19
|
+
if ("error" in target) {
|
|
20
|
+
return { content: [{ type: "text", text: target.error }], isError: true };
|
|
21
|
+
}
|
|
22
|
+
const channel = await ctx.discord.getChannel(target.channelId);
|
|
23
|
+
const message = await channel.messages.fetch(input.message_id);
|
|
24
|
+
await message.delete();
|
|
25
|
+
return toolResult(`Deleted message ${input.message_id}`);
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=delete-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-message.js","sourceRoot":"","sources":["../../../src/tools/messaging/delete-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC9D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC3D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACnE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CACxE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,yHAAyH;IACtI,QAAQ,EAAE,WAAW;IACrB,WAAW;IACX,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5E,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/D,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;QAEvB,OAAO,UAAU,CAAC,mBAAmB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit-message.d.ts","sourceRoot":"","sources":["../../../src/tools/messaging/edit-message.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAalD,eAAO,MAAM,WAAW,EAAE,cAsBzB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { toolResultJson } from "../types.js";
|
|
3
|
+
import { resolveTarget } from "../../routing/resolver.js";
|
|
4
|
+
const inputSchema = z.object({
|
|
5
|
+
message_id: z.string().describe("ID of the message to edit"),
|
|
6
|
+
content: z.string().min(1).max(2000).describe("New message content"),
|
|
7
|
+
channel_id: z.string().optional().describe("Direct channel ID"),
|
|
8
|
+
guild_id: z.string().optional().describe("Direct guild ID"),
|
|
9
|
+
project: z.string().optional().describe("Project name for routing"),
|
|
10
|
+
channel: z.string().optional().describe("Channel alias within project"),
|
|
11
|
+
});
|
|
12
|
+
export const editMessage = {
|
|
13
|
+
name: "edit_message",
|
|
14
|
+
description: "Edit a message sent by the bot.",
|
|
15
|
+
category: "messaging",
|
|
16
|
+
inputSchema,
|
|
17
|
+
handle: async (input, ctx) => {
|
|
18
|
+
const target = resolveTarget(input, ctx.config);
|
|
19
|
+
if ("error" in target) {
|
|
20
|
+
return { content: [{ type: "text", text: target.error }], isError: true };
|
|
21
|
+
}
|
|
22
|
+
const channel = await ctx.discord.getChannel(target.channelId);
|
|
23
|
+
const message = await channel.messages.fetch(input.message_id);
|
|
24
|
+
const edited = await message.edit(input.content);
|
|
25
|
+
return toolResultJson({
|
|
26
|
+
id: edited.id,
|
|
27
|
+
channel_id: edited.channelId,
|
|
28
|
+
content: edited.content,
|
|
29
|
+
edited_timestamp: edited.editedAt?.toISOString(),
|
|
30
|
+
});
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=edit-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit-message.js","sourceRoot":"","sources":["../../../src/tools/messaging/edit-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC5D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACpE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC3D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACnE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CACxE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,iCAAiC;IAC9C,QAAQ,EAAE,WAAW;IACrB,WAAW;IACX,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5E,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEjD,OAAO,cAAc,CAAC;YACpB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,UAAU,EAAE,MAAM,CAAC,SAAS;YAC5B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE;SACjD,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-messages.d.ts","sourceRoot":"","sources":["../../../src/tools/messaging/get-messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAclD,eAAO,MAAM,WAAW,EAAE,cAsCzB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { toolResultJson } from "../types.js";
|
|
3
|
+
import { resolveTarget } from "../../routing/resolver.js";
|
|
4
|
+
const inputSchema = z.object({
|
|
5
|
+
channel_id: z.string().optional().describe("Direct channel ID"),
|
|
6
|
+
guild_id: z.string().optional().describe("Direct guild ID"),
|
|
7
|
+
project: z.string().optional().describe("Project name for routing"),
|
|
8
|
+
channel: z.string().optional().describe("Channel alias within project"),
|
|
9
|
+
limit: z.number().min(1).max(100).default(50).describe("Number of messages to fetch (max 100)"),
|
|
10
|
+
before: z.string().optional().describe("Get messages before this message ID"),
|
|
11
|
+
after: z.string().optional().describe("Get messages after this message ID"),
|
|
12
|
+
});
|
|
13
|
+
export const getMessages = {
|
|
14
|
+
name: "get_messages",
|
|
15
|
+
description: "Fetch recent messages from a Discord channel.",
|
|
16
|
+
category: "messaging",
|
|
17
|
+
inputSchema,
|
|
18
|
+
handle: async (input, ctx) => {
|
|
19
|
+
const target = resolveTarget(input, ctx.config);
|
|
20
|
+
if ("error" in target) {
|
|
21
|
+
return { content: [{ type: "text", text: target.error }], isError: true };
|
|
22
|
+
}
|
|
23
|
+
const channel = await ctx.discord.getChannel(target.channelId);
|
|
24
|
+
const messages = await channel.messages.fetch({
|
|
25
|
+
limit: input.limit,
|
|
26
|
+
...(input.before ? { before: input.before } : {}),
|
|
27
|
+
...(input.after ? { after: input.after } : {}),
|
|
28
|
+
});
|
|
29
|
+
const result = [...messages.values()].map((msg) => ({
|
|
30
|
+
id: msg.id,
|
|
31
|
+
author: msg.author.tag,
|
|
32
|
+
content: msg.content,
|
|
33
|
+
timestamp: msg.createdAt.toISOString(),
|
|
34
|
+
attachments: msg.attachments.size,
|
|
35
|
+
embeds: msg.embeds.length,
|
|
36
|
+
reactions: [...(msg.reactions?.cache?.values?.() ?? [])].map((r) => ({
|
|
37
|
+
emoji: r.emoji.name,
|
|
38
|
+
count: r.count,
|
|
39
|
+
})),
|
|
40
|
+
}));
|
|
41
|
+
return toolResultJson({
|
|
42
|
+
channel_id: target.channelId,
|
|
43
|
+
count: result.length,
|
|
44
|
+
messages: result,
|
|
45
|
+
});
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=get-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-messages.js","sourceRoot":"","sources":["../../../src/tools/messaging/get-messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { sendMessage } from "./send-message.js";
|
|
2
|
+
export { getMessages } from "./get-messages.js";
|
|
3
|
+
export { editMessage } from "./edit-message.js";
|
|
4
|
+
export { deleteMessage } from "./delete-message.js";
|
|
5
|
+
export { addReaction } from "./add-reaction.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/messaging/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { sendMessage } from "./send-message.js";
|
|
2
|
+
export { getMessages } from "./get-messages.js";
|
|
3
|
+
export { editMessage } from "./edit-message.js";
|
|
4
|
+
export { deleteMessage } from "./delete-message.js";
|
|
5
|
+
export { addReaction } from "./add-reaction.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/messaging/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send-message.d.ts","sourceRoot":"","sources":["../../../src/tools/messaging/send-message.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAclD,eAAO,MAAM,WAAW,EAAE,cA8BzB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { toolResultJson } from "../types.js";
|
|
3
|
+
import { resolveTarget } from "../../routing/resolver.js";
|
|
4
|
+
const inputSchema = z.object({
|
|
5
|
+
content: z.string().min(1).max(2000).describe("Message content (max 2000 chars)"),
|
|
6
|
+
channel_id: z.string().optional().describe("Direct channel ID"),
|
|
7
|
+
guild_id: z.string().optional().describe("Direct guild ID"),
|
|
8
|
+
project: z.string().optional().describe("Project name for routing"),
|
|
9
|
+
channel: z.string().optional().describe("Channel alias within project"),
|
|
10
|
+
notification_type: z.string().optional().describe("Notification type for auto-routing"),
|
|
11
|
+
reply_to: z.string().optional().describe("Message ID to reply to"),
|
|
12
|
+
});
|
|
13
|
+
export const sendMessage = {
|
|
14
|
+
name: "send_message",
|
|
15
|
+
description: "Send a message to a Discord channel. Supports project routing (project + channel alias), notification routing (notification_type), or direct channel_id.",
|
|
16
|
+
category: "messaging",
|
|
17
|
+
inputSchema,
|
|
18
|
+
handle: async (input, ctx) => {
|
|
19
|
+
const target = resolveTarget(input, ctx.config);
|
|
20
|
+
if ("error" in target) {
|
|
21
|
+
return { content: [{ type: "text", text: target.error }], isError: true };
|
|
22
|
+
}
|
|
23
|
+
const channel = await ctx.discord.getChannel(target.channelId);
|
|
24
|
+
const message = await channel.send({
|
|
25
|
+
content: input.content,
|
|
26
|
+
...(input.reply_to
|
|
27
|
+
? { reply: { messageReference: input.reply_to } }
|
|
28
|
+
: {}),
|
|
29
|
+
});
|
|
30
|
+
return toolResultJson({
|
|
31
|
+
id: message.id,
|
|
32
|
+
channel_id: message.channelId,
|
|
33
|
+
content: message.content,
|
|
34
|
+
author: message.author.tag,
|
|
35
|
+
timestamp: message.createdAt.toISOString(),
|
|
36
|
+
...(target.project ? { project: target.project } : {}),
|
|
37
|
+
});
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=send-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send-message.js","sourceRoot":"","sources":["../../../src/tools/messaging/send-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACjF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC3D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACnE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACvE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACvF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;CACnE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,0JAA0J;IAC5J,QAAQ,EAAE,WAAW;IACrB,WAAW;IACX,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5E,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE/D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YACjC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,GAAG,CAAC,KAAK,CAAC,QAAQ;gBAChB,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,gBAAgB,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE;gBACjD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QAEH,OAAO,cAAc,CAAC;YACpB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;YAC1C,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvD,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/roles/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/roles/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-roles.d.ts","sourceRoot":"","sources":["../../../src/tools/roles/list-roles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOlD,eAAO,MAAM,SAAS,EAAE,cA2BvB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { toolResultJson } from "../types.js";
|
|
3
|
+
const inputSchema = z.object({
|
|
4
|
+
guild_id: z.string().describe("Guild ID to list roles from"),
|
|
5
|
+
});
|
|
6
|
+
export const listRoles = {
|
|
7
|
+
name: "list_roles",
|
|
8
|
+
description: "List all roles in a guild.",
|
|
9
|
+
category: "roles",
|
|
10
|
+
inputSchema,
|
|
11
|
+
requiresGuild: true,
|
|
12
|
+
handle: async (input, ctx) => {
|
|
13
|
+
const guild = await ctx.discord.getGuild(input.guild_id);
|
|
14
|
+
const roles = await guild.roles.fetch();
|
|
15
|
+
const result = roles.map((role) => ({
|
|
16
|
+
id: role.id,
|
|
17
|
+
name: role.name,
|
|
18
|
+
color: role.hexColor,
|
|
19
|
+
position: role.position,
|
|
20
|
+
mentionable: role.mentionable,
|
|
21
|
+
managed: role.managed,
|
|
22
|
+
member_count: role.members.size,
|
|
23
|
+
permissions: role.permissions.toArray(),
|
|
24
|
+
}));
|
|
25
|
+
return toolResultJson({
|
|
26
|
+
guild_id: input.guild_id,
|
|
27
|
+
count: result.length,
|
|
28
|
+
roles: [...result].sort((a, b) => b.position - a.position),
|
|
29
|
+
});
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=list-roles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-roles.js","sourceRoot":"","sources":["../../../src/tools/roles/list-roles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;CAC7D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAmB;IACvC,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,4BAA4B;IACzC,QAAQ,EAAE,OAAO;IACjB,WAAW;IACX,aAAa,EAAE,IAAI;IACnB,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAExC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,QAAQ;YACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;SACxC,CAAC,CAAC,CAAC;QAEJ,OAAO,cAAc,CAAC;YACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,MAAM,CAAC,MAAM;YACpB,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;SAC3D,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-thread.d.ts","sourceRoot":"","sources":["../../../src/tools/threads/create-thread.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAiBlD,eAAO,MAAM,YAAY,EAAE,cAgC1B,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { toolResultJson } from "../types.js";
|
|
3
|
+
import { resolveTarget } from "../../routing/resolver.js";
|
|
4
|
+
const inputSchema = z.object({
|
|
5
|
+
name: z.string().min(1).max(100).describe("Thread name"),
|
|
6
|
+
channel_id: z.string().optional().describe("Direct channel ID"),
|
|
7
|
+
guild_id: z.string().optional().describe("Direct guild ID"),
|
|
8
|
+
project: z.string().optional().describe("Project name for routing"),
|
|
9
|
+
channel: z.string().optional().describe("Channel alias within project"),
|
|
10
|
+
message_id: z.string().optional().describe("Message ID to create thread from"),
|
|
11
|
+
auto_archive_duration: z
|
|
12
|
+
.enum(["60", "1440", "4320", "10080"])
|
|
13
|
+
.default("1440")
|
|
14
|
+
.describe("Auto-archive duration in minutes (60, 1440, 4320, 10080)"),
|
|
15
|
+
});
|
|
16
|
+
export const createThread = {
|
|
17
|
+
name: "create_thread",
|
|
18
|
+
description: "Create a thread in a channel, optionally from an existing message.",
|
|
19
|
+
category: "threads",
|
|
20
|
+
inputSchema,
|
|
21
|
+
handle: async (input, ctx) => {
|
|
22
|
+
const target = resolveTarget(input, ctx.config);
|
|
23
|
+
if ("error" in target) {
|
|
24
|
+
return { content: [{ type: "text", text: target.error }], isError: true };
|
|
25
|
+
}
|
|
26
|
+
const channel = await ctx.discord.getChannel(target.channelId);
|
|
27
|
+
const thread = input.message_id
|
|
28
|
+
? await channel.threads.create({
|
|
29
|
+
name: input.name,
|
|
30
|
+
startMessage: input.message_id,
|
|
31
|
+
autoArchiveDuration: Number(input.auto_archive_duration),
|
|
32
|
+
})
|
|
33
|
+
: await channel.threads.create({
|
|
34
|
+
name: input.name,
|
|
35
|
+
autoArchiveDuration: Number(input.auto_archive_duration),
|
|
36
|
+
});
|
|
37
|
+
return toolResultJson({
|
|
38
|
+
id: thread.id,
|
|
39
|
+
name: thread.name,
|
|
40
|
+
parent_id: thread.parentId,
|
|
41
|
+
archived: thread.archived,
|
|
42
|
+
auto_archive_duration: thread.autoArchiveDuration,
|
|
43
|
+
});
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=create-thread.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-thread.js","sourceRoot":"","sources":["../../../src/tools/threads/create-thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;IACxD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC3D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACnE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACvE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC9E,qBAAqB,EAAE,CAAC;SACrB,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;SACrC,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CAAC,0DAA0D,CAAC;CACxE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,oEAAoE;IACjF,QAAQ,EAAE,SAAS;IACnB,WAAW;IACX,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC5E,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE/D,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU;YAC7B,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,YAAY,EAAE,KAAK,CAAC,UAAU;gBAC9B,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAA6B;aACrF,CAAC;YACJ,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAA6B;aACrF,CAAC,CAAC;QAEP,OAAO,cAAc,CAAC;YACpB,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,MAAM,CAAC,QAAQ;YAC1B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,qBAAqB,EAAE,MAAM,CAAC,mBAAmB;SAClD,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/threads/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/threads/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-threads.d.ts","sourceRoot":"","sources":["../../../src/tools/threads/list-threads.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAQlD,eAAO,MAAM,WAAW,EAAE,cA2BzB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { toolResultJson } from "../types.js";
|
|
3
|
+
const inputSchema = z.object({
|
|
4
|
+
guild_id: z.string().describe("Guild ID to list threads from"),
|
|
5
|
+
archived: z.boolean().default(false).describe("Include archived threads"),
|
|
6
|
+
});
|
|
7
|
+
export const listThreads = {
|
|
8
|
+
name: "list_threads",
|
|
9
|
+
description: "List active (and optionally archived) threads in a guild.",
|
|
10
|
+
category: "threads",
|
|
11
|
+
inputSchema,
|
|
12
|
+
requiresGuild: true,
|
|
13
|
+
handle: async (input, ctx) => {
|
|
14
|
+
const guild = await ctx.discord.getGuild(input.guild_id);
|
|
15
|
+
const active = await guild.channels.fetchActiveThreads();
|
|
16
|
+
const threads = active.threads.map((thread) => ({
|
|
17
|
+
id: thread.id,
|
|
18
|
+
name: thread.name,
|
|
19
|
+
parent_id: thread.parentId,
|
|
20
|
+
parent_name: thread.parent?.name,
|
|
21
|
+
archived: thread.archived,
|
|
22
|
+
message_count: thread.messageCount,
|
|
23
|
+
member_count: thread.memberCount,
|
|
24
|
+
created_at: thread.createdAt?.toISOString(),
|
|
25
|
+
}));
|
|
26
|
+
return toolResultJson({
|
|
27
|
+
guild_id: input.guild_id,
|
|
28
|
+
count: threads.length,
|
|
29
|
+
threads,
|
|
30
|
+
});
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=list-threads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-threads.js","sourceRoot":"","sources":["../../../src/tools/threads/list-threads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC9D,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CAC1E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,2DAA2D;IACxE,QAAQ,EAAE,SAAS;IACnB,WAAW;IACX,aAAa,EAAE,IAAI;IACnB,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAEzD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9C,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,MAAM,CAAC,QAAQ;YAC1B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI;YAChC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,aAAa,EAAE,MAAM,CAAC,YAAY;YAClC,YAAY,EAAE,MAAM,CAAC,WAAW;YAChC,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE;SAC5C,CAAC,CAAC,CAAC;QAEJ,OAAO,cAAc,CAAC;YACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,OAAO,CAAC,MAAM;YACrB,OAAO;SACR,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type { PermissionResolvable } from "discord.js";
|
|
3
|
+
import type { DiscordClient } from "../client.js";
|
|
4
|
+
import type { LoadedConfig } from "../config/index.js";
|
|
5
|
+
export interface ToolContext {
|
|
6
|
+
discord: DiscordClient;
|
|
7
|
+
config: LoadedConfig;
|
|
8
|
+
}
|
|
9
|
+
export interface ToolResult {
|
|
10
|
+
content: Array<{
|
|
11
|
+
type: "text";
|
|
12
|
+
text: string;
|
|
13
|
+
}>;
|
|
14
|
+
isError?: boolean;
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
}
|
|
17
|
+
export interface ToolDefinition {
|
|
18
|
+
name: string;
|
|
19
|
+
description: string;
|
|
20
|
+
category: string;
|
|
21
|
+
inputSchema: z.ZodType;
|
|
22
|
+
permissions?: PermissionResolvable[];
|
|
23
|
+
destructive?: boolean;
|
|
24
|
+
requiresGuild?: boolean;
|
|
25
|
+
handle: (input: any, ctx: ToolContext) => Promise<ToolResult>;
|
|
26
|
+
}
|
|
27
|
+
export declare function toolResult(text: string, isError?: boolean): ToolResult;
|
|
28
|
+
export declare function toolResultJson(data: unknown, isError?: boolean): ToolResult;
|
|
29
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAC/D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,CAKtE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,UAAU,CAE3E"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function toolResult(text, isError) {
|
|
2
|
+
return {
|
|
3
|
+
content: [{ type: "text", text }],
|
|
4
|
+
...(isError ? { isError: true } : {}),
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
export function toolResultJson(data, isError) {
|
|
8
|
+
return toolResult(JSON.stringify(data, null, 2), isError);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AA2BA,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,OAAiB;IACxD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACjC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAa,EAAE,OAAiB;IAC7D,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/transport/stdio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1E"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
2
|
+
import { logger } from "../utils/logger.js";
|
|
3
|
+
export async function startStdioTransport(server) {
|
|
4
|
+
const transport = new StdioServerTransport();
|
|
5
|
+
await server.connect(transport);
|
|
6
|
+
logger.info("MCP server started on stdio transport");
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=stdio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/transport/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAiB;IACzD,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class TTLCache<T> {
|
|
2
|
+
private store;
|
|
3
|
+
private readonly ttlMs;
|
|
4
|
+
constructor(ttlSeconds?: number);
|
|
5
|
+
get(key: string): T | undefined;
|
|
6
|
+
set(key: string, value: T): void;
|
|
7
|
+
delete(key: string): void;
|
|
8
|
+
clear(): void;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAKA,qBAAa,QAAQ,CAAC,CAAC;IACrB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,UAAU,GAAE,MAAY;IAIpC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAU/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAIhC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export class TTLCache {
|
|
2
|
+
store = new Map();
|
|
3
|
+
ttlMs;
|
|
4
|
+
constructor(ttlSeconds = 300) {
|
|
5
|
+
this.ttlMs = ttlSeconds * 1000;
|
|
6
|
+
}
|
|
7
|
+
get(key) {
|
|
8
|
+
const entry = this.store.get(key);
|
|
9
|
+
if (!entry)
|
|
10
|
+
return undefined;
|
|
11
|
+
if (Date.now() > entry.expiresAt) {
|
|
12
|
+
this.store.delete(key);
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
return entry.value;
|
|
16
|
+
}
|
|
17
|
+
set(key, value) {
|
|
18
|
+
this.store.set(key, { value, expiresAt: Date.now() + this.ttlMs });
|
|
19
|
+
}
|
|
20
|
+
delete(key) {
|
|
21
|
+
this.store.delete(key);
|
|
22
|
+
}
|
|
23
|
+
clear() {
|
|
24
|
+
this.store.clear();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,QAAQ;IACX,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChC,KAAK,CAAS;IAE/B,YAAY,aAAqB,GAAG;QAClC,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC;IACjC,CAAC;IAED,GAAG,CAAC,GAAW;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured stderr logger — MCP servers must only use stderr for logging
|
|
3
|
+
* since stdout is reserved for the protocol.
|
|
4
|
+
*/
|
|
5
|
+
export type LogLevel = "debug" | "info" | "warn" | "error";
|
|
6
|
+
export declare function setLogLevel(level: LogLevel): void;
|
|
7
|
+
export declare function log(level: LogLevel, message: string, data?: Record<string, unknown>): void;
|
|
8
|
+
export declare const logger: {
|
|
9
|
+
debug: (msg: string, data?: Record<string, unknown>) => void;
|
|
10
|
+
info: (msg: string, data?: Record<string, unknown>) => void;
|
|
11
|
+
warn: (msg: string, data?: Record<string, unknown>) => void;
|
|
12
|
+
error: (msg: string, data?: Record<string, unknown>) => void;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAW3D,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEjD;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAW1F;AAED,eAAO,MAAM,MAAM;iBACJ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBACvC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBACtC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;iBACrC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CACpD,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured stderr logger — MCP servers must only use stderr for logging
|
|
3
|
+
* since stdout is reserved for the protocol.
|
|
4
|
+
*/
|
|
5
|
+
const LOG_LEVELS = {
|
|
6
|
+
debug: 0,
|
|
7
|
+
info: 1,
|
|
8
|
+
warn: 2,
|
|
9
|
+
error: 3,
|
|
10
|
+
};
|
|
11
|
+
let currentLevel = process.env.DISCORD_OPS_LOG_LEVEL ?? "info";
|
|
12
|
+
export function setLogLevel(level) {
|
|
13
|
+
currentLevel = level;
|
|
14
|
+
}
|
|
15
|
+
export function log(level, message, data) {
|
|
16
|
+
if (LOG_LEVELS[level] < LOG_LEVELS[currentLevel])
|
|
17
|
+
return;
|
|
18
|
+
const entry = {
|
|
19
|
+
ts: new Date().toISOString(),
|
|
20
|
+
level,
|
|
21
|
+
msg: message,
|
|
22
|
+
...data,
|
|
23
|
+
};
|
|
24
|
+
process.stderr.write(JSON.stringify(entry) + "\n");
|
|
25
|
+
}
|
|
26
|
+
export const logger = {
|
|
27
|
+
debug: (msg, data) => log("debug", msg, data),
|
|
28
|
+
info: (msg, data) => log("info", msg, data),
|
|
29
|
+
warn: (msg, data) => log("warn", msg, data),
|
|
30
|
+
error: (msg, data) => log("error", msg, data),
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,UAAU,GAA6B;IAC3C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,IAAI,YAAY,GAAc,OAAO,CAAC,GAAG,CAAC,qBAAkC,IAAI,MAAM,CAAC;AAEvF,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,YAAY,GAAG,KAAK,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,KAAe,EAAE,OAAe,EAAE,IAA8B;IAClF,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO;IAEzD,MAAM,KAAK,GAAG;QACZ,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5B,KAAK;QACL,GAAG,EAAE,OAAO;QACZ,GAAG,IAAI;KACR,CAAC;IAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,CAAC,GAAW,EAAE,IAA8B,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC;IAC/E,IAAI,EAAE,CAAC,GAAW,EAAE,IAA8B,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC;IAC7E,IAAI,EAAE,CAAC,GAAW,EAAE,IAA8B,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC;IAC7E,KAAK,EAAE,CAAC,GAAW,EAAE,IAA8B,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC;CAChF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/utils/retry.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAQD,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,CAAC,CAAC,CAsBZ"}
|