@forestadmin/workflow-executor 1.0.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.
Files changed (123) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +141 -0
  3. package/dist/adapters/activity-log-drainer.d.ts +6 -0
  4. package/dist/adapters/activity-log-drainer.js +21 -0
  5. package/dist/adapters/agent-client-agent-port.d.ts +27 -0
  6. package/dist/adapters/agent-client-agent-port.js +211 -0
  7. package/dist/adapters/ai-client-adapter.d.ts +11 -0
  8. package/dist/adapters/ai-client-adapter.js +38 -0
  9. package/dist/adapters/always-error-ai-model-port.d.ts +8 -0
  10. package/dist/adapters/always-error-ai-model-port.js +23 -0
  11. package/dist/adapters/console-logger.d.ts +7 -0
  12. package/dist/adapters/console-logger.js +15 -0
  13. package/dist/adapters/forest-server-workflow-port.d.ts +25 -0
  14. package/dist/adapters/forest-server-workflow-port.js +163 -0
  15. package/dist/adapters/forestadmin-client-activity-log-port-factory.d.ts +12 -0
  16. package/dist/adapters/forestadmin-client-activity-log-port-factory.js +22 -0
  17. package/dist/adapters/forestadmin-client-activity-log-port.d.ts +15 -0
  18. package/dist/adapters/forestadmin-client-activity-log-port.js +78 -0
  19. package/dist/adapters/pretty-logger.d.ts +9 -0
  20. package/dist/adapters/pretty-logger.js +37 -0
  21. package/dist/adapters/record-id-serializer.d.ts +4 -0
  22. package/dist/adapters/record-id-serializer.js +20 -0
  23. package/dist/adapters/run-to-available-step-mapper.d.ts +4 -0
  24. package/dist/adapters/run-to-available-step-mapper.js +137 -0
  25. package/dist/adapters/server-ai-adapter.d.ts +16 -0
  26. package/dist/adapters/server-ai-adapter.js +60 -0
  27. package/dist/adapters/server-types.d.ts +181 -0
  28. package/dist/adapters/server-types.js +35 -0
  29. package/dist/adapters/step-definition-mapper.d.ts +4 -0
  30. package/dist/adapters/step-definition-mapper.js +68 -0
  31. package/dist/adapters/step-outcome-to-update-step-mapper.d.ts +4 -0
  32. package/dist/adapters/step-outcome-to-update-step-mapper.js +34 -0
  33. package/dist/adapters/with-retry.d.ts +6 -0
  34. package/dist/adapters/with-retry.js +40 -0
  35. package/dist/build-workflow-executor.d.ts +35 -0
  36. package/dist/build-workflow-executor.js +175 -0
  37. package/dist/cli-core.d.ts +26 -0
  38. package/dist/cli-core.js +228 -0
  39. package/dist/cli.d.ts +3 -0
  40. package/dist/cli.js +17 -0
  41. package/dist/defaults.d.ts +9 -0
  42. package/dist/defaults.js +12 -0
  43. package/dist/errors.d.ts +153 -0
  44. package/dist/errors.js +327 -0
  45. package/dist/executors/activity-log.d.ts +14 -0
  46. package/dist/executors/activity-log.js +33 -0
  47. package/dist/executors/agent-with-log.d.ts +33 -0
  48. package/dist/executors/agent-with-log.js +76 -0
  49. package/dist/executors/base-step-executor.d.ts +40 -0
  50. package/dist/executors/base-step-executor.js +267 -0
  51. package/dist/executors/condition-step-executor.d.ts +15 -0
  52. package/dist/executors/condition-step-executor.js +108 -0
  53. package/dist/executors/guidance-step-executor.d.ts +12 -0
  54. package/dist/executors/guidance-step-executor.js +39 -0
  55. package/dist/executors/load-related-record-step-executor.d.ts +38 -0
  56. package/dist/executors/load-related-record-step-executor.js +478 -0
  57. package/dist/executors/mcp-step-executor.d.ts +22 -0
  58. package/dist/executors/mcp-step-executor.js +188 -0
  59. package/dist/executors/read-record-step-executor.d.ts +10 -0
  60. package/dist/executors/read-record-step-executor.js +100 -0
  61. package/dist/executors/record-step-executor.d.ts +19 -0
  62. package/dist/executors/record-step-executor.js +108 -0
  63. package/dist/executors/step-executor-factory.d.ts +24 -0
  64. package/dist/executors/step-executor-factory.js +99 -0
  65. package/dist/executors/summary/step-execution-formatters.d.ts +8 -0
  66. package/dist/executors/summary/step-execution-formatters.js +49 -0
  67. package/dist/executors/summary/step-summary-builder.d.ts +7 -0
  68. package/dist/executors/summary/step-summary-builder.js +52 -0
  69. package/dist/executors/trigger-record-action-step-executor.d.ts +17 -0
  70. package/dist/executors/trigger-record-action-step-executor.js +169 -0
  71. package/dist/executors/update-record-step-executor.d.ts +13 -0
  72. package/dist/executors/update-record-step-executor.js +245 -0
  73. package/dist/http/executor-http-server.d.ts +25 -0
  74. package/dist/http/executor-http-server.js +170 -0
  75. package/dist/http/pending-data-validators.d.ts +25 -0
  76. package/dist/http/pending-data-validators.js +79 -0
  77. package/dist/http/step-serializer.d.ts +3 -0
  78. package/dist/http/step-serializer.js +47 -0
  79. package/dist/in-flight-run-registry.d.ts +9 -0
  80. package/dist/in-flight-run-registry.js +30 -0
  81. package/dist/index.d.ts +38 -0
  82. package/dist/index.js +88 -0
  83. package/dist/ports/activity-log-port.d.ts +24 -0
  84. package/dist/ports/activity-log-port.js +3 -0
  85. package/dist/ports/agent-port.d.ts +54 -0
  86. package/dist/ports/agent-port.js +3 -0
  87. package/dist/ports/ai-model-port.d.ts +7 -0
  88. package/dist/ports/ai-model-port.js +3 -0
  89. package/dist/ports/logger-port.d.ts +6 -0
  90. package/dist/ports/logger-port.js +3 -0
  91. package/dist/ports/run-store.d.ts +9 -0
  92. package/dist/ports/run-store.js +3 -0
  93. package/dist/ports/workflow-port.d.ts +30 -0
  94. package/dist/ports/workflow-port.js +3 -0
  95. package/dist/remote-tool-fetcher.d.ts +19 -0
  96. package/dist/remote-tool-fetcher.js +56 -0
  97. package/dist/runner.d.ts +50 -0
  98. package/dist/runner.js +317 -0
  99. package/dist/schema-cache.d.ts +11 -0
  100. package/dist/schema-cache.js +37 -0
  101. package/dist/schema-resolver.d.ts +11 -0
  102. package/dist/schema-resolver.js +24 -0
  103. package/dist/stores/build-run-store.d.ts +5 -0
  104. package/dist/stores/build-run-store.js +28 -0
  105. package/dist/stores/database-store.d.ts +17 -0
  106. package/dist/stores/database-store.js +119 -0
  107. package/dist/stores/in-memory-store.d.ts +11 -0
  108. package/dist/stores/in-memory-store.js +48 -0
  109. package/dist/types/execution-context.d.ts +37 -0
  110. package/dist/types/execution-context.js +3 -0
  111. package/dist/types/step-execution-data.d.ts +137 -0
  112. package/dist/types/step-execution-data.js +3 -0
  113. package/dist/types/validated/collection.d.ts +126 -0
  114. package/dist/types/validated/collection.js +96 -0
  115. package/dist/types/validated/execution.d.ts +362 -0
  116. package/dist/types/validated/execution.js +43 -0
  117. package/dist/types/validated/step-definition.d.ts +243 -0
  118. package/dist/types/validated/step-definition.js +128 -0
  119. package/dist/types/validated/step-outcome.d.ts +108 -0
  120. package/dist/types/validated/step-outcome.js +66 -0
  121. package/dist/validate-secrets.d.ts +5 -0
  122. package/dist/validate-secrets.js +14 -0
  123. package/package.json +50 -0
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ /* eslint-disable no-console */
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.parseArgs = parseArgs;
8
+ exports.pickLogger = pickLogger;
9
+ exports.readEnvConfig = readEnvConfig;
10
+ exports.printHelp = printHelp;
11
+ exports.printVersion = printVersion;
12
+ exports.logStartup = logStartup;
13
+ exports.runCli = runCli;
14
+ const zod_1 = require("zod");
15
+ const console_logger_1 = __importDefault(require("./adapters/console-logger"));
16
+ const pretty_logger_1 = __importDefault(require("./adapters/pretty-logger"));
17
+ const defaults_1 = require("./defaults");
18
+ const errors_1 = require("./errors");
19
+ const POSITIVE_INT = zod_1.z.coerce.number().int().positive();
20
+ function parsePositiveIntEnv(name, raw) {
21
+ if (!raw)
22
+ return undefined;
23
+ const parsed = POSITIVE_INT.safeParse(raw);
24
+ if (!parsed.success) {
25
+ throw new errors_1.ConfigurationError(`${name} must be a positive integer (got "${raw}")`);
26
+ }
27
+ return parsed.data;
28
+ }
29
+ // eslint-disable-next-line @typescript-eslint/no-var-requires, import/no-dynamic-require, global-require
30
+ const { version } = require('../package.json');
31
+ const BINARY_NAME = 'forest-workflow-executor';
32
+ function parseArgs(argv) {
33
+ const result = {
34
+ help: false,
35
+ version: false,
36
+ inMemory: false,
37
+ pretty: false,
38
+ json: false,
39
+ };
40
+ for (const arg of argv) {
41
+ switch (arg) {
42
+ case '--help':
43
+ case '-h':
44
+ result.help = true;
45
+ break;
46
+ case '--version':
47
+ case '-v':
48
+ result.version = true;
49
+ break;
50
+ case '--in-memory':
51
+ result.inMemory = true;
52
+ break;
53
+ case '--pretty':
54
+ result.pretty = true;
55
+ break;
56
+ case '--json':
57
+ result.json = true;
58
+ break;
59
+ default:
60
+ throw new Error(`Unknown argument: ${arg}`);
61
+ }
62
+ }
63
+ return result;
64
+ }
65
+ // Priority: --json → Console; --pretty → Pretty; TTY → Pretty; else Console (piped/docker/k8s/CI).
66
+ // NO_COLOR is respected by picocolors so pretty output stays monochrome where ANSI is banned.
67
+ function pickLogger(args, stdout = process.stdout) {
68
+ if (args.json)
69
+ return new console_logger_1.default();
70
+ if (args.pretty)
71
+ return new pretty_logger_1.default();
72
+ return stdout.isTTY ? new pretty_logger_1.default() : new console_logger_1.default();
73
+ }
74
+ function parseAiConfig(env) {
75
+ const { AI_PROVIDER, AI_MODEL, AI_API_KEY } = env;
76
+ const fields = [AI_PROVIDER, AI_MODEL, AI_API_KEY];
77
+ const setCount = fields.filter(Boolean).length;
78
+ if (setCount === 0)
79
+ return undefined;
80
+ if (setCount !== fields.length) {
81
+ throw new Error('AI config must be all-or-nothing: set AI_PROVIDER, AI_MODEL and AI_API_KEY together or leave all unset.');
82
+ }
83
+ if (AI_PROVIDER !== 'anthropic' && AI_PROVIDER !== 'openai') {
84
+ throw new Error(`AI_PROVIDER must be "anthropic" or "openai", got "${AI_PROVIDER}"`);
85
+ }
86
+ return [
87
+ {
88
+ name: 'default',
89
+ provider: AI_PROVIDER,
90
+ model: AI_MODEL,
91
+ apiKey: AI_API_KEY,
92
+ },
93
+ ];
94
+ }
95
+ function readEnvConfig(env, args) {
96
+ const requiredBase = ['FOREST_ENV_SECRET', 'FOREST_AUTH_SECRET', 'AGENT_URL'];
97
+ const missing = requiredBase.filter(key => !env[key]);
98
+ if (!args.inMemory && !env.DATABASE_URL) {
99
+ missing.push('DATABASE_URL (required unless --in-memory)');
100
+ }
101
+ if (missing.length > 0) {
102
+ throw new Error(`Missing required environment variables:\n${missing.map(v => ` - ${v}`).join('\n')}\n\n` +
103
+ `Run \`${BINARY_NAME} --help\` for the full list.`);
104
+ }
105
+ const aiConfigurations = parseAiConfig(env);
106
+ const executorOptions = {
107
+ envSecret: env.FOREST_ENV_SECRET,
108
+ authSecret: env.FOREST_AUTH_SECRET,
109
+ agentUrl: env.AGENT_URL,
110
+ httpPort: parsePositiveIntEnv('HTTP_PORT', env.HTTP_PORT) ?? defaults_1.DEFAULT_HTTP_PORT,
111
+ forestServerUrl: env.FOREST_SERVER_URL,
112
+ pollingIntervalMs: parsePositiveIntEnv('POLLING_INTERVAL_MS', env.POLLING_INTERVAL_MS),
113
+ stopTimeoutMs: parsePositiveIntEnv('STOP_TIMEOUT_MS', env.STOP_TIMEOUT_MS),
114
+ stepTimeoutMs: parsePositiveIntEnv('STEP_TIMEOUT_MS', env.STEP_TIMEOUT_MS),
115
+ aiInvokeTimeoutMs: parsePositiveIntEnv('AI_INVOKE_TIMEOUT_MS', env.AI_INVOKE_TIMEOUT_MS),
116
+ maxChainDepth: parsePositiveIntEnv('MAX_CHAIN_DEPTH', env.MAX_CHAIN_DEPTH),
117
+ schemaCacheTtlMs: parsePositiveIntEnv('SCHEMA_CACHE_TTL_MS', env.SCHEMA_CACHE_TTL_MS),
118
+ ...(aiConfigurations && { aiConfigurations }),
119
+ ...(env.FORCE_AI_ERROR === 'true' && { forceAiError: true }),
120
+ };
121
+ return {
122
+ executorOptions,
123
+ databaseUrl: env.DATABASE_URL,
124
+ mode: args.inMemory ? 'in-memory' : 'database',
125
+ };
126
+ }
127
+ function printHelp() {
128
+ console.log(`Usage: ${BINARY_NAME} [options]
129
+
130
+ Run the Forest Admin workflow executor.
131
+
132
+ Options:
133
+ --in-memory Use an in-memory run store (no DB needed, not for prod)
134
+ --pretty Force colorized human-readable logs (default when stdout is a TTY)
135
+ --json Force structured JSON logs (default when stdout is not a TTY)
136
+ --help, -h Show this help
137
+ --version, -v Show version
138
+
139
+ Required environment variables:
140
+ FOREST_ENV_SECRET Forest Admin project environment secret
141
+ FOREST_AUTH_SECRET JWT signing secret (shared with your agent)
142
+ AGENT_URL URL of your running Forest Admin agent
143
+ DATABASE_URL Postgres connection string (not needed with --in-memory)
144
+
145
+ Optional environment variables:
146
+ HTTP_PORT Default: ${defaults_1.DEFAULT_HTTP_PORT}
147
+ FOREST_SERVER_URL Default: ${defaults_1.DEFAULT_FOREST_SERVER_URL}
148
+ POLLING_INTERVAL_MS Default: ${defaults_1.DEFAULT_POLLING_INTERVAL_MS}
149
+ STOP_TIMEOUT_MS Default: ${defaults_1.DEFAULT_STOP_TIMEOUT_MS}
150
+ STEP_TIMEOUT_MS Max duration of a step in ms (default: ${defaults_1.DEFAULT_STEP_TIMEOUT_MS})
151
+ AI_INVOKE_TIMEOUT_MS Max duration of a single AI provider invocation in ms (default: ${defaults_1.DEFAULT_AI_INVOKE_TIMEOUT_MS})
152
+ MAX_CHAIN_DEPTH Max steps auto-executed per run before yielding (default: ${defaults_1.DEFAULT_MAX_CHAIN_DEPTH})
153
+ SCHEMA_CACHE_TTL_MS Collection schema cache TTL in ms (default: ${defaults_1.DEFAULT_SCHEMA_CACHE_TTL_MS})
154
+ NO_COLOR Set to any value to disable ANSI colors in pretty logs
155
+ FORCE_AI_ERROR Set to "true" to make every AI call fail (dev only, to test error paths)
156
+
157
+ AI configuration (all-or-nothing — falls back to server AI if any is missing):
158
+ AI_PROVIDER 'anthropic' | 'openai'
159
+ AI_MODEL Model name (e.g. claude-sonnet-4-6)
160
+ AI_API_KEY Provider API key
161
+
162
+ Signals:
163
+ SIGTERM / SIGINT Graceful shutdown (drain in-flight, then exit)`);
164
+ }
165
+ function printVersion() {
166
+ console.log(version);
167
+ }
168
+ function logStartup(logger, config) {
169
+ const { executorOptions: opts, mode } = config;
170
+ let aiLabel;
171
+ if (opts.forceAiError) {
172
+ aiLabel = 'forced-error (dev only)';
173
+ }
174
+ else if (opts.aiConfigurations?.length) {
175
+ aiLabel = `local (${opts.aiConfigurations[0].provider} / ${opts.aiConfigurations[0].model})`;
176
+ }
177
+ else {
178
+ aiLabel = 'server fallback';
179
+ }
180
+ logger.info('Workflow executor starting', {
181
+ mode,
182
+ forestServerUrl: opts.forestServerUrl ?? defaults_1.DEFAULT_FOREST_SERVER_URL,
183
+ agentUrl: opts.agentUrl,
184
+ httpPort: opts.httpPort,
185
+ pollingIntervalMs: opts.pollingIntervalMs ?? defaults_1.DEFAULT_POLLING_INTERVAL_MS,
186
+ aiConfig: aiLabel,
187
+ });
188
+ }
189
+ async function runCli(argv, env, factories) {
190
+ const args = parseArgs(argv);
191
+ if (args.help) {
192
+ printHelp();
193
+ return null;
194
+ }
195
+ if (args.version) {
196
+ printVersion();
197
+ return null;
198
+ }
199
+ const config = readEnvConfig(env, args);
200
+ const logger = pickLogger(args);
201
+ config.executorOptions.logger = logger;
202
+ logStartup(logger, config);
203
+ try {
204
+ let executor;
205
+ if (config.mode === 'in-memory') {
206
+ executor = factories.buildInMemory(config.executorOptions);
207
+ }
208
+ else {
209
+ const databaseOptions = {
210
+ ...config.executorOptions,
211
+ database: { uri: config.databaseUrl },
212
+ };
213
+ executor = factories.buildDatabase(databaseOptions);
214
+ }
215
+ await executor.start();
216
+ logger.info('Workflow executor ready', {
217
+ url: `http://localhost:${config.executorOptions.httpPort}`,
218
+ });
219
+ return executor;
220
+ }
221
+ catch (error) {
222
+ logger.error('Workflow executor failed to start', {
223
+ error: (0, errors_1.extractErrorMessage)(error),
224
+ });
225
+ throw error;
226
+ }
227
+ }
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xpLWNvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtCQUErQjs7Ozs7QUFnRS9CLDhCQWtDQztBQUlELGdDQUtDO0FBNkJELHNDQXNDQztBQUVELDhCQXFDQztBQUVELG9DQUVDO0FBRUQsZ0NBb0JDO0FBRUQsd0JBa0RDO0FBOVJELDZCQUF3QjtBQUV4QiwrRUFBc0Q7QUFDdEQsNkVBQW9EO0FBTXBELHlDQVNvQjtBQUNwQixxQ0FBbUU7QUFFbkUsTUFBTSxZQUFZLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUV4RCxTQUFTLG1CQUFtQixDQUFDLElBQVksRUFBRSxHQUF1QjtJQUNoRSxJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRTNCLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksMkJBQWtCLENBQUMsR0FBRyxJQUFJLHFDQUFxQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDckIsQ0FBQztBQUVELHlHQUF5RztBQUN6RyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUF3QixDQUFDO0FBRXRFLE1BQU0sV0FBVyxHQUFHLDBCQUEwQixDQUFDO0FBcUIvQyxTQUFnQixTQUFTLENBQUMsSUFBYztJQUN0QyxNQUFNLE1BQU0sR0FBWTtRQUN0QixJQUFJLEVBQUUsS0FBSztRQUNYLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLEtBQUs7UUFDZixNQUFNLEVBQUUsS0FBSztRQUNiLElBQUksRUFB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
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
package/dist/cli.js ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /* eslint-disable no-console */
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ const build_workflow_executor_1 = require("./build-workflow-executor");
6
+ const cli_core_1 = require("./cli-core");
7
+ const errors_1 = require("./errors");
8
+ if (require.main === module) {
9
+ (0, cli_core_1.runCli)(process.argv.slice(2), process.env, {
10
+ buildDatabase: build_workflow_executor_1.buildDatabaseExecutor,
11
+ buildInMemory: build_workflow_executor_1.buildInMemoryExecutor,
12
+ }).catch((err) => {
13
+ console.error(`Error: ${(0, errors_1.extractErrorMessage)(err)}`);
14
+ process.exit(1);
15
+ });
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLCtCQUErQjs7QUFFL0IsdUVBQXlGO0FBQ3pGLHlDQUFvQztBQUNwQyxxQ0FBK0M7QUFFL0MsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO0lBQzVCLElBQUEsaUJBQU0sRUFBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFO1FBQ3pDLGFBQWEsRUFBRSwrQ0FBcUI7UUFDcEMsYUFBYSxFQUFFLCtDQUFxQjtLQUNyQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBWSxFQUFFLEVBQUU7UUFDeEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUEsNEJBQW1CLEVBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIn0=
@@ -0,0 +1,9 @@
1
+ export declare const DEFAULT_HTTP_PORT = 3400;
2
+ export declare const DEFAULT_FOREST_SERVER_URL = "https://api.forestadmin.com";
3
+ export declare const DEFAULT_POLLING_INTERVAL_MS = 30000;
4
+ export declare const DEFAULT_STEP_TIMEOUT_MS: number;
5
+ export declare const DEFAULT_AI_INVOKE_TIMEOUT_MS = 30000;
6
+ export declare const DEFAULT_STOP_TIMEOUT_MS = 30000;
7
+ export declare const DEFAULT_MAX_CHAIN_DEPTH = 50;
8
+ export declare const DEFAULT_SCHEMA_CACHE_TTL_MS: number;
9
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_SCHEMA_CACHE_TTL_MS = exports.DEFAULT_MAX_CHAIN_DEPTH = exports.DEFAULT_STOP_TIMEOUT_MS = exports.DEFAULT_AI_INVOKE_TIMEOUT_MS = exports.DEFAULT_STEP_TIMEOUT_MS = exports.DEFAULT_POLLING_INTERVAL_MS = exports.DEFAULT_FOREST_SERVER_URL = exports.DEFAULT_HTTP_PORT = void 0;
4
+ exports.DEFAULT_HTTP_PORT = 3400;
5
+ exports.DEFAULT_FOREST_SERVER_URL = 'https://api.forestadmin.com';
6
+ exports.DEFAULT_POLLING_INTERVAL_MS = 30000;
7
+ exports.DEFAULT_STEP_TIMEOUT_MS = 5 * 60000;
8
+ exports.DEFAULT_AI_INVOKE_TIMEOUT_MS = 30000;
9
+ exports.DEFAULT_STOP_TIMEOUT_MS = 30000;
10
+ exports.DEFAULT_MAX_CHAIN_DEPTH = 50;
11
+ exports.DEFAULT_SCHEMA_CACHE_TTL_MS = 10 * 60000;
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVmYXVsdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBQSx5QkFBeUIsR0FBRyw2QkFBNkIsQ0FBQztBQUMxRCxRQUFBLDJCQUEyQixHQUFHLEtBQU0sQ0FBQztBQUNyQyxRQUFBLHVCQUF1QixHQUFHLENBQUMsR0FBRyxLQUFNLENBQUM7QUFDckMsUUFBQSw0QkFBNEIsR0FBRyxLQUFNLENBQUM7QUFDdEMsUUFBQSx1QkFBdUIsR0FBRyxLQUFNLENBQUM7QUFDakMsUUFBQSx1QkFBdUIsR0FBRyxFQUFFLENBQUM7QUFDN0IsUUFBQSwyQkFBMkIsR0FBRyxFQUFFLEdBQUcsS0FBTSxDQUFDIn0=
@@ -0,0 +1,153 @@
1
+ import type { MalformedRunInfo } from './ports/workflow-port';
2
+ import type { RecordId } from './types/validated/collection';
3
+ import type { z } from 'zod';
4
+ export declare function causeMessage(error: unknown): string | undefined;
5
+ export declare function extractErrorMessage(err?: unknown): string | undefined;
6
+ export declare abstract class WorkflowExecutorError extends Error {
7
+ readonly userMessage: string;
8
+ cause?: unknown;
9
+ constructor(message: string, userMessage?: string);
10
+ }
11
+ export declare class MissingToolCallError extends WorkflowExecutorError {
12
+ constructor();
13
+ }
14
+ export declare class MalformedToolCallError extends WorkflowExecutorError {
15
+ readonly toolName: string;
16
+ constructor(toolName: string, details: string);
17
+ }
18
+ export declare class RecordNotFoundError extends WorkflowExecutorError {
19
+ constructor(collectionName: string, recordId: RecordId);
20
+ }
21
+ export declare class NoRecordsError extends WorkflowExecutorError {
22
+ constructor();
23
+ }
24
+ export declare class NoReadableFieldsError extends WorkflowExecutorError {
25
+ constructor(collectionName: string);
26
+ }
27
+ export declare class NoResolvedFieldsError extends WorkflowExecutorError {
28
+ constructor(fieldNames: string[]);
29
+ }
30
+ export declare class NoWritableFieldsError extends WorkflowExecutorError {
31
+ constructor(collectionName: string);
32
+ }
33
+ export declare class NoActionsError extends WorkflowExecutorError {
34
+ constructor(collectionName: string);
35
+ }
36
+ export declare class UnsupportedActionFormError extends WorkflowExecutorError {
37
+ constructor(actionDisplayName: string);
38
+ }
39
+ export declare class RunStorePortError extends WorkflowExecutorError {
40
+ constructor(operation: string, cause: unknown);
41
+ }
42
+ export declare class NoRelationshipFieldsError extends WorkflowExecutorError {
43
+ constructor(collectionName: string);
44
+ }
45
+ export declare class RelatedRecordNotFoundError extends WorkflowExecutorError {
46
+ constructor(collectionName: string, relationName: string);
47
+ }
48
+ export declare class InvalidAIResponseError extends WorkflowExecutorError {
49
+ constructor(message: string);
50
+ }
51
+ export declare class InvalidAiRequestError extends WorkflowExecutorError {
52
+ constructor(message: string);
53
+ }
54
+ export declare class RelationNotFoundError extends WorkflowExecutorError {
55
+ constructor(name: string, collectionName: string);
56
+ }
57
+ export declare class FieldNotFoundError extends WorkflowExecutorError {
58
+ constructor(name: string, collectionName: string);
59
+ }
60
+ export declare class FieldTypeMissingError extends WorkflowExecutorError {
61
+ constructor(name: string, collectionName: string);
62
+ }
63
+ export declare class ActionNotFoundError extends WorkflowExecutorError {
64
+ constructor(name: string, collectionName: string);
65
+ }
66
+ export declare class StepStateError extends WorkflowExecutorError {
67
+ constructor(message: string);
68
+ }
69
+ export declare class ActivityLogCreationError extends WorkflowExecutorError {
70
+ constructor(cause: unknown);
71
+ }
72
+ export declare class StepTimeoutError extends WorkflowExecutorError {
73
+ constructor(timeoutMs: number);
74
+ }
75
+ export declare class AiInvokeTimeoutError extends WorkflowExecutorError {
76
+ constructor(timeoutMs: number);
77
+ }
78
+ export declare class NoMcpToolsError extends WorkflowExecutorError {
79
+ constructor(requestedMcpServerId: string);
80
+ }
81
+ export declare class McpToolNotFoundError extends WorkflowExecutorError {
82
+ constructor(name: string);
83
+ }
84
+ export declare class AgentPortError extends WorkflowExecutorError {
85
+ constructor(operation: string, cause: unknown);
86
+ }
87
+ export declare class SchemaNotCachedError extends WorkflowExecutorError {
88
+ constructor(collectionName: string);
89
+ }
90
+ export declare class WorkflowPortError extends WorkflowExecutorError {
91
+ constructor(operation: string, cause: unknown);
92
+ }
93
+ export declare class AiModelPortError extends WorkflowExecutorError {
94
+ constructor(operation: string, cause: unknown);
95
+ }
96
+ export declare class McpToolInvocationError extends WorkflowExecutorError {
97
+ constructor(toolName: string, cause: unknown);
98
+ }
99
+ export declare class ConfigurationError extends Error {
100
+ constructor(message: string);
101
+ }
102
+ export declare class RunNotFoundError extends Error {
103
+ cause?: unknown;
104
+ constructor(runId: string, cause?: unknown);
105
+ }
106
+ export declare class UserMismatchError extends Error {
107
+ constructor(runId: string);
108
+ }
109
+ export declare class RunAlreadyInFlightError extends Error {
110
+ constructor(runId: string);
111
+ }
112
+ export declare class PendingDataNotFoundError extends Error {
113
+ constructor(runId: string, stepIndex: number);
114
+ }
115
+ export interface ValidationIssue {
116
+ path: (string | number)[];
117
+ message: string;
118
+ code: string;
119
+ }
120
+ export declare class InvalidPendingDataError extends WorkflowExecutorError {
121
+ readonly issues: ValidationIssue[];
122
+ constructor(issues: ValidationIssue[]);
123
+ }
124
+ export declare class InvalidPreRecordedArgsError extends WorkflowExecutorError {
125
+ constructor(detail: string);
126
+ }
127
+ export declare class AgentProbeError extends Error {
128
+ readonly cause?: unknown;
129
+ constructor(message: string, options?: {
130
+ cause?: unknown;
131
+ });
132
+ }
133
+ export declare class UnsupportedStepTypeError extends WorkflowExecutorError {
134
+ constructor(stepType: string);
135
+ }
136
+ export declare class RecordIdSerializationError extends WorkflowExecutorError {
137
+ constructor(part: string);
138
+ }
139
+ export declare class InvalidStepDefinitionError extends WorkflowExecutorError {
140
+ constructor(detail: string);
141
+ }
142
+ export declare class DomainValidationError extends WorkflowExecutorError {
143
+ readonly issues: ReadonlyArray<{
144
+ path: string;
145
+ message: string;
146
+ }>;
147
+ constructor(runId: number, zodError: z.ZodError);
148
+ }
149
+ export declare class MalformedRunError extends WorkflowExecutorError {
150
+ readonly info: MalformedRunInfo;
151
+ constructor(info: MalformedRunInfo);
152
+ }
153
+ //# sourceMappingURL=errors.d.ts.map