@forestadmin/agent 1.88.0 → 1.89.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.
@@ -88,6 +88,11 @@ class EmbeddedWorkflowExecutor {
88
88
  throw new Error('addWorkflowExecutor: `inMemory` and `database` are mutually exclusive. The in-memory run ' +
89
89
  'store persists nothing; drop one of the two options.');
90
90
  }
91
+ const { ai } = embedOptions;
92
+ if (ai && (!ai.provider || !ai.model || !ai.apiKey)) {
93
+ throw new Error('addWorkflowExecutor: `ai` requires `provider`, `model` and `apiKey` together. ' +
94
+ 'Omit `ai` entirely to use Forest’s AI server.');
95
+ }
91
96
  const port = embedOptions.port ?? DEFAULT_EMBEDDED_EXECUTOR_PORT;
92
97
  this.config = { ...embedOptions, port };
93
98
  return `http://127.0.0.1:${port}`;
@@ -100,7 +105,8 @@ class EmbeddedWorkflowExecutor {
100
105
  const { config } = this;
101
106
  if (!config)
102
107
  return;
103
- const agentUrl = config.agentUrl ?? this.deriveAgentUrl(standaloneServerHost, standaloneServerPort);
108
+ const { inMemory, database, agentUrl: configAgentUrl, port, ai, encryptionKey, ...tuning } = config;
109
+ const agentUrl = configAgentUrl ?? this.deriveAgentUrl(standaloneServerHost, standaloneServerPort);
104
110
  if (!agentUrl) {
105
111
  throw new Error('Embedded workflow executor: unable to derive the agent URL. It is only auto-derived when ' +
106
112
  'the agent runs on its own server (mountOnStandaloneServer). When mounting on Express, ' +
@@ -108,26 +114,25 @@ class EmbeddedWorkflowExecutor {
108
114
  }
109
115
  const { buildDatabaseExecutor, buildInMemoryExecutor } = await this.importPackage();
110
116
  const commonOptions = {
117
+ ...tuning,
111
118
  envSecret: this.options.envSecret,
112
119
  authSecret: this.options.authSecret,
113
120
  forestServerUrl: this.options.forestServerUrl,
114
121
  agentUrl,
115
- httpPort: config.port,
116
- pollingIntervalS: config.pollingIntervalS,
117
- stepTimeoutS: config.stepTimeoutS,
118
- executorEncryptionKey: config.encryptionKey,
122
+ httpPort: port,
123
+ executorEncryptionKey: encryptionKey,
124
+ ...(ai && { aiConfigurations: [{ name: 'default', ...ai }] }),
119
125
  logger: (level, message, context) => this.options.logger(level, formatLog(message, context)),
120
126
  // Embedded: the host process owns SIGTERM/SIGINT; the executor must not exit it. agent.stop()
121
127
  // drains the executor explicitly.
122
128
  manageProcessSignals: false,
123
129
  };
124
- if (config.inMemory) {
130
+ if (inMemory) {
125
131
  this.options.logger('Warn', formatLog('Using an in-memory run store: workflow runs are kept in memory and lost on restart. ' +
126
132
  'Pass a `database` to addWorkflowExecutor() to persist them in production.'));
127
133
  this.executor = buildInMemoryExecutor(commonOptions);
128
134
  }
129
135
  else {
130
- const { database } = config;
131
136
  if (!database) {
132
137
  throw new Error('Embedded workflow executor requires a database to persist run state. Pass `database` ' +
133
138
  'to addWorkflowExecutor(), or use `inMemory: true`.');
@@ -138,7 +143,7 @@ class EmbeddedWorkflowExecutor {
138
143
  });
139
144
  }
140
145
  await this.executor.start();
141
- this.options.logger('Info', `Embedded workflow executor started (loopback port ${config.port})`);
146
+ this.options.logger('Info', `Embedded workflow executor started (loopback port ${port})`);
142
147
  }
143
148
  async stop() {
144
149
  await this.executor?.stop();
@@ -170,4 +175,4 @@ class EmbeddedWorkflowExecutor {
170
175
  }
171
176
  }
172
177
  exports.default = EmbeddedWorkflowExecutor;
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWRkZWQtd29ya2Zsb3ctZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZW1iZWRkZWQtd29ya2Zsb3ctZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxnREFBd0I7QUFFeEIsK0RBQStEO0FBQy9ELE1BQU0sOEJBQThCLEdBQUcsSUFBSSxDQUFDO0FBRTVDOzs7O0dBSUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxPQUFlLEVBQUUsT0FBaUM7SUFDbkUsSUFBSSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyx1QkFBdUIsT0FBTyxFQUFFLENBQUM7SUFFM0YsSUFBSSxDQUFDO1FBQ0gsT0FBTyx1QkFBdUIsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyx1QkFBdUIsT0FBTywyQkFBMkIsQ0FBQztJQUNuRSxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLElBQWE7SUFDdEMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFFckUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDakQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFxQix3QkFBd0I7SUFJM0MsWUFBNkIsT0FBaUM7UUFBakMsWUFBTyxHQUFQLE9BQU8sQ0FBMEI7UUFIdEQsV0FBTSxHQUE2RCxJQUFJLENBQUM7UUFDeEUsYUFB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
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWRkZWQtd29ya2Zsb3ctZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZW1iZWRkZWQtd29ya2Zsb3ctZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxnREFBd0I7QUFFeEIsK0RBQStEO0FBQy9ELE1BQU0sOEJBQThCLEdBQUcsSUFBSSxDQUFDO0FBRTVDOzs7O0dBSUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxPQUFlLEVBQUUsT0FBaUM7SUFDbkUsSUFBSSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyx1QkFBdUIsT0FBTyxFQUFFLENBQUM7SUFFM0YsSUFBSSxDQUFDO1FBQ0gsT0FBTyx1QkFBdUIsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyx1QkFBdUIsT0FBTywyQkFBMkIsQ0FBQztJQUNuRSxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLElBQWE7SUFDdEMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFFckUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDakQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFxQix3QkFBd0I7SUFJM0MsWUFBNkIsT0FBaUM7UUFBakMsWUFBTyxHQUFQLE9BQU8sQ0FBMEI7UUFIdEQsV0FBTSxHQUE2RCxJQUFJLENBQUM7UUFDeEUsYUFB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
package/dist/types.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { CompositeId, Logger, LoggerLevel } from '@forestadmin/datasource-toolkit';
2
2
  import type { ForestAdminClient } from '@forestadmin/forestadmin-client';
3
+ import type { WorkflowExecutorTuningOptions } from '@forestadmin/workflow-executor';
3
4
  import type { IncomingMessage, ServerResponse } from 'http';
4
5
  /** Options to configure behavior of an agent's forestadmin driver */
5
6
  export type AgentOptions = {
@@ -59,7 +60,7 @@ export type AgentOptions = {
59
60
  * Options for an embedded workflow executor, started in the same process as the agent
60
61
  * through `agent.addWorkflowExecutor()`.
61
62
  */
62
- export type WorkflowExecutorEmbedOptions = {
63
+ export type WorkflowExecutorEmbedOptions = Omit<WorkflowExecutorTuningOptions, 'loggerLevel'> & {
63
64
  /**
64
65
  * Use an in-memory run store instead of a database. No database is required, but runs are lost
65
66
  * when the process restarts, so it is not meant for production. Mutually exclusive with
@@ -87,10 +88,20 @@ export type WorkflowExecutorEmbedOptions = {
87
88
  * Defaults to `3400`.
88
89
  */
89
90
  port?: number;
90
- /** Interval in seconds at which the executor polls the orchestrator for pending steps. */
91
- pollingIntervalS?: number;
92
- /** Per-step execution timeout in seconds. */
93
- stepTimeoutS?: number;
91
+ /**
92
+ * Bring your own AI provider instead of Forest's AI server. All three fields are required
93
+ * together; omit `ai` entirely to keep using Forest's server.
94
+ */
95
+ ai?: {
96
+ provider: 'anthropic' | 'openai';
97
+ model: string;
98
+ apiKey: string;
99
+ };
100
+ /**
101
+ * HKDF secret encrypting OAuth-protected MCP connector credentials at rest. Only needed if you
102
+ * use OAuth-protected MCP connectors; without it their credential deposits return 503. Embed-time
103
+ * equivalent of the standalone `FOREST_EXECUTOR_ENCRYPTION_KEY` env var.
104
+ */
94
105
  encryptionKey?: string;
95
106
  };
96
107
  export type AgentOptionsWithDefaults = Readonly<Required<AgentOptions>>;
package/dist/types.js CHANGED
@@ -22,4 +22,4 @@ var RouteType;
22
22
  RouteType[RouteType["Authentication"] = 3] = "Authentication";
23
23
  RouteType[RouteType["PrivateRoute"] = 4] = "PrivateRoute";
24
24
  })(RouteType || (exports.RouteType = RouteType = {}));
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBb0dBLElBQVksUUFVWDtBQVZELFdBQVksUUFBUTtJQUNsQixxREFBZ0IsQ0FBQTtJQUNoQix5REFBa0IsQ0FBQTtJQUNsQixtREFBZSxDQUFBO0lBQ2YsaURBQWMsQ0FBQTtJQUNkLDJEQUFtQixDQUFBO0lBQ25CLCtEQUFxQixDQUFBO0lBQ3JCLHVFQUF5QixDQUFBO0lBQ3pCLG1EQUFlLENBQUE7SUFDZixxQ0FBUSxDQUFBO0FBQ1YsQ0FBQyxFQVZXLFFBQVEsd0JBQVIsUUFBUSxRQVVuQjtBQUVELElBQVksU0FPWDtBQVBELFdBQVksU0FBUztJQUNuQixpR0FBaUc7SUFDakcsMkRBQWlCLENBQUE7SUFDakIseURBQWdCLENBQUE7SUFDaEIsdURBQWUsQ0FBQTtJQUNmLDZEQUFrQixDQUFBO0lBQ2xCLHlEQUFnQixDQUFBO0FBQ2xCLENBQUMsRUFQVyxTQUFTLHlCQUFULFNBQVMsUUFPcEIifQ==
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMkdBLElBQVksUUFVWDtBQVZELFdBQVksUUFBUTtJQUNsQixxREFBZ0IsQ0FBQTtJQUNoQix5REFBa0IsQ0FBQTtJQUNsQixtREFBZSxDQUFBO0lBQ2YsaURBQWMsQ0FBQTtJQUNkLDJEQUFtQixDQUFBO0lBQ25CLCtEQUFxQixDQUFBO0lBQ3JCLHVFQUF5QixDQUFBO0lBQ3pCLG1EQUFlLENBQUE7SUFDZixxQ0FBUSxDQUFBO0FBQ1YsQ0FBQyxFQVZXLFFBQVEsd0JBQVIsUUFBUSxRQVVuQjtBQUVELElBQVksU0FPWDtBQVBELFdBQVksU0FBUztJQUNuQixpR0FBaUc7SUFDakcsMkRBQWlCLENBQUE7SUFDakIseURBQWdCLENBQUE7SUFDaEIsdURBQWUsQ0FBQTtJQUNmLDZEQUFrQixDQUFBO0lBQ2xCLHlEQUFnQixDQUFBO0FBQ2xCLENBQUMsRUFQVyxTQUFTLHlCQUFULFNBQVMsUUFPcEIifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forestadmin/agent",
3
- "version": "1.88.0",
3
+ "version": "1.89.0",
4
4
  "main": "dist/index.js",
5
5
  "license": "GPL-3.0",
6
6
  "publishConfig": {
@@ -49,7 +49,7 @@
49
49
  "devDependencies": {
50
50
  "@fastify/express": "^1.1.0",
51
51
  "@forestadmin/datasource-sql": "1.17.11",
52
- "@forestadmin/workflow-executor": "1.20.3",
52
+ "@forestadmin/workflow-executor": "1.21.0",
53
53
  "@nestjs/common": "^11.1.24",
54
54
  "@nestjs/core": "^11.1.24",
55
55
  "@nestjs/platform-express": "^11.1.24",
@@ -72,7 +72,7 @@
72
72
  },
73
73
  "peerDependencies": {
74
74
  "@fastify/express": "^1.1.0 || ^2.0.0 || ^3.0.0 || ^4.0.0",
75
- "@forestadmin/workflow-executor": "1.20.3"
75
+ "@forestadmin/workflow-executor": "1.21.0"
76
76
  },
77
77
  "peerDependenciesMeta": {
78
78
  "@fastify/express": {