@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.
@@ -1,7 +1,13 @@
1
1
  import { Message } from 'discord.js';
2
2
  import { AiContext } from './context';
3
+ /**
4
+ * @private
5
+ */
3
6
  export declare function getAiWorkerContext(): {
4
7
  message: Message;
5
8
  ctx: AiContext;
6
9
  };
10
+ /**
11
+ * @private
12
+ */
7
13
  export declare function runInAiWorkerContext<R, F extends (...args: any[]) => R>(ctx: AiContext, message: Message, callback: F): R;
@@ -4,6 +4,9 @@ exports.getAiWorkerContext = getAiWorkerContext;
4
4
  exports.runInAiWorkerContext = runInAiWorkerContext;
5
5
  const node_async_hooks_1 = require("node:async_hooks");
6
6
  const worker = new node_async_hooks_1.AsyncLocalStorage();
7
+ /**
8
+ * @private
9
+ */
7
10
  function getAiWorkerContext() {
8
11
  const ctx = worker.getStore();
9
12
  if (!ctx) {
@@ -11,7 +14,10 @@ function getAiWorkerContext() {
11
14
  }
12
15
  return ctx;
13
16
  }
17
+ /**
18
+ * @private
19
+ */
14
20
  function runInAiWorkerContext(ctx, message, callback) {
15
21
  return worker.run({ message, ctx }, callback);
16
22
  }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktY29udGV4dC13b3JrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWktY29udGV4dC13b3JrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSxnREFVQztBQUVELG9EQU1DO0FBdkJELHVEQUFxRDtBQUdyRCxNQUFNLE1BQU0sR0FBRyxJQUFJLG9DQUFpQixFQUF3QyxDQUFDO0FBRTdFLFNBQWdCLGtCQUFrQjtJQUNoQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFOUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsTUFBTSxJQUFJLEtBQUssQ0FDYixtRkFBbUYsQ0FDcEYsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFnQixvQkFBb0IsQ0FDbEMsR0FBYyxFQUNkLE9BQWdCLEVBQ2hCLFFBQVc7SUFFWCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDaEQsQ0FBQyJ9
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktY29udGV4dC13b3JrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWktY29udGV4dC13b3JrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFTQSxnREFVQztBQUtELG9EQU1DO0FBN0JELHVEQUFxRDtBQUdyRCxNQUFNLE1BQU0sR0FBRyxJQUFJLG9DQUFpQixFQUF3QyxDQUFDO0FBRTdFOztHQUVHO0FBQ0gsU0FBZ0Isa0JBQWtCO0lBQ2hDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUU5QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxNQUFNLElBQUksS0FBSyxDQUNiLG1GQUFtRixDQUNwRixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQ2xDLEdBQWMsRUFDZCxPQUFnQixFQUNoQixRQUFXO0lBRVgsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2hELENBQUMifQ==
@@ -0,0 +1,17 @@
1
+ import { AiContext } from './context';
2
+ import { Awaitable } from 'discord.js';
3
+ import { AiConfig } from './plugin';
4
+ declare module 'commandkit' {
5
+ interface CustomAppCommandProps {
6
+ ai?: (ctx: AiContext) => Awaitable<unknown>;
7
+ aiConfig?: AiConfig;
8
+ }
9
+ interface Context {
10
+ ai?: AiContext;
11
+ }
12
+ }
13
+ /**
14
+ * @private
15
+ * @internal
16
+ */
17
+ export declare function augmentCommandKit(isAdd: boolean): void;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.augmentCommandKit = augmentCommandKit;
4
+ const commandkit_1 = require("commandkit");
5
+ const ai_context_worker_1 = require("./ai-context-worker");
6
+ /**
7
+ * @private
8
+ * @internal
9
+ */
10
+ function augmentCommandKit(isAdd) {
11
+ if (isAdd) {
12
+ if (!Object.prototype.hasOwnProperty.call(commandkit_1.Context.prototype, 'ai')) {
13
+ Object.defineProperty(commandkit_1.Context.prototype, 'ai', {
14
+ get() {
15
+ try {
16
+ const { ctx } = (0, ai_context_worker_1.getAiWorkerContext)();
17
+ return ctx;
18
+ }
19
+ catch {
20
+ // no-op if not in AI worker context
21
+ }
22
+ },
23
+ });
24
+ }
25
+ }
26
+ else {
27
+ if (Object.prototype.hasOwnProperty.call(commandkit_1.Context.prototype, 'ai')) {
28
+ delete commandkit_1.Context.prototype.ai;
29
+ }
30
+ }
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVnbWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2F1Z21lbnRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFCQSw4Q0FtQkM7QUFyQ0QsMkNBQXFDO0FBQ3JDLDJEQUF5RDtBQWF6RDs7O0dBR0c7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxLQUFjO0lBQzlDLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLG9CQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbkUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxvQkFBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUU7Z0JBQzdDLEdBQUc7b0JBQ0QsSUFBSSxDQUFDO3dCQUNILE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFBLHNDQUFrQixHQUFFLENBQUM7d0JBQ3JDLE9BQU8sR0FBRyxDQUFDO29CQUNiLENBQUM7b0JBQUMsTUFBTSxDQUFDO3dCQUNQLG9DQUFvQztvQkFDdEMsQ0FBQztnQkFDSCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsb0JBQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNsRSxPQUFPLG9CQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMifQ==
@@ -0,0 +1,58 @@
1
+ import { Message } from 'discord.js';
2
+ import { AIGenerateResult, MessageFilter, SelectAiModel } from './types';
3
+ import { AiContext } from './context';
4
+ /**
5
+ * Represents the configuration options for the AI model.
6
+ */
7
+ export interface ConfigureAI {
8
+ /**
9
+ * Whether to disable the built-in tools. Default is false.
10
+ */
11
+ disableBuiltInTools?: boolean;
12
+ /**
13
+ * A filter function that determines whether a message should be processed by the AI.
14
+ * CommandKit invokes this function before processing the message.
15
+ */
16
+ messageFilter?: MessageFilter;
17
+ /**
18
+ * A function that selects the AI model to use based on the message.
19
+ * This function should return a promise that resolves to an object containing the model and options.
20
+ */
21
+ selectAiModel: SelectAiModel;
22
+ /**
23
+ * A function that generates a system prompt based on the message.
24
+ * This function should return a promise that resolves to a string containing the system prompt.
25
+ * If not provided, a default system prompt will be used.
26
+ */
27
+ prepareSystemPrompt?: (ctx: AiContext, message: Message) => Promise<string>;
28
+ /**
29
+ * A function that prepares the prompt for the AI model.
30
+ */
31
+ preparePrompt?: (ctx: AiContext, message: Message) => Promise<string>;
32
+ /**
33
+ * A function that gets called when the AI starts processing a message.
34
+ */
35
+ onProcessingStart?: (ctx: AiContext, message: Message) => Promise<void>;
36
+ /**
37
+ * A function that gets called when the AI finishes processing a message.
38
+ */
39
+ onProcessingFinish?: (ctx: AiContext, message: Message) => Promise<void>;
40
+ /**
41
+ * A function that gets called upon receiving the result from the AI model.
42
+ */
43
+ onResult?: (ctx: AiContext, message: Message, result: AIGenerateResult) => Promise<void>;
44
+ /**
45
+ * A function that gets called when error occurs.
46
+ */
47
+ onError?: (ctx: AiContext, message: Message, error: Error) => Promise<void>;
48
+ }
49
+ /**
50
+ * Retrieves the current AI configuration.
51
+ */
52
+ export declare function getAIConfig(): Required<ConfigureAI>;
53
+ /**
54
+ * Configures the AI plugin with the provided options.
55
+ * This function allows you to set a message filter, select an AI model, and generate a system prompt.
56
+ * @param config The configuration options for the AI plugin.
57
+ */
58
+ export declare function configureAI(config: ConfigureAI): void;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAIConfig = getAIConfig;
4
+ exports.configureAI = configureAI;
5
+ const system_prompt_1 = require("./system-prompt");
6
+ const utils_1 = require("./utils");
7
+ const commandkit_1 = require("commandkit");
8
+ const CKIT_INTERNAL_STOP_TYPING = '<<{{[[((ckitInternalStopTyping))]]}}>>';
9
+ const AIConfig = {
10
+ disableBuiltInTools: false,
11
+ messageFilter: async (message) => message.mentions.users.has(message.client.user.id),
12
+ prepareSystemPrompt: async (_ctx, message) => (0, system_prompt_1.createSystemPrompt)(message),
13
+ async preparePrompt(_ctx, message) {
14
+ const userInfo = `<user>
15
+ <id>${message.author.id}</id>
16
+ <name>${message.author.username}</name>
17
+ <displayName>${message.author.displayName}</displayName>
18
+ <avatar>${message.author.avatarURL()}</avatar>
19
+ </user>`;
20
+ return `${userInfo}\nUser: ${message.content}\nAI:`;
21
+ },
22
+ selectAiModel: async () => {
23
+ throw new Error('No AI model selected. Please configure the AI plugin using configureAI() function, making sure to include a selectAiModel function.');
24
+ },
25
+ onProcessingStart: async (ctx, message) => {
26
+ const channel = message.channel;
27
+ const stop = await (0, utils_1.createTypingIndicator)(channel);
28
+ ctx.store.set(CKIT_INTERNAL_STOP_TYPING, stop);
29
+ },
30
+ onProcessingFinish: async (ctx) => {
31
+ const stop = ctx.store.get(CKIT_INTERNAL_STOP_TYPING);
32
+ if (stop) {
33
+ stop();
34
+ ctx.store.delete(CKIT_INTERNAL_STOP_TYPING);
35
+ }
36
+ },
37
+ onResult: async (_ctx, message, result) => {
38
+ if (!!result.text) {
39
+ await message.reply({
40
+ content: result.text.substring(0, 2000),
41
+ allowedMentions: { parse: [] },
42
+ });
43
+ }
44
+ },
45
+ onError: async (_ctx, message, error) => {
46
+ commandkit_1.Logger.error(`Error processing AI message: ${error}`);
47
+ const channel = message.channel;
48
+ if (channel.isSendable()) {
49
+ await message
50
+ .reply({
51
+ content: 'An error occurred while processing your request.',
52
+ allowedMentions: { parse: [] },
53
+ })
54
+ .catch((e) => commandkit_1.Logger.error(`Failed to send error message: ${e}`));
55
+ }
56
+ },
57
+ };
58
+ /**
59
+ * Retrieves the current AI configuration.
60
+ */
61
+ function getAIConfig() {
62
+ return AIConfig;
63
+ }
64
+ /**
65
+ * Configures the AI plugin with the provided options.
66
+ * This function allows you to set a message filter, select an AI model, and generate a system prompt.
67
+ * @param config The configuration options for the AI plugin.
68
+ */
69
+ function configureAI(config) {
70
+ if (config.messageFilter) {
71
+ AIConfig.messageFilter = config.messageFilter;
72
+ }
73
+ if (config.selectAiModel) {
74
+ AIConfig.selectAiModel = config.selectAiModel;
75
+ }
76
+ if (config.prepareSystemPrompt) {
77
+ AIConfig.prepareSystemPrompt = config.prepareSystemPrompt;
78
+ }
79
+ if (config.preparePrompt) {
80
+ AIConfig.preparePrompt = config.preparePrompt;
81
+ }
82
+ }
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZ3VyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXNIQSxrQ0FFQztBQU9ELGtDQWdCQztBQTdJRCxtREFBcUQ7QUFDckQsbUNBQWdEO0FBRWhELDJDQUFvQztBQUVwQyxNQUFNLHlCQUF5QixHQUFHLHdDQUF3QyxDQUFDO0FBb0QzRSxNQUFNLFFBQVEsR0FBMEI7SUFDdEMsbUJBQW1CLEVBQUUsS0FBSztJQUMxQixhQUFhLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQy9CLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDcEQsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUEsa0NBQWtCLEVBQUMsT0FBTyxDQUFDO0lBQ3pFLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU87UUFDL0IsTUFBTSxRQUFRLEdBQUc7VUFDWCxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDZixPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVE7bUJBQ2hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVztjQUMvQixPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUM1QixDQUFDO1FBRVQsT0FBTyxHQUFHLFFBQVEsV0FBVyxPQUFPLENBQUMsT0FBTyxPQUFPLENBQUM7SUFDdEQsQ0FBQztJQUNELGFBQWEsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN4QixNQUFNLElBQUksS0FBSyxDQUNiLHFJQUFxSSxDQUN0SSxDQUFDO0lBQ0osQ0FBQztJQUNELGlCQUFpQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDeEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8s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
package/dist/context.d.ts CHANGED
@@ -1,15 +1,56 @@
1
1
  import type { CommandKit } from 'commandkit';
2
2
  import { Client, Message } from 'discord.js';
3
+ /**
4
+ * Options for the AI context.
5
+ */
3
6
  export interface AiContextOptions<T extends Record<string, unknown> = Record<string, unknown>> {
7
+ /**
8
+ * The message that triggered the AI command.
9
+ */
4
10
  message: Message;
11
+ /**
12
+ * The parameters passed to the AI command.
13
+ */
5
14
  params: T;
15
+ /**
16
+ * The CommandKit instance associated with the AI command.
17
+ */
6
18
  commandkit: CommandKit;
7
19
  }
20
+ /**
21
+ * Represents the context in which an AI command is executed.
22
+ * This includes the parameters passed to the command, the message that triggered it,
23
+ * and the CommandKit instance associated with the command.
24
+ */
8
25
  export declare class AiContext<T extends Record<string, unknown> = Record<string, unknown>> {
26
+ /**
27
+ * The parameters passed to the AI command.
28
+ */
9
29
  params: T;
30
+ /**
31
+ * The message that triggered the AI command.
32
+ */
10
33
  message: Message;
34
+ /**
35
+ * The client instance associated with the AI command.
36
+ */
11
37
  client: Client;
38
+ /**
39
+ * The CommandKit instance associated with the AI command.
40
+ */
12
41
  commandkit: CommandKit;
42
+ /**
43
+ * A key-value store to hold additional data.
44
+ */
45
+ store: Map<string, any>;
46
+ /**
47
+ * Creates a new instance of AiContext.
48
+ * @param options - The options for the AI context, including the message, parameters, and CommandKit instance.
49
+ */
13
50
  constructor(options: AiContextOptions<T>);
51
+ /**
52
+ * Sets the parameters for the AI context.
53
+ * @param params - The parameters to set.
54
+ */
14
55
  setParams(params: T): void;
15
56
  }
package/dist/context.js CHANGED
@@ -1,16 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AiContext = void 0;
4
+ /**
5
+ * Represents the context in which an AI command is executed.
6
+ * This includes the parameters passed to the command, the message that triggered it,
7
+ * and the CommandKit instance associated with the command.
8
+ */
4
9
  class AiContext {
10
+ /**
11
+ * Creates a new instance of AiContext.
12
+ * @param options - The options for the AI context, including the message, parameters, and CommandKit instance.
13
+ */
5
14
  constructor(options) {
15
+ /**
16
+ * A key-value store to hold additional data.
17
+ */
18
+ this.store = new Map();
6
19
  this.params = options.params;
7
20
  this.message = options.message;
8
21
  this.commandkit = options.commandkit;
9
22
  this.client = options.commandkit.client;
10
23
  }
24
+ /**
25
+ * Sets the parameters for the AI context.
26
+ * @param params - The parameters to set.
27
+ */
11
28
  setParams(params) {
12
29
  this.params = params;
13
30
  }
14
31
  }
15
32
  exports.AiContext = AiContext;
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVdBLE1BQWEsU0FBUztJQVFwQixZQUFtQixPQUE0QjtRQUM3QyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQzFDLENBQUM7SUFFTSxTQUFTLENBQUMsTUFBUztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0NBQ0Y7QUFsQkQsOEJBa0JDIn0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXVCQTs7OztHQUlHO0FBQ0gsTUFBYSxTQUFTO0lBd0JwQjs7O09BR0c7SUFDSCxZQUFtQixPQUE0QjtRQVQvQzs7V0FFRztRQUNJLFVBQUssR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO1FBT3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7SUFDMUMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFNBQVMsQ0FBQyxNQUFTO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRjtBQTFDRCw4QkEwQ0MifQ==
package/dist/index.d.ts CHANGED
@@ -1,6 +1,24 @@
1
+ import './augmentation';
1
2
  import { AiPlugin } from './plugin';
2
3
  import { AiPluginOptions } from './types';
4
+ /**
5
+ * Retrieves the AI context.
6
+ */
7
+ export declare function useAIContext(): import("./context").AiContext<Record<string, unknown>>;
8
+ /**
9
+ * Fetches the AI plugin instance.
10
+ */
11
+ export declare function useAI(): AiPlugin;
12
+ /**
13
+ * Defines the AI plugin for the application.
14
+ * @param options The options for the AI plugin
15
+ * @returns The AI plugin instance
16
+ */
3
17
  export declare function ai(options?: AiPluginOptions): AiPlugin;
4
18
  export * from './types';
5
19
  export * from './plugin';
6
20
  export * from './context';
21
+ export * from './configure';
22
+ export * from './types';
23
+ export * from './system-prompt';
24
+ export * from './tools/common/index';
package/dist/index.js CHANGED
@@ -14,12 +14,44 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.useAIContext = useAIContext;
18
+ exports.useAI = useAI;
17
19
  exports.ai = ai;
20
+ require("./augmentation");
18
21
  const plugin_1 = require("./plugin");
22
+ const ai_context_worker_1 = require("./ai-context-worker");
23
+ const commandkit_1 = require("commandkit");
24
+ /**
25
+ * Retrieves the AI context.
26
+ */
27
+ function useAIContext() {
28
+ const { ctx } = (0, ai_context_worker_1.getAiWorkerContext)();
29
+ return ctx;
30
+ }
31
+ /**
32
+ * Fetches the AI plugin instance.
33
+ */
34
+ function useAI() {
35
+ const commandkit = (0, commandkit_1.getCommandKit)(true);
36
+ const aiPlugin = commandkit.plugins.get(plugin_1.AiPlugin);
37
+ if (!aiPlugin) {
38
+ throw new Error('AI plugin is not registered. Please ensure it is activated.');
39
+ }
40
+ return aiPlugin;
41
+ }
42
+ /**
43
+ * Defines the AI plugin for the application.
44
+ * @param options The options for the AI plugin
45
+ * @returns The AI plugin instance
46
+ */
19
47
  function ai(options) {
20
48
  return new plugin_1.AiPlugin(options ?? {});
21
49
  }
22
50
  __exportStar(require("./types"), exports);
23
51
  __exportStar(require("./plugin"), exports);
24
52
  __exportStar(require("./context"), exports);
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLGdCQUVDO0FBTEQscUNBQW9DO0FBR3BDLFNBQWdCLEVBQUUsQ0FBQyxPQUF5QjtJQUMxQyxPQUFPLElBQUksaUJBQVEsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELDBDQUF3QjtBQUN4QiwyQ0FBeUI7QUFDekIsNENBQTBCIn0=
53
+ __exportStar(require("./configure"), exports);
54
+ __exportStar(require("./types"), exports);
55
+ __exportStar(require("./system-prompt"), exports);
56
+ __exportStar(require("./tools/common/index"), exports);
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQVNBLG9DQUdDO0FBS0Qsc0JBV0M7QUFPRCxnQkFFQztBQXJDRCwwQkFBd0I7QUFDeEIscUNBQW9DO0FBRXBDLDJEQUF5RDtBQUN6RCwyQ0FBMkM7QUFFM0M7O0dBRUc7QUFDSCxTQUFnQixZQUFZO0lBQzFCLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFBLHNDQUFrQixHQUFFLENBQUM7SUFDckMsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixLQUFLO0lBQ25CLE1BQU0sVUFBVSxHQUFHLElBQUEsMEJBQWEsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBUSxDQUFDLENBQUM7SUFFbEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FDYiw2REFBNkQsQ0FDOUQsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLEVBQUUsQ0FBQyxPQUF5QjtJQUMxQyxPQUFPLElBQUksaUJBQVEsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELDBDQUF3QjtBQUN4QiwyQ0FBeUI7QUFDekIsNENBQTBCO0FBQzFCLDhDQUE0QjtBQUM1QiwwQ0FBd0I7QUFDeEIsa0RBQWdDO0FBQ2hDLHVEQUFxQyJ9
package/dist/plugin.d.ts CHANGED
@@ -1,16 +1,20 @@
1
1
  import { CommandKitPluginRuntime, RuntimePlugin } from 'commandkit/plugin';
2
- import { AiPluginOptions, MessageFilter, SelectAiModel } from './types';
2
+ import { AiPluginOptions } from './types';
3
+ import CommandKit from 'commandkit';
3
4
  import { Message } from 'discord.js';
5
+ /**
6
+ * Represents the configuration options for the AI plugin scoped to a specific command.
7
+ */
4
8
  export interface AiConfig {
9
+ /**
10
+ * A description of the AI functionality provided by this command. If not given, the command's description will be used.
11
+ */
5
12
  description?: string;
13
+ /**
14
+ * A zod schema defining the parameters that the AI command accepts.
15
+ */
6
16
  parameters: any;
7
17
  }
8
- export interface ConfigureAI {
9
- messageFilter?: MessageFilter;
10
- selectAiModel?: SelectAiModel;
11
- systemPrompt?: (message: Message) => Promise<string>;
12
- }
13
- export declare function configureAI(config: ConfigureAI): void;
14
18
  export declare class AiPlugin extends RuntimePlugin<AiPluginOptions> {
15
19
  readonly name = "AiPlugin";
16
20
  private toolsRecord;
@@ -18,10 +22,14 @@ export declare class AiPlugin extends RuntimePlugin<AiPluginOptions> {
18
22
  private onMessageFunc;
19
23
  constructor(options: AiPluginOptions);
20
24
  activate(ctx: CommandKitPluginRuntime): Promise<void>;
21
- private createDefaultTools;
22
25
  deactivate(ctx: CommandKitPluginRuntime): Promise<void>;
23
26
  private handleMessage;
24
- private startTyping;
25
- onBeforeCommandsLoad(ctx: CommandKitPluginRuntime): Promise<void>;
27
+ /**
28
+ * Executes the AI for a given message.
29
+ * @param message The message to process.
30
+ * @param commandkit The CommandKit instance to use. If not provided, it will be inferred automatically.
31
+ */
32
+ executeAI(message: Message, commandkit?: CommandKit): Promise<void>;
33
+ onBeforeCommandsLoad(): Promise<void>;
26
34
  onAfterCommandsLoad(ctx: CommandKitPluginRuntime): Promise<void>;
27
35
  }