@forestadmin/agent 1.70.10 → 1.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/agent.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { ForestAdminHttpDriverServices } from './services';
2
- import type { AgentOptions, AgentOptionsWithDefaults } from './types';
2
+ import type { AgentOptions, AgentOptionsWithDefaults, AiConfiguration } from './types';
3
3
  import type { CollectionCustomizer, DataSourceChartDefinition, DataSourceOptions, Plugin, TCollectionName, TSchema } from '@forestadmin/datasource-customizer';
4
4
  import type { DataSource, DataSourceFactory } from '@forestadmin/datasource-toolkit';
5
5
  import { DataSourceCustomizer } from '@forestadmin/datasource-customizer';
@@ -22,6 +22,7 @@ export default class Agent<S extends TSchema = TSchema> extends FrameworkMounter
22
22
  protected nocodeCustomizer: DataSourceCustomizer<S>;
23
23
  protected customizationService: CustomizationService;
24
24
  protected schemaGenerator: SchemaGenerator;
25
+ protected aiConfigurations: AiConfiguration[];
25
26
  /** Whether MCP server should be mounted */
26
27
  private mcpEnabled;
27
28
  /**
@@ -117,6 +118,29 @@ export default class Agent<S extends TSchema = TSchema> extends FrameworkMounter
117
118
  * agent.mountAiMcpServer();
118
119
  */
119
120
  mountAiMcpServer(): this;
121
+ /**
122
+ * Enable AI features for your Forest Admin panel.
123
+ *
124
+ * All AI requests from Forest Admin are forwarded to your agent and processed locally.
125
+ * Your data and API keys never transit through Forest Admin servers, ensuring full privacy.
126
+ *
127
+ * @param configuration - The AI provider configuration
128
+ * @param configuration.name - A unique name to identify this AI configuration
129
+ * @param configuration.provider - The AI provider to use ('openai')
130
+ * @param configuration.apiKey - Your API key for the chosen provider
131
+ * @param configuration.model - The model to use (e.g., 'gpt-4o')
132
+ * @returns The agent instance for chaining
133
+ * @throws Error if addAi is called more than once
134
+ *
135
+ * @example
136
+ * agent.addAi({
137
+ * name: 'assistant',
138
+ * provider: 'openai',
139
+ * apiKey: process.env.OPENAI_API_KEY,
140
+ * model: 'gpt-4o',
141
+ * });
142
+ */
143
+ addAi(configuration: AiConfiguration): this;
120
144
  protected getRoutes(dataSource: DataSource, services: ForestAdminHttpDriverServices): import("./routes/base-route").default[];
121
145
  /**
122
146
  * Create an http handler which can respond to all queries which are expected from an agent.
package/dist/agent.js CHANGED
@@ -36,6 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
36
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
+ const ai_proxy_1 = require("@forestadmin/ai-proxy");
39
40
  const datasource_customizer_1 = require("@forestadmin/datasource-customizer");
40
41
  const bodyparser_1 = __importDefault(require("@koa/bodyparser"));
41
42
  const cors_1 = __importDefault(require("@koa/cors"));
@@ -78,6 +79,7 @@ class Agent extends framework_mounter_1.default {
78
79
  constructor(options) {
79
80
  const allOptions = options_validator_1.default.validate(options_validator_1.default.withDefaults(options));
80
81
  super(allOptions.prefix, allOptions.logger);
82
+ this.aiConfigurations = [];
81
83
  /** Whether MCP server should be mounted */
82
84
  this.mcpEnabled = false;
83
85
  this.options = allOptions;
@@ -201,8 +203,43 @@ class Agent extends framework_mounter_1.default {
201
203
  this.mcpEnabled = true;
202
204
  return this;
203
205
  }
