@commandkit/ai 0.1.0-dev.20250611125312 → 0.1.0-dev.20250612020250

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/plugin.js CHANGED
@@ -1,144 +1,54 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AiPlugin = void 0;
4
- exports.configureAI = configureAI;
5
4
  const plugin_1 = require("commandkit/plugin");
6
5
  const commandkit_1 = require("commandkit");
7
6
  const context_1 = require("./context");
8
7
  const discord_js_1 = require("discord.js");
9
8
  const ai_1 = require("ai");
10
- const zod_1 = require("zod");
11
9
  const ai_context_worker_1 = require("./ai-context-worker");
12
- const schema_1 = require("./schema");
13
- let messageFilter = null;
14
- let selectAiModel = null;
15
- let generateSystemPrompt;
16
- /**
17
- * Configures the AI plugin with the provided options.
18
- * This function allows you to set a message filter, select an AI model, and generate a system prompt.
19
- * @param config The configuration options for the AI plugin.
20
- */
21
- function configureAI(config) {
22
- if (config.messageFilter) {
23
- messageFilter = config.messageFilter;
24
- }
25
- if (config.selectAiModel) {
26
- selectAiModel = config.selectAiModel;
27
- }
28
- if (config.systemPrompt) {
29
- generateSystemPrompt = config.systemPrompt;
30
- }
31
- }
10
+ const get_available_commands_1 = require("./tools/get-available-commands");
11
+ const get_channel_by_id_1 = require("./tools/get-channel-by-id");
12
+ const get_current_client_info_1 = require("./tools/get-current-client-info");
13
+ const get_guild_by_id_1 = require("./tools/get-guild-by-id");
14
+ const get_user_by_id_1 = require("./tools/get-user-by-id");
15
+ const configure_1 = require("./configure");
16
+ const augmentation_1 = require("./augmentation");
17
+ const defaultTools = {
18
+ getAvailableCommands: get_available_commands_1.getAvailableCommands,
19
+ getChannelById: get_channel_by_id_1.getChannelById,
20
+ getCurrentClientInfo: get_current_client_info_1.getCurrentClientInfo,
21
+ getGuildById: get_guild_by_id_1.getGuildById,
22
+ getUserById: get_user_by_id_1.getUserById,
23
+ };
32
24
  class AiPlugin extends plugin_1.RuntimePlugin {
33
25
  constructor(options) {
34
26
  super(options);
35
27
  this.name = 'AiPlugin';
36
28
  this.toolsRecord = {};
37
- this.defaultTools = {};
29
+ this.defaultTools = defaultTools;
38
30
  this.onMessageFunc = null;
39
31
  }
40
32
  async activate(ctx) {
41
- this.onMessageFunc = (message) => this.handleMessage(ctx, message);
33
+ this.onMessageFunc = (message) => this.handleMessage(ctx.commandkit, message);
42
34
  ctx.commandkit.client.on(discord_js_1.Events.MessageCreate, this.onMessageFunc);
43
- this.createDefaultTools(ctx);
35
+ (0, augmentation_1.augmentCommandKit)(true);
44
36
  commandkit_1.Logger.info(`Plugin ${this.name} activated`);
45
37
  }
46
- createDefaultTools(ctx) {
47
- const { commandkit } = ctx;
48
- const client = commandkit.client;
49
- this.defaultTools.getUserById = (0, ai_1.tool)({
50
- description: 'Get user information by ID',
51
- parameters: zod_1.z.object({
52
- userId: zod_1.z
53
- .string()
54
- .describe('The ID of the user to retrieve. This is a Discord snowflake string.'),
55
- }),
56
- execute: async (params) => {
57
- const user = await client.users.fetch(params.userId, {
58
- force: false,
59
- cache: true,
60
- });
61
- return user.toJSON();
62
- },
63
- });
64
- this.defaultTools.getChannelById = (0, ai_1.tool)({
65
- description: 'Get channel information by ID',
66
- parameters: zod_1.z.object({
67
- channelId: zod_1.z
68
- .string()
69
- .describe('The ID of the channel to retrieve. This is a Discord snowflake string.'),
70
- }),
71
- execute: async (params) => {
72
- const channel = await client.channels.fetch(params.channelId, {
73
- force: false,
74
- cache: true,
75
- });
76
- if (!channel) {
77
- throw new Error(`Channel with ID ${params.channelId} not found.`);
78
- }
79
- return channel.toJSON();
80
- },
81
- });
82
- this.defaultTools.getGuildById = (0, ai_1.tool)({
83
- description: 'Get guild information by ID',
84
- parameters: zod_1.z.object({
85
- guildId: zod_1.z
86
- .string()
87
- .describe('The ID of the guild to retrieve. This is a Discord snowflake string.'),
88
- }),
89
- execute: async (params) => {
90
- const guild = await client.guilds.fetch({
91
- guild: params.guildId,
92
- force: false,
93
- cache: true,
94
- });
95
- if (!guild) {
96
- throw new Error(`Guild with ID ${params.guildId} not found.`);
97
- }
98
- return {
99
- id: guild.id,
100
- name: guild.name,
101
- icon: guild.iconURL(),
102
- memberCount: guild.memberCount,
103
- };
104
- },
105
- });
106
- this.defaultTools.getCurrentUser = (0, ai_1.tool)({
107
- description: 'Get information about the current discord bot user',
108
- parameters: zod_1.z.object({}),
109
- execute: async () => {
110
- const user = client.user;
111
- if (!user) {
112
- throw new Error('Bot user is not available.');
113
- }
114
- return user.toJSON();
115
- },
116
- });
117
- this.defaultTools.getAvailableCommands = (0, ai_1.tool)({
118
- description: 'Get all available commands',
119
- parameters: zod_1.z.object({}),
120
- execute: async () => {
121
- return ctx.commandkit.commandHandler.getCommandsArray().map((cmd) => ({
122
- name: cmd.data.command.name,
123
- description: cmd.data.command.description,
124
- category: cmd.command.category,
125
- }));
126
- },
127
- });
128
- }
129
38
  async deactivate(ctx) {
130
39
  this.toolsRecord = {};
131
40
  if (this.onMessageFunc) {
132
41
  ctx.commandkit.client.off(discord_js_1.Events.MessageCreate, this.onMessageFunc);
133
42
  this.onMessageFunc = null;
134
43
  }
44
+ (0, augmentation_1.augmentCommandKit)(false);
135
45
  commandkit_1.Logger.info(`Plugin ${this.name} deactivated`);
136
46
  }
137
- async handleMessage(pluginContext, message) {
47
+ async handleMessage(commandkit, message) {
138
48
  if (message.author.bot || !Object.keys(this.toolsRecord).length)
139
49
  return;
140
- const aiModelSelector = selectAiModel;
141
- if (!message.content?.length || !aiModelSelector)
50
+ const { messageFilter, selectAiModel, prepareSystemPrompt, preparePrompt, onProcessingFinish, onProcessingStart, onResult, onError, disableBuiltInTools, } = (0, configure_1.getAIConfig)();
51
+ if (!message.content?.length)
142
52
  return;
143
53
  if (!message.channel.isTextBased() || !message.channel.isSendable())
144
54
  return;
@@ -148,152 +58,62 @@ class AiPlugin extends plugin_1.RuntimePlugin {
148
58
  const ctx = new context_1.AiContext({
149
59
  message,
150
60
  params: {},
151
- commandkit: pluginContext.commandkit,
61
+ commandkit: commandkit,
152
62
  });
153
- const systemPrompt = (await generateSystemPrompt?.(message)) ||
154
- `You are a helpful AI discord bot. Your name is ${message.client.user.username} and your id is ${message.client.user.id}.
155
- You are designed to assist users with their questions and tasks. You also have access to various tools that can help you perform tasks.
156
- Tools are basically like commands that you can execute to perform specific actions based on user input.
157
- Keep the response short and concise, and only use tools when necessary. Keep the response length under 2000 characters.
158
- Do not include your own text in the response unless necessary. For text formatting, you can use discord's markdown syntax.
159
- The current channel is ${'name' in message.channel
160
- ? message.channel.name
161
- : message.channel.recipient?.displayName || 'DM'} whose id is ${message.channelId}. ${message.channel.isSendable()
162
- ? 'You can send messages in this channel.'
163
- : 'You cannot send messages in this channel.'}
164
- ${message.inGuild() ? `\nYou are currently in a guild named ${message.guild.name} whose id is ${message.guildId}. While in guild, you can fetch member information if needed.` : '\nYou are currently in a direct message with the user.'}
165
- If the user asks you to create a poll or embeds, create a text containing the poll or embed information as a markdown instead of json. If structured response is possible, use the structured response format instead.
166
- If the user asks you to perform a task that requires a tool, use the tool to perform the task and return the result. Reject any requests that are not related to the tools you have access to.
167
- `;
168
- const userInfo = `<user>
169
- <id>${message.author.id}</id>
170
- <name>${message.author.username}</name>
171
- <displayName>${message.author.displayName}</displayName>
172
- <avatar>${message.author.avatarURL()}</avatar>
173
- </user>`;
174
63
  await (0, ai_context_worker_1.runInAiWorkerContext)(ctx, message, async () => {
175
- const channel = message.channel;
176
- const stopTyping = await this.startTyping(channel);
64
+ const systemPrompt = await prepareSystemPrompt(ctx, message);
65
+ const prompt = await preparePrompt(ctx, message);
66
+ const { model, abortSignal, maxSteps, ...modelOptions } = await selectAiModel(ctx, message);
67
+ await onProcessingStart(ctx, message);
68
+ const tools = disableBuiltInTools
69
+ ? this.toolsRecord
70
+ : {
71
+ ...this.defaultTools,
72
+ ...this.toolsRecord,
73
+ };
177
74
  try {
178
- const { model, options, objectMode = false, } = await aiModelSelector(message);
179
- const originalPrompt = `${userInfo}\nUser: ${message.content}\nAI:`;
180
- let result;
181
- const config = {
75
+ const result = await (0, ai_1.generateText)({
182
76
  model,
183
- abortSignal: AbortSignal.timeout(60000),
184
- prompt: originalPrompt,
77
+ abortSignal: abortSignal ?? AbortSignal.timeout(60000),
78
+ prompt,
185
79
  system: systemPrompt,
186
- providerOptions: options,
187
- };
188
- if (objectMode) {
189
- result = await (0, ai_1.generateObject)({
190
- ...config,
191
- schema: schema_1.AiResponseSchema,
192
- });
193
- }
194
- else {
195
- result = await (0, ai_1.generateText)({
196
- ...config,
197
- tools: { ...this.toolsRecord, ...this.defaultTools },
198
- maxSteps: 5,
199
- });
200
- }
201
- stopTyping();
202
- let structuredResult = null;
203
- structuredResult = !('text' in result)
204
- ? result.object
205
- : null;
206
- if (structuredResult) {
207
- const { poll, content, embed } = structuredResult;
208
- if (!poll && !content && !embed) {
209
- commandkit_1.Logger.warn('AI response did not include any content, embed, or poll.');
210
- return;
211
- }
212
- await message.reply({
213
- content: content?.substring(0, 2000),
214
- embeds: embed
215
- ? [
216
- {
217
- title: embed.title,
218
- description: embed.description,
219
- url: embed.url,
220
- color: embed.color,
221
- image: embed.image ? { url: embed.image } : undefined,
222
- thumbnail: embed.thumbnailImage
223
- ? { url: embed.thumbnailImage }
224
- : undefined,
225
- fields: embed.fields?.map((field) => ({
226
- name: field.name,
227
- value: field.value,
228
- inline: field.inline,
229
- })),
230
- },
231
- ]
232
- : [],
233
- poll: poll
234
- ? {
235
- allowMultiselect: poll.allow_multiselect,
236
- answers: poll.answers.map((answer) => ({
237
- text: answer.text,
238
- emoji: answer.emoji,
239
- })),
240
- duration: poll.duration,
241
- question: { text: poll.question.text },
242
- }
243
- : undefined,
244
- });
245
- }
246
- else if ('text' in result && !!result.text) {
247
- await message.reply({
248
- content: result.text.substring(0, 2000),
249
- allowedMentions: { parse: [] },
250
- });
251
- }
80
+ maxSteps: maxSteps ?? 5,
81
+ ...modelOptions,
82
+ tools: {
83
+ ...tools,
84
+ ...modelOptions.tools,
85
+ },
86
+ });
87
+ await onResult(ctx, message, result);
252
88
  }
253
89
  catch (e) {
254
- commandkit_1.Logger.error(`Error processing AI message: ${e}`);
255
- const channel = message.channel;
256
- if (channel.isSendable()) {
257
- await message
258
- .reply({
259
- content: 'An error occurred while processing your request.',
260
- allowedMentions: { parse: [] },
261
- })
262
- .catch((e) => commandkit_1.Logger.error(`Failed to send error message: ${e}`));
263
- }
90
+ await onError(ctx, message, e);
264
91
  }
265
92
  finally {
266
- stopTyping();
93
+ await onProcessingFinish(ctx, message);
267
94
  }
268
95
  });
269
96
  }
270
- async startTyping(channel) {
271
- let stopped = false;
272
- const runner = async () => {
273
- if (stopped)
274
- return clearInterval(typingInterval);
275
- if (channel.isSendable()) {
276
- await channel.sendTyping().catch(Object);
277
- }
278
- };
279
- const typingInterval = setInterval(runner, 3000).unref();
280
- await runner();
281
- return () => {
282
- stopped = true;
283
- clearInterval(typingInterval);
284
- };
97
+ /**
98
+ * Executes the AI for a given message.
99
+ * @param message The message to process.
100
+ * @param commandkit The CommandKit instance to use. If not provided, it will be inferred automatically.
101
+ */
102
+ async executeAI(message, commandkit) {
103
+ commandkit ?? (commandkit = (0, commandkit_1.getCommandKit)(true));
104
+ return this.handleMessage(commandkit, message);
285
105
  }
286
- async onBeforeCommandsLoad(ctx) {
106
+ async onBeforeCommandsLoad() {
287
107
  this.toolsRecord = {};
288
108
  }
289
109
  async onAfterCommandsLoad(ctx) {
290
- const commands = ctx.commandkit.commandHandler
110
+ const { commandkit } = ctx;
111
+ const commands = commandkit.commandHandler
291
112
  .getCommandsArray()
292
113
  .filter((command) => 'ai' in command.data &&
293
114
  typeof command.data.ai === 'function' &&
294
115
  'aiConfig' in command.data);
295
116
  if (!commands.length) {
296
- commandkit_1.Logger.warn('No commands with AI functionality found. Ensure commands are properly configured.');
297
117
  return;
298
118
  }
299
119
  const tools = new discord_js_1.Collection();
@@ -305,12 +125,31 @@ class AiPlugin extends plugin_1.RuntimePlugin {
305
125
  const description = cmd.data.aiConfig.description || cmd.data.command.description;
306
126
  const cmdTool = (0, ai_1.tool)({
307
127
  description,
308
- type: 'function',
309
128
  parameters: cmd.data.aiConfig.parameters,
310
129
  async execute(params) {
130
+ const config = (0, configure_1.getAIConfig)();
311
131
  const ctx = (0, ai_context_worker_1.getAiWorkerContext)();
312
132
  ctx.ctx.setParams(params);
313
- return cmd.data.ai(ctx.ctx);
133
+ try {
134
+ const target = await commandkit.commandHandler.prepareCommandRun(ctx.message, cmd.data.command.name);
135
+ if (!target) {
136
+ return {
137
+ error: true,
138
+ message: 'This command is not available.',
139
+ };
140
+ }
141
+ const res = await commandkit.commandHandler.commandRunner.runCommand(target, ctx.message, {
142
+ handler: 'ai',
143
+ });
144
+ return res === undefined ? { success: true } : res;
145
+ }
146
+ catch (e) {
147
+ await config.onError?.(ctx.ctx, ctx.message, e);
148
+ return {
149
+ error: true,
150
+ message: 'This tool failed with unexpected error.',
151
+ };
152
+ }
314
153
  },
315
154
  });
316
155
  cmd.tool = cmdTool;
@@ -322,4 +161,4 @@ class AiPlugin extends plugin_1.RuntimePlugin {
322
161
  }
323
162
  }
324
163
  exports.AiPlugin = AiPlugin;
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUErREEsa0NBWUM7QUEzRUQsOENBQTJFO0FBRTNFLDJDQUFtRDtBQUNuRCx1Q0FBc0M7QUFDdEMsMkNBQXNFO0FBQ3RFLDJCQUE4RDtBQUM5RCw2QkFBd0I7QUFDeEIsMkRBQStFO0FBQy9FLHFDQUF3RDtBQXdCeEQsSUFBSSxhQUFhLEdBQXlCLElBQUksQ0FBQztBQUMvQyxJQUFJLGFBQWEsR0FBeUIsSUFBSSxDQUFDO0FBQy9DLElBQUksb0JBQXlFLENBQUM7QUF3QjlFOzs7O0dBSUc7QUFDSCxTQUFnQixXQUFXLENBQUMsTUFBbUI7SUFDN0MsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixvQkFBb0IsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO0lBQzdDLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBYSxRQUFTLFNBQVEsc0JBQThCO0lBTTFELFlBQW1CLE9BQXdCO1FBQ3pDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQU5ELFNBQUksR0FBRyxVQUFVLENBQUM7UUFDMUIsZ0JBQVcsR0FBeUIsRUFBRSxDQUFDO1FBQ3ZDLGlCQUFZLEdBQXlCLEVBQUUsQ0FBQztRQUN4QyxrQkFBYSxHQUFpRCxJQUFJLENBQUM7SUFJM0UsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBNEI7UUFDaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFB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
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4Q0FBMkU7QUFFM0UsMkNBQStEO0FBQy9ELHVDQUFzQztBQUN0QywyQ0FBeUQ7QUFDekQsMkJBQThDO0FBQzlDLDJEQUErRTtBQUMvRSwyRUFBc0U7QUFDdEUsaUVBQTJEO0FBQzNELDZFQUF1RTtBQUN2RSw2REFBdUQ7QUFDdkQsMkRBQXFEO0FBQ3JELDJDQUEwQztBQUMxQyxpREFBbUQ7QUFnQm5ELE1BQU0sWUFBWSxHQUF5QjtJQUN6QyxvQkFBb0IsRUFBcEIsNkNBQW9CO0lBQ3BCLGNBQWMsRUFBZCxrQ0FBYztJQUNkLG9CQUFvQixFQUFwQiw4Q0FBb0I7SUFDcEIsWUFBWSxFQUFaLDhCQUFZO0lBQ1osV0FBVyxFQUFYLDRCQUFXO0NBQ1osQ0FBQztBQUVGLE1BQWEsUUFBUyxTQUFRLHNCQUE4QjtJQU0xRCxZQUFtQixPQUF3QjtRQUN6QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFORCxTQUFJLEdBQUcsVUFBVSxDQUFDO1FBQzFCLGdCQUFXLEdBQXlCLEVBQUUsQ0FBQztRQUN2QyxpQkFBWSxHQUFHLFlBQVksQ0FBQztRQUM1QixrQkFBYSxHQUFpRCxJQUFJLENBQUM7SUFJM0UsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBNEI7UUFDaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsbUJBQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25FLElBQUEsZ0NBQWlCLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFFeEIsbUJBQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUE0QjtRQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFBLGdDQUFpQixFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLG1CQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhLENBQ3pCLFVBQXNCLEVBQ3RCLE9BQWdCO1FBRWhCLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUN4RSxNQUFNLEVBQ0osYUFBYSxFQUNiLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsUUFBUSxFQUNSLE9BQU8sRUFDUCxtQkFBbUIsR0FDcEIsR0FBRyxJQUFBLHVCQUFXLEdBQUUsQ0FBQztRQUVsQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNO1lBQUUsT0FBTztRQUVyQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQUUsT0FBTztRQUU1RSxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDM0UsSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPO1FBRTVCLE1BQU0sR0FBRyxHQUFHLElBQUksbUJBQVMsQ0FBTTtZQUM3QixPQUFPO1lBQ1AsTUFBTSxFQUFFLEVBQUU7WUFDVixVQUFVLEVBQUUsVUFBVTtTQUN2QixDQUFDLENBQUM7UUFFSCxNQUFNLElBQUEsd0NBQW9CLEVBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTtZQUNsRCxNQUFNLFlBQVksR0FBRyxNQUFNLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM3RCxNQUFNLE1BQU0sR0FBRyxNQUFNLGFBQWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDakQsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEdBQUcsWUFBWSxFQUFFLEdBQ3JELE1BQU0sYUFBYSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUVwQyxNQUFNLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUV0QyxNQUFNLEtBQUssR0FBRyxtQkFBbUI7Z0JBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVztnQkFDbEIsQ0FBQyxDQUFDO29CQUNFLEdBQUcsSUFBSSxDQUFDLFlBQVk7b0JBQ3BCLEdBQUcsSUFBSSxDQUFDLFdBQVc7aUJBQ3BCLENBQUM7WUFFTixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLGlCQUFZLEVBQUM7b0JBQ2hDLEtBQUs7b0JBQ0wsV0FBVyxFQUFFLFdBQVcsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQU0sQ0FBQztvQkFDdkQsTUFBTTtvQkFDTixNQUFNLEVBQUUsWUFBWTtvQkFDcEIsUUFBUSxFQUFFLFFBQVEsSUFBSSxDQUFDO29CQUN2QixHQUFHLFlBQVk7b0JBQ2YsS0FBSyxFQUFFO3dCQUNMLEdBQUcsS0FBSzt3QkFDUixHQUFHLFlBQVksQ0FBQyxLQUFLO3FCQUN0QjtpQkFDRixDQUFDLENBQUM7Z0JBRUgsTUFBTSxRQUFRLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN2QyxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCxNQUFNLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQVUsQ0FBQyxDQUFDO1lBQzFDLENBQUM7b0JBQVMsQ0FBQztnQkFDVCxNQUFNLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxTQUFTLENBQ3BCLE9BQWdCLEVBQ2hCLFVBQXVCO1FBRXZCLFVBQVUsS0FBVixVQUFVLEdBQUssSUFBQSwwQkFBYSxFQUFDLElBQUksQ0FBQyxFQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVNLEtBQUssQ0FBQyxvQkFBb0I7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUE0QjtRQUNwRCxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQzNCLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxjQUFjO2FBQ3ZDLGdCQUFnQixFQUFFO2FBQ2xCLE1BQU0sQ0FDTCxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ1YsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJO1lBQ3BCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssVUFBVTtZQUNyQyxVQUFVLElBQUksT0FBTyxDQUFDLElBQUksQ0FDN0IsQ0FBQztRQUVKLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLHVCQUFVLEVBQXVCLENBQUM7UUFFcEQsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMvQixNQUFNLEdBQUcsR0FBRyxPQUFzQixDQUFDO1lBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3ZDLFNBQVM7WUFDWCxDQUFDO1lBRUQsTUFBTSxXQUFXLEdBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUVoRSxNQUFNLE9BQU8sR0FBRyxJQUFBLFNBQUksRUFBQztnQkFDbkIsV0FBVztnQkFDWCxVQUFVLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVTtnQkFDeEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNO29CQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFBLHVCQUFXLEdBQUUsQ0FBQztvQkFDN0IsTUFBTSxHQUFHLEdBQUcsSUFBQSxzQ0FBa0IsR0FBRSxDQUFDO29CQUVqQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFFMUIsSUFBSSxDQUFDO3dCQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FDOUQsR0FBRyxDQUFDLE9BQU8sRUFDWCxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3RCLENBQUM7d0JBRUYsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOzRCQUNaLE9BQU87Z0NBQ0wsS0FBSyxFQUFFLElBQUk7Z0NBQ1gsT0FBTyxFQUFFLGdDQUFnQzs2QkFDMUMsQ0FBQzt3QkFDSixDQUFDO3dCQUVELE1BQU0sR0FBRyxHQUNQLE1BQU0sVUFBVSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUN0RCxNQUFNLEVBQ04sR0FBRyxDQUFDLE9BQU8sRUFDWDs0QkFDRSxPQUFPLEVBQUUsSUFBSTt5QkFDZCxDQUNGLENBQUM7d0JBRUosT0FBTyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO29CQUNyRCxDQUFDO29CQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7d0JBQ1gsTUFBTSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQVUsQ0FBQyxDQUFDO3dCQUV6RCxPQUFPOzRCQUNMLEtBQUssRUFBRSxJQUFJOzRCQUNYLE9BQU8sRUFBRSx5Q0FBeUM7eUJBQ25ELENBQUM7b0JBQ0osQ0FBQztnQkFDSCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsR0FBRyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7WUFFbkIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUNuQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDcEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbE1ELDRCQWtNQyJ9
@@ -0,0 +1,6 @@
1
+ import { Message } from 'discord.js';
2
+ /**
3
+ * Creates the default system prompt for the AI bot based on the provided message context.
4
+ * This prompt includes the bot's role, current channel information, and response guidelines.
5
+ */
6
+ export declare function createSystemPrompt(message: Message): string;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSystemPrompt = createSystemPrompt;
4
+ /**
5
+ * Creates the default system prompt for the AI bot based on the provided message context.
6
+ * This prompt includes the bot's role, current channel information, and response guidelines.
7
+ */
8
+ function createSystemPrompt(message) {
9
+ const channelInfo = 'name' in message.channel
10
+ ? message.channel.name
11
+ : message.channel.recipient?.displayName || 'DM';
12
+ const guildInfo = message.inGuild()
13
+ ? `You are in the guild "${message.guild.name}" (ID: ${message.guildId}). You can fetch member information when needed.`
14
+ : 'You are in a direct message with the user.';
15
+ return `You are ${message.client.user.username} (ID: ${message.client.user.id}), a helpful AI Discord bot.
16
+
17
+ **Your Role:**
18
+ - Assist users with questions and tasks efficiently
19
+ - Use available tools to perform specific actions when requested
20
+ - Keep responses under 2000 characters and concise
21
+
22
+ **Current Context:**
23
+ - Channel: "${channelInfo}" (ID: ${message.channelId})
24
+ - Permissions: ${message.channel.isSendable() ? 'Can send messages' : 'Cannot send messages'}
25
+ - Location: ${guildInfo}
26
+
27
+ **Response Guidelines:**
28
+ - Use Discord markdown for formatting
29
+ - Only use tools when necessary for the task
30
+ - Reject requests unrelated to your available tools
31
+
32
+ Focus on being helpful while staying within your capabilities.`;
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLXByb21wdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zeXN0ZW0tcHJvbXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBTUEsZ0RBNEJDO0FBaENEOzs7R0FHRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLE9BQWdCO0lBQ2pELE1BQU0sV0FBVyxHQUNmLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTztRQUN2QixDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJO1FBQ3RCLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxXQUFXLElBQUksSUFBSSxDQUFDO0lBRXJELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUU7UUFDakMsQ0FBQyxDQUFDLHlCQUF5QixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSxPQUFPLENBQUMsT0FBTyxrREFBa0Q7UUFDeEgsQ0FBQyxDQUFDLDRDQUE0QyxDQUFDO0lBRWpELE9BQU8sV0FBVyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLFNBQVMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTs7Ozs7Ozs7Y0FRakUsV0FBVyxVQUFVLE9BQU8sQ0FBQyxTQUFTO2lCQUNuQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsc0JBQXNCO2NBQzlFLFNBQVM7Ozs7Ozs7K0RBT3dDLENBQUM7QUFDaEUsQ0FBQyJ9
@@ -0,0 +1,76 @@
1
+ import { Schema, tool } from 'ai';
2
+ import { AiContext } from '../../context';
3
+ import { z } from 'zod';
4
+ /**
5
+ * Utility type that represents a value that can be either synchronous or asynchronous.
6
+ * @template T - The type of the value
7
+ * @internal
8
+ */
9
+ type Awaitable<T> = T | Promise<T>;
10
+ /**
11
+ * Type representing the parameters schema for AI tools.
12
+ * Extracted from the first parameter of the `tool` function from the 'ai' library.
13
+ */
14
+ export type ToolParameterType = Parameters<typeof tool>[0]['parameters'];
15
+ /**
16
+ * Utility type that infers the TypeScript type from a tool parameter schema.
17
+ * Supports both Zod schemas and AI library schemas.
18
+ * @template T - The tool parameter type to infer from
19
+ */
20
+ export type InferParameters<T extends ToolParameterType> = T extends Schema<any> ? T['_type'] : T extends z.ZodTypeAny ? z.infer<T> : never;
21
+ /**
22
+ * Configuration options for creating an AI tool.
23
+ * @template T - The parameter schema type for the tool
24
+ * @template R - The return type of the tool's execute function
25
+ */
26
+ export interface CreateToolOptions<T extends ToolParameterType, R = unknown> {
27
+ /** The unique name identifier for the tool */
28
+ name: string;
29
+ /** A human-readable description of what the tool does */
30
+ description: string;
31
+ /** The parameter schema that defines the tool's input structure */
32
+ parameters: T;
33
+ /** The function that executes when the tool is called */
34
+ execute: ToolExecuteFunction<T, R>;
35
+ }
36
+ /**
37
+ * Type definition for a tool's execute function.
38
+ * @template T - The parameter schema type
39
+ * @template R - The return type of the function
40
+ * @param ctx - The AI context containing request and response information
41
+ * @param parameters - The validated parameters passed to the tool
42
+ * @returns The result of the tool execution, which can be synchronous or asynchronous
43
+ */
44
+ export type ToolExecuteFunction<T extends ToolParameterType, R> = (ctx: AiContext, parameters: InferParameters<T>) => Awaitable<R>;
45
+ /**
46
+ * Creates a new AI tool with the specified configuration.
47
+ * This function wraps the underlying AI library's tool creation with additional
48
+ * context management and parameter validation.
49
+ *
50
+ * @template T - The parameter schema type for the tool
51
+ * @template R - The return type of the tool's execute function
52
+ * @param options - The configuration options for the tool
53
+ * @returns A configured AI tool ready for use
54
+ *
55
+ * @example
56
+ * ```typescript
57
+ * const myTool = createTool({
58
+ * name: 'calculate',
59
+ * description: 'Performs basic arithmetic calculations',
60
+ * parameters: z.object({
61
+ * operation: z.enum(['add', 'subtract']),
62
+ * a: z.number(),
63
+ * b: z.number(),
64
+ * }),
65
+ * execute: async (ctx, params) => {
66
+ * return params.operation === 'add'
67
+ * ? params.a + params.b
68
+ * : params.a - params.b;
69
+ * },
70
+ * });
71
+ * ```
72
+ */
73
+ export declare function createTool<T extends ToolParameterType, R = unknown>(options: CreateToolOptions<T, R>): import("ai").Tool<T, R> & {
74
+ execute: (args: T extends Schema<any> ? T["_type"] : T extends z.ZodTypeAny ? z.TypeOf<T> : never, options: import("ai").ToolExecutionOptions) => PromiseLike<R>;
75
+ };
76
+ export {};
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTool = createTool;
4
+ const ai_1 = require("ai");
5
+ const ai_context_worker_1 = require("../../ai-context-worker");
6
+ /**
7
+ * Creates a new AI tool with the specified configuration.
8
+ * This function wraps the underlying AI library's tool creation with additional
9
+ * context management and parameter validation.
10
+ *
11
+ * @template T - The parameter schema type for the tool
12
+ * @template R - The return type of the tool's execute function
13
+ * @param options - The configuration options for the tool
14
+ * @returns A configured AI tool ready for use
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const myTool = createTool({
19
+ * name: 'calculate',
20
+ * description: 'Performs basic arithmetic calculations',
21
+ * parameters: z.object({
22
+ * operation: z.enum(['add', 'subtract']),
23
+ * a: z.number(),
24
+ * b: z.number(),
25
+ * }),
26
+ * execute: async (ctx, params) => {
27
+ * return params.operation === 'add'
28
+ * ? params.a + params.b
29
+ * : params.a - params.b;
30
+ * },
31
+ * });
32
+ * ```
33
+ */
34
+ function createTool(options) {
35
+ // @ts-ignore - Suppressing type checking due to complex generic inference
36
+ const _tool = (0, ai_1.tool)({
37
+ name: options.name,
38
+ description: options.description,
39
+ parameters: options.parameters,
40
+ async execute(params) {
41
+ const { ctx } = (0, ai_context_worker_1.getAiWorkerContext)();
42
+ ctx.setParams(params);
43
+ return options.execute(ctx, params);
44
+ },
45
+ });
46
+ return _tool;
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbHMvY29tbW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBdUZBLGdDQWtCQztBQXpHRCwyQkFBa0M7QUFFbEMsK0RBQTZEO0FBeUQ3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsU0FBZ0IsVUFBVSxDQUN4QixPQUFnQztJQUVoQywwRUFBMEU7SUFDMUUsTUFBTSxLQUFLLEdBQUcsSUFBQSxTQUFJLEVBQU87UUFDdkIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FBQ2xCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztRQUNoQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7UUFDOUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQ2xCLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFBLHNDQUFrQixHQUFFLENBQUM7WUFFckMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUV0QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQTRCLENBQUMsQ0FBQztRQUM1RCxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIn0=
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ export declare const getAvailableCommands: import("ai").Tool<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>, {
3
+ name: any;
4
+ description: any;
5
+ category: string | null;
6
+ supportsAI: boolean;
7
+ }[]> & {
8
+ execute: (args: {}, options: import("ai").ToolExecutionOptions) => PromiseLike<{
9
+ name: any;
10
+ description: any;
11
+ category: string | null;
12
+ supportsAI: boolean;
13
+ }[]>;
14
+ };
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAvailableCommands = void 0;
4
+ const zod_1 = require("zod");
5
+ const common_1 = require("./common");
6
+ exports.getAvailableCommands = (0, common_1.createTool)({
7
+ description: 'Get a list of all available commands.',
8
+ name: 'getAvailableCommands',
9
+ parameters: zod_1.z.object({}),
10
+ execute(ctx, params) {
11
+ const { commandkit } = ctx;
12
+ const commands = commandkit.commandHandler
13
+ .getCommandsArray()
14
+ .map((cmd) => ({
15
+ name: cmd.data.command.name,
16
+ description: cmd.data.command.description,
17
+ category: cmd.command.category,
18
+ supportsAI: 'ai' in cmd.data && typeof cmd.data.ai === 'function',
19
+ }));
20
+ return commands;
21
+ },
22
+ });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWF2YWlsYWJsZS1jb21tYW5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29scy9nZXQtYXZhaWxhYmxlLWNvbW1hbmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUF3QjtBQUN4QixxQ0FBc0M7QUFFekIsUUFBQSxvQkFBb0IsR0FBRyxJQUFBLG1CQUFVLEVBQUM7SUFDN0MsV0FBVyxFQUFFLHVDQUF1QztJQUNwRCxJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUN4QixPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU07UUFDakIsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUUzQixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsY0FBYzthQUN2QyxnQkFBZ0IsRUFBRTthQUNsQixHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDYixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtZQUMzQixXQUFXLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVztZQUN6QyxRQUFRLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRO1lBQzlCLFVBQVUsRUFBRSxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFVBQVU7U0FDbEUsQ0FBQyxDQUFDLENBQUM7UUFFTixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0NBQ0YsQ0FBQyxDQUFDIn0=