@commandkit/ai 0.1.0-dev.20250611020404 → 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/ai-context-worker.d.ts +6 -0
- package/dist/ai-context-worker.js +7 -1
- 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 +41 -0
- package/dist/context.js +18 -1
- package/dist/index.d.ts +18 -0
- package/dist/index.js +33 -1
- package/dist/plugin.d.ts +18 -10
- package/dist/plugin.js +76 -248
- 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 +34 -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 -159
- package/dist/schema.js +0 -105
package/dist/plugin.js
CHANGED
|
@@ -1,139 +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
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
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
|
+
};
|
|
27
24
|
class AiPlugin extends plugin_1.RuntimePlugin {
|
|
28
25
|
constructor(options) {
|
|
29
26
|
super(options);
|
|
30
27
|
this.name = 'AiPlugin';
|
|
31
28
|
this.toolsRecord = {};
|
|
32
|
-
this.defaultTools =
|
|
29
|
+
this.defaultTools = defaultTools;
|
|
33
30
|
this.onMessageFunc = null;
|
|
34
31
|
}
|
|
35
32
|
async activate(ctx) {
|
|
36
|
-
this.onMessageFunc = (message) => this.handleMessage(ctx, message);
|
|
33
|
+
this.onMessageFunc = (message) => this.handleMessage(ctx.commandkit, message);
|
|
37
34
|
ctx.commandkit.client.on(discord_js_1.Events.MessageCreate, this.onMessageFunc);
|
|
38
|
-
|
|
35
|
+
(0, augmentation_1.augmentCommandKit)(true);
|
|
39
36
|
commandkit_1.Logger.info(`Plugin ${this.name} activated`);
|
|
40
37
|
}
|
|
41
|
-
createDefaultTools(ctx) {
|
|
42
|
-
const { commandkit } = ctx;
|
|
43
|
-
const client = commandkit.client;
|
|
44
|
-
this.defaultTools.getUserById = (0, ai_1.tool)({
|
|
45
|
-
description: 'Get user information by ID',
|
|
46
|
-
parameters: zod_1.z.object({
|
|
47
|
-
userId: zod_1.z
|
|
48
|
-
.string()
|
|
49
|
-
.describe('The ID of the user to retrieve. This is a Discord snowflake string.'),
|
|
50
|
-
}),
|
|
51
|
-
execute: async (params) => {
|
|
52
|
-
const user = await client.users.fetch(params.userId, {
|
|
53
|
-
force: false,
|
|
54
|
-
cache: true,
|
|
55
|
-
});
|
|
56
|
-
return user.toJSON();
|
|
57
|
-
},
|
|
58
|
-
});
|
|
59
|
-
this.defaultTools.getChannelById = (0, ai_1.tool)({
|
|
60
|
-
description: 'Get channel information by ID',
|
|
61
|
-
parameters: zod_1.z.object({
|
|
62
|
-
channelId: zod_1.z
|
|
63
|
-
.string()
|
|
64
|
-
.describe('The ID of the channel to retrieve. This is a Discord snowflake string.'),
|
|
65
|
-
}),
|
|
66
|
-
execute: async (params) => {
|
|
67
|
-
const channel = await client.channels.fetch(params.channelId, {
|
|
68
|
-
force: false,
|
|
69
|
-
cache: true,
|
|
70
|
-
});
|
|
71
|
-
if (!channel) {
|
|
72
|
-
throw new Error(`Channel with ID ${params.channelId} not found.`);
|
|
73
|
-
}
|
|
74
|
-
return channel.toJSON();
|
|
75
|
-
},
|
|
76
|
-
});
|
|
77
|
-
this.defaultTools.getGuildById = (0, ai_1.tool)({
|
|
78
|
-
description: 'Get guild information by ID',
|
|
79
|
-
parameters: zod_1.z.object({
|
|
80
|
-
guildId: zod_1.z
|
|
81
|
-
.string()
|
|
82
|
-
.describe('The ID of the guild to retrieve. This is a Discord snowflake string.'),
|
|
83
|
-
}),
|
|
84
|
-
execute: async (params) => {
|
|
85
|
-
const guild = await client.guilds.fetch({
|
|
86
|
-
guild: params.guildId,
|
|
87
|
-
force: false,
|
|
88
|
-
cache: true,
|
|
89
|
-
});
|
|
90
|
-
if (!guild) {
|
|
91
|
-
throw new Error(`Guild with ID ${params.guildId} not found.`);
|
|
92
|
-
}
|
|
93
|
-
return {
|
|
94
|
-
id: guild.id,
|
|
95
|
-
name: guild.name,
|
|
96
|
-
icon: guild.iconURL(),
|
|
97
|
-
memberCount: guild.memberCount,
|
|
98
|
-
};
|
|
99
|
-
},
|
|
100
|
-
});
|
|
101
|
-
this.defaultTools.getCurrentUser = (0, ai_1.tool)({
|
|
102
|
-
description: 'Get information about the current discord bot user',
|
|
103
|
-
parameters: zod_1.z.object({}),
|
|
104
|
-
execute: async () => {
|
|
105
|
-
const user = client.user;
|
|
106
|
-
if (!user) {
|
|
107
|
-
throw new Error('Bot user is not available.');
|
|
108
|
-
}
|
|
109
|
-
return user.toJSON();
|
|
110
|
-
},
|
|
111
|
-
});
|
|
112
|
-
this.defaultTools.getAvailableCommands = (0, ai_1.tool)({
|
|
113
|
-
description: 'Get all available commands',
|
|
114
|
-
parameters: zod_1.z.object({}),
|
|
115
|
-
execute: async () => {
|
|
116
|
-
return ctx.commandkit.commandHandler.getCommandsArray().map((cmd) => ({
|
|
117
|
-
name: cmd.data.command.name,
|
|
118
|
-
description: cmd.data.command.description,
|
|
119
|
-
category: cmd.command.category,
|
|
120
|
-
}));
|
|
121
|
-
},
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
38
|
async deactivate(ctx) {
|
|
125
39
|
this.toolsRecord = {};
|
|
126
40
|
if (this.onMessageFunc) {
|
|
127
41
|
ctx.commandkit.client.off(discord_js_1.Events.MessageCreate, this.onMessageFunc);
|
|
128
42
|
this.onMessageFunc = null;
|
|
129
43
|
}
|
|
44
|
+
(0, augmentation_1.augmentCommandKit)(false);
|
|
130
45
|
commandkit_1.Logger.info(`Plugin ${this.name} deactivated`);
|
|
131
46
|
}
|
|
132
|
-
async handleMessage(
|
|
47
|
+
async handleMessage(commandkit, message) {
|
|
133
48
|
if (message.author.bot || !Object.keys(this.toolsRecord).length)
|
|
134
49
|
return;
|
|
135
|
-
const
|
|
136
|
-
if (!message.content?.length
|
|
50
|
+
const { messageFilter, selectAiModel, prepareSystemPrompt, preparePrompt, onProcessingFinish, onProcessingStart, onResult, onError, disableBuiltInTools, } = (0, configure_1.getAIConfig)();
|
|
51
|
+
if (!message.content?.length)
|
|
137
52
|
return;
|
|
138
53
|
if (!message.channel.isTextBased() || !message.channel.isSendable())
|
|
139
54
|
return;
|
|
@@ -143,168 +58,62 @@ class AiPlugin extends plugin_1.RuntimePlugin {
|
|
|
143
58
|
const ctx = new context_1.AiContext({
|
|
144
59
|
message,
|
|
145
60
|
params: {},
|
|
146
|
-
commandkit:
|
|
61
|
+
commandkit: commandkit,
|
|
147
62
|
});
|
|
148
|
-
const systemPrompt = (await generateSystemPrompt?.(message)) ||
|
|
149
|
-
`You are a helpful AI discord bot. Your name is ${message.client.user.username} and your id is ${message.client.user.id}.
|
|
150
|
-
You are designed to assist users with their questions and tasks. You also have access to various tools that can help you perform tasks.
|
|
151
|
-
Tools are basically like commands that you can execute to perform specific actions based on user input.
|
|
152
|
-
Keep the response short and concise, and only use tools when necessary. Keep the response length under 2000 characters.
|
|
153
|
-
Do not include your own text in the response unless necessary. For text formatting, you can use discord's markdown syntax.
|
|
154
|
-
${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.'}
|
|
155
|
-
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.
|
|
156
|
-
If the user asks you to perform a task that requires a tool, use the tool to perform the task and return the result.
|
|
157
|
-
`;
|
|
158
|
-
const userInfo = `<user>
|
|
159
|
-
<id>${message.author.id}</id>
|
|
160
|
-
<name>${message.author.username}</name>
|
|
161
|
-
<displayName>${message.author.displayName}</displayName>
|
|
162
|
-
<avatar>${message.author.avatarURL()}</avatar>
|
|
163
|
-
</user>`;
|
|
164
63
|
await (0, ai_context_worker_1.runInAiWorkerContext)(ctx, message, async () => {
|
|
165
|
-
const
|
|
166
|
-
const
|
|
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
|
+
};
|
|
167
74
|
try {
|
|
168
|
-
const
|
|
169
|
-
const originalPrompt = `${userInfo}\nUser: ${message.content}\nAI:`;
|
|
170
|
-
const call = ({ prompt = originalPrompt, includeTools = true, disableObjectMode = false, }) => (0, ai_1.generateText)({
|
|
171
|
-
abortSignal: AbortSignal.timeout(60000),
|
|
75
|
+
const result = await (0, ai_1.generateText)({
|
|
172
76
|
model,
|
|
173
|
-
|
|
174
|
-
tools: { ...this.toolsRecord, ...this.defaultTools },
|
|
175
|
-
}),
|
|
77
|
+
abortSignal: abortSignal ?? AbortSignal.timeout(60000),
|
|
176
78
|
prompt,
|
|
177
79
|
system: systemPrompt,
|
|
178
|
-
maxSteps: 5,
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}),
|
|
185
|
-
}
|
|
186
|
-
: {}),
|
|
80
|
+
maxSteps: maxSteps ?? 5,
|
|
81
|
+
...modelOptions,
|
|
82
|
+
tools: {
|
|
83
|
+
...tools,
|
|
84
|
+
...modelOptions.tools,
|
|
85
|
+
},
|
|
187
86
|
});
|
|
188
|
-
|
|
189
|
-
try {
|
|
190
|
-
result = await call({});
|
|
191
|
-
}
|
|
192
|
-
catch {
|
|
193
|
-
if (objectMode) {
|
|
194
|
-
const r1 = await call({
|
|
195
|
-
includeTools: true,
|
|
196
|
-
disableObjectMode: true,
|
|
197
|
-
});
|
|
198
|
-
if (!r1.text)
|
|
199
|
-
throw new Error('No text response from AI');
|
|
200
|
-
const r2 = await call({
|
|
201
|
-
includeTools: false,
|
|
202
|
-
disableObjectMode: false,
|
|
203
|
-
prompt: `Original context: ${originalPrompt} ${r1.text}\n\nGenerate a structured response based on the previous response`,
|
|
204
|
-
});
|
|
205
|
-
result = r2;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
stopTyping();
|
|
209
|
-
let structuredResult = null;
|
|
210
|
-
try {
|
|
211
|
-
const val = 'experimental_output' in result && result.experimental_output;
|
|
212
|
-
if (val) {
|
|
213
|
-
structuredResult = val;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
catch { }
|
|
217
|
-
if (structuredResult) {
|
|
218
|
-
const { poll, content, embed } = structuredResult;
|
|
219
|
-
if (!poll && !content && !embed) {
|
|
220
|
-
commandkit_1.Logger.warn('AI response did not include any content, embed, or poll.');
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
await message.reply({
|
|
224
|
-
content: content?.substring(0, 2000),
|
|
225
|
-
embeds: embed
|
|
226
|
-
? [
|
|
227
|
-
{
|
|
228
|
-
title: embed.title,
|
|
229
|
-
description: embed.description,
|
|
230
|
-
url: embed.url,
|
|
231
|
-
color: embed.color,
|
|
232
|
-
image: embed.image ? { url: embed.image } : undefined,
|
|
233
|
-
thumbnail: embed.thumbnailImage
|
|
234
|
-
? { url: embed.thumbnailImage }
|
|
235
|
-
: undefined,
|
|
236
|
-
fields: embed.fields?.map((field) => ({
|
|
237
|
-
name: field.name,
|
|
238
|
-
value: field.value,
|
|
239
|
-
inline: field.inline,
|
|
240
|
-
})),
|
|
241
|
-
},
|
|
242
|
-
]
|
|
243
|
-
: [],
|
|
244
|
-
poll: poll
|
|
245
|
-
? {
|
|
246
|
-
allowMultiselect: poll.allow_multiselect,
|
|
247
|
-
answers: poll.answers.map((answer) => ({
|
|
248
|
-
text: answer.text,
|
|
249
|
-
emoji: answer.emoji,
|
|
250
|
-
})),
|
|
251
|
-
duration: poll.duration,
|
|
252
|
-
question: { text: poll.question.text },
|
|
253
|
-
}
|
|
254
|
-
: undefined,
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
else if (!!result.text) {
|
|
258
|
-
await message.reply({
|
|
259
|
-
content: result.text.substring(0, 2000),
|
|
260
|
-
allowedMentions: { parse: [] },
|
|
261
|
-
});
|
|
262
|
-
}
|
|
87
|
+
await onResult(ctx, message, result);
|
|
263
88
|
}
|
|
264
89
|
catch (e) {
|
|
265
|
-
|
|
266
|
-
const channel = message.channel;
|
|
267
|
-
if (channel.isSendable()) {
|
|
268
|
-
await message
|
|
269
|
-
.reply({
|
|
270
|
-
content: 'An error occurred while processing your request.',
|
|
271
|
-
allowedMentions: { parse: [] },
|
|
272
|
-
})
|
|
273
|
-
.catch((e) => commandkit_1.Logger.error(`Failed to send error message: ${e}`));
|
|
274
|
-
}
|
|
90
|
+
await onError(ctx, message, e);
|
|
275
91
|
}
|
|
276
92
|
finally {
|
|
277
|
-
|
|
93
|
+
await onProcessingFinish(ctx, message);
|
|
278
94
|
}
|
|
279
95
|
});
|
|
280
96
|
}
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
};
|
|
290
|
-
const typingInterval = setInterval(runner, 3000).unref();
|
|
291
|
-
await runner();
|
|
292
|
-
return () => {
|
|
293
|
-
stopped = true;
|
|
294
|
-
clearInterval(typingInterval);
|
|
295
|
-
};
|
|
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);
|
|
296
105
|
}
|
|
297
|
-
async onBeforeCommandsLoad(
|
|
106
|
+
async onBeforeCommandsLoad() {
|
|
298
107
|
this.toolsRecord = {};
|
|
299
108
|
}
|
|
300
109
|
async onAfterCommandsLoad(ctx) {
|
|
301
|
-
const
|
|
110
|
+
const { commandkit } = ctx;
|
|
111
|
+
const commands = commandkit.commandHandler
|
|
302
112
|
.getCommandsArray()
|
|
303
113
|
.filter((command) => 'ai' in command.data &&
|
|
304
114
|
typeof command.data.ai === 'function' &&
|
|
305
115
|
'aiConfig' in command.data);
|
|
306
116
|
if (!commands.length) {
|
|
307
|
-
commandkit_1.Logger.warn('No commands with AI functionality found. Ensure commands are properly configured.');
|
|
308
117
|
return;
|
|
309
118
|
}
|
|
310
119
|
const tools = new discord_js_1.Collection();
|
|
@@ -316,12 +125,31 @@ class AiPlugin extends plugin_1.RuntimePlugin {
|
|
|
316
125
|
const description = cmd.data.aiConfig.description || cmd.data.command.description;
|
|
317
126
|
const cmdTool = (0, ai_1.tool)({
|
|
318
127
|
description,
|
|
319
|
-
type: 'function',
|
|
320
128
|
parameters: cmd.data.aiConfig.parameters,
|
|
321
129
|
async execute(params) {
|
|
130
|
+
const config = (0, configure_1.getAIConfig)();
|
|
322
131
|
const ctx = (0, ai_context_worker_1.getAiWorkerContext)();
|
|
323
132
|
ctx.ctx.setParams(params);
|
|
324
|
-
|
|
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
|
+
}
|
|
325
153
|
},
|
|
326
154
|
});
|
|
327
155
|
cmd.tool = cmdTool;
|
|
@@ -333,4 +161,4 @@ class AiPlugin extends plugin_1.RuntimePlugin {
|
|
|
333
161
|
}
|
|
334
162
|
}
|
|
335
163
|
exports.AiPlugin = AiPlugin;
|
|
336
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFpQ0Esa0NBWUM7QUE3Q0QsOENBQTJFO0FBRTNFLDJDQUFtRDtBQUNuRCx1Q0FBc0M7QUFDdEMsMkNBQXNFO0FBQ3RFLDJCQUFzRDtBQUN0RCw2QkFBd0I7QUFDeEIsMkRBQStFO0FBQy9FLHFDQUE0QztBQWU1QyxJQUFJLGFBQWEsR0FBeUIsSUFBSSxDQUFDO0FBQy9DLElBQUksYUFBYSxHQUF5QixJQUFJLENBQUM7QUFDL0MsSUFBSSxvQkFBeUUsQ0FBQztBQVE5RSxTQUFnQixXQUFXLENBQUMsTUFBbUI7SUFDN0MsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QixvQkFBb0IsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO0lBQzdDLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBYSxRQUFTLFNBQVEsc0JBQThCO0lBTTFELFlBQW1CLE9BQXdCO1FBQ3pDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQU5ELFNBQUksR0FBRyxVQUFVLENBQUM7UUFDMUIsZ0JBQVcsR0FBeUIsRUFBRSxDQUFDO1FBQ3ZDLGlCQUFZLEdBQXlCLEVBQUUsQ0FBQztRQUN4QyxrQkFBYSxHQUFpRCxJQUFJLENBQUM7SUFJM0UsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBNEI7UUFDaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbkUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLG1CQUFNLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVuRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0IsbUJBQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsR0FBNEI7UUFDckQsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUMzQixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBRWpDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxHQUFHLElBQUEsU0FBSSxFQUFDO1lBQ25DLFdBQVcsRUFBRSw0QkFBNEI7WUFDekMsVUFBVSxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQ25CLE1BQU0sRUFBRSxPQUFDO3FCQUNOLE1BQU0sRUFBRTtxQkFDUixRQUFRLENBQ1AscUVBQXFFLENBQ3RFO2FBQ0osQ0FBQztZQUNGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ3hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtvQkFDbkQsS0FBSyxFQUFFLEtBQUs7b0JBQ1osS0FBSyxFQUFFLElBQUk7aUJBQ1osQ0FBQyxDQUFDO2dCQUVILE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsR0FBRyxJQUFBLFNBQUksRUFBQztZQUN0QyxXQUFXLEVBQUUsK0JBQStCO1lBQzVDLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDO2dCQUNuQixTQUFTLEVBQUUsT0FBQztxQkFDVCxNQUFNLEVBQUU7cUJBQ1IsUUFBUSxDQUNQLHdFQUF3RSxDQUN6RTthQUNKLENBQUM7WUFDRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUN4QixNQUFNLE9BQU8sR0FBRyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7b0JBQzVELEtBQUssRUFBRSxLQUFLO29CQUNaLEtBQUssRUFBRSxJQUFJO2lCQUNaLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsTUFBTSxDQUFDLFNBQVMsYUFBYSxDQUFDLENBQUM7Z0JBQ3BFLENBQUM7Z0JBRUQsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDMUIsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxHQUFHLElBQUEsU0FBSSxFQUFDO1lBQ3BDLFdBQVcsRUFBRSw2QkFBNkI7WUFDMUMsVUFBVSxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQ25CLE9BQU8sRUFBRSxPQUFDO3FCQUNQLE1BQU0sRUFBRTtxQkFDUixRQUFRLENBQ1Asc0VBQXNFLENBQ3ZFO2FBQ0osQ0FBQztZQUNGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ3hCLE1BQU0sS0FBSyxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7b0JBQ3RDLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTztvQkFDckIsS0FBSyxFQUFFLEtBQUs7b0JBQ1osS0FBSyxFQUFFLElBQUk7aUJBQ1osQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDWCxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixNQUFNLENBQUMsT0FBTyxhQUFhLENBQUMsQ0FBQztnQkFDaEUsQ0FBQztnQkFFRCxPQUFPO29CQUNMLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDWixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7b0JBQ2hCLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFO29CQUNyQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7aUJBQy9CLENBQUM7WUFDSixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEdBQUcsSUFBQSxTQUFJLEVBQUM7WUFDdEMsV0FBVyxFQUFFLG9EQUFvRDtZQUNqRSxVQUFVLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNsQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUV6QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2dCQUNoRCxDQUFDO2dCQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixHQUFHLElBQUEsU0FBSSxFQUFDO1lBQzVDLFdBQVcsRUFBRSw0QkFBNEI7WUFDekMsVUFBVSxFQUFFLE9BQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDbEIsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDcEUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7b0JBQzNCLFdBQVcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXO29CQUN6QyxRQUFRLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRO2lCQUMvQixDQUFDLENBQUMsQ0FBQztZQUNOLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUE0QjtRQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxtQkFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTyxLQUFLLENBQUMsYUFBYSxDQUN6QixhQUFzQyxFQUN0QyxPQUFnQjtRQUVoQixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTTtZQUFFLE9BQU87UUFFeEUsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLGVBQWU7WUFBRSxPQUFPO1FBRXpELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFBRSxPQUFPO1FBRTVFLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMzRSxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU87UUFFNUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxtQkFBUyxDQUFNO1lBQzdCLE9BQU87WUFDUCxNQUFNLEVBQUUsRUFBRTtZQUNWLFVBQVUsRUFBRSxhQUFhLENBQUMsVUFBVTtTQUNyQyxDQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FDaEIsQ0FBQyxNQUFNLG9CQUFvQixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkMsa0RBQWtELE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsbUJBQW1CLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7Ozs7O1FBS3JILE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsd0NBQXdDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxnQkFBZ0IsT0FBTyxDQUFDLE9BQU8sK0RBQStELENBQUMsQ0FBQyxDQUFDLHdEQUF3RDs7O09BR3hPLENBQUM7UUFFSixNQUFNLFFBQVEsR0FBRztVQUNYLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNmLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUTttQkFDaEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXO2NBQy9CLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQzVCLENBQUM7UUFFVCxNQUFNLElBQUEsd0NBQW9CLEVBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTtZQUNsRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBc0IsQ0FBQztZQUMvQyxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFbkQsSUFBSSxDQUFDO2dCQUNILE1BQU0sRUFDSixLQUFLLEVBQ0wsT0FBTyxFQUNQLFVBQVUsR0FBRyxLQUFLLEdBQ25CLEdBQUcsTUFBTSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRW5DLE1BQU0sY0FBYyxHQUFHLEdBQUcsUUFBUSxXQUFXLE9BQU8sQ0FBQyxPQUFPLE9BQU8sQ0FBQztnQkFFcEUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxFQUNaLE1BQU0sR0FBRyxjQUFjLEVBQ3ZCLFlBQVksR0FBRyxJQUFJLEVBQ25CLGlCQUFpQixHQUFHLEtBQUssR0FDMUIsRUFBRSxFQUFFLENBQ0gsSUFBQSxpQkFBWSxFQUFDO29CQUNYLFdBQVcsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQU0sQ0FBQztvQkFDeEMsS0FBSztvQkFDTCxHQUFHLENBQUMsWUFBWSxJQUFJO3dCQUNsQixLQUFLLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFO3FCQUNyRCxDQUFDO29CQUNGLE1BQU07b0JBQ04sTUFBTSxFQUFFLFlBQVk7b0JBQ3BCLFFBQVEsRUFBRSxDQUFDO29CQUNYLGVBQWUsRUFBRSxPQUFPO29CQUN4QixHQUFHLENBQUMsVUFBVSxJQUFJLENBQUMsaUJBQWlCO3dCQUNsQyxDQUFDLENBQUM7NEJBQ0UsbUJBQW1CLEVBQUUsV0FBTSxDQUFDLE1BQU0sQ0FBQztnQ0FDakMsTUFBTSxFQUFFLHlCQUFnQjs2QkFDekIsQ0FBQzt5QkFDSDt3QkFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUNSLENBQUMsQ0FBQztnQkFFTCxJQUFJLE1BQVcsQ0FBQztnQkFFaEIsSUFBSSxDQUFDO29CQUNILE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDMUIsQ0FBQztnQkFBQyxNQUFNLENBQUM7b0JBQ1AsSUFBSSxVQUFVLEVBQUUsQ0FBQzt3QkFDZixNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQzs0QkFDcEIsWUFBWSxFQUFFLElBQUk7NEJBQ2xCLGlCQUFpQixFQUFFLElBQUk7eUJBQ3hCLENBQUMsQ0FBQzt3QkFFSCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUk7NEJBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO3dCQUUxRCxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQzs0QkFDcEIsWUFBWSxFQUFFLEtBQUs7NEJBQ25CLGlCQUFpQixFQUFFLEtBQUs7NEJBQ3hCLE1BQU0sRUFBRSxxQkFBcUIsY0FBYyxJQUFJLEVBQUUsQ0FBQyxJQUFJLG1FQUFtRTt5QkFDMUgsQ0FBQyxDQUFDO3dCQUVILE1BQU0sR0FBRyxFQUFFLENBQUM7b0JBQ2QsQ0FBQztnQkFDSCxDQUFDO2dCQUVELFVBQVUsRUFBRSxDQUFDO2dCQUViLElBQUksZ0JBQWdCLEdBQTRDLElBQUksQ0FBQztnQkFFckUsSUFBSSxDQUFDO29CQUNILE1BQU0sR0FBRyxHQUNQLHFCQUFxQixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsbUJBQW1CLENBQUM7b0JBRWhFLElBQUksR0FBRyxFQUFFLENBQUM7d0JBQ1IsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO29CQUN6QixDQUFDO2dCQUNILENBQUM7Z0JBQUMsTUFBTSxDQUFDLENBQUEsQ0FBQztnQkFFVixJQUFJLGdCQUFnQixFQUFFLENBQUM7b0JBQ3JCLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLGdCQUFnQixDQUFDO29CQUVsRCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2hDLG1CQUFNLENBQUMsSUFBSSxDQUNULDBEQUEwRCxDQUMzRCxDQUFDO3dCQUNGLE9BQU87b0JBQ1QsQ0FBQztvQkFFRCxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUM7d0JBQ2xCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7d0JBQ3BDLE1BQU0sRUFBRSxLQUFLOzRCQUNYLENBQUMsQ0FBQztnQ0FDRTtvQ0FDRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7b0NBQ2xCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztvQ0FDOUIsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO29DQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztvQ0FDbEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztvQ0FDckQsU0FBUyxFQUFFLEtBQUssQ0FBQyxjQUFjO3dDQUM3QixDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRTt3Q0FDL0IsQ0FBQyxDQUFDLFNBQVM7b0NBQ2IsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dDQUNwQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7d0NBQ2hCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSzt3Q0FDbEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO3FDQUNyQixDQUFDLENBQUM7aUNBQ0o7NkJBQ0Y7NEJBQ0gsQ0FBQyxDQUFDLEVBQUU7d0JBQ04sSUFBSSxFQUFFLElBQUk7NEJBQ1IsQ0FBQyxDQUFDO2dDQUNFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7Z0NBQ3hDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztvQ0FDckMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO29DQUNqQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7aUNBQ3BCLENBQUMsQ0FBQztnQ0FDSCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0NBQ3ZCLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTs2QkFDdkM7NEJBQ0gsQ0FBQyxDQUFDLFNBQVM7cUJBQ2QsQ0FBQyxDQUFDO2dCQUNMLENBQUM7cUJBQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUN6QixNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUM7d0JBQ2xCLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO3dCQUN2QyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO3FCQUMvQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLG1CQUFNLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBc0IsQ0FBQztnQkFFL0MsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztvQkFDekIsTUFBTSxPQUFPO3lCQUNWLEtBQUssQ0FBQzt3QkFDTCxPQUFPLEVBQUUsa0RBQWtEO3dCQUMzRCxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO3FCQUMvQixDQUFDO3lCQUNELEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsbUJBQU0sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEUsQ0FBQztZQUNILENBQUM7b0JBQVMsQ0FBQztnQkFDVCxVQUFVLEVBQUUsQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQW9CO1FBQzVDLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztRQUVwQixNQUFNLE1BQU0sR0FBRyxLQUFLLElBQUksRUFBRTtZQUN4QixJQUFJLE9BQU87Z0JBQUUsT0FBTyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFbEQsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNDLENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXpELE1BQU0sTUFBTSxFQUFFLENBQUM7UUFFZixPQUFPLEdBQUcsRUFBRTtZQUNWLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDZixhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxvQkFBb0IsQ0FDL0IsR0FBNEI7UUFFNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUE0QjtRQUNwRCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLGNBQWM7YUFDM0MsZ0JBQWdCLEVBQUU7YUFDbEIsTUFBTSxDQUNMLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDVixJQUFJLElBQUksT0FBTyxDQUFDLElBQUk7WUFDcEIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxVQUFVO1lBQ3JDLFVBQVUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUM3QixDQUFDO1FBRUosSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQixtQkFBTSxDQUFDLElBQUksQ0FDVCxtRkFBbUYsQ0FDcEYsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSx1QkFBVSxFQUFpQyxDQUFDO1FBRTlELEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7WUFDL0IsTUFBTSxHQUFHLEdBQUcsT0FBZ0MsQ0FBQztZQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN2QyxTQUFTO1lBQ1gsQ0FBQztZQUVELE1BQU0sV0FBVyxHQUNmLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFFaEUsTUFBTSxPQUFPLEdBQUcsSUFBQSxTQUFJLEVBQUM7Z0JBQ25CLFdBQVc7Z0JBQ1gsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFVBQVUsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVO2dCQUN4QyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU07b0JBQ2xCLE1BQU0sR0FBRyxHQUFHLElBQUEsc0NBQWtCLEdBQUUsQ0FBQztvQkFDakMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBRTFCLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixDQUFDO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsR0FBRyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7WUFFbkIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUNuQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDcEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbllELDRCQW1ZQyJ9
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4Q0FBMkU7QUFFM0UsMkNBQStEO0FBQy9ELHVDQUFzQztBQUN0QywyQ0FBeUQ7QUFDekQsMkJBQThDO0FBQzlDLDJEQUErRTtBQUMvRSwyRUFBc0U7QUFDdEUsaUVBQTJEO0FBQzNELDZFQUF1RTtBQUN2RSw2REFBdUQ7QUFDdkQsMkRBQXFEO0FBQ3JELDJDQUEwQztBQUMxQyxpREFBbUQ7QUFnQm5ELE1BQU0sWUFBWSxHQUF5QjtJQUN6QyxvQkFBb0IsRUFBcEIsNkNBQW9CO0lBQ3BCLGNBQWMsRUFBZCxrQ0FBYztJQUNkLG9CQUFvQixFQUFwQiw4Q0FBb0I7SUFDcEIsWUFBWSxFQUFaLDhCQUFZO0lBQ1osV0FBVyxFQUFYLDRCQUFXO0NBQ1osQ0FBQztBQUVGLE1BQWEsUUFBUyxTQUFRLHNCQUE4QjtJQU0xRCxZQUFtQixPQUF3QjtRQUN6QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFORCxTQUFJLEdBQUcsVUFBVSxDQUFDO1FBQzFCLGdCQUFXLEdBQXlCLEVBQUUsQ0FBQztRQUN2QyxpQkFBWSxHQUFHLFlBQVksQ0FBQztRQUM1QixrQkFBYSxHQUFpRCxJQUFJLENBQUM7SUFJM0UsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBNEI7UUFDaEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsbUJBQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25FLElBQUEsZ0NBQWlCLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFFeEIsbUJBQU0sQ0FB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
|
|
@@ -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=
|