206
+ /**
207
+ * Enable AI features for your Forest Admin panel.
208
+ *
209
+ * All AI requests from Forest Admin are forwarded to your agent and processed locally.
210
+ * Your data and API keys never transit through Forest Admin servers, ensuring full privacy.
211
+ *
212
+ * @param configuration - The AI provider configuration
213
+ * @param configuration.name - A unique name to identify this AI configuration
214
+ * @param configuration.provider - The AI provider to use ('openai')
215
+ * @param configuration.apiKey - Your API key for the chosen provider
216
+ * @param configuration.model - The model to use (e.g., 'gpt-4o')
217
+ * @returns The agent instance for chaining
218
+ * @throws Error if addAi is called more than once
219
+ *
220
+ * @example
221
+ * agent.addAi({
222
+ * name: 'assistant',
223
+ * provider: 'openai',
224
+ * apiKey: process.env.OPENAI_API_KEY,
225
+ * model: 'gpt-4o',
226
+ * });
227
+ */
228
+ addAi(configuration) {
229
+ if (this.aiConfigurations.length > 0) {
230
+ throw new Error('addAi can only be called once. Multiple AI configurations are not supported yet.');
231
+ }
232
+ if (!(0, ai_proxy_1.isModelSupportingTools)(configuration.model)) {
233
+ throw new Error(`Model '${configuration.model}' does not support function calling (tools). ` +
234
+ 'Please use a compatible model like gpt-4o, gpt-4o-mini, or gpt-4-turbo.');
235
+ }
236
+ this.options.logger('Warn', `AI configuration added with model '${configuration.model}'. ` +
237
+ 'Make sure to test Forest Admin AI features thoroughly to ensure compatibility.');
238
+ this.aiConfigurations.push(configuration);
239
+ return this;
240
+ }
204
241
  getRoutes(dataSource, services) {
205
- return (0, routes_1.default)(dataSource, this.options, services);
242
+ return (0, routes_1.default)(dataSource, this.options, services, this.aiConfigurations);
206
243
  }
