@commandkit/ai 0.1.0-dev.20250611125312 → 0.1.0-dev.20250611155146
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/augmentation.d.ts +17 -0
- package/dist/augmentation.js +32 -0
- package/dist/configure.d.ts +58 -0
- package/dist/configure.js +83 -0
- package/dist/context.d.ts +16 -0
- package/dist/context.js +5 -1
- package/dist/index.d.ts +13 -0
- package/dist/index.js +28 -1
- package/dist/plugin.d.ts +9 -31
- package/dist/plugin.js +78 -239
- package/dist/system-prompt.d.ts +6 -0
- package/dist/system-prompt.js +34 -0
- package/dist/tools/common/index.d.ts +76 -0
- package/dist/tools/common/index.js +48 -0
- package/dist/tools/get-available-commands.d.ts +14 -0
- package/dist/tools/get-available-commands.js +23 -0
- package/dist/tools/get-channel-by-id.d.ts +12 -0
- package/dist/tools/get-channel-by-id.js +35 -0
- package/dist/tools/get-current-client-info.d.ts +4 -0
- package/dist/tools/get-current-client-info.js +21 -0
- package/dist/tools/get-guild-by-id.d.ts +36 -0
- package/dist/tools/get-guild-by-id.js +41 -0
- package/dist/tools/get-user-by-id.d.ts +12 -0
- package/dist/tools/get-user-by-id.js +30 -0
- package/dist/types.d.ts +11 -6
- package/dist/utils.d.ts +6 -0
- package/dist/utils.js +24 -0
- package/package.json +3 -3
- package/dist/schema.d.ts +0 -205
- package/dist/schema.js +0 -105
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getChannelById: import("ai").Tool<z.ZodObject<{
|
|
3
|
+
channelId: z.ZodString;
|
|
4
|
+
}, "strip", z.ZodTypeAny, {
|
|
5
|
+
channelId: string;
|
|
6
|
+
}, {
|
|
7
|
+
channelId: string;
|
|
8
|
+
}>, unknown> & {
|
|
9
|
+
execute: (args: {
|
|
10
|
+
channelId: string;
|
|
11
|
+
}, options: import("ai").ToolExecutionOptions) => PromiseLike<unknown>;
|
|
12
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getChannelById = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const common_1 = require("./common");
|
|
6
|
+
const commandkit_1 = require("commandkit");
|
|
7
|
+
exports.getChannelById = (0, common_1.createTool)({
|
|
8
|
+
description: 'Get a channel by its ID.',
|
|
9
|
+
name: 'getChannelById',
|
|
10
|
+
parameters: zod_1.z.object({
|
|
11
|
+
channelId: zod_1.z.string().describe('The ID of the channel to retrieve.'),
|
|
12
|
+
}),
|
|
13
|
+
async execute(ctx, params) {
|
|
14
|
+
try {
|
|
15
|
+
const { client } = ctx;
|
|
16
|
+
const channel = await client.channels.fetch(params.channelId, {
|
|
17
|
+
force: false,
|
|
18
|
+
cache: true,
|
|
19
|
+
});
|
|
20
|
+
if (!channel) {
|
|
21
|
+
return {
|
|
22
|
+
error: 'Channel not found',
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
return channel.toJSON();
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
commandkit_1.Logger.error(e);
|
|
29
|
+
return {
|
|
30
|
+
error: 'Could not fetch the channel',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWNoYW5uZWwtYnktaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9vbHMvZ2V0LWNoYW5uZWwtYnktaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXdCO0FBQ3hCLHFDQUFzQztBQUN0QywyQ0FBb0M7QUFFdkIsUUFBQSxjQUFjLEdBQUcsSUFBQSxtQkFBVSxFQUFDO0lBQ3ZDLFdBQVcsRUFBRSwwQkFBMEI7SUFDdkMsSUFBSSxFQUFFLGdCQUFnQjtJQUN0QixVQUFVLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNuQixTQUFTLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxvQ0FBb0MsQ0FBQztLQUNyRSxDQUFDO0lBQ0YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTTtRQUN2QixJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDO1lBQ3ZCLE1BQU0sT0FBTyxHQUFHLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtnQkFDNUQsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsT0FBTztvQkFDTCxLQUFLLEVBQUUsbUJBQW1CO2lCQUMzQixDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsbUJBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFaEIsT0FBTztnQkFDTCxLQUFLLEVBQUUsNkJBQTZCO2FBQ3JDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCurrentClientInfo = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const common_1 = require("./common");
|
|
6
|
+
exports.getCurrentClientInfo = (0, common_1.createTool)({
|
|
7
|
+
name: 'getCurrentClientInfo',
|
|
8
|
+
description: 'Get information about the current discord bot user',
|
|
9
|
+
parameters: zod_1.z.object({}),
|
|
10
|
+
execute: async (ctx, params) => {
|
|
11
|
+
const { client } = ctx;
|
|
12
|
+
const user = client.user;
|
|
13
|
+
if (!user) {
|
|
14
|
+
return {
|
|
15
|
+
error: 'Bot user not found',
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
return user.toJSON();
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWN1cnJlbnQtY2xpZW50LWluZm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9vbHMvZ2V0LWN1cnJlbnQtY2xpZW50LWluZm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXdCO0FBQ3hCLHFDQUFzQztBQUV6QixRQUFBLG9CQUFvQixHQUFHLElBQUEsbUJBQVUsRUFBQztJQUM3QyxJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLFdBQVcsRUFBRSxvREFBb0Q7SUFDakUsVUFBVSxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ3hCLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQzdCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDdkIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUV6QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPO2dCQUNMLEtBQUssRUFBRSxvQkFBb0I7YUFDNUIsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN2QixDQUFDO0NBQ0YsQ0FBQyxDQUFDIn0=
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getGuildById: import("ai").Tool<z.ZodObject<{
|
|
3
|
+
guildId: z.ZodString;
|
|
4
|
+
}, "strip", z.ZodTypeAny, {
|
|
5
|
+
guildId: string;
|
|
6
|
+
}, {
|
|
7
|
+
guildId: string;
|
|
8
|
+
}>, {
|
|
9
|
+
error: string;
|
|
10
|
+
id?: undefined;
|
|
11
|
+
name?: undefined;
|
|
12
|
+
icon?: undefined;
|
|
13
|
+
memberCount?: undefined;
|
|
14
|
+
} | {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
icon: string | null;
|
|
18
|
+
memberCount: number;
|
|
19
|
+
error?: undefined;
|
|
20
|
+
}> & {
|
|
21
|
+
execute: (args: {
|
|
22
|
+
guildId: string;
|
|
23
|
+
}, options: import("ai").ToolExecutionOptions) => PromiseLike<{
|
|
24
|
+
error: string;
|
|
25
|
+
id?: undefined;
|
|
26
|
+
name?: undefined;
|
|
27
|
+
icon?: undefined;
|
|
28
|
+
memberCount?: undefined;
|
|
29
|
+
} | {
|
|
30
|
+
id: string;
|
|
31
|
+
name: string;
|
|
32
|
+
icon: string | null;
|
|
33
|
+
memberCount: number;
|
|
34
|
+
error?: undefined;
|
|
35
|
+
}>;
|
|
36
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getGuildById = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const common_1 = require("./common");
|
|
6
|
+
const commandkit_1 = require("commandkit");
|
|
7
|
+
exports.getGuildById = (0, common_1.createTool)({
|
|
8
|
+
description: 'Get a guild by its ID.',
|
|
9
|
+
name: 'getGuildById',
|
|
10
|
+
parameters: zod_1.z.object({
|
|
11
|
+
guildId: zod_1.z.string().describe('The ID of the guild to retrieve.'),
|
|
12
|
+
}),
|
|
13
|
+
async execute(ctx, params) {
|
|
14
|
+
try {
|
|
15
|
+
const { client } = ctx;
|
|
16
|
+
const guild = await client.guilds.fetch({
|
|
17
|
+
guild: params.guildId,
|
|
18
|
+
force: false,
|
|
19
|
+
cache: true,
|
|
20
|
+
});
|
|
21
|
+
if (!guild) {
|
|
22
|
+
return {
|
|
23
|
+
error: 'Guild not found',
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
id: guild.id,
|
|
28
|
+
name: guild.name,
|
|
29
|
+
icon: guild.iconURL(),
|
|
30
|
+
memberCount: guild.approximateMemberCount ?? guild.memberCount,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
commandkit_1.Logger.error(e);
|
|
35
|
+
return {
|
|
36
|
+
error: 'Could not fetch the guild',
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWd1aWxkLWJ5LWlkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rvb2xzL2dldC1ndWlsZC1ieS1pZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBd0I7QUFDeEIscUNBQXNDO0FBQ3RDLDJDQUFvQztBQUV2QixRQUFBLFlBQVksR0FBRyxJQUFBLG1CQUFVLEVBQUM7SUFDckMsV0FBVyxFQUFFLHdCQUF3QjtJQUNyQyxJQUFJLEVBQUUsY0FBYztJQUNwQixVQUFVLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNuQixPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxrQ0FBa0MsQ0FBQztLQUNqRSxDQUFDO0lBQ0YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTTtRQUN2QixJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDO1lBQ3ZCLE1BQU0sS0FBSyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ3RDLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTztnQkFDckIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1gsT0FBTztvQkFDTCxLQUFLLEVBQUUsaUJBQWlCO2lCQUN6QixDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU87Z0JBQ0wsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNaLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDaEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUU7Z0JBQ3JCLFdBQVcsRUFBRSxLQUFLLENBQUMsc0JBQXNCLElBQUksS0FBSyxDQUFDLFdBQVc7YUFDL0QsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsbUJBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFaEIsT0FBTztnQkFDTCxLQUFLLEVBQUUsMkJBQTJCO2FBQ25DLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getUserById: import("ai").Tool<z.ZodObject<{
|
|
3
|
+
userId: z.ZodString;
|
|
4
|
+
}, "strip", z.ZodTypeAny, {
|
|
5
|
+
userId: string;
|
|
6
|
+
}, {
|
|
7
|
+
userId: string;
|
|
8
|
+
}>, unknown> & {
|
|
9
|
+
execute: (args: {
|
|
10
|
+
userId: string;
|
|
11
|
+
}, options: import("ai").ToolExecutionOptions) => PromiseLike<unknown>;
|
|
12
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getUserById = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const common_1 = require("./common");
|
|
6
|
+
const commandkit_1 = require("commandkit");
|
|
7
|
+
exports.getUserById = (0, common_1.createTool)({
|
|
8
|
+
description: 'Get a user by their ID.',
|
|
9
|
+
name: 'getUserById',
|
|
10
|
+
parameters: zod_1.z.object({
|
|
11
|
+
userId: zod_1.z.string().describe('The ID of the user to retrieve.'),
|
|
12
|
+
}),
|
|
13
|
+
async execute(ctx, params) {
|
|
14
|
+
try {
|
|
15
|
+
const { client } = ctx;
|
|
16
|
+
const user = await client.users.fetch(params.userId, {
|
|
17
|
+
force: false,
|
|
18
|
+
cache: true,
|
|
19
|
+
});
|
|
20
|
+
return user.toJSON();
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
commandkit_1.Logger.error(e);
|
|
24
|
+
return {
|
|
25
|
+
error: 'Could not fetch the user',
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXVzZXItYnktaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9vbHMvZ2V0LXVzZXItYnktaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXdCO0FBQ3hCLHFDQUFzQztBQUN0QywyQ0FBb0M7QUFFdkIsUUFBQSxXQUFXLEdBQUcsSUFBQSxtQkFBVSxFQUFDO0lBQ3BDLFdBQVcsRUFBRSx5QkFBeUI7SUFDdEMsSUFBSSxFQUFFLGFBQWE7SUFDbkIsVUFBVSxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUM7UUFDbkIsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsaUNBQWlDLENBQUM7S0FDL0QsQ0FBQztJQUNGLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU07UUFDdkIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQztZQUN2QixNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQ25ELEtBQUssRUFBRSxLQUFLO2dCQUNaLEtBQUssRUFBRSxJQUFJO2FBQ1osQ0FBQyxDQUFDO1lBRUgsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxtQkFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVoQixPQUFPO2dCQUNMLEtBQUssRUFBRSwwQkFBMEI7YUFDbEMsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0YsQ0FBQyxDQUFDIn0=
|
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Tool, type generateText } from 'ai';
|
|
2
2
|
import { Message } from 'discord.js';
|
|
3
3
|
import { AiContext } from './context';
|
|
4
|
+
import { LoadedCommand } from 'commandkit';
|
|
5
|
+
/**
|
|
6
|
+
* Represents the result of an AI text generation operation.
|
|
7
|
+
*/
|
|
8
|
+
export type AIGenerateResult = Awaited<ReturnType<typeof generateText>>;
|
|
4
9
|
/**
|
|
5
10
|
* Function type for filtering commands based on their name.
|
|
6
11
|
* @param commandName - The name of the command to filter.
|
|
@@ -18,11 +23,11 @@ export type MessageFilter = (message: Message) => Promise<boolean>;
|
|
|
18
23
|
* @param message - The message to base the model selection on.
|
|
19
24
|
* @returns A promise that resolves to an object containing the selected model and optional metadata.
|
|
20
25
|
*/
|
|
21
|
-
export type SelectAiModel = (message: Message) => Promise<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
+
export type SelectAiModel = (ctx: AiContext, message: Message) => Promise<SelectAiModelResult>;
|
|
27
|
+
export type SelectAiModelResult = Parameters<typeof generateText>[0];
|
|
28
|
+
export type CommandTool = LoadedCommand & {
|
|
29
|
+
tool: Tool;
|
|
30
|
+
};
|
|
26
31
|
/**
|
|
27
32
|
* Options for the AI plugin.
|
|
28
33
|
*/
|
package/dist/utils.d.ts
ADDED
package/dist/utils.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTypingIndicator = createTypingIndicator;
|
|
4
|
+
/**
|
|
5
|
+
* @private
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
async function createTypingIndicator(channel) {
|
|
9
|
+
let stopped = false;
|
|
10
|
+
const runner = async () => {
|
|
11
|
+
if (stopped)
|
|
12
|
+
return clearInterval(typingInterval);
|
|
13
|
+
if (channel.isSendable()) {
|
|
14
|
+
await channel.sendTyping().catch(Object);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const typingInterval = setInterval(runner, 3000).unref();
|
|
18
|
+
await runner();
|
|
19
|
+
return () => {
|
|
20
|
+
stopped = true;
|
|
21
|
+
clearInterval(typingInterval);
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSxzREFxQkM7QUF6QkQ7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLHFCQUFxQixDQUN6QyxPQUF5QjtJQUV6QixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFFcEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFDeEIsSUFBSSxPQUFPO1lBQUUsT0FBTyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFbEQsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUN6QixNQUFNLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFekQsTUFBTSxNQUFNLEVBQUUsQ0FBQztJQUVmLE9BQU8sR0FBRyxFQUFFO1FBQ1YsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNmLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUM7QUFDSixDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@commandkit/ai",
|
|
3
|
-
"version": "0.1.0-dev.
|
|
3
|
+
"version": "0.1.0-dev.20250611155146",
|
|
4
4
|
"description": "Supercharge your CommandKit bot with AI capabilities",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist"
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"discord.js": "^14.19.3",
|
|
26
26
|
"typescript": "^5.7.3",
|
|
27
|
-
"
|
|
28
|
-
"
|
|
27
|
+
"tsconfig": "0.0.0-dev.20250611155146",
|
|
28
|
+
"commandkit": "1.0.0-dev.20250611155146"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"ai": "^4.3.16",
|
package/dist/schema.d.ts
DELETED
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
export declare const pollSchema: z.ZodObject<{
|
|
3
|
-
question: z.ZodObject<{
|
|
4
|
-
text: z.ZodString;
|
|
5
|
-
emoji: z.ZodOptional<z.ZodString>;
|
|
6
|
-
}, "strip", z.ZodTypeAny, {
|
|
7
|
-
text: string;
|
|
8
|
-
emoji?: string | undefined;
|
|
9
|
-
}, {
|
|
10
|
-
text: string;
|
|
11
|
-
emoji?: string | undefined;
|
|
12
|
-
}>;
|
|
13
|
-
answers: z.ZodArray<z.ZodObject<{
|
|
14
|
-
text: z.ZodString;
|
|
15
|
-
emoji: z.ZodOptional<z.ZodString>;
|
|
16
|
-
}, "strip", z.ZodTypeAny, {
|
|
17
|
-
text: string;
|
|
18
|
-
emoji?: string | undefined;
|
|
19
|
-
}, {
|
|
20
|
-
text: string;
|
|
21
|
-
emoji?: string | undefined;
|
|
22
|
-
}>, "many">;
|
|
23
|
-
allow_multiselect: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
24
|
-
duration: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
25
|
-
}, "strip", z.ZodTypeAny, {
|
|
26
|
-
question: {
|
|
27
|
-
text: string;
|
|
28
|
-
emoji?: string | undefined;
|
|
29
|
-
};
|
|
30
|
-
answers: {
|
|
31
|
-
text: string;
|
|
32
|
-
emoji?: string | undefined;
|
|
33
|
-
}[];
|
|
34
|
-
allow_multiselect: boolean;
|
|
35
|
-
duration: number;
|
|
36
|
-
}, {
|
|
37
|
-
question: {
|
|
38
|
-
text: string;
|
|
39
|
-
emoji?: string | undefined;
|
|
40
|
-
};
|
|
41
|
-
answers: {
|
|
42
|
-
text: string;
|
|
43
|
-
emoji?: string | undefined;
|
|
44
|
-
}[];
|
|
45
|
-
allow_multiselect?: boolean | undefined;
|
|
46
|
-
duration?: number | undefined;
|
|
47
|
-
}>;
|
|
48
|
-
export declare const AiResponseSchema: z.ZodObject<{
|
|
49
|
-
content: z.ZodOptional<z.ZodString>;
|
|
50
|
-
embed: z.ZodOptional<z.ZodObject<{
|
|
51
|
-
title: z.ZodOptional<z.ZodString>;
|
|
52
|
-
description: z.ZodOptional<z.ZodString>;
|
|
53
|
-
url: z.ZodOptional<z.ZodString>;
|
|
54
|
-
color: z.ZodOptional<z.ZodNumber>;
|
|
55
|
-
thumbnailImage: z.ZodOptional<z.ZodString>;
|
|
56
|
-
image: z.ZodOptional<z.ZodString>;
|
|
57
|
-
footer: z.ZodOptional<z.ZodString>;
|
|
58
|
-
footerIcon: z.ZodOptional<z.ZodString>;
|
|
59
|
-
fields: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
60
|
-
name: z.ZodString;
|
|
61
|
-
value: z.ZodString;
|
|
62
|
-
inline: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
63
|
-
}, "strip", z.ZodTypeAny, {
|
|
64
|
-
value: string;
|
|
65
|
-
name: string;
|
|
66
|
-
inline: boolean;
|
|
67
|
-
}, {
|
|
68
|
-
value: string;
|
|
69
|
-
name: string;
|
|
70
|
-
inline?: boolean | undefined;
|
|
71
|
-
}>, "many">>>;
|
|
72
|
-
}, "strip", z.ZodTypeAny, {
|
|
73
|
-
title?: string | undefined;
|
|
74
|
-
description?: string | undefined;
|
|
75
|
-
url?: string | undefined;
|
|
76
|
-
color?: number | undefined;
|
|
77
|
-
thumbnailImage?: string | undefined;
|
|
78
|
-
image?: string | undefined;
|
|
79
|
-
footer?: string | undefined;
|
|
80
|
-
footerIcon?: string | undefined;
|
|
81
|
-
fields?: {
|
|
82
|
-
value: string;
|
|
83
|
-
name: string;
|
|
84
|
-
inline: boolean;
|
|
85
|
-
}[] | undefined;
|
|
86
|
-
}, {
|
|
87
|
-
title?: string | undefined;
|
|
88
|
-
description?: string | undefined;
|
|
89
|
-
url?: string | undefined;
|
|
90
|
-
color?: number | undefined;
|
|
91
|
-
thumbnailImage?: string | undefined;
|
|
92
|
-
image?: string | undefined;
|
|
93
|
-
footer?: string | undefined;
|
|
94
|
-
footerIcon?: string | undefined;
|
|
95
|
-
fields?: {
|
|
96
|
-
value: string;
|
|
97
|
-
name: string;
|
|
98
|
-
inline?: boolean | undefined;
|
|
99
|
-
}[] | undefined;
|
|
100
|
-
}>>;
|
|
101
|
-
poll: z.ZodOptional<z.ZodObject<{
|
|
102
|
-
question: z.ZodObject<{
|
|
103
|
-
text: z.ZodString;
|
|
104
|
-
emoji: z.ZodOptional<z.ZodString>;
|
|
105
|
-
}, "strip", z.ZodTypeAny, {
|
|
106
|
-
text: string;
|
|
107
|
-
emoji?: string | undefined;
|
|
108
|
-
}, {
|
|
109
|
-
text: string;
|
|
110
|
-
emoji?: string | undefined;
|
|
111
|
-
}>;
|
|
112
|
-
answers: z.ZodArray<z.ZodObject<{
|
|
113
|
-
text: z.ZodString;
|
|
114
|
-
emoji: z.ZodOptional<z.ZodString>;
|
|
115
|
-
}, "strip", z.ZodTypeAny, {
|
|
116
|
-
text: string;
|
|
117
|
-
emoji?: string | undefined;
|
|
118
|
-
}, {
|
|
119
|
-
text: string;
|
|
120
|
-
emoji?: string | undefined;
|
|
121
|
-
}>, "many">;
|
|
122
|
-
allow_multiselect: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
123
|
-
duration: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
124
|
-
}, "strip", z.ZodTypeAny, {
|
|
125
|
-
question: {
|
|
126
|
-
text: string;
|
|
127
|
-
emoji?: string | undefined;
|
|
128
|
-
};
|
|
129
|
-
answers: {
|
|
130
|
-
text: string;
|
|
131
|
-
emoji?: string | undefined;
|
|
132
|
-
}[];
|
|
133
|
-
allow_multiselect: boolean;
|
|
134
|
-
duration: number;
|
|
135
|
-
}, {
|
|
136
|
-
question: {
|
|
137
|
-
text: string;
|
|
138
|
-
emoji?: string | undefined;
|
|
139
|
-
};
|
|
140
|
-
answers: {
|
|
141
|
-
text: string;
|
|
142
|
-
emoji?: string | undefined;
|
|
143
|
-
}[];
|
|
144
|
-
allow_multiselect?: boolean | undefined;
|
|
145
|
-
duration?: number | undefined;
|
|
146
|
-
}>>;
|
|
147
|
-
}, "strip", z.ZodTypeAny, {
|
|
148
|
-
content?: string | undefined;
|
|
149
|
-
embed?: {
|
|
150
|
-
title?: string | undefined;
|
|
151
|
-
description?: string | undefined;
|
|
152
|
-
url?: string | undefined;
|
|
153
|
-
color?: number | undefined;
|
|
154
|
-
thumbnailImage?: string | undefined;
|
|
155
|
-
image?: string | undefined;
|
|
156
|
-
footer?: string | undefined;
|
|
157
|
-
footerIcon?: string | undefined;
|
|
158
|
-
fields?: {
|
|
159
|
-
value: string;
|
|
160
|
-
name: string;
|
|
161
|
-
inline: boolean;
|
|
162
|
-
}[] | undefined;
|
|
163
|
-
} | undefined;
|
|
164
|
-
poll?: {
|
|
165
|
-
question: {
|
|
166
|
-
text: string;
|
|
167
|
-
emoji?: string | undefined;
|
|
168
|
-
};
|
|
169
|
-
answers: {
|
|
170
|
-
text: string;
|
|
171
|
-
emoji?: string | undefined;
|
|
172
|
-
}[];
|
|
173
|
-
allow_multiselect: boolean;
|
|
174
|
-
duration: number;
|
|
175
|
-
} | undefined;
|
|
176
|
-
}, {
|
|
177
|
-
content?: string | undefined;
|
|
178
|
-
embed?: {
|
|
179
|
-
title?: string | undefined;
|
|
180
|
-
description?: string | undefined;
|
|
181
|
-
url?: string | undefined;
|
|
182
|
-
color?: number | undefined;
|
|
183
|
-
thumbnailImage?: string | undefined;
|
|
184
|
-
image?: string | undefined;
|
|
185
|
-
footer?: string | undefined;
|
|
186
|
-
footerIcon?: string | undefined;
|
|
187
|
-
fields?: {
|
|
188
|
-
value: string;
|
|
189
|
-
name: string;
|
|
190
|
-
inline?: boolean | undefined;
|
|
191
|
-
}[] | undefined;
|
|
192
|
-
} | undefined;
|
|
193
|
-
poll?: {
|
|
194
|
-
question: {
|
|
195
|
-
text: string;
|
|
196
|
-
emoji?: string | undefined;
|
|
197
|
-
};
|
|
198
|
-
answers: {
|
|
199
|
-
text: string;
|
|
200
|
-
emoji?: string | undefined;
|
|
201
|
-
}[];
|
|
202
|
-
allow_multiselect?: boolean | undefined;
|
|
203
|
-
duration?: number | undefined;
|
|
204
|
-
} | undefined;
|
|
205
|
-
}>;
|
package/dist/schema.js
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AiResponseSchema = exports.pollSchema = void 0;
|
|
4
|
-
const zod_1 = require("zod");
|
|
5
|
-
const pollMediaObject = zod_1.z
|
|
6
|
-
.object({
|
|
7
|
-
text: zod_1.z.string().trim().describe('The question text of the poll'),
|
|
8
|
-
emoji: zod_1.z
|
|
9
|
-
.string()
|
|
10
|
-
.trim()
|
|
11
|
-
.optional()
|
|
12
|
-
.describe('An optional emoji associated with the poll question. Eg: 👍'),
|
|
13
|
-
})
|
|
14
|
-
.describe('An object representing the media for a poll question, containing the text of the question. Emoji cannot be used in question text.');
|
|
15
|
-
exports.pollSchema = zod_1.z
|
|
16
|
-
.object({
|
|
17
|
-
question: pollMediaObject,
|
|
18
|
-
answers: zod_1.z
|
|
19
|
-
.array(pollMediaObject)
|
|
20
|
-
.min(1)
|
|
21
|
-
.max(10)
|
|
22
|
-
.describe('An array of answers for the poll'),
|
|
23
|
-
allow_multiselect: zod_1.z
|
|
24
|
-
.boolean()
|
|
25
|
-
.optional()
|
|
26
|
-
.default(false)
|
|
27
|
-
.describe('Whether the poll allows multiple selections'),
|
|
28
|
-
duration: zod_1.z
|
|
29
|
-
.number()
|
|
30
|
-
.int()
|
|
31
|
-
.min(1)
|
|
32
|
-
.max(32)
|
|
33
|
-
.optional()
|
|
34
|
-
.default(24)
|
|
35
|
-
.describe('The duration of the poll in hours'),
|
|
36
|
-
})
|
|
37
|
-
.describe('An object representing a poll to include in the message');
|
|
38
|
-
exports.AiResponseSchema = zod_1.z
|
|
39
|
-
.object({
|
|
40
|
-
content: zod_1.z
|
|
41
|
-
.string()
|
|
42
|
-
.trim()
|
|
43
|
-
.optional()
|
|
44
|
-
.describe('The content of the message. This can be plain text or markdown. This is an optional field.'),
|
|
45
|
-
embed: zod_1.z
|
|
46
|
-
.object({
|
|
47
|
-
title: zod_1.z
|
|
48
|
-
.string()
|
|
49
|
-
.trim()
|
|
50
|
-
.optional()
|
|
51
|
-
.describe('The title of the embed. This is an optional field.'),
|
|
52
|
-
description: zod_1.z
|
|
53
|
-
.string()
|
|
54
|
-
.trim()
|
|
55
|
-
.optional()
|
|
56
|
-
.describe('The description of the embed. This is an optional field.'),
|
|
57
|
-
url: zod_1.z
|
|
58
|
-
.string()
|
|
59
|
-
.optional()
|
|
60
|
-
.describe('A URL associated with the embed. This is an optional field.'),
|
|
61
|
-
color: zod_1.z
|
|
62
|
-
.number()
|
|
63
|
-
.int()
|
|
64
|
-
.min(0)
|
|
65
|
-
.max(16777215)
|
|
66
|
-
.optional()
|
|
67
|
-
.describe('A color for the embed, represented as an integer in RGB format. This is an optional field.'),
|
|
68
|
-
thumbnailImage: zod_1.z
|
|
69
|
-
.string()
|
|
70
|
-
.optional()
|
|
71
|
-
.describe('A URL for a thumbnail image. This is an optional field.'),
|
|
72
|
-
image: zod_1.z
|
|
73
|
-
.string()
|
|
74
|
-
.optional()
|
|
75
|
-
.describe('A URL for a main image in the embed. This is an optional field.'),
|
|
76
|
-
footer: zod_1.z
|
|
77
|
-
.string()
|
|
78
|
-
.optional()
|
|
79
|
-
.describe('The footer text of the embed. This is an optional field.'),
|
|
80
|
-
footerIcon: zod_1.z
|
|
81
|
-
.string()
|
|
82
|
-
.optional()
|
|
83
|
-
.describe('A URL for an icon to display in the footer of the embed. This is an optional field.'),
|
|
84
|
-
fields: zod_1.z
|
|
85
|
-
.array(zod_1.z.object({
|
|
86
|
-
name: zod_1.z.string().trim().describe('The name of the field.'),
|
|
87
|
-
value: zod_1.z.string().trim().describe('The value of the field.'),
|
|
88
|
-
inline: zod_1.z
|
|
89
|
-
.boolean()
|
|
90
|
-
.optional()
|
|
91
|
-
.default(false)
|
|
92
|
-
.describe('Whether the field should be displayed inline with other fields. This is an optional field which defaults to false.'),
|
|
93
|
-
}))
|
|
94
|
-
.min(0)
|
|
95
|
-
.max(25)
|
|
96
|
-
.default([])
|
|
97
|
-
.optional()
|
|
98
|
-
.describe('An array of fields to include in the embed. Each field should be an object with "name" and "value" properties. This is an optional field.'),
|
|
99
|
-
})
|
|
100
|
-
.optional()
|
|
101
|
-
.describe('An object representing embeds to include in the discord message. This is an optional field.'),
|
|
102
|
-
poll: exports.pollSchema.optional(),
|
|
103
|
-
})
|
|
104
|
-
.describe('The schema for an AI response message to be sent to discord, including content and embeds. At least one of content, embeds, or poll must be present.');
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBd0I7QUFFeEIsTUFBTSxlQUFlLEdBQUcsT0FBQztLQUN0QixNQUFNLENBQUM7SUFDTixJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQywrQkFBK0IsQ0FBQztJQUNqRSxLQUFLLEVBQUUsT0FBQztTQUNMLE1BQU0sRUFBRTtTQUNSLElBQUksRUFBRTtTQUNOLFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FBQyw2REFBNkQsQ0FBQztDQUMzRSxDQUFDO0tBQ0QsUUFBUSxDQUNQLG1JQUFtSSxDQUNwSSxDQUFDO0FBRVMsUUFBQSxVQUFVLEdBQUcsT0FBQztLQUN4QixNQUFNLENBQUM7SUFDTixRQUFRLEVBQUUsZUFBZTtJQUN6QixPQUFPLEVBQUUsT0FBQztTQUNQLEtBQUssQ0FBQyxlQUFlLENBQUM7U0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNOLEdBQUcsQ0FBQyxFQUFFLENBQUM7U0FDUCxRQUFRLENBQUMsa0NBQWtDLENBQUM7SUFDL0MsaUJBQWlCLEVBQUUsT0FBQztTQUNqQixPQUFPLEVBQUU7U0FDVCxRQUFRLEVBQUU7U0FDVixPQUFPLENBQUMsS0FBSyxDQUFDO1NBQ2QsUUFBUSxDQUFDLDZDQUE2QyxDQUFDO0lBQzFELFFBQVEsRUFBRSxPQUFDO1NBQ1IsTUFBTSxFQUFFO1NBQ1IsR0FBRyxFQUFFO1NBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNOLEdBQUcsQ0FBQyxFQUFFLENBQUM7U0FDUCxRQUFRLEVBQUU7U0FDVixPQUFPLENBQUMsRUFBRSxDQUFDO1NBQ1gsUUFBUSxDQUFDLG1DQUFtQyxDQUFDO0NBQ2pELENBQUM7S0FDRCxRQUFRLENBQUMseURBQXlELENBQUMsQ0FBQztBQUUxRCxRQUFBLGdCQUFnQixHQUFHLE9BQUM7S0FDOUIsTUFBTSxDQUFDO0lBQ04sT0FBTyxFQUFFLE9BQUM7U0FDUCxNQUFNLEVBQUU7U0FDUixJQUFJLEVBQUU7U0FDTixRQUFRLEVBQUU7U0FDVixRQUFRLENBQ1AsNEZBQTRGLENBQzdGO0lBQ0gsS0FBSyxFQUFFLE9BQUM7U0FDTCxNQUFNLENBQUM7UUFDTixLQUFLLEVBQUUsT0FBQzthQUNMLE1BQU0sRUFBRTthQUNSLElBQUksRUFBRTthQUNOLFFBQVEsRUFBRTthQUNWLFFBQVEsQ0FBQyxvREFBb0QsQ0FBQztRQUNqRSxXQUFXLEVBQUUsT0FBQzthQUNYLE1BQU0sRUFBRTthQUNSLElBQUksRUFBRTthQUNOLFFBQVEsRUFBRTthQUNWLFFBQVEsQ0FBQywwREFBMEQsQ0FBQztRQUN2RSxHQUFHLEVBQUUsT0FBQzthQUNILE1BQU0sRUFBRTthQUNSLFFBQVEsRUFBRTthQUNWLFFBQVEsQ0FDUCw2REFBNkQsQ0FDOUQ7UUFDSCxLQUFLLEVBQUUsT0FBQzthQUNMLE1BQU0sRUFBRTthQUNSLEdBQUcsRUFBRTthQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDTixHQUFHLENBQUMsUUFBUSxDQUFDO2FBQ2IsUUFBUSxFQUFFO2FBQ1YsUUFBUSxDQUNQLDRGQUE0RixDQUM3RjtRQUNILGNBQWMsRUFBRSxPQUFDO2FBQ2QsTUFBTSxFQUFFO2FBQ1IsUUFBUSxFQUFFO2FBQ1YsUUFBUSxDQUFDLHlEQUF5RCxDQUFDO1FBQ3RFLEtBQUssRUFBRSxPQUFDO2FBQ0wsTUFBTSxFQUFFO2FBQ1IsUUFBUSxFQUFFO2FBQ1YsUUFBUSxDQUNQLGlFQUFpRSxDQUNsRTtRQUNILE1BQU0sRUFBRSxPQUFDO2FBQ04sTUFBTSxFQUFFO2FBQ1IsUUFBUSxFQUFFO2FBQ1YsUUFBUSxDQUFDLDBEQUEwRCxDQUFDO1FBQ3ZFLFVBQVUsRUFBRSxPQUFDO2FBQ1YsTUFBTSxFQUFFO2FBQ1IsUUFBUSxFQUFFO2FBQ1YsUUFBUSxDQUNQLHFGQUFxRixDQUN0RjtRQUNILE1BQU0sRUFBRSxPQUFDO2FBQ04sS0FBSyxDQUNKLE9BQUMsQ0FBQyxNQUFNLENBQUM7WUFDUCxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQztZQUMxRCxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQztZQUM1RCxNQUFNLEVBQUUsT0FBQztpQkFDTixPQUFPLEVBQUU7aUJBQ1QsUUFBUSxFQUFFO2lCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUM7aUJBQ2QsUUFBUSxDQUNQLG9IQUFvSCxDQUNySDtTQUNKLENBQUMsQ0FDSDthQUNBLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDTixHQUFHLENBQUMsRUFBRSxDQUFDO2FBQ1AsT0FBTyxDQUFDLEVBQUUsQ0FBQzthQUNYLFFBQVEsRUFBRTthQUNWLFFBQVEsQ0FDUCwySUFBMkksQ0FDNUk7S0FDSixDQUFDO1NBQ0QsUUFBUSxFQUFFO1NBQ1YsUUFBUSxDQUNQLDZGQUE2RixDQUM5RjtJQUNILElBQUksRUFBRSxrQkFBVSxDQUFDLFFBQVEsRUFBRTtDQUM1QixDQUFDO0tBQ0QsUUFBUSxDQUNQLHNKQUFzSixDQUN2SixDQUFDIn0=
|