@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.
- package/LICENSE +674 -0
- package/README.md +141 -0
- package/dist/adapters/activity-log-drainer.d.ts +6 -0
- package/dist/adapters/activity-log-drainer.js +21 -0
- package/dist/adapters/agent-client-agent-port.d.ts +27 -0
- package/dist/adapters/agent-client-agent-port.js +211 -0
- package/dist/adapters/ai-client-adapter.d.ts +11 -0
- package/dist/adapters/ai-client-adapter.js +38 -0
- package/dist/adapters/always-error-ai-model-port.d.ts +8 -0
- package/dist/adapters/always-error-ai-model-port.js +23 -0
- package/dist/adapters/console-logger.d.ts +7 -0
- package/dist/adapters/console-logger.js +15 -0
- package/dist/adapters/forest-server-workflow-port.d.ts +25 -0
- package/dist/adapters/forest-server-workflow-port.js +163 -0
- package/dist/adapters/forestadmin-client-activity-log-port-factory.d.ts +12 -0
- package/dist/adapters/forestadmin-client-activity-log-port-factory.js +22 -0
- package/dist/adapters/forestadmin-client-activity-log-port.d.ts +15 -0
- package/dist/adapters/forestadmin-client-activity-log-port.js +78 -0
- package/dist/adapters/pretty-logger.d.ts +9 -0
- package/dist/adapters/pretty-logger.js +37 -0
- package/dist/adapters/record-id-serializer.d.ts +4 -0
- package/dist/adapters/record-id-serializer.js +20 -0
- package/dist/adapters/run-to-available-step-mapper.d.ts +4 -0
- package/dist/adapters/run-to-available-step-mapper.js +137 -0
- package/dist/adapters/server-ai-adapter.d.ts +16 -0
- package/dist/adapters/server-ai-adapter.js +60 -0
- package/dist/adapters/server-types.d.ts +181 -0
- package/dist/adapters/server-types.js +35 -0
- package/dist/adapters/step-definition-mapper.d.ts +4 -0
- package/dist/adapters/step-definition-mapper.js +68 -0
- package/dist/adapters/step-outcome-to-update-step-mapper.d.ts +4 -0
- package/dist/adapters/step-outcome-to-update-step-mapper.js +34 -0
- package/dist/adapters/with-retry.d.ts +6 -0
- package/dist/adapters/with-retry.js +40 -0
- package/dist/build-workflow-executor.d.ts +35 -0
- package/dist/build-workflow-executor.js +175 -0
- package/dist/cli-core.d.ts +26 -0
- package/dist/cli-core.js +228 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.js +17 -0
- package/dist/defaults.d.ts +9 -0
- package/dist/defaults.js +12 -0
- package/dist/errors.d.ts +153 -0
- package/dist/errors.js +327 -0
- package/dist/executors/activity-log.d.ts +14 -0
- package/dist/executors/activity-log.js +33 -0
- package/dist/executors/agent-with-log.d.ts +33 -0
- package/dist/executors/agent-with-log.js +76 -0
- package/dist/executors/base-step-executor.d.ts +40 -0
- package/dist/executors/base-step-executor.js +267 -0
- package/dist/executors/condition-step-executor.d.ts +15 -0
- package/dist/executors/condition-step-executor.js +108 -0
- package/dist/executors/guidance-step-executor.d.ts +12 -0
- package/dist/executors/guidance-step-executor.js +39 -0
- package/dist/executors/load-related-record-step-executor.d.ts +38 -0
- package/dist/executors/load-related-record-step-executor.js +478 -0
- package/dist/executors/mcp-step-executor.d.ts +22 -0
- package/dist/executors/mcp-step-executor.js +188 -0
- package/dist/executors/read-record-step-executor.d.ts +10 -0
- package/dist/executors/read-record-step-executor.js +100 -0
- package/dist/executors/record-step-executor.d.ts +19 -0
- package/dist/executors/record-step-executor.js +108 -0
- package/dist/executors/step-executor-factory.d.ts +24 -0
- package/dist/executors/step-executor-factory.js +99 -0
- package/dist/executors/summary/step-execution-formatters.d.ts +8 -0
- package/dist/executors/summary/step-execution-formatters.js +49 -0
- package/dist/executors/summary/step-summary-builder.d.ts +7 -0
- package/dist/executors/summary/step-summary-builder.js +52 -0
- package/dist/executors/trigger-record-action-step-executor.d.ts +17 -0
- package/dist/executors/trigger-record-action-step-executor.js +169 -0
- package/dist/executors/update-record-step-executor.d.ts +13 -0
- package/dist/executors/update-record-step-executor.js +245 -0
- package/dist/http/executor-http-server.d.ts +25 -0
- package/dist/http/executor-http-server.js +170 -0
- package/dist/http/pending-data-validators.d.ts +25 -0
- package/dist/http/pending-data-validators.js +79 -0
- package/dist/http/step-serializer.d.ts +3 -0
- package/dist/http/step-serializer.js +47 -0
- package/dist/in-flight-run-registry.d.ts +9 -0
- package/dist/in-flight-run-registry.js +30 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.js +88 -0
- package/dist/ports/activity-log-port.d.ts +24 -0
- package/dist/ports/activity-log-port.js +3 -0
- package/dist/ports/agent-port.d.ts +54 -0
- package/dist/ports/agent-port.js +3 -0
- package/dist/ports/ai-model-port.d.ts +7 -0
- package/dist/ports/ai-model-port.js +3 -0
- package/dist/ports/logger-port.d.ts +6 -0
- package/dist/ports/logger-port.js +3 -0
- package/dist/ports/run-store.d.ts +9 -0
- package/dist/ports/run-store.js +3 -0
- package/dist/ports/workflow-port.d.ts +30 -0
- package/dist/ports/workflow-port.js +3 -0
- package/dist/remote-tool-fetcher.d.ts +19 -0
- package/dist/remote-tool-fetcher.js +56 -0
- package/dist/runner.d.ts +50 -0
- package/dist/runner.js +317 -0
- package/dist/schema-cache.d.ts +11 -0
- package/dist/schema-cache.js +37 -0
- package/dist/schema-resolver.d.ts +11 -0
- package/dist/schema-resolver.js +24 -0
- package/dist/stores/build-run-store.d.ts +5 -0
- package/dist/stores/build-run-store.js +28 -0
- package/dist/stores/database-store.d.ts +17 -0
- package/dist/stores/database-store.js +119 -0
- package/dist/stores/in-memory-store.d.ts +11 -0
- package/dist/stores/in-memory-store.js +48 -0
- package/dist/types/execution-context.d.ts +37 -0
- package/dist/types/execution-context.js +3 -0
- package/dist/types/step-execution-data.d.ts +137 -0
- package/dist/types/step-execution-data.js +3 -0
- package/dist/types/validated/collection.d.ts +126 -0
- package/dist/types/validated/collection.js +96 -0
- package/dist/types/validated/execution.d.ts +362 -0
- package/dist/types/validated/execution.js +43 -0
- package/dist/types/validated/step-definition.d.ts +243 -0
- package/dist/types/validated/step-definition.js +128 -0
- package/dist/types/validated/step-outcome.d.ts +108 -0
- package/dist/types/validated/step-outcome.js +66 -0
- package/dist/validate-secrets.d.ts +5 -0
- package/dist/validate-secrets.js +14 -0
- package/package.json +50 -0
|
@@ -0,0 +1,170 @@
|
|
|
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 bodyparser_1 = __importDefault(require("@koa/bodyparser"));
|
|
7
|
+
const router_1 = __importDefault(require("@koa/router"));
|
|
8
|
+
const http_1 = __importDefault(require("http"));
|
|
9
|
+
const koa_1 = __importDefault(require("koa"));
|
|
10
|
+
const koa_jwt_1 = __importDefault(require("koa-jwt"));
|
|
11
|
+
const step_serializer_1 = __importDefault(require("./step-serializer"));
|
|
12
|
+
const console_logger_1 = __importDefault(require("../adapters/console-logger"));
|
|
13
|
+
const errors_1 = require("../errors");
|
|
14
|
+
class ExecutorHttpServer {
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.server = null;
|
|
17
|
+
this.options = options;
|
|
18
|
+
this.logger = options.logger ?? new console_logger_1.default();
|
|
19
|
+
this.app = new koa_1.default();
|
|
20
|
+
// Error middleware — catches all errors (including JWT 401) and returns structured JSON
|
|
21
|
+
this.app.use(async (ctx, next) => {
|
|
22
|
+
try {
|
|
23
|
+
await next();
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
const { status } = err;
|
|
27
|
+
if (status === 401) {
|
|
28
|
+
ctx.status = 401;
|
|
29
|
+
ctx.body = { error: 'Unauthorized' };
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
this.logger.error('Unhandled HTTP error', {
|
|
33
|
+
method: ctx.method,
|
|
34
|
+
path: ctx.path,
|
|
35
|
+
error: (0, errors_1.extractErrorMessage)(err),
|
|
36
|
+
stack: err instanceof Error ? err.stack : undefined,
|
|
37
|
+
});
|
|
38
|
+
ctx.status = 500;
|
|
39
|
+
ctx.body = { error: 'Internal server error' };
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
// Health endpoint — before JWT so it's publicly accessible (infra probes don't send tokens)
|
|
43
|
+
this.app.use(async (ctx, next) => {
|
|
44
|
+
if (ctx.method === 'GET' && ctx.path === '/health') {
|
|
45
|
+
const { state } = this.options.runner;
|
|
46
|
+
ctx.status = state === 'running' || state === 'draining' ? 200 : 503;
|
|
47
|
+
ctx.body = { state };
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
await next();
|
|
51
|
+
});
|
|
52
|
+
this.app.use((0, bodyparser_1.default)());
|
|
53
|
+
// JWT middleware — validates Bearer token using authSecret
|
|
54
|
+
// tokenKey: 'rawToken' exposes the raw token string on ctx.state.rawToken for downstream use
|
|
55
|
+
this.app.use((0, koa_jwt_1.default)({ secret: options.authSecret, cookie: 'forest_session_token', tokenKey: 'rawToken' }));
|
|
56
|
+
const router = new router_1.default();
|
|
57
|
+
// hasRunAccess authorization — only on GET (read-only route).
|
|
58
|
+
// Trigger handles its own authz by comparing bearer user with step.user.
|
|
59
|
+
router.get('/runs/:runId', this.hasRunAccessMiddleware.bind(this), this.handleGetRun.bind(this));
|
|
60
|
+
router.post('/runs/:runId/trigger', this.handleTrigger.bind(this));
|
|
61
|
+
this.app.use(router.routes());
|
|
62
|
+
this.app.use(router.allowedMethods());
|
|
63
|
+
}
|
|
64
|
+
async start() {
|
|
65
|
+
return new Promise((resolve, reject) => {
|
|
66
|
+
this.server = http_1.default.createServer(this.app.callback());
|
|
67
|
+
this.server.once('error', reject);
|
|
68
|
+
this.server.listen(this.options.port, resolve);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
async stop() {
|
|
72
|
+
return new Promise((resolve, reject) => {
|
|
73
|
+
if (!this.server) {
|
|
74
|
+
resolve();
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
this.server.close(err => {
|
|
78
|
+
if (err) {
|
|
79
|
+
reject(err);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
this.server = null;
|
|
83
|
+
resolve();
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
get callback() {
|
|
89
|
+
return this.app.callback();
|
|
90
|
+
}
|
|
91
|
+
async hasRunAccessMiddleware(ctx, next) {
|
|
92
|
+
const user = ctx.state.user;
|
|
93
|
+
try {
|
|
94
|
+
const allowed = await this.options.workflowPort.hasRunAccess(ctx.params.runId, user);
|
|
95
|
+
if (!allowed) {
|
|
96
|
+
ctx.status = 403;
|
|
97
|
+
ctx.body = { error: 'Forbidden' };
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
this.logger.error('Failed to check run access', {
|
|
103
|
+
runId: ctx.params.runId,
|
|
104
|
+
method: ctx.method,
|
|
105
|
+
path: ctx.path,
|
|
106
|
+
error: (0, errors_1.extractErrorMessage)(err),
|
|
107
|
+
stack: err instanceof Error ? err.stack : undefined,
|
|
108
|
+
});
|
|
109
|
+
ctx.status = 503;
|
|
110
|
+
ctx.body = { error: 'Service unavailable' };
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
await next();
|
|
114
|
+
}
|
|
115
|
+
async handleGetRun(ctx) {
|
|
116
|
+
const steps = await this.options.runner.getRunStepExecutions(ctx.params.runId);
|
|
117
|
+
ctx.body = { steps: steps.map(step_serializer_1.default) };
|
|
118
|
+
}
|
|
119
|
+
async handleTrigger(ctx) {
|
|
120
|
+
const { runId } = ctx.params;
|
|
121
|
+
const rawId = ctx.state.user?.id;
|
|
122
|
+
const bearerUserId = typeof rawId === 'number' ? rawId : Number(rawId);
|
|
123
|
+
if (!Number.isFinite(bearerUserId)) {
|
|
124
|
+
ctx.status = 400;
|
|
125
|
+
ctx.body = { error: 'Missing or invalid user id in token' };
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const pendingData = ctx.request.body?.pendingData;
|
|
129
|
+
try {
|
|
130
|
+
await this.options.runner.triggerPoll(runId, {
|
|
131
|
+
pendingData,
|
|
132
|
+
bearerUserId,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
if (err instanceof errors_1.RunNotFoundError) {
|
|
137
|
+
ctx.status = 404;
|
|
138
|
+
ctx.body = { error: 'Run not found or unavailable' };
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
if (err instanceof errors_1.RunAlreadyInFlightError) {
|
|
142
|
+
ctx.status = 400;
|
|
143
|
+
ctx.body = { error: err.message };
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (err instanceof errors_1.UserMismatchError) {
|
|
147
|
+
this.logger.error('User mismatch on trigger', { runId, bearerUserId });
|
|
148
|
+
ctx.status = 403;
|
|
149
|
+
ctx.body = { error: 'Forbidden' };
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (err instanceof errors_1.WorkflowExecutorError) {
|
|
153
|
+
this.logger.error('Malformed run on trigger', {
|
|
154
|
+
runId,
|
|
155
|
+
bearerUserId,
|
|
156
|
+
error: (0, errors_1.extractErrorMessage)(err),
|
|
157
|
+
stack: err.stack,
|
|
158
|
+
});
|
|
159
|
+
ctx.status = 400;
|
|
160
|
+
ctx.body = { error: err.userMessage };
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
throw err;
|
|
164
|
+
}
|
|
165
|
+
ctx.status = 200;
|
|
166
|
+
ctx.body = { triggered: true };
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
exports.default = ExecutorHttpServer;
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0b3ItaHR0cC1zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaHR0cC9leGVjdXRvci1odHRwLXNlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQU1BLGlFQUF5QztBQUN6Qyx5REFBaUM7QUFDakMsZ0RBQXdCO0FBQ3hCLDhDQUFzQjtBQUN0QixzREFBNkI7QUFFN0Isd0VBQXFEO0FBQ3JELGdGQUF1RDtBQUN2RCxzQ0FNbUI7QUFVbkIsTUFBcUIsa0JBQWtCO0lBTXJDLFlBQVksT0FBa0M7UUFGdEMsV0FBTSxHQUFrQixJQUFJLENBQUM7UUFHbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksd0JBQWEsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxhQUFHLEVBQUUsQ0FBQztRQUVyQix3RkFBd0Y7UUFDeEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUMvQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUNmLENBQUM7WUFBQyxPQUFPLEdBQVksRUFBRSxDQUFDO2dCQUN0QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBMEIsQ0FBQztnQkFFOUMsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQ25CLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO29CQUNqQixHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDO29CQUVyQyxPQUFPO2dCQUNULENBQUM7Z0JBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUU7b0JBQ3hDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtvQkFD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
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
declare const updateRecordPatchSchema: z.ZodObject<{
|
|
3
|
+
userConfirmed: z.ZodBoolean;
|
|
4
|
+
value: z.ZodOptional<z.ZodUnknown>;
|
|
5
|
+
}, z.core.$strict>;
|
|
6
|
+
declare const triggerActionPatchSchema: z.ZodObject<{
|
|
7
|
+
userConfirmed: z.ZodBoolean;
|
|
8
|
+
actionResult: z.ZodOptional<z.ZodUnknown>;
|
|
9
|
+
}, z.core.$strict>;
|
|
10
|
+
declare const mcpPatchSchema: z.ZodObject<{
|
|
11
|
+
userConfirmed: z.ZodBoolean;
|
|
12
|
+
}, z.core.$strict>;
|
|
13
|
+
declare const loadRelatedRecordPatchSchema: z.ZodObject<{
|
|
14
|
+
userConfirmed: z.ZodOptional<z.ZodBoolean>;
|
|
15
|
+
fieldName: z.ZodOptional<z.ZodString>;
|
|
16
|
+
selectedRecordId: z.ZodOptional<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string[], string>>, z.ZodArray<z.ZodString>>>;
|
|
17
|
+
}, z.core.$strict>;
|
|
18
|
+
export type UpdateRecordConfirmation = z.infer<typeof updateRecordPatchSchema>;
|
|
19
|
+
export type TriggerActionConfirmation = z.infer<typeof triggerActionPatchSchema>;
|
|
20
|
+
export type McpConfirmation = z.infer<typeof mcpPatchSchema>;
|
|
21
|
+
export type LoadRelatedRecordConfirmation = z.infer<typeof loadRelatedRecordPatchSchema>;
|
|
22
|
+
type PatchableStepType = 'update-record' | 'trigger-action' | 'mcp' | 'load-related-record' | 'guidance' | 'condition';
|
|
23
|
+
declare const patchBodySchemas: Partial<Record<PatchableStepType, z.ZodTypeAny>>;
|
|
24
|
+
export default patchBodySchemas;
|
|
25
|
+
//# sourceMappingURL=pending-data-validators.d.ts.map
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const zod_1 = require("zod");
|
|
4
|
+
const record_id_serializer_1 = require("../adapters/record-id-serializer");
|
|
5
|
+
// Per-step-type schemas for the userConfirmation payload sent by the front via
|
|
6
|
+
// POST /runs/:runId/trigger. Validated into `execution.userConfirmation`; schemas
|
|
7
|
+
// use .strict() to reject unknown fields.
|
|
8
|
+
const updateRecordPatchSchema = zod_1.z
|
|
9
|
+
.object({
|
|
10
|
+
userConfirmed: zod_1.z.boolean(),
|
|
11
|
+
value: zod_1.z.unknown().optional(),
|
|
12
|
+
})
|
|
13
|
+
.strict();
|
|
14
|
+
const triggerActionPatchSchema = zod_1.z
|
|
15
|
+
.object({
|
|
16
|
+
userConfirmed: zod_1.z.boolean(),
|
|
17
|
+
// Opaque action result from the frontend. Required when userConfirmed=true; the
|
|
18
|
+
// presence check lives in the step-executor so a descriptive StepStateError can
|
|
19
|
+
// name the runId/stepIndex — not achievable from inside a zod schema.
|
|
20
|
+
actionResult: zod_1.z.unknown().optional(),
|
|
21
|
+
})
|
|
22
|
+
.strict();
|
|
23
|
+
const mcpPatchSchema = zod_1.z.object({ userConfirmed: zod_1.z.boolean() }).strict();
|
|
24
|
+
// Accepts two shapes:
|
|
25
|
+
// 1. Confirmation patch: `userConfirmed: boolean` (+ optional overrides) — finalizes
|
|
26
|
+
// the step or skips it.
|
|
27
|
+
// 2. Field-preview patch: `fieldName: string` alone, with `userConfirmed` omitted —
|
|
28
|
+
// asks the executor to re-list candidates for a different relation WITHOUT
|
|
29
|
+
// finalizing. The executor refreshes pendingData and stays awaiting-input.
|
|
30
|
+
// Required when the frontend lets the user switch relations: the IDs originally
|
|
31
|
+
// stored under `availableRecordIds` belong to the AI-suggested relation only.
|
|
32
|
+
const loadRelatedRecordPatchSchema = zod_1.z
|
|
33
|
+
.object({
|
|
34
|
+
userConfirmed: zod_1.z.boolean().optional(),
|
|
35
|
+
// User may intentionally switch to a different relation than the one the AI selected.
|
|
36
|
+
// Sent as the technical fieldName (matches CollectionSchemaField.fieldName from the
|
|
37
|
+
// orchestrator); the executor re-derives displayName + relatedCollectionName from
|
|
38
|
+
// the live schema when processing the confirmation.
|
|
39
|
+
fieldName: zod_1.z.string().min(1).optional(),
|
|
40
|
+
// User may override the AI-selected record; pipe-separated string (e.g. 'id1|id2'),
|
|
41
|
+
// deserialized to an id array. Required when confirming with a relation override —
|
|
42
|
+
// the original record ID belongs to a different collection and cannot be reused.
|
|
43
|
+
// The .pipe(...) rejects empty segments that would build a bogus PK.
|
|
44
|
+
selectedRecordId: zod_1.z
|
|
45
|
+
.string()
|
|
46
|
+
.min(1)
|
|
47
|
+
.transform(record_id_serializer_1.deserializeRecordId)
|
|
48
|
+
.pipe(zod_1.z.array(zod_1.z.string().min(1)))
|
|
49
|
+
.optional(),
|
|
50
|
+
})
|
|
51
|
+
.strict()
|
|
52
|
+
.refine(data => {
|
|
53
|
+
// Preview patch (no confirm): fieldName alone is sufficient.
|
|
54
|
+
if (data.userConfirmed === undefined)
|
|
55
|
+
return data.fieldName !== undefined;
|
|
56
|
+
// Confirm patch with relation override: selectedRecordId required.
|
|
57
|
+
if (data.fieldName !== undefined)
|
|
58
|
+
return data.selectedRecordId !== undefined;
|
|
59
|
+
return true;
|
|
60
|
+
}, {
|
|
61
|
+
message: 'selectedRecordId is required when confirming with a relation override, ' +
|
|
62
|
+
'or omit userConfirmed to preview candidates for a different relation',
|
|
63
|
+
});
|
|
64
|
+
const guidancePatchSchema = zod_1.z
|
|
65
|
+
.object({
|
|
66
|
+
userInput: zod_1.z.string().optional(),
|
|
67
|
+
})
|
|
68
|
+
.strict();
|
|
69
|
+
const conditionPatchSchema = zod_1.z.object({ selectedOption: zod_1.z.string() }).strict();
|
|
70
|
+
const patchBodySchemas = {
|
|
71
|
+
'update-record': updateRecordPatchSchema,
|
|
72
|
+
'trigger-action': triggerActionPatchSchema,
|
|
73
|
+
mcp: mcpPatchSchema,
|
|
74
|
+
'load-related-record': loadRelatedRecordPatchSchema,
|
|
75
|
+
guidance: guidancePatchSchema,
|
|
76
|
+
condition: conditionPatchSchema,
|
|
77
|
+
};
|
|
78
|
+
exports.default = patchBodySchemas;
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZy1kYXRhLXZhbGlkYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaHR0cC9wZW5kaW5nLWRhdGEtdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUF3QjtBQUV4QiwyRUFBdUU7QUFFdkUsK0VBQStFO0FBQy9FLGtGQUFrRjtBQUNsRiwwQ0FBMEM7QUFFMUMsTUFBTSx1QkFBdUIsR0FBRyxPQUFDO0tBQzlCLE1BQU0sQ0FBQztJQUNOLGFBQWEsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFO0lBQzFCLEtBQUssRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzlCLENBQUM7S0FDRCxNQUFNLEVBQUUsQ0FBQztBQUVaLE1BQU0sd0JBQXdCLEdBQUcsT0FBQztLQUMvQixNQUFNLENBQUM7SUFDTixhQUFhLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRTtJQUMxQixnRkFBZ0Y7SUFDaEYsZ0ZBQWdGO0lBQ2hGLHNFQUFzRTtJQUN0RSxZQUFZLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNyQyxDQUFDO0tBQ0QsTUFBTSxFQUFFLENBQUM7QUFFWixNQUFNLGNBQWMsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFFekUsc0JBQXNCO0FBQ3RCLHVGQUF1RjtBQUN2Riw2QkFBNkI7QUFDN0Isc0ZBQXNGO0FBQ3RGLGdGQUFnRjtBQUNoRixnRkFBZ0Y7QUFDaEYscUZBQXFGO0FBQ3JGLG1GQUFtRjtBQUNuRixNQUFNLDRCQUE0QixHQUFHLE9BQUM7S0FDbkMsTUFBTSxDQUFDO0lBQ04sYUFBYSxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDckMsc0ZBQXNGO0lBQ3RGLG9GQUFvRjtJQUNwRixrRkFBa0Y7SUFDbEYsb0RBQW9EO0lBQ3BELFNBQVMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN2QyxvRkFBb0Y7SUFDcEYsbUZBQW1GO0lBQ25GLGlGQUFpRjtJQUNqRixxRUFBcUU7SUFDckUsZ0JBQWdCLEVBQUUsT0FBQztTQUNoQixNQUFNLEVBQUU7U0FDUixHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ04sU0FBUyxDQUFDLDBDQUFtQixDQUFDO1NBQzlCLElBQUksQ0FBQyxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoQyxRQUFRLEVBQUU7Q0FDZCxDQUFDO0tBQ0QsTUFBTSxFQUFFO0tBQ1IsTUFBTSxDQUNMLElBQUksQ0FBQyxFQUFFO0lBQ0wsNkRBQTZEO0lBQzdELElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTO1FBQUUsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQztJQUMxRSxtRUFBbUU7SUFDbkUsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVM7UUFBRSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLENBQUM7SUFFN0UsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLEVBQ0Q7SUFDRSxPQUFPLEVBQ0wseUVBQXlFO1FBQ3pFLHNFQUFzRTtDQUN6RSxDQUNGLENBQUM7QUFDSixNQUFNLG1CQUFtQixHQUFHLE9BQUM7S0FDMUIsTUFBTSxDQUFDO0lBQ04sU0FBUyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDakMsQ0FBQztLQUNELE1BQU0sRUFBRSxDQUFDO0FBRVosTUFBTSxvQkFBb0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsY0FBYyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFpQi9FLE1BQU0sZ0JBQWdCLEdBQXFEO0lBQ3pFLGVBQWUsRUFBRSx1QkFBdUI7SUFDeEMsZ0JBQWdCLEVBQUUsd0JBQXdCO0lBQzFDLEdBQUcsRUFBRSxjQUFjO0lBQ25CLHFCQUFxQixFQUFFLDRCQUE0QjtJQUNuRCxRQUFRLEVBQUUsbUJBQW1CO0lBQzdCLFNBQVMsRUFBRSxvQkFBb0I7Q0FDaEMsQ0FBQztBQUVGLGtCQUFlLGdCQUFnQixDQUFDIn0=
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = serializeStepForWire;
|
|
4
|
+
const record_id_serializer_1 = require("../adapters/record-id-serializer");
|
|
5
|
+
function serializeRecordRef(ref) {
|
|
6
|
+
return { ...ref, recordId: (0, record_id_serializer_1.serializeRecordId)(ref.recordId) };
|
|
7
|
+
}
|
|
8
|
+
function serializeStepForWire(step) {
|
|
9
|
+
switch (step.type) {
|
|
10
|
+
case 'read-record':
|
|
11
|
+
case 'update-record':
|
|
12
|
+
case 'trigger-action':
|
|
13
|
+
return { ...step, selectedRecordRef: serializeRecordRef(step.selectedRecordRef) };
|
|
14
|
+
case 'load-related-record': {
|
|
15
|
+
const result = {
|
|
16
|
+
...step,
|
|
17
|
+
selectedRecordRef: serializeRecordRef(step.selectedRecordRef),
|
|
18
|
+
};
|
|
19
|
+
if (step.pendingData) {
|
|
20
|
+
const { availableRecordIds, suggestedRecord } = step.pendingData;
|
|
21
|
+
result.pendingData = {
|
|
22
|
+
...step.pendingData,
|
|
23
|
+
availableRecordIds: availableRecordIds.map(c => ({
|
|
24
|
+
...c,
|
|
25
|
+
recordId: (0, record_id_serializer_1.serializeRecordId)(c.recordId),
|
|
26
|
+
})),
|
|
27
|
+
...(suggestedRecord && {
|
|
28
|
+
suggestedRecord: {
|
|
29
|
+
...suggestedRecord,
|
|
30
|
+
recordId: (0, record_id_serializer_1.serializeRecordId)(suggestedRecord.recordId),
|
|
31
|
+
},
|
|
32
|
+
}),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (step.executionResult && 'record' in step.executionResult) {
|
|
36
|
+
result.executionResult = {
|
|
37
|
+
...step.executionResult,
|
|
38
|
+
record: serializeRecordRef(step.executionResult.record),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
default:
|
|
44
|
+
return step;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1zZXJpYWxpemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2h0dHAvc3RlcC1zZXJpYWxpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBU0EsdUNBNENDO0FBbERELDJFQUFxRTtBQUVyRSxTQUFTLGtCQUFrQixDQUFDLEdBQWM7SUFDeEMsT0FBTyxFQUFFLEdBQUcsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFBLHdDQUFpQixFQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQy9ELENBQUM7QUFFRCxTQUF3QixvQkFBb0IsQ0FBQyxJQUF1QjtJQUNsRSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixLQUFLLGFBQWEsQ0FBQztRQUNuQixLQUFLLGVBQWUsQ0FBQztRQUNyQixLQUFLLGdCQUFnQjtZQUNuQixPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztRQUVwRixLQUFLLHFCQUFxQixDQUFDLENBQUMsQ0FBQztZQUMzQixNQUFNLE1BQU0sR0FBNEI7Z0JBQ3RDLEdBQUcsSUFBSTtnQkFDUCxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7YUFDOUQsQ0FBQztZQUVGLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNyQixNQUFNLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFFakUsTUFBTSxDQUFDLFdBQVcsR0FBRztvQkFDbkIsR0FBRyxJQUFJLENBQUMsV0FBVztvQkFDbkIsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDL0MsR0FBRyxDQUFDO3dCQUNKLFFBQVEsRUFBRSxJQUFBLHdDQUFpQixFQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7cUJBQ3hDLENBQUMsQ0FBQztvQkFDSCxHQUFHLENBQUMsZUFBZSxJQUFJO3dCQUNyQixlQUFlLEVBQUU7NEJBQ2YsR0FBRyxlQUFlOzRCQUNsQixRQUFRLEVBQUUsSUFBQSx3Q0FBaUIsRUFBQyxlQUFlLENBQUMsUUFBUSxDQUFDO3lCQUN0RDtxQkFDRixDQUFDO2lCQUNILENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQzdELE1BQU0sQ0FBQyxlQUFlLEdBQUc7b0JBQ3ZCLEdBQUcsSUFBSSxDQUFDLGVBQWU7b0JBQ3ZCLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztpQkFDeEQsQ0FBQztZQUNKLENBQUM7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBRUQ7WUFDRSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0FBQ0gsQ0FBQyJ9
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export default class InFlightRunRegistry {
|
|
2
|
+
private readonly runs;
|
|
3
|
+
get size(): number;
|
|
4
|
+
keys(): string[];
|
|
5
|
+
has(runId: string): boolean;
|
|
6
|
+
track(runId: string, promise: Promise<void>): Promise<void>;
|
|
7
|
+
drain(): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=in-flight-run-registry.d.ts.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
// Tracks promises for runs currently executing (including their full auto-chain).
|
|
4
|
+
// Keyed by runId — a run has one available step at a time, and a chain advances the stepId
|
|
5
|
+
// between iterations. Keying by runId keeps the dedup guarantee across the whole chain.
|
|
6
|
+
class InFlightRunRegistry {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.runs = new Map();
|
|
9
|
+
}
|
|
10
|
+
get size() {
|
|
11
|
+
return this.runs.size;
|
|
12
|
+
}
|
|
13
|
+
keys() {
|
|
14
|
+
return [...this.runs.keys()];
|
|
15
|
+
}
|
|
16
|
+
has(runId) {
|
|
17
|
+
return this.runs.has(runId);
|
|
18
|
+
}
|
|
19
|
+
// Registers the promise and automatically removes the entry when it settles.
|
|
20
|
+
track(runId, promise) {
|
|
21
|
+
const tracked = promise.finally(() => this.runs.delete(runId));
|
|
22
|
+
this.runs.set(runId, tracked);
|
|
23
|
+
return tracked;
|
|
24
|
+
}
|
|
25
|
+
drain() {
|
|
26
|
+
return Promise.allSettled(this.runs.values()).then(() => { });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.default = InFlightRunRegistry;
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW4tZmxpZ2h0LXJ1bi1yZWdpc3RyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbi1mbGlnaHQtcnVuLXJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsa0ZBQWtGO0FBQ2xGLDJGQUEyRjtBQUMzRix3RkFBd0Y7QUFDeEYsTUFBcUIsbUJBQW1CO0lBQXhDO1FBQ21CLFNBQUksR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztJQXlCM0QsQ0FBQztJQXZCQyxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJO1FBQ0YsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxHQUFHLENBQUMsS0FBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELDZFQUE2RTtJQUM3RSxLQUFLLENBQUMsS0FBYSxFQUFFLE9BQXNCO1FBQ3pDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFOUIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUs7UUFDSCxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0NBQ0Y7QUExQkQsc0NBMEJDIn0=
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export { StepType } from './types/validated/step-definition';
|
|
2
|
+
export type { ConditionStepDefinition, ReadRecordStepDefinition, UpdateRecordStepDefinition, TriggerActionStepDefinition, LoadRelatedRecordStepDefinition, RecordStepDefinition, McpStepDefinition, GuidanceStepDefinition, StepDefinition, } from './types/validated/step-definition';
|
|
3
|
+
export type { StepStatus, ConditionStepOutcome, RecordStepOutcome, McpStepOutcome, GuidanceStepOutcome, StepOutcome, } from './types/validated/step-outcome';
|
|
4
|
+
export type { FieldReadSuccess, FieldReadError, FieldReadResult, ActionRef, RelationRef, FieldRef, ConditionStepExecutionData, ReadRecordStepExecutionData, UpdateRecordStepExecutionData, TriggerRecordActionStepExecutionData, RecordStepExecutionData, LoadRelatedRecordPendingData, LoadRelatedRecordStepExecutionData, McpToolRef, McpToolCall, McpStepExecutionData, GuidanceStepExecutionData, ExecutedStepExecutionData, StepExecutionData, } from './types/step-execution-data';
|
|
5
|
+
export type { FieldSchema, ActionSchema, CollectionSchema, RecordRef, RecordData, } from './types/validated/collection';
|
|
6
|
+
export type { StepUser, Step, AvailableStepExecution, StepExecutionResult, ExecutionContext, } from './types/execution-context';
|
|
7
|
+
export type { AgentPort, ExecuteActionQuery, GetActionFormInfoQuery, GetRecordQuery, GetRelatedDataQuery, Id, Limit, UpdateRecordQuery, } from './ports/agent-port';
|
|
8
|
+
export type { WorkflowPort } from './ports/workflow-port';
|
|
9
|
+
export type { RunStore } from './ports/run-store';
|
|
10
|
+
export type { Logger } from './ports/logger-port';
|
|
11
|
+
export { default as ConsoleLogger } from './adapters/console-logger';
|
|
12
|
+
export { WorkflowExecutorError, MissingToolCallError, MalformedToolCallError, RecordNotFoundError, NoRecordsError, NoReadableFieldsError, NoResolvedFieldsError, NoWritableFieldsError, NoActionsError, NoRelationshipFieldsError, RelatedRecordNotFoundError, InvalidAIResponseError, InvalidAiRequestError, RelationNotFoundError, FieldNotFoundError, ActionNotFoundError, StepStateError, NoMcpToolsError, McpToolNotFoundError, McpToolInvocationError, AgentPortError, WorkflowPortError, RunStorePortError, AiModelPortError, AgentProbeError, ConfigurationError, InvalidPreRecordedArgsError, UnsupportedStepTypeError, UnsupportedActionFormError, InvalidStepDefinitionError, DomainValidationError, } from './errors';
|
|
13
|
+
export { default as BaseStepExecutor } from './executors/base-step-executor';
|
|
14
|
+
export { default as ConditionStepExecutor } from './executors/condition-step-executor';
|
|
15
|
+
export { default as ReadRecordStepExecutor } from './executors/read-record-step-executor';
|
|
16
|
+
export { default as UpdateRecordStepExecutor } from './executors/update-record-step-executor';
|
|
17
|
+
export { default as TriggerRecordActionStepExecutor } from './executors/trigger-record-action-step-executor';
|
|
18
|
+
export { default as LoadRelatedRecordStepExecutor } from './executors/load-related-record-step-executor';
|
|
19
|
+
export { default as McpStepExecutor } from './executors/mcp-step-executor';
|
|
20
|
+
export { default as GuidanceStepExecutor } from './executors/guidance-step-executor';
|
|
21
|
+
export { default as AgentClientAgentPort } from './adapters/agent-client-agent-port';
|
|
22
|
+
export { default as ForestServerWorkflowPort } from './adapters/forest-server-workflow-port';
|
|
23
|
+
export { default as ExecutorHttpServer } from './http/executor-http-server';
|
|
24
|
+
export type { ExecutorHttpServerOptions } from './http/executor-http-server';
|
|
25
|
+
export { default as Runner } from './runner';
|
|
26
|
+
export type { RunnerConfig, RunnerState } from './runner';
|
|
27
|
+
export { default as validateSecrets } from './validate-secrets';
|
|
28
|
+
export { default as SchemaCache } from './schema-cache';
|
|
29
|
+
export { default as SchemaResolver } from './schema-resolver';
|
|
30
|
+
export { default as InMemoryStore } from './stores/in-memory-store';
|
|
31
|
+
export { default as DatabaseStore } from './stores/database-store';
|
|
32
|
+
export type { DatabaseStoreOptions } from './stores/database-store';
|
|
33
|
+
export { buildDatabaseRunStore, buildInMemoryRunStore } from './stores/build-run-store';
|
|
34
|
+
export { buildInMemoryExecutor, buildDatabaseExecutor } from './build-workflow-executor';
|
|
35
|
+
export { runCli } from './cli-core';
|
|
36
|
+
export { default as PrettyLogger } from './adapters/pretty-logger';
|
|
37
|
+
export type { WorkflowExecutor, ExecutorOptions, DatabaseExecutorOptions, } from './build-workflow-executor';
|
|
38
|
+
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
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
|
+
exports.DatabaseStore = exports.InMemoryStore = exports.SchemaResolver = exports.SchemaCache = exports.validateSecrets = exports.Runner = exports.ExecutorHttpServer = exports.ForestServerWorkflowPort = exports.AgentClientAgentPort = exports.GuidanceStepExecutor = exports.McpStepExecutor = exports.LoadRelatedRecordStepExecutor = exports.TriggerRecordActionStepExecutor = exports.UpdateRecordStepExecutor = exports.ReadRecordStepExecutor = exports.ConditionStepExecutor = exports.BaseStepExecutor = exports.DomainValidationError = exports.InvalidStepDefinitionError = exports.UnsupportedActionFormError = exports.UnsupportedStepTypeError = exports.InvalidPreRecordedArgsError = exports.ConfigurationError = exports.AgentProbeError = exports.AiModelPortError = exports.RunStorePortError = exports.WorkflowPortError = exports.AgentPortError = exports.McpToolInvocationError = exports.McpToolNotFoundError = exports.NoMcpToolsError = exports.StepStateError = exports.ActionNotFoundError = exports.FieldNotFoundError = exports.RelationNotFoundError = exports.InvalidAiRequestError = exports.InvalidAIResponseError = exports.RelatedRecordNotFoundError = exports.NoRelationshipFieldsError = exports.NoActionsError = exports.NoWritableFieldsError = exports.NoResolvedFieldsError = exports.NoReadableFieldsError = exports.NoRecordsError = exports.RecordNotFoundError = exports.MalformedToolCallError = exports.MissingToolCallError = exports.WorkflowExecutorError = exports.ConsoleLogger = exports.StepType = void 0;
|
|
7
|
+
exports.PrettyLogger = exports.runCli = exports.buildDatabaseExecutor = exports.buildInMemoryExecutor = exports.buildInMemoryRunStore = exports.buildDatabaseRunStore = void 0;
|
|
8
|
+
var step_definition_1 = require("./types/validated/step-definition");
|
|
9
|
+
Object.defineProperty(exports, "StepType", { enumerable: true, get: function () { return step_definition_1.StepType; } });
|
|
10
|
+
var console_logger_1 = require("./adapters/console-logger");
|
|
11
|
+
Object.defineProperty(exports, "ConsoleLogger", { enumerable: true, get: function () { return __importDefault(console_logger_1).default; } });
|
|
12
|
+
var errors_1 = require("./errors");
|
|
13
|
+
Object.defineProperty(exports, "WorkflowExecutorError", { enumerable: true, get: function () { return errors_1.WorkflowExecutorError; } });
|
|
14
|
+
Object.defineProperty(exports, "MissingToolCallError", { enumerable: true, get: function () { return errors_1.MissingToolCallError; } });
|
|
15
|
+
Object.defineProperty(exports, "MalformedToolCallError", { enumerable: true, get: function () { return errors_1.MalformedToolCallError; } });
|
|
16
|
+
Object.defineProperty(exports, "RecordNotFoundError", { enumerable: true, get: function () { return errors_1.RecordNotFoundError; } });
|
|
17
|
+
Object.defineProperty(exports, "NoRecordsError", { enumerable: true, get: function () { return errors_1.NoRecordsError; } });
|
|
18
|
+
Object.defineProperty(exports, "NoReadableFieldsError", { enumerable: true, get: function () { return errors_1.NoReadableFieldsError; } });
|
|
19
|
+
Object.defineProperty(exports, "NoResolvedFieldsError", { enumerable: true, get: function () { return errors_1.NoResolvedFieldsError; } });
|
|
20
|
+
Object.defineProperty(exports, "NoWritableFieldsError", { enumerable: true, get: function () { return errors_1.NoWritableFieldsError; } });
|
|
21
|
+
Object.defineProperty(exports, "NoActionsError", { enumerable: true, get: function () { return errors_1.NoActionsError; } });
|
|
22
|
+
Object.defineProperty(exports, "NoRelationshipFieldsError", { enumerable: true, get: function () { return errors_1.NoRelationshipFieldsError; } });
|
|
23
|
+
Object.defineProperty(exports, "RelatedRecordNotFoundError", { enumerable: true, get: function () { return errors_1.RelatedRecordNotFoundError; } });
|
|
24
|
+
Object.defineProperty(exports, "InvalidAIResponseError", { enumerable: true, get: function () { return errors_1.InvalidAIResponseError; } });
|
|
25
|
+
Object.defineProperty(exports, "InvalidAiRequestError", { enumerable: true, get: function () { return errors_1.InvalidAiRequestError; } });
|
|
26
|
+
Object.defineProperty(exports, "RelationNotFoundError", { enumerable: true, get: function () { return errors_1.RelationNotFoundError; } });
|
|
27
|
+
Object.defineProperty(exports, "FieldNotFoundError", { enumerable: true, get: function () { return errors_1.FieldNotFoundError; } });
|
|
28
|
+
Object.defineProperty(exports, "ActionNotFoundError", { enumerable: true, get: function () { return errors_1.ActionNotFoundError; } });
|
|
29
|
+
Object.defineProperty(exports, "StepStateError", { enumerable: true, get: function () { return errors_1.StepStateError; } });
|
|
30
|
+
Object.defineProperty(exports, "NoMcpToolsError", { enumerable: true, get: function () { return errors_1.NoMcpToolsError; } });
|
|
31
|
+
Object.defineProperty(exports, "McpToolNotFoundError", { enumerable: true, get: function () { return errors_1.McpToolNotFoundError; } });
|
|
32
|
+
Object.defineProperty(exports, "McpToolInvocationError", { enumerable: true, get: function () { return errors_1.McpToolInvocationError; } });
|
|
33
|
+
Object.defineProperty(exports, "AgentPortError", { enumerable: true, get: function () { return errors_1.AgentPortError; } });
|
|
34
|
+
Object.defineProperty(exports, "WorkflowPortError", { enumerable: true, get: function () { return errors_1.WorkflowPortError; } });
|
|
35
|
+
Object.defineProperty(exports, "RunStorePortError", { enumerable: true, get: function () { return errors_1.RunStorePortError; } });
|
|
36
|
+
Object.defineProperty(exports, "AiModelPortError", { enumerable: true, get: function () { return errors_1.AiModelPortError; } });
|
|
37
|
+
Object.defineProperty(exports, "AgentProbeError", { enumerable: true, get: function () { return errors_1.AgentProbeError; } });
|
|
38
|
+
Object.defineProperty(exports, "ConfigurationError", { enumerable: true, get: function () { return errors_1.ConfigurationError; } });
|
|
39
|
+
Object.defineProperty(exports, "InvalidPreRecordedArgsError", { enumerable: true, get: function () { return errors_1.InvalidPreRecordedArgsError; } });
|
|
40
|
+
Object.defineProperty(exports, "UnsupportedStepTypeError", { enumerable: true, get: function () { return errors_1.UnsupportedStepTypeError; } });
|
|
41
|
+
Object.defineProperty(exports, "UnsupportedActionFormError", { enumerable: true, get: function () { return errors_1.UnsupportedActionFormError; } });
|
|
42
|
+
Object.defineProperty(exports, "InvalidStepDefinitionError", { enumerable: true, get: function () { return errors_1.InvalidStepDefinitionError; } });
|
|
43
|
+
Object.defineProperty(exports, "DomainValidationError", { enumerable: true, get: function () { return errors_1.DomainValidationError; } });
|
|
44
|
+
var base_step_executor_1 = require("./executors/base-step-executor");
|
|
45
|
+
Object.defineProperty(exports, "BaseStepExecutor", { enumerable: true, get: function () { return __importDefault(base_step_executor_1).default; } });
|
|
46
|
+
var condition_step_executor_1 = require("./executors/condition-step-executor");
|
|
47
|
+
Object.defineProperty(exports, "ConditionStepExecutor", { enumerable: true, get: function () { return __importDefault(condition_step_executor_1).default; } });
|
|
48
|
+
var read_record_step_executor_1 = require("./executors/read-record-step-executor");
|
|
49
|
+
Object.defineProperty(exports, "ReadRecordStepExecutor", { enumerable: true, get: function () { return __importDefault(read_record_step_executor_1).default; } });
|
|
50
|
+
var update_record_step_executor_1 = require("./executors/update-record-step-executor");
|
|
51
|
+
Object.defineProperty(exports, "UpdateRecordStepExecutor", { enumerable: true, get: function () { return __importDefault(update_record_step_executor_1).default; } });
|
|
52
|
+
var trigger_record_action_step_executor_1 = require("./executors/trigger-record-action-step-executor");
|
|
53
|
+
Object.defineProperty(exports, "TriggerRecordActionStepExecutor", { enumerable: true, get: function () { return __importDefault(trigger_record_action_step_executor_1).default; } });
|
|
54
|
+
var load_related_record_step_executor_1 = require("./executors/load-related-record-step-executor");
|
|
55
|
+
Object.defineProperty(exports, "LoadRelatedRecordStepExecutor", { enumerable: true, get: function () { return __importDefault(load_related_record_step_executor_1).default; } });
|
|
56
|
+
var mcp_step_executor_1 = require("./executors/mcp-step-executor");
|
|
57
|
+
Object.defineProperty(exports, "McpStepExecutor", { enumerable: true, get: function () { return __importDefault(mcp_step_executor_1).default; } });
|
|
58
|
+
var guidance_step_executor_1 = require("./executors/guidance-step-executor");
|
|
59
|
+
Object.defineProperty(exports, "GuidanceStepExecutor", { enumerable: true, get: function () { return __importDefault(guidance_step_executor_1).default; } });
|
|
60
|
+
var agent_client_agent_port_1 = require("./adapters/agent-client-agent-port");
|
|
61
|
+
Object.defineProperty(exports, "AgentClientAgentPort", { enumerable: true, get: function () { return __importDefault(agent_client_agent_port_1).default; } });
|
|
62
|
+
var forest_server_workflow_port_1 = require("./adapters/forest-server-workflow-port");
|
|
63
|
+
Object.defineProperty(exports, "ForestServerWorkflowPort", { enumerable: true, get: function () { return __importDefault(forest_server_workflow_port_1).default; } });
|
|
64
|
+
var executor_http_server_1 = require("./http/executor-http-server");
|
|
65
|
+
Object.defineProperty(exports, "ExecutorHttpServer", { enumerable: true, get: function () { return __importDefault(executor_http_server_1).default; } });
|
|
66
|
+
var runner_1 = require("./runner");
|
|
67
|
+
Object.defineProperty(exports, "Runner", { enumerable: true, get: function () { return __importDefault(runner_1).default; } });
|
|
68
|
+
var validate_secrets_1 = require("./validate-secrets");
|
|
69
|
+
Object.defineProperty(exports, "validateSecrets", { enumerable: true, get: function () { return __importDefault(validate_secrets_1).default; } });
|
|
70
|
+
var schema_cache_1 = require("./schema-cache");
|
|
71
|
+
Object.defineProperty(exports, "SchemaCache", { enumerable: true, get: function () { return __importDefault(schema_cache_1).default; } });
|
|
72
|
+
var schema_resolver_1 = require("./schema-resolver");
|
|
73
|
+
Object.defineProperty(exports, "SchemaResolver", { enumerable: true, get: function () { return __importDefault(schema_resolver_1).default; } });
|
|
74
|
+
var in_memory_store_1 = require("./stores/in-memory-store");
|
|
75
|
+
Object.defineProperty(exports, "InMemoryStore", { enumerable: true, get: function () { return __importDefault(in_memory_store_1).default; } });
|
|
76
|
+
var database_store_1 = require("./stores/database-store");
|
|
77
|
+
Object.defineProperty(exports, "DatabaseStore", { enumerable: true, get: function () { return __importDefault(database_store_1).default; } });
|
|
78
|
+
var build_run_store_1 = require("./stores/build-run-store");
|
|
79
|
+
Object.defineProperty(exports, "buildDatabaseRunStore", { enumerable: true, get: function () { return build_run_store_1.buildDatabaseRunStore; } });
|
|
80
|
+
Object.defineProperty(exports, "buildInMemoryRunStore", { enumerable: true, get: function () { return build_run_store_1.buildInMemoryRunStore; } });
|
|
81
|
+
var build_workflow_executor_1 = require("./build-workflow-executor");
|
|
82
|
+
Object.defineProperty(exports, "buildInMemoryExecutor", { enumerable: true, get: function () { return build_workflow_executor_1.buildInMemoryExecutor; } });
|
|
83
|
+
Object.defineProperty(exports, "buildDatabaseExecutor", { enumerable: true, get: function () { return build_workflow_executor_1.buildDatabaseExecutor; } });
|
|
84
|
+
var cli_core_1 = require("./cli-core");
|
|
85
|
+
Object.defineProperty(exports, "runCli", { enumerable: true, get: function () { return cli_core_1.runCli; } });
|
|
86
|
+
var pretty_logger_1 = require("./adapters/pretty-logger");
|
|
87
|
+
Object.defineProperty(exports, "PrettyLogger", { enumerable: true, get: function () { return __importDefault(pretty_logger_1).default; } });
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLHFFQUE2RDtBQUFwRCwyR0FBQSxRQUFRLE9BQUE7QUF5RWpCLDREQUFxRTtBQUE1RCxnSUFBQSxPQUFPLE9BQWlCO0FBRWpDLG1DQWdDa0I7QUEvQmhCLCtHQUFBLHFCQUFxQixPQUFBO0FBQ3JCLDhHQUFBLG9CQUFvQixPQUFBO0FBQ3BCLGdIQUFBLHNCQUFzQixPQUFBO0FBQ3RCLDZHQUFBLG1CQUFtQixPQUFBO0FBQ25CLHdHQUFBLGNBQWMsT0FBQTtBQUNkLCtHQUFBLHFCQUFxQixPQUFBO0FBQ3JCLCtHQUFBLHFCQUFxQixPQUFBO0FBQ3JCLCtHQUFBLHFCQUFxQixPQUFBO0FBQ3JCLHdHQUFBLGNBQWMsT0FBQTtBQUNkLG1IQUFBLHlCQUF5QixPQUFBO0FBQ3pCLG9IQUFBLDBCQUEwQixPQUFBO0FBQzFCLGdIQUFBLHNCQUFzQixPQUFBO0FBQ3RCLCtHQUFBLHFCQUFxQixPQUFBO0FBQ3JCLCtHQUFBLHFCQUFxQixPQUFBO0FBQ3JCLDRHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLDZHQUFBLG1CQUFtQixPQUFBO0FBQ25CLHdHQUFBLGNBQWMsT0FBQTtBQUNkLHlHQUFBLGVBQWUsT0FBQTtBQUNmLDhHQUFBLG9CQUFvQixPQUFBO0FBQ3BCLGdIQUFBLHNCQUFzQixPQUFBO0FBQ3RCLHdHQUFBLGNBQWMsT0FBQTtBQUNkLDJHQUFBLGlCQUFpQixPQUFBO0FBQ2pCLDJHQUFBLGlCQUFpQixPQUFBO0FBQ2pCLDBHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLHlHQUFBLGVBQWUsT0FBQTtBQUNmLDRHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHFIQUFBLDJCQUEyQixPQUFBO0FBQzNCLGtIQUFBLHdCQUF3QixPQUFBO0FBQ3hCLG9IQUFBLDBCQUEwQixPQUFBO0FBQzFCLG9IQUFBLDBCQUEwQixPQUFBO0FBQzFCLCtHQUFBLHFCQUFxQixPQUFBO0FBRXZCLHFFQUE2RTtBQUFwRSx1SUFBQSxPQUFPLE9BQW9CO0FBQ3BDLCtFQUF1RjtBQUE5RSxpSkFBQSxPQUFPLE9BQXlCO0FBQ3pDLG1GQUEwRjtBQUFqRixvSkFBQSxPQUFPLE9BQTBCO0FBQzFDLHVGQUE4RjtBQUFyRix3SkFBQSxPQUFPLE9BQTRCO0FBQzVDLHVHQUE2RztBQUFwRyx1S0FBQSxPQUFPLE9BQW1DO0FBQ25ELG1HQUF5RztBQUFoRyxtS0FBQSxPQUFPLE9BQWlDO0FBQ2pELG1FQUEyRTtBQUFsRSxxSUFBQSxPQUFPLE9BQW1CO0FBQ25DLDZFQUFxRjtBQUE1RSwrSUFBQSxPQUFPLE9BQXdCO0FBQ3hDLDhFQUFxRjtBQUE1RSxnSkFBQSxPQUFPLE9BQXdCO0FBQ3hDLHNGQUE2RjtBQUFwRix3SkFBQSxPQUFPLE9BQTRCO0FBQzVDLG9FQUE0RTtBQUFuRSwySUFBQSxPQUFPLE9BQXNCO0FBRXRDLG1DQUE2QztBQUFwQyxpSEFBQSxPQUFPLE9BQVU7QUFFMUIsdURBQWdFO0FBQXZELG9JQUFBLE9BQU8sT0FBbUI7QUFDbkMsK0NBQXdEO0FBQS9DLDRIQUFBLE9BQU8sT0FBZTtBQUMvQixxREFBOEQ7QUFBckQsa0lBQUEsT0FBTyxPQUFrQjtBQUNsQyw0REFBb0U7QUFBM0QsaUlBQUEsT0FBTyxPQUFpQjtBQUNqQywwREFBbUU7QUFBMUQsZ0lBQUEsT0FBTyxPQUFpQjtBQUVqQyw0REFBd0Y7QUFBL0Usd0hBQUEscUJBQXFCLE9BQUE7QUFBRSx3SEFBQSxxQkFBcUIsT0FBQTtBQUNyRCxxRUFBeUY7QUFBaEYsZ0lBQUEscUJBQXFCLE9BQUE7QUFBRSxnSUFBQSxxQkFBcUIsT0FBQTtBQUNyRCx1Q0FBb0M7QUFBM0Isa0dBQUEsTUFBTSxPQUFBO0FBQ2YsMERBQW1FO0FBQTFELDhIQUFBLE9BQU8sT0FBZ0IifQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { RecordId } from '../types/validated/collection';
|
|
2
|
+
import type { ActivityLogAction, ActivityLogType } from '@forestadmin/forestadmin-client';
|
|
3
|
+
export interface CreateActivityLogArgs {
|
|
4
|
+
renderingId: number;
|
|
5
|
+
action: ActivityLogAction;
|
|
6
|
+
type: ActivityLogType;
|
|
7
|
+
collectionId: string;
|
|
8
|
+
recordId?: RecordId;
|
|
9
|
+
label?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ActivityLogHandle {
|
|
12
|
+
id: string;
|
|
13
|
+
index: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ActivityLogPort {
|
|
16
|
+
createPending(args: CreateActivityLogArgs): Promise<ActivityLogHandle>;
|
|
17
|
+
markSucceeded(handle: ActivityLogHandle): Promise<void>;
|
|
18
|
+
markFailed(handle: ActivityLogHandle): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export interface ActivityLogPortFactory {
|
|
21
|
+
forRun(forestServerToken: string): ActivityLogPort;
|
|
22
|
+
drain(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=activity-log-port.d.ts.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktbG9nLXBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcG9ydHMvYWN0aXZpdHktbG9nLXBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { StepUser } from '../types/execution-context';
|
|
2
|
+
import type { CollectionSchema, RecordData } from '../types/validated/collection';
|
|
3
|
+
export type Id = string | number;
|
|
4
|
+
export type Limit = {
|
|
5
|
+
limit: number;
|
|
6
|
+
} | {
|
|
7
|
+
limit: null;
|
|
8
|
+
};
|
|
9
|
+
export type GetRecordQuery = {
|
|
10
|
+
collection: string;
|
|
11
|
+
id: Id[];
|
|
12
|
+
fields?: string[];
|
|
13
|
+
};
|
|
14
|
+
export type UpdateRecordQuery = {
|
|
15
|
+
collection: string;
|
|
16
|
+
id: Id[];
|
|
17
|
+
values: Record<string, unknown>;
|
|
18
|
+
};
|
|
19
|
+
export type GetRelatedDataQuery = {
|
|
20
|
+
collection: string;
|
|
21
|
+
id: Id[];
|
|
22
|
+
relation: string;
|
|
23
|
+
relatedSchema: CollectionSchema;
|
|
24
|
+
fields?: string[];
|
|
25
|
+
} & Limit;
|
|
26
|
+
export type GetSingleRelatedDataQuery = {
|
|
27
|
+
collection: string;
|
|
28
|
+
id: Id[];
|
|
29
|
+
relation: string;
|
|
30
|
+
relatedSchema: CollectionSchema;
|
|
31
|
+
fields?: string[];
|
|
32
|
+
};
|
|
33
|
+
export type ExecuteActionQuery = {
|
|
34
|
+
collection: string;
|
|
35
|
+
action: string;
|
|
36
|
+
id?: Id[];
|
|
37
|
+
};
|
|
38
|
+
export type GetActionFormInfoQuery = {
|
|
39
|
+
collection: string;
|
|
40
|
+
action: string;
|
|
41
|
+
id: Id[];
|
|
42
|
+
};
|
|
43
|
+
export interface AgentPort {
|
|
44
|
+
getRecord(query: GetRecordQuery, user: StepUser): Promise<RecordData>;
|
|
45
|
+
updateRecord(query: UpdateRecordQuery, user: StepUser): Promise<RecordData>;
|
|
46
|
+
getRelatedData(query: GetRelatedDataQuery, user: StepUser): Promise<RecordData[]>;
|
|
47
|
+
getSingleRelatedData(query: GetSingleRelatedDataQuery, user: StepUser): Promise<RecordData | null>;
|
|
48
|
+
executeAction(query: ExecuteActionQuery, user: StepUser): Promise<unknown>;
|
|
49
|
+
getActionFormInfo(query: GetActionFormInfoQuery, user: StepUser): Promise<{
|
|
50
|
+
hasForm: boolean;
|
|
51
|
+
}>;
|
|
52
|
+
probe(): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=agent-port.d.ts.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wb3J0cy9hZ2VudC1wb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BaseChatModel, RemoteTool, ToolConfig } from '@forestadmin/ai-proxy';
|
|
2
|
+
export interface AiModelPort {
|
|
3
|
+
getModel(aiConfigName?: string): BaseChatModel;
|
|
4
|
+
loadRemoteTools(configs: Record<string, ToolConfig>): Promise<RemoteTool[]>;
|
|
5
|
+
closeConnections(): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=ai-model-port.d.ts.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktbW9kZWwtcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wb3J0cy9haS1tb2RlbC1wb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|