207
244
  /**
208
245
  * Create an http handler which can respond to all queries which are expected from an agent.
@@ -290,7 +327,8 @@ class Agent extends framework_mounter_1.default {
290
327
  }
291
328
  // Either load the schema from the file system or build it
292
329
  let schema;
293
- const { meta } = generator_1.default.buildMetadata(this.customizationService.buildFeatures());
330
+ // Get the AI configurations for schema metadata
331
+ const { meta } = generator_1.default.buildMetadata(this.customizationService.buildFeatures(), this.aiConfigurations);
294
332
  // When using experimental no-code features even in production we need to build a new schema
295
333
  if (!experimental?.webhookCustomActions && isProduction) {
296
334
  try {
@@ -310,4 +348,4 @@ class Agent extends framework_mounter_1.default {
310
348
  }
311
349
  }
312
350
  exports.default = Agent;
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQSw4RUFBMEU7QUFDMUUsaUVBQXlDO0FBQ3pDLHFEQUE2QjtBQUM3Qix5REFBaUM7QUFDakMsMENBQWtEO0FBQ2xELGtHQUFzRDtBQUV0RCw0RUFBbUQ7QUFDbkQsc0RBQWtDO0FBQ2xDLDBEQUFzQztBQUN0QyxrR0FBaUY7QUFDakYsZ0ZBQThEO0FBQzlELGtGQUF5RDtBQUV6RDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFxQixLQUFtQyxTQUFRLDJCQUFnQjtJQVU5RTs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSCxZQUFZLE9BQXFCO1FBQy9CLE1BQU0sVUFBVSxHQUFHLDJCQUFnQixDQUFDLFFBQVEsQ0FBQywyQkFBZ0IsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNyRixLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFyQjlDLDJDQUEyQztRQUNuQyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBc0J6QixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztRQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksNENBQW9CLENBQUk7WUFDNUMsZ0NBQWdDLEVBQUUsT0FBTyxDQUFDLGdDQUFnQyxJQUFJLEtBQUs7U0FDcEYsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksdUJBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLG1CQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFB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
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQkEsb0RBQStEO0FBQy9ELDhFQUEwRTtBQUMxRSxpRUFBeUM7QUFDekMscURBQTZCO0FBQzdCLHlEQUFpQztBQUNqQywwQ0FBa0Q7QUFDbEQsa0dBQXNEO0FBRXRELDRFQUFtRDtBQUNuRCxzREFBa0M7QUFDbEMsMERBQXNDO0FBQ3RDLGtHQUFpRjtBQUNqRixnRkFBOEQ7QUFDOUQsa0ZBQXlEO0FBRXpEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQXFCLEtBQW1DLFNBQVEsMkJBQWdCO0lBVzlFOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNILFlBQVksT0FBcUI7UUFDL0IsTUFBTSxVQUFVLEdBQUcsMkJBQWdCLENBQUMsUUFBUSxDQUFDLDJCQUFnQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQXZCcEMscUJBQWdCLEdBQXNCLEVBQUUsQ0FBQztRQUVuRCwyQ0FBMkM7UUFDbkMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQXNCekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLDRDQUFvQixDQUFJO1lBQzVDLGdDQUFnQyxFQUFFLE9BQU8sQ0FBQyxnQ0FBZ0MsSUFBSSxLQUFLO1NBQ3BGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLHVCQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxtQkFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUss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
@@ -0,0 +1,13 @@
1
+ import type { ForestAdminHttpDriverServices } from '../../services';
2
+ import type { AgentOptionsWithDefaults, AiConfiguration } from '../../types';
3
+ import type KoaRouter from '@koa/router';
4
+ import { RouteType } from '../../types';
5
+ import BaseRoute from '../base-route';
6
+ export default class AiProxyRoute extends BaseRoute {
7
+ readonly type = RouteType.PrivateRoute;
8
+ private readonly aiProxyRouter;
9
+ constructor(services: ForestAdminHttpDriverServices, options: AgentOptionsWithDefaults, aiConfigurations: AiConfiguration[]);
10
+ setupRoutes(router: KoaRouter): void;
11
+ private handleAiProxy;
12
+ }
13
+ //# sourceMappingURL=ai-proxy.d.ts.map
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const ai_proxy_1 = require("@forestadmin/ai-proxy");
7
+ const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
8
+ const types_1 = require("../../types");
9
+ const base_route_1 = __importDefault(require("../base-route"));
10
+ class AiProxyRoute extends base_route_1.default {
11
+ constructor(services, options, aiConfigurations) {
12
+ super(services, options);
13
+ this.type = types_1.RouteType.PrivateRoute;
14
+ this.aiProxyRouter = new ai_proxy_1.Router({
15
+ aiConfigurations,
16
+ logger: this.options.logger,
17
+ });
18
+ }
19
+ setupRoutes(router) {
20
+ router.post('/_internal/ai-proxy/:route', this.handleAiProxy.bind(this));
21
+ }
22
+ async handleAiProxy(context) {
23
+ try {
24
+ context.response.body = await this.aiProxyRouter.route({
25
+ route: context.params.route,
26
+ body: context.request.body,
27
+ query: context.query,
28
+ mcpConfigs: await this.options.forestAdminClient.mcpServerConfigService.getConfiguration(),
29
+ });
30
+ context.response.status = types_1.HttpCode.Ok;
31
+ }
32
+ catch (error) {
33
+ if (error instanceof ai_proxy_1.AIError) {
34
+ this.options.logger('Error', `AI proxy error: ${error.message}`, error);
35
+ if (error instanceof ai_proxy_1.AIBadRequestError)
36
+ throw new datasource_toolkit_1.BadRequestError(error.message);
37
+ if (error instanceof ai_proxy_1.AINotFoundError)
38
+ throw new datasource_toolkit_1.NotFoundError(error.message);
39
+ throw new datasource_toolkit_1.UnprocessableError(error.message);
40
+ }
41
+ throw error;
42
+ }
43
+ }
44
+ }
45
+ exports.default = AiProxyRoute;
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktcHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL2FpL2FpLXByb3h5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBS0Esb0RBSytCO0FBQy9CLHdFQUl5QztBQUV6Qyx1Q0FBa0Q7QUFDbEQsK0RBQXNDO0FBRXRDLE1BQXFCLFlBQWEsU0FBUSxvQkFBUztJQUlqRCxZQUNFLFFBQXVDLEVBQ3ZDLE9BQWlDLEVBQ2pDLGdCQUFtQztRQUVuQyxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBUmxCLFNBQUksR0FBRyxpQkFBUyxDQUFDLFlBQVksQ0FBQztRQVNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksaUJBQWEsQ0FBQztZQUNyQyxnQkFBZ0I7WUFDaEIsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWlCO1FBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFnQjtRQUMxQyxJQUFJLENBQUM7WUFDSCxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO2dCQUNyRCxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJO2dCQUMxQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7Z0JBQ3BCLFVBQVUsRUFBRSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLEVBQUU7YUFDM0YsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsZ0JBQVEsQ0FBQyxFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLEtBQUssWUFBWSxrQkFBTyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxtQkFBbUIsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUV4RSxJQUFJLEtBQUssWUFBWSw0QkFBaUI7b0JBQUUsTUFBTSxJQUFJLG9DQUFlLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNqRixJQUFJLEtBQUssWUFBWSwwQkFBZTtvQkFBRSxNQUFNLElBQUksa0NBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzdFLE1BQU0sSUFBSSx1Q0FBa0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUMsQ0FBQztZQUVELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXpDRCwrQkF5Q0MifQ==
@@ -1,5 +1,5 @@
1
1
  import type { ForestAdminHttpDriverServices as Services } from '../services';
2
- import type { AgentOptionsWithDefaults as Options } from '../types';
2
+ import type { AiConfiguration, AgentOptionsWithDefaults as Options } from '../types';
3
3
  import type BaseRoute from './base-route';
4
4
  import type { DataSource } from '@forestadmin/datasource-toolkit';
5
5
  import Chart from './access/chart';
@@ -30,5 +30,5 @@ export declare const RELATED_ROUTES_CTOR: (typeof CountRelated | typeof CsvRelat
30
30
  export declare const RELATED_RELATION_ROUTES_CTOR: (typeof UpdateRelation)[];
31
31
  export declare const CAPABILITIES_ROUTES_CTOR: (typeof Capabilities)[];
32
32
  export declare const NATIVE_QUERY_ROUTES_CTOR: (typeof NativeQueryDatasource)[];
33
- export default function makeRoutes(dataSource: DataSource, options: Options, services: Services): BaseRoute[];
33
+ export default function makeRoutes(dataSource: DataSource, options: Options, services: Services, aiConfigurations?: AiConfiguration[]): BaseRoute[];
34
34
  //# sourceMappingURL=index.d.ts.map
@@ -16,6 +16,7 @@ const get_1 = __importDefault(require("./access/get"));
16
16
  const list_1 = __importDefault(require("./access/list"));
17
17
  const list_related_1 = __importDefault(require("./access/list-related"));
18
18
  const native_query_datasource_1 = __importDefault(require("./access/native-query-datasource"));
19
+ const ai_proxy_1 = __importDefault(require("./ai/ai-proxy"));
19
20
  const capabilities_1 = __importDefault(require("./capabilities"));
20
21
  const action_1 = __importDefault(require("./modification/action/action"));
21
22
  const associate_related_1 = __importDefault(require("./modification/associate-related"));
@@ -112,7 +113,12 @@ function getActionRoutes(dataSource, options, services) {
112
113
  }
113
114
  return routes;
114
115
  }
115
- function makeRoutes(dataSource, options, services) {
116
+ function getAiRoutes(options, services, aiConfigurations) {
117
+ if (aiConfigurations.length === 0)
118
+ return [];
119
+ return [new ai_proxy_1.default(services, options, aiConfigurations)];
120
+ }
121
+ function makeRoutes(dataSource, options, services, aiConfigurations = []) {
116
122
  const routes = [
117
123
  ...getRootRoutes(options, services),
118
124
  ...getCrudRoutes(dataSource, options, services),
@@ -121,8 +127,9 @@ function makeRoutes(dataSource, options, services) {
121
127
  ...getApiChartRoutes(dataSource, options, services),
122
128
  ...getRelatedRoutes(dataSource, options, services),
123
129
  ...getActionRoutes(dataSource, options, services),
130
+ ...getAiRoutes(options, services, aiConfigurations),
124
131
  ];
125
132
  // Ensure routes and middlewares are loaded in the right order.
126
133
  return routes.sort((a, b) => a.type - b.type);
127
134
  }
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm91dGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQXNLQSw2QkFpQkM7QUFsTEQseUZBQW9FO0FBQ3BFLHlGQUFvRTtBQUNwRSwyREFBbUM7QUFDbkMsMkRBQW1DO0FBQ25DLDJFQUFrRDtBQUNsRCx1REFBK0I7QUFDL0IsdUVBQThDO0FBQzlDLHVEQUErQjtBQUMvQix5REFBaUM7QUFDakMseUVBQWdEO0FBQ2hELCtGQUFxRTtBQUNyRSxrRUFBMEM7QUFDMUMsMEVBQXVEO0FBQ3ZELHlGQUFnRTtBQUNoRSxtRUFBMkM7QUFDM0MsbUVBQTJDO0FBQzNDLHlHQUErRTtBQUMvRSxtRUFBMkM7QUFDM0MsK0VBQXNEO0FBQ3RELHFGQUE0RDtBQUM1RCwrRUFBdUQ7QUFDdkQsMkVBQWtEO0FBQ2xELHVGQUE4RDtBQUM5RCw2RUFBb0Q7QUFDcEQsdUVBQStDO0FBQy9DLDZEQUFxQztBQUV4QixRQUFBLGdCQUFnQixHQUFHO0lBQzlCLHdCQUFjO0lBQ2Qsd0JBQWE7SUFDYixxQkFBVztJQUNYLHNCQUFXO0lBQ1gsZ0JBQU07SUFDTiw0QkFBaUI7Q0FDbEIsQ0FBQztBQUNXLFFBQUEsc0JBQXNCLEdBQUc7SUFDcEMsZUFBSztJQUNMLGVBQUs7SUFDTCxnQkFBTTtJQUNOLGFBQUc7SUFDSCxnQkFBTTtJQUNOLGFBQUc7SUFDSCxjQUFJO0lBQ0osZ0JBQU07SUFDTixzQkFBVztDQUNaLENBQUM7QUFDVyxRQUFBLG1CQUFtQixHQUFHO0lBQ2pDLDJCQUFnQjtJQUNoQix1QkFBWTtJQUNaLHFCQUFVO0lBQ1YsbUNBQXVCO0lBQ3ZCLHNCQUFXO0NBQ1osQ0FBQztBQUNXLFFBQUEsNEJBQTRCLEdBQUcsQ0FBQyx5QkFBYyxDQUFDLENBQUM7QUFDaEQsUUFBQSx3QkFBd0IsR0FBRyxDQUFDLHNCQUFZLENBQUMsQ0FBQztBQUMxQyxRQUFBLHdCQUF3QixHQUFHLENB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
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm91dGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQWlMQSw2QkFtQkM7QUEvTEQseUZBQW9FO0FBQ3BFLHlGQUFvRTtBQUNwRSwyREFBbUM7QUFDbkMsMkRBQW1DO0FBQ25DLDJFQUFrRDtBQUNsRCx1REFBK0I7QUFDL0IsdUVBQThDO0FBQzlDLHVEQUErQjtBQUMvQix5REFBaUM7QUFDakMseUVBQWdEO0FBQ2hELCtGQUFxRTtBQUNyRSw2REFBeUM7QUFDekMsa0VBQTBDO0FBQzFDLDBFQUF1RDtBQUN2RCx5RkFBZ0U7QUFDaEUsbUVBQTJDO0FBQzNDLG1FQUEyQztBQUMzQyx5R0FBK0U7QUFDL0UsbUVBQTJDO0FBQzNDLCtFQUFzRDtBQUN0RCxxRkFBNEQ7QUFDNUQsK0VBQXVEO0FBQ3ZELDJFQUFrRDtBQUNsRCx1RkFBOEQ7QUFDOUQsNkVBQW9EO0FBQ3BELHVFQUErQztBQUMvQyw2REFBcUM7QUFFeEIsUUFBQSxnQkFBZ0IsR0FBRztJQUM5Qix3QkFBYztJQUNkLHdCQUFhO0lBQ2IscUJBQVc7SUFDWCxzQkFBVztJQUNYLGdCQUFNO0lBQ04sNEJBQWlCO0NBQ2xCLENBQUM7QUFDVyxRQUFBLHNCQUFzQixHQUFHO0lBQ3BDLGVBQUs7SUFDTCxlQUFLO0lBQ0wsZ0JBQU07SUFDTixhQUFHO0lBQ0gsZ0JBQU07SUFDTixhQUFHO0lBQ0gsY0FBSTtJQUNKLGdCQUFNO0lBQ04sc0JBQVc7Q0FDWixDQUFDO0FBQ1csUUFBQSxtQkFBbUIsR0FBRztJQUNqQywyQkFBZ0I7SUFDaEIsdUJBQVk7SUFDWixxQkFBVTtJQUNWLG1DQUF1QjtJQUN2QixzQkFBVztDQUNaLENBQUM7QUFDVyxRQUFBLDRCQUE0QixHQUFHLENBQUMseUJBQWMsQ0FBQyxDQUFDO0FBQ2hELFFBQUEsd0JBQXdCLEdBQUcsQ0FBQyxzQkFBWSxDQUFDLENBQUM7QUFDMUMsUUFBQSx3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
package/dist/types.d.ts CHANGED
@@ -1,6 +1,8 @@
1
+ import type { AiConfiguration, AiProvider } from '@forestadmin/ai-proxy';
1
2
  import type { CompositeId, Logger, LoggerLevel } from '@forestadmin/datasource-toolkit';
2
3
  import type { ForestAdminClient } from '@forestadmin/forestadmin-client';
3
4
  import type { IncomingMessage, ServerResponse } from 'http';
5
+ export type { AiConfiguration, AiProvider };
4
6
  /** Options to configure behavior of an agent's forestadmin driver */
