@forestadmin/agent 1.72.9 → 1.72.10
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 +16 -10
- package/dist/agent.js +26 -16
- package/dist/routes/ai/ai-proxy.d.ts +4 -3
- package/dist/routes/ai/ai-proxy.js +12 -33
- package/dist/routes/index.d.ts +3 -2
- package/dist/routes/index.js +6 -6
- package/dist/types.d.ts +0 -2
- package/dist/types.js +1 -1
- package/dist/utils/forest-schema/generator.d.ts +3 -2
- package/dist/utils/forest-schema/generator.js +4 -4
- package/package.json +4 -4
package/dist/agent.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ForestAdminHttpDriverServices } from './services';
|
|
2
|
-
import type { AgentOptions, AgentOptionsWithDefaults
|
|
2
|
+
import type { AgentOptions, AgentOptionsWithDefaults } from './types';
|
|
3
|
+
import type { AiProviderDefinition } from '@forestadmin/agent-toolkit';
|
|
3
4
|
import type { CollectionCustomizer, DataSourceChartDefinition, DataSourceOptions, Plugin, TCollectionName, TSchema } from '@forestadmin/datasource-customizer';
|
|
4
5
|
import type { DataSource, DataSourceFactory } from '@forestadmin/datasource-toolkit';
|
|
5
6
|
import { DataSourceCustomizer } from '@forestadmin/datasource-customizer';
|
|
@@ -22,7 +23,7 @@ export default class Agent<S extends TSchema = TSchema> extends FrameworkMounter
|
|
|
22
23
|
protected nocodeCustomizer: DataSourceCustomizer<S>;
|
|
23
24
|
protected customizationService: CustomizationService;
|
|
24
25
|
protected schemaGenerator: SchemaGenerator;
|
|
25
|
-
protected
|
|
26
|
+
protected aiProvider: AiProviderDefinition | null;
|
|
26
27
|
/** Whether MCP server should be mounted */
|
|
27
28
|
private mcpEnabled;
|
|
28
29
|
/**
|
|
@@ -114,6 +115,7 @@ export default class Agent<S extends TSchema = TSchema> extends FrameworkMounter
|
|
|
114
115
|
* Enable MCP (Model Context Protocol) server support.
|
|
115
116
|
* This allows AI assistants to interact with your Forest Admin data.
|
|
116
117
|
*
|
|
118
|
+
* @see {@link https://docs.forestadmin.com/developer-guide-agents-nodejs/agent-customization/ai/mcp-server}
|
|
117
119
|
* @example
|
|
118
120
|
* agent.mountAiMcpServer();
|
|
119
121
|
*/
|
|
@@ -124,23 +126,27 @@ export default class Agent<S extends TSchema = TSchema> extends FrameworkMounter
|
|
|
124
126
|
* All AI requests from Forest Admin are forwarded to your agent and processed locally.
|
|
125
127
|
* Your data and API keys never transit through Forest Admin servers, ensuring full privacy.
|
|
126
128
|
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
129
|
+
* Requires the `@forestadmin/ai-proxy` package to be installed:
|
|
130
|
+
* ```bash
|
|
131
|
+
* npm install @forestadmin/ai-proxy
|
|
132
|
+
* ```
|
|
133
|
+
*
|
|
134
|
+
* @see {@link https://docs.forestadmin.com/developer-guide-agents-nodejs/agent-customization/ai/self-hosted-ai}
|
|
135
|
+
* @param provider - An AI provider definition created via `createAiProvider` from `@forestadmin/ai-proxy`
|
|
132
136
|
* @returns The agent instance for chaining
|
|
133
137
|
* @throws Error if addAi is called more than once
|
|
134
138
|
*
|
|
135
139
|
* @example
|
|
136
|
-
*
|
|
140
|
+
* import { createAiProvider } from '@forestadmin/ai-proxy';
|
|
141
|
+
*
|
|
142
|
+
* agent.addAi(createAiProvider({
|
|
137
143
|
* name: 'assistant',
|
|
138
144
|
* provider: 'openai',
|
|
139
145
|
* apiKey: process.env.OPENAI_API_KEY,
|
|
140
146
|
* model: 'gpt-4o',
|
|
141
|
-
* });
|
|
147
|
+
* }));
|
|
142
148
|
*/
|
|
143
|
-
addAi(
|
|
149
|
+
addAi(provider: AiProviderDefinition): this;
|
|
144
150
|
protected getRoutes(dataSource: DataSource, services: ForestAdminHttpDriverServices): import("./routes/base-route").default[];
|
|
145
151
|
/**
|
|
146
152
|
* Create an http handler which can respond to all queries which are expected from an agent.
|
package/dist/agent.js
CHANGED
|
@@ -78,7 +78,7 @@ class Agent extends framework_mounter_1.default {
|
|
|
78
78
|
constructor(options) {
|
|
79
79
|
const allOptions = options_validator_1.default.validate(options_validator_1.default.withDefaults(options));
|
|
80
80
|
super(allOptions.prefix, allOptions.logger);
|
|
81
|
-
this.
|
|
81
|
+
this.aiProvider = null;
|
|
82
82
|
/** Whether MCP server should be mounted */
|
|
83
83
|
this.mcpEnabled = false;
|
|
84
84
|
this.options = allOptions;
|
|
@@ -195,6 +195,7 @@ class Agent extends framework_mounter_1.default {
|
|
|
195
195
|
* Enable MCP (Model Context Protocol) server support.
|
|
196
196
|
* This allows AI assistants to interact with your Forest Admin data.
|
|
197
197
|
*
|
|
198
|
+
* @see {@link https://docs.forestadmin.com/developer-guide-agents-nodejs/agent-customization/ai/mcp-server}
|
|
198
199
|
* @example
|
|
199
200
|
* agent.mountAiMcpServer();
|
|
200
201
|
*/
|
|
@@ -208,33 +209,41 @@ class Agent extends framework_mounter_1.default {
|
|
|
208
209
|
* All AI requests from Forest Admin are forwarded to your agent and processed locally.
|
|
209
210
|
* Your data and API keys never transit through Forest Admin servers, ensuring full privacy.
|
|
210
211
|
*
|
|
211
|
-
*
|
|
212
|
-
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
212
|
+
* Requires the `@forestadmin/ai-proxy` package to be installed:
|
|
213
|
+
* ```bash
|
|
214
|
+
* npm install @forestadmin/ai-proxy
|
|
215
|
+
* ```
|
|
216
|
+
*
|
|
217
|
+
* @see {@link https://docs.forestadmin.com/developer-guide-agents-nodejs/agent-customization/ai/self-hosted-ai}
|
|
218
|
+
* @param provider - An AI provider definition created via `createAiProvider` from `@forestadmin/ai-proxy`
|
|
216
219
|
* @returns The agent instance for chaining
|
|
217
220
|
* @throws Error if addAi is called more than once
|
|
218
221
|
*
|
|
219
222
|
* @example
|
|
220
|
-
*
|
|
223
|
+
* import { createAiProvider } from '@forestadmin/ai-proxy';
|
|
224
|
+
*
|
|
225
|
+
* agent.addAi(createAiProvider({
|
|
221
226
|
* name: 'assistant',
|
|
222
227
|
* provider: 'openai',
|
|
223
228
|
* apiKey: process.env.OPENAI_API_KEY,
|
|
224
229
|
* model: 'gpt-4o',
|
|
225
|
-
* });
|
|
230
|
+
* }));
|
|
226
231
|
*/
|
|
227
|
-
addAi(
|
|
228
|
-
if (this.
|
|
232
|
+
addAi(provider) {
|
|
233
|
+
if (this.aiProvider) {
|
|
229
234
|
throw new Error('addAi can only be called once. Multiple AI configurations are not supported yet.');
|
|
230
235
|
}
|
|
231
|
-
this.
|
|
232
|
-
|
|
233
|
-
|
|
236
|
+
this.aiProvider = provider;
|
|
237
|
+
for (const p of provider.providers) {
|
|
238
|
+
this.options.logger('Warn', `AI configuration added with model '${p.model}'. ` +
|
|
239
|
+
'Make sure to test Forest Admin AI features thoroughly to ensure compatibility.');
|
|
240
|
+
}
|
|
234
241
|
return this;
|
|
235
242
|
}
|
|
236
243
|
getRoutes(dataSource, services) {
|
|
237
|
-
|
|
244
|
+
// init() is called on every start/restart to recreate routing state with a fresh Router.
|
|
245
|
+
const aiRouter = this.aiProvider?.init(this.options.logger) ?? null;
|
|
246
|
+
return (0, routes_1.default)(dataSource, this.options, services, aiRouter);
|
|
238
247
|
}
|
|
239
248
|
/**
|
|
240
249
|
* Create an http handler which can respond to all queries which are expected from an agent.
|
|
@@ -323,7 +332,8 @@ class Agent extends framework_mounter_1.default {
|
|
|
323
332
|
// Either load the schema from the file system or build it
|
|
324
333
|
let schema;
|
|
325
334
|
// Get the AI configurations for schema metadata
|
|
326
|
-
const
|
|
335
|
+
const aiMeta = this.aiProvider?.providers ?? [];
|
|
336
|
+
const { meta } = generator_1.default.buildMetadata(this.customizationService.buildFeatures(), aiMeta);
|
|
327
337
|
// When using experimental no-code features even in production we need to build a new schema
|
|
328
338
|
if (!experimental?.webhookCustomActions && isProduction) {
|
|
329
339
|
try {
|
|
@@ -343,4 +353,4 @@ class Agent extends framework_mounter_1.default {
|
|
|
343
353
|
}
|
|
344
354
|
}
|
|
345
355
|
exports.default = Agent;
|
|
346
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
356
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFlQSw4RUFBMEU7QUFDMUUsaUVBQXlDO0FBQ3pDLHFEQUE2QjtBQUM3Qix5REFBaUM7QUFDakMsMENBQWtEO0FBQ2xELGtHQUFzRDtBQUV0RCw0RUFBbUQ7QUFDbkQsc0RBQWtDO0FBQ2xDLDBEQUFzQztBQUN0QyxrR0FBaUY7QUFDakYsZ0ZBQThEO0FBQzlELGtGQUF5RDtBQUV6RDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFxQixLQUFtQyxTQUFRLDJCQUFnQjtJQVc5RTs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSCxZQUFZLE9BQXFCO1FBQy9CLE1BQU0sVUFBVSxHQUFHLDJCQUFnQixDQUFDLFFBQVEsQ0FBQywyQkFBZ0IsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNyRixLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUF2QnBDLGVBQVUsR0FBZ0MsSUFBSSxDQUFDO1FBRXpELDJDQUEyQztRQUNuQyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBc0J6QixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztRQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksNENBQW9CLENBQUk7WUFDNUMsZ0NBQWdDLEVBQUUsT0FBTyxDQUFDLGdDQUFnQyxJQUFJLEtBQUs7U0FDcEYsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksdUJBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLG1CQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEtBQUs7UUFDVCxN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
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { ForestAdminHttpDriverServices } from '../../services';
|
|
2
|
-
import type { AgentOptionsWithDefaults
|
|
2
|
+
import type { AgentOptionsWithDefaults } from '../../types';
|
|
3
|
+
import type { AiRouter } from '@forestadmin/agent-toolkit';
|
|
3
4
|
import type KoaRouter from '@koa/router';
|
|
4
5
|
import { RouteType } from '../../types';
|
|
5
6
|
import BaseRoute from '../base-route';
|
|
6
7
|
export default class AiProxyRoute extends BaseRoute {
|
|
7
8
|
readonly type = RouteType.PrivateRoute;
|
|
8
|
-
private readonly
|
|
9
|
-
constructor(services: ForestAdminHttpDriverServices, options: AgentOptionsWithDefaults,
|
|
9
|
+
private readonly aiRouter;
|
|
10
|
+
constructor(services: ForestAdminHttpDriverServices, options: AgentOptionsWithDefaults, aiRouter: AiRouter);
|
|
10
11
|
setupRoutes(router: KoaRouter): void;
|
|
11
12
|
private handleAiProxy;
|
|
12
13
|
}
|
|
@@ -3,49 +3,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
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
6
|
const types_1 = require("../../types");
|
|
9
7
|
const base_route_1 = __importDefault(require("../base-route"));
|
|
10
8
|
class AiProxyRoute extends base_route_1.default {
|
|
11
|
-
constructor(services, options,
|
|
9
|
+
constructor(services, options, aiRouter) {
|
|
12
10
|
super(services, options);
|
|
13
11
|
this.type = types_1.RouteType.PrivateRoute;
|
|
14
|
-
this.
|
|
15
|
-
aiConfigurations,
|
|
16
|
-
logger: this.options.logger,
|
|
17
|
-
});
|
|
12
|
+
this.aiRouter = aiRouter;
|
|
18
13
|
}
|
|
19
14
|
setupRoutes(router) {
|
|
20
15
|
router.post('/_internal/ai-proxy/:route', this.handleAiProxy.bind(this));
|
|
21
16
|
}
|
|
22
17
|
async handleAiProxy(context) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
context.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
context.response.status = types_1.HttpCode.Ok;
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
if (error instanceof ai_proxy_1.AIError) {
|
|
36
|
-
this.options.logger('Error', `AI proxy error: ${error.message}`, error);
|
|
37
|
-
if (error instanceof ai_proxy_1.AINotConfiguredError) {
|
|
38
|
-
throw new datasource_toolkit_1.UnprocessableError('AI is not configured. Please call addAi() on your agent.');
|
|
39
|
-
}
|
|
40
|
-
if (error instanceof ai_proxy_1.AIBadRequestError)
|
|
41
|
-
throw new datasource_toolkit_1.BadRequestError(error.message);
|
|
42
|
-
if (error instanceof ai_proxy_1.AINotFoundError)
|
|
43
|
-
throw new datasource_toolkit_1.NotFoundError(error.message);
|
|
44
|
-
throw new datasource_toolkit_1.UnprocessableError(error.message);
|
|
45
|
-
}
|
|
46
|
-
throw error;
|
|
47
|
-
}
|
|
18
|
+
const mcpServerConfigs = await this.options.forestAdminClient.mcpServerConfigService.getConfiguration();
|
|
19
|
+
context.response.body = await this.aiRouter.route({
|
|
20
|
+
route: context.params.route,
|
|
21
|
+
body: context.request.body,
|
|
22
|
+
query: context.query,
|
|
23
|
+
headers: context.request.headers,
|
|
24
|
+
mcpServerConfigs,
|
|
25
|
+
});
|
|
26
|
+
context.response.status = types_1.HttpCode.Ok;
|
|
48
27
|
}
|
|
49
28
|
}
|
|
50
29
|
exports.default = AiProxyRoute;
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktcHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL2FpL2FpLXByb3h5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBTUEsdUNBQWtEO0FBQ2xELCtEQUFzQztBQUV0QyxNQUFxQixZQUFhLFNBQVEsb0JBQVM7SUFJakQsWUFDRSxRQUF1QyxFQUN2QyxPQUFpQyxFQUNqQyxRQUFrQjtRQUVsQixLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBUmxCLFNBQUksR0FBRyxpQkFBUyxDQUFDLFlBQVksQ0FBQztRQVNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWlCO1FBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFnQjtRQUMxQyxNQUFNLGdCQUFnQixHQUNwQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUVqRixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ2hELEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDM0IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSTtZQUMxQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7WUFDcEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTztZQUNoQyxnQkFBZ0I7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsZ0JBQVEsQ0FBQyxFQUFFLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBOUJELCtCQThCQyJ9
|
package/dist/routes/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ForestAdminHttpDriverServices as Services } from '../services';
|
|
2
|
-
import type {
|
|
2
|
+
import type { AgentOptionsWithDefaults as Options } from '../types';
|
|
3
3
|
import type BaseRoute from './base-route';
|
|
4
|
+
import type { AiRouter } from '@forestadmin/agent-toolkit';
|
|
4
5
|
import type { DataSource } from '@forestadmin/datasource-toolkit';
|
|
5
6
|
import Chart from './access/chart';
|
|
6
7
|
import Count from './access/count';
|
|
@@ -30,5 +31,5 @@ export declare const RELATED_ROUTES_CTOR: (typeof CountRelated | typeof CsvRelat
|
|
|
30
31
|
export declare const RELATED_RELATION_ROUTES_CTOR: (typeof UpdateRelation)[];
|
|
31
32
|
export declare const CAPABILITIES_ROUTES_CTOR: (typeof Capabilities)[];
|
|
32
33
|
export declare const NATIVE_QUERY_ROUTES_CTOR: (typeof NativeQueryDatasource)[];
|
|
33
|
-
export default function makeRoutes(dataSource: DataSource, options: Options, services: Services,
|
|
34
|
+
export default function makeRoutes(dataSource: DataSource, options: Options, services: Services, aiRouter?: AiRouter | null): BaseRoute[];
|
|
34
35
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/routes/index.js
CHANGED
|
@@ -113,12 +113,12 @@ function getActionRoutes(dataSource, options, services) {
|
|
|
113
113
|
}
|
|
114
114
|
return routes;
|
|
115
115
|
}
|
|
116
|
-
function getAiRoutes(options, services,
|
|
117
|
-
if (
|
|
116
|
+
function getAiRoutes(options, services, aiRouter) {
|
|
117
|
+
if (!aiRouter)
|
|
118
118
|
return [];
|
|
119
|
-
return [new ai_proxy_1.default(services, options,
|
|
119
|
+
return [new ai_proxy_1.default(services, options, aiRouter)];
|
|
120
120
|
}
|
|
121
|
-
function makeRoutes(dataSource, options, services,
|
|
121
|
+
function makeRoutes(dataSource, options, services, aiRouter = null) {
|
|
122
122
|
const routes = [
|
|
123
123
|
...getRootRoutes(options, services),
|
|
124
124
|
...getCrudRoutes(dataSource, options, services),
|
|
@@ -127,9 +127,9 @@ function makeRoutes(dataSource, options, services, aiConfigurations = []) {
|
|
|
127
127
|
...getApiChartRoutes(dataSource, options, services),
|
|
128
128
|
...getRelatedRoutes(dataSource, options, services),
|
|
129
129
|
...getActionRoutes(dataSource, options, services),
|
|
130
|
-
...getAiRoutes(options, services,
|
|
130
|
+
...getAiRoutes(options, services, aiRouter),
|
|
131
131
|
];
|
|
132
132
|
// Ensure routes and middlewares are loaded in the right order.
|
|
133
133
|
return routes.sort((a, b) => a.type - b.type);
|
|
134
134
|
}
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm91dGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQThLQSw2QkFtQkM7QUEzTEQseUZBQW9FO0FBQ3BFLHlGQUFvRTtBQUNwRSwyREFBbUM7QUFDbkMsMkRBQW1DO0FBQ25DLDJFQUFrRDtBQUNsRCx1REFBK0I7QUFDL0IsdUVBQThDO0FBQzlDLHVEQUErQjtBQUMvQix5REFBaUM7QUFDakMseUVBQWdEO0FBQ2hELCtGQUFxRTtBQUNyRSw2REFBeUM7QUFDekMsa0VBQTBDO0FBQzFDLDBFQUF1RDtBQUN2RCx5RkFBZ0U7QUFDaEUsbUVBQTJDO0FBQzNDLG1FQUEyQztBQUMzQyx5R0FBK0U7QUFDL0UsbUVBQTJDO0FBQzNDLCtFQUFzRDtBQUN0RCxxRkFBNEQ7QUFDNUQsK0VBQXVEO0FBQ3ZELDJFQUFrRDtBQUNsRCx1RkFBOEQ7QUFDOUQsNkVBQW9EO0FBQ3BELHVFQUErQztBQUMvQyw2REFBcUM7QUFFeEIsUUFBQSxnQkFBZ0IsR0FBRztJQUM5Qix3QkFBYztJQUNkLHdCQUFhO0lBQ2IscUJBQVc7SUFDWCxzQkFBVztJQUNYLGdCQUFNO0lBQ04sNEJBQWlCO0NBQ2xCLENBQUM7QUFDVyxRQUFBLHNCQUFzQixHQUFHO0lBQ3BDLGVBQUs7SUFDTCxlQUFLO0lBQ0wsZ0JBQU07SUFDTixhQUFHO0lBQ0gsZ0JBQU07SUFDTixhQUFHO0lBQ0gsY0FBSTtJQUNKLGdCQUFNO0lBQ04sc0JBQVc7Q0FDWixDQUFDO0FBQ1csUUFBQSxtQkFBbUIsR0FBRztJQUNqQywyQkFBZ0I7SUFDaEIsdUJBQVk7SUFDWixxQkFBVTtJQUNWLG1DQUF1QjtJQUN2QixzQkFBVztDQUNaLENBQUM7QUFDVyxRQUFBLDRCQUE0QixHQUFHLENBQUMseUJBQWMsQ0FBQyxDQUFDO0FBQ2hELFFBQUEsd0JBQXdCLEdBQUcsQ0FBQyxzQkFBWSxDQUFDLENBQUM7QUFDMUMsUUFBQSx3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
|
package/dist/types.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import type { AiConfiguration, AiProvider } from '@forestadmin/ai-proxy';
|
|
2
1
|
import type { CompositeId, Logger, LoggerLevel } from '@forestadmin/datasource-toolkit';
|
|
3
2
|
import type { ForestAdminClient } from '@forestadmin/forestadmin-client';
|
|
4
3
|
import type { IncomingMessage, ServerResponse } from 'http';
|
|
5
|
-
export type { AiConfiguration, AiProvider };
|
|
6
4
|
/** Options to configure behavior of an agent's forestadmin driver */
|
|
7
5
|
export type AgentOptions = {
|
|
8
6
|
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,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBb0RBLElBQVksUUFRWDtBQVJELFdBQVksUUFBUTtJQUNsQixxREFBZ0IsQ0FBQTtJQUNoQixtREFBZSxDQUFBO0lBQ2YsdUVBQXlCLENBQUE7SUFDekIsbURBQWUsQ0FBQTtJQUNmLGlEQUFjLENBQUE7SUFDZCxxQ0FBUSxDQUFBO0lBQ1IsMkRBQW1CLENBQUE7QUFDckIsQ0FBQyxFQVJXLFFBQVEsd0JBQVIsUUFBUSxRQVFuQjtBQUVELElBQVksU0FPWDtBQVBELFdBQVksU0FBUztJQUNuQixpR0FBaUc7SUFDakcsMkRBQWlCLENBQUE7SUFDakIseURBQWdCLENBQUE7SUFDaEIsdURBQWUsQ0FBQTtJQUNmLDZEQUFrQixDQUFBO0lBQ2xCLHlEQUFnQixDQUFBO0FBQ2xCLENBQUMsRUFQVyxTQUFTLHlCQUFULFNBQVMsUUFPcEIifQ==
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type { AgentOptionsWithDefaults
|
|
1
|
+
import type { AgentOptionsWithDefaults } from '../../types';
|
|
2
|
+
import type { AiProviderMeta } from '@forestadmin/agent-toolkit';
|
|
2
3
|
import type { DataSource } from '@forestadmin/datasource-toolkit';
|
|
3
4
|
import type { ForestSchema } from '@forestadmin/forestadmin-client';
|
|
4
5
|
export default class SchemaGenerator {
|
|
5
6
|
private readonly schemaGeneratorCollection;
|
|
6
7
|
constructor(options: AgentOptionsWithDefaults);
|
|
7
8
|
buildSchema(dataSource: DataSource): Promise<Pick<ForestSchema, 'collections'>>;
|
|
8
|
-
static buildMetadata(features: Record<string, string> | null,
|
|
9
|
+
static buildMetadata(features: Record<string, string> | null, aiProviders?: AiProviderMeta[]): Pick<ForestSchema, 'meta'>;
|
|
9
10
|
}
|
|
10
11
|
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -15,15 +15,15 @@ class SchemaGenerator {
|
|
|
15
15
|
.map(c => this.schemaGeneratorCollection.buildSchema(c))),
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
-
static buildMetadata(features,
|
|
18
|
+
static buildMetadata(features, aiProviders = []) {
|
|
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:
|
|
26
|
-
?
|
|
25
|
+
ai_llms: aiProviders.length > 0
|
|
26
|
+
? aiProviders.map(p => ({ name: p.name, provider: p.provider, model: p.model }))
|
|
27
27
|
: null,
|
|
28
28
|
stack: {
|
|
29
29
|
engine: 'nodejs',
|
|
@@ -34,4 +34,4 @@ class SchemaGenerator {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
exports.default = SchemaGenerator;
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL2ZvcmVzdC1zY2hlbWEvZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBS0Esa0ZBQStEO0FBRS9ELE1BQXFCLGVBQWU7SUFHbEMsWUFBWSxPQUFpQztRQUMzQyxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSw4QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUFzQjtRQUN0QyxPQUFPO1lBQ0wsV0FBVyxFQUFFLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDNUIsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7aUJBQ3hCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDNUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMzRDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FDbEIsUUFBdUMsRUFDdkMsY0FBZ0MsRUFBRTtRQUVsQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyx3RUFBd0U7UUFFOUgsT0FBTztZQUNMLElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUscUJBQXFCO2dCQUM1QixhQUFhLEVBQUUsT0FBTztnQkFDdEIsY0FBYyxFQUFFLFFBQVE7Z0JBQ3hCLE9BQU8sRUFDTCxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ3BCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDaEYsQ0FBQyxDQUFDLElBQUk7Z0JBQ1YsS0FBSyxFQUFFO29CQUNMLE1BQU0sRUFBRSxRQUFRO29CQUNoQixjQUFjLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUk7aUJBQzFEO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBdkNELGtDQXVDQyJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forestadmin/agent",
|
|
3
|
-
"version": "1.72.
|
|
3
|
+
"version": "1.72.10",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"publishConfig": {
|
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@fast-csv/format": "^4.3.5",
|
|
16
|
-
"@forestadmin/
|
|
16
|
+
"@forestadmin/agent-toolkit": "1.0.0",
|
|
17
17
|
"@forestadmin/datasource-customizer": "1.67.3",
|
|
18
18
|
"@forestadmin/datasource-toolkit": "1.50.1",
|
|
19
|
-
"@forestadmin/forestadmin-client": "1.37.
|
|
20
|
-
"@forestadmin/mcp-server": "1.8.
|
|
19
|
+
"@forestadmin/forestadmin-client": "1.37.13",
|
|
20
|
+
"@forestadmin/mcp-server": "1.8.4",
|
|
21
21
|
"@koa/bodyparser": "^6.0.0",
|
|
22
22
|
"@koa/cors": "^5.0.0",
|
|
23
23
|
"@koa/router": "^13.1.0",
|