5
7
  export type AgentOptions = {
6
8
  authSecret: string;
package/dist/types.js CHANGED
@@ -20,4 +20,4 @@ var RouteType;
20
20
  RouteType[RouteType["Authentication"] = 3] = "Authentication";
21
21
  RouteType[RouteType["PrivateRoute"] = 4] = "PrivateRoute";
22
22
  })(RouteType || (exports.RouteType = RouteType = {}));
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBb0RBLElBQVksUUFRWDtBQVJELFdBQVksUUFBUTtJQUNsQixxREFBZ0IsQ0FBQTtJQUNoQixtREFBZSxDQUFBO0lBQ2YsdUVBQXlCLENBQUE7SUFDekIsbURBQWUsQ0FBQTtJQUNmLGlEQUFjLENBQUE7SUFDZCxxQ0FBUSxDQUFBO0lBQ1IsMkRBQW1CLENBQUE7QUFDckIsQ0FBQyxFQVJXLFFBQVEsd0JBQVIsUUFBUSxRQVFuQjtBQUVELElBQVksU0FPWDtBQVBELFdBQVksU0FBUztJQUNuQixpR0FBaUc7SUFDakcsMkRBQWlCLENBQUE7SUFDakIseURBQWdCLENBQUE7SUFDaEIsdURBQWUsQ0FBQTtJQUNmLDZEQUFrQixDQUFBO0lBQ2xCLHlEQUFnQixDQUFBO0FBQ2xCLENBQUMsRUFQVyxTQUFTLHlCQUFULFNBQVMsUUFPcEIifQ==
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBdURBLElBQVksUUFRWDtBQVJELFdBQVksUUFBUTtJQUNsQixxREFBZ0IsQ0FBQTtJQUNoQixtREFBZSxDQUFBO0lBQ2YsdUVBQXlCLENBQUE7SUFDekIsbURBQWUsQ0FBQTtJQUNmLGlEQUFjLENBQUE7SUFDZCxxQ0FBUSxDQUFBO0lBQ1IsMkRBQW1CLENBQUE7QUFDckIsQ0FBQyxFQVJXLFFBQVEsd0JBQVIsUUFBUSxRQVFuQjtBQUVELElBQVksU0FPWDtBQVBELFdBQVksU0FBUztJQUNuQixpR0FBaUc7SUFDakcsMkRBQWlCLENBQUE7SUFDakIseURBQWdCLENBQUE7SUFDaEIsdURBQWUsQ0FBQTtJQUNmLDZEQUFrQixDQUFBO0lBQ2xCLHlEQUFnQixDQUFBO0FBQ2xCLENBQUMsRUFQVyxTQUFTLHlCQUFULFNBQVMsUUFPcEIifQ==
@@ -1,10 +1,10 @@
1
- import type { AgentOptionsWithDefaults } from '../../types';
1
+ import type { AgentOptionsWithDefaults, AiConfiguration } from '../../types';
2
2
  import type { DataSource } from '@forestadmin/datasource-toolkit';
3
3
  import type { ForestSchema } from '@forestadmin/forestadmin-client';
4
4
  export default class SchemaGenerator {
5
5
  private readonly schemaGeneratorCollection;
6
6
  constructor(options: AgentOptionsWithDefaults);
7
7
  buildSchema(dataSource: DataSource): Promise<Pick<ForestSchema, 'collections'>>;
8
- static buildMetadata(features: Record<string, string> | null): Pick<ForestSchema, 'meta'>;
8
+ static buildMetadata(features: Record<string, string> | null, aiConfigurations?: AiConfiguration[]): Pick<ForestSchema, 'meta'>;
9
9
  }
10
10
  //# sourceMappingURL=generator.d.ts.map
@@ -15,13 +15,16 @@ class SchemaGenerator {
15
15
  .map(c => this.schemaGeneratorCollection.buildSchema(c))),
16
16
  };
17
17
  }
18
- static buildMetadata(features) {
18
+ static buildMetadata(features, aiConfigurations = []) {
19
19
  const { version } = require('../../../package.json'); // eslint-disable-line @typescript-eslint/no-var-requires,global-require
20
20
  return {
21
21
  meta: {
22
22
  liana: 'forest-nodejs-agent',
23
23
  liana_version: version,
24
24
  liana_features: features,
25
+ ai_llms: aiConfigurations.length > 0
26
+ ? aiConfigurations.map(c => ({ name: c.name, provider: c.provider }))
27
+ : null,
25
28
  stack: {
26
29
  engine: 'nodejs',
27
30
  engine_version: process.versions && process.versions.node,
@@ -31,4 +34,4 @@ class SchemaGenerator {
31
34
  }
32
35
  }
33
36
  exports.default = SchemaGenerator;
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL2ZvcmVzdC1zY2hlbWEvZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBSUEsa0ZBQStEO0FBRS9ELE1BQXFCLGVBQWU7SUFHbEMsWUFBWSxPQUFpQztRQUMzQyxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSw4QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUFzQjtRQUN0QyxPQUFPO1lBQ0wsV0FBVyxFQUFFLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDNUIsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7aUJBQ3hCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDNUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMzRDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUF1QztRQUMxRCxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyx3RUFBd0U7UUFFOUgsT0FBTztZQUNMLElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUscUJBQXFCO2dCQUM1QixhQUFhLEVBQUUsT0FBTztnQkFDdEIsY0FBYyxFQUFFLFFBQVE7Z0JBQ3hCLEtBQUssRUFBRTtvQkFDTCxNQUFNLEVBQUUsUUFBUTtvQkFDaEIsY0FBYyxFQUFFLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJO2lCQUMxRDthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWhDRCxrQ0FnQ0MifQ==
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL2ZvcmVzdC1zY2hlbWEvZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBSUEsa0ZBQStEO0FBRS9ELE1BQXFCLGVBQWU7SUFHbEMsWUFBWSxPQUFpQztRQUMzQyxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSw4QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUFzQjtRQUN0QyxPQUFPO1lBQ0wsV0FBVyxFQUFFLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDNUIsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7aUJBQ3hCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDNUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMzRDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FDbEIsUUFBdUMsRUFDdkMsbUJBQXNDLEVBQUU7UUFFeEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsd0VBQXdFO1FBRTlILE9BQU87WUFDTCxJQUFJLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLHFCQUFxQjtnQkFDNUIsYUFBYSxFQUFFLE9BQU87Z0JBQ3RCLGNBQWMsRUFBRSxRQUFRO2dCQUN4QixPQUFPLEVBQ0wsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ3pCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUNyRSxDQUFDLENBQUMsSUFBSTtnQkFDVixLQUFLLEVBQUU7b0JBQ0wsTUFBTSxFQUFFLFFBQVE7b0JBQ2hCLGNBQWMsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSTtpQkFDMUQ7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF2Q0Qsa0NBdUNDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forestadmin/agent",
3
- "version": "1.70.10",
3
+ "version": "1.71.0",
4
4
  "main": "dist/index.js",
5
5
  "license": "GPL-3.0",
6
6
  "publishConfig": {
@@ -13,10 +13,11 @@
13
13
  },
14
14
  "dependencies": {
15
15
  "@fast-csv/format": "^4.3.5",
16
+ "@forestadmin/ai-proxy": "1.1.0",
16
17
  "@forestadmin/datasource-customizer": "1.67.2",
17
18
  "@forestadmin/datasource-toolkit": "1.50.1",
18
- "@forestadmin/forestadmin-client": "1.37.4",
19
- "@forestadmin/mcp-server": "1.7.0",
19
+ "@forestadmin/forestadmin-client": "1.37.5",
20
+ "@forestadmin/mcp-server": "1.7.1",
20
21
  "@koa/bodyparser": "^6.0.0",
21
22
  "@koa/cors": "^5.0.0",
22
23
  "@koa/router": "^13.1.0",