@forestadmin/workflow-executor 1.13.0 → 1.15.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 (61) hide show
  1. package/README.md +18 -0
  2. package/dist/adapters/ai-client-adapter.d.ts +5 -1
  3. package/dist/adapters/ai-client-adapter.js +4 -1
  4. package/dist/adapters/always-error-ai-model-port.d.ts +5 -1
  5. package/dist/adapters/always-error-ai-model-port.js +6 -1
  6. package/dist/adapters/server-ai-adapter.d.ts +5 -1
  7. package/dist/adapters/server-ai-adapter.js +4 -1
  8. package/dist/adapters/step-outcome-to-update-step-mapper.js +4 -1
  9. package/dist/build-workflow-executor.js +87 -2
  10. package/dist/crypto/credential-encryption.d.ts +10 -0
  11. package/dist/crypto/credential-encryption.js +75 -0
  12. package/dist/defaults.d.ts +1 -0
  13. package/dist/defaults.js +5 -2
  14. package/dist/errors.d.ts +22 -0
  15. package/dist/errors.js +59 -2
  16. package/dist/executors/load-related-record-step-executor.d.ts +4 -9
  17. package/dist/executors/load-related-record-step-executor.js +164 -97
  18. package/dist/executors/mcp-step-executor.d.ts +7 -2
  19. package/dist/executors/mcp-step-executor.js +78 -14
  20. package/dist/executors/step-executor-factory.d.ts +1 -1
  21. package/dist/executors/step-executor-factory.js +24 -3
  22. package/dist/http/executor-http-server.d.ts +12 -0
  23. package/dist/http/executor-http-server.js +90 -1
  24. package/dist/http/mcp-oauth-credentials.d.ts +24 -0
  25. package/dist/http/mcp-oauth-credentials.js +77 -0
  26. package/dist/http/step-serializer.js +5 -2
  27. package/dist/index.d.ts +7 -1
  28. package/dist/index.js +10 -3
  29. package/dist/oauth/keyed-mutex.d.ts +5 -0
  30. package/dist/oauth/keyed-mutex.js +27 -0
  31. package/dist/oauth/refresh-grant.d.ts +15 -0
  32. package/dist/oauth/refresh-grant.js +112 -0
  33. package/dist/oauth/token-endpoint-url.d.ts +2 -0
  34. package/dist/oauth/token-endpoint-url.js +103 -0
  35. package/dist/oauth/token-service.d.ts +34 -0
  36. package/dist/oauth/token-service.js +172 -0
  37. package/dist/ports/ai-model-port.d.ts +5 -1
  38. package/dist/ports/mcp-oauth-credentials-store.d.ts +24 -0
  39. package/dist/ports/mcp-oauth-credentials-store.js +3 -0
  40. package/dist/ports/run-store.d.ts +1 -0
  41. package/dist/remote-tool-fetcher.d.ts +7 -2
  42. package/dist/remote-tool-fetcher.js +53 -6
  43. package/dist/runner.d.ts +2 -0
  44. package/dist/runner.js +3 -3
  45. package/dist/stores/database-mcp-oauth-credentials-store.d.ts +22 -0
  46. package/dist/stores/database-mcp-oauth-credentials-store.js +188 -0
  47. package/dist/stores/database-store.d.ts +1 -1
  48. package/dist/stores/database-store.js +17 -50
  49. package/dist/stores/in-memory-mcp-oauth-credentials-store.d.ts +13 -0
  50. package/dist/stores/in-memory-mcp-oauth-credentials-store.js +44 -0
  51. package/dist/stores/in-memory-store.d.ts +1 -0
  52. package/dist/stores/in-memory-store.js +6 -1
  53. package/dist/stores/schema-migrations.d.ts +19 -0
  54. package/dist/stores/schema-migrations.js +69 -0
  55. package/dist/types/step-execution-data.d.ts +2 -1
  56. package/dist/types/validated/execution.d.ts +15 -6
  57. package/dist/types/validated/step-definition.d.ts +9 -6
  58. package/dist/types/validated/step-definition.js +4 -4
  59. package/dist/types/validated/step-outcome.d.ts +10 -0
  60. package/dist/types/validated/step-outcome.js +7 -2
  61. package/package.json +4 -4
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // In-memory MCP OAuth credentials store for --in-memory / dev. Same throwaway semantics as
4
+ // InMemoryStore (the run store): state is lost on restart. It holds the already-encrypted Buffers
5
+ // produced by buildMcpOAuthCredentialInput — there is no crypto here, just a Map keyed by
6
+ // (userId, mcpServerId), mirroring the DB store's one-row-per-key contract.
7
+ class InMemoryMcpOAuthCredentialsStore {
8
+ constructor() {
9
+ this.data = new Map();
10
+ this.nextId = 1;
11
+ }
12
+ async init() {
13
+ // No-op: nothing to migrate for an in-memory store.
14
+ }
15
+ async close() {
16
+ // No-op: nothing to close.
17
+ }
18
+ async get(userId, mcpServerId) {
19
+ return this.data.get(InMemoryMcpOAuthCredentialsStore.key(userId, mcpServerId)) ?? null;
20
+ }
21
+ async upsert(credential) {
22
+ // Overwrite in place — one row per (userId, mcpServerId). A fresh id each time mirrors the DB
23
+ // store's delete-then-insert; nothing relies on id stability.
24
+ const key = InMemoryMcpOAuthCredentialsStore.key(credential.userId, credential.mcpServerId);
25
+ this.data.set(key, { ...credential, id: this.nextId });
26
+ this.nextId += 1;
27
+ }
28
+ async updateIfPresent(id, credential) {
29
+ const key = InMemoryMcpOAuthCredentialsStore.key(credential.userId, credential.mcpServerId);
30
+ const existing = this.data.get(key);
31
+ // Only update the exact row the caller read; a re-created row has a new id, so skip it.
32
+ if (!existing || existing.id !== id)
33
+ return;
34
+ this.data.set(key, { ...credential, id });
35
+ }
36
+ async delete(userId, mcpServerId) {
37
+ this.data.delete(InMemoryMcpOAuthCredentialsStore.key(userId, mcpServerId));
38
+ }
39
+ static key(userId, mcpServerId) {
40
+ return `${userId}:${mcpServerId}`;
41
+ }
42
+ }
43
+ exports.default = InMemoryMcpOAuthCredentialsStore;
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW4tbWVtb3J5LW1jcC1vYXV0aC1jcmVkZW50aWFscy1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdG9yZXMvaW4tbWVtb3J5LW1jcC1vYXV0aC1jcmVkZW50aWFscy1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLDJGQUEyRjtBQUMzRixrR0FBa0c7QUFDbEcsMEZBQTBGO0FBQzFGLDRFQUE0RTtBQUM1RSxNQUFxQixnQ0FBZ0M7SUFBckQ7UUFDbUIsU0FBSSxHQUFHLElBQUksR0FBRyxFQUFvQyxDQUFDO1FBQzVELFdBQU0sR0FBRyxDQUFDLENBQUM7SUFzQ3JCLENBQUM7SUFwQ0MsS0FBSyxDQUFDLElBQUk7UUFDUixvREFBb0Q7SUFDdEQsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsMkJBQTJCO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQWMsRUFBRSxXQUFtQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDMUYsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBbUM7UUFDOUMsOEZBQThGO1FBQzlGLDhEQUE4RDtRQUM5RCxNQUFNLEdBQUcsR0FBRyxnQ0FBZ0MsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxVQUFVLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQVUsRUFBRSxVQUFtQztRQUNuRSxNQUFNLEdBQUcsR0FBRyxnQ0FBZ0MsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsd0ZBQXdGO1FBQ3hGLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFO1lBQUUsT0FBTztRQUU1QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQWMsRUFBRSxXQUFtQjtRQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVPLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBYyxFQUFFLFdBQW1CO1FBQ3BELE9BQU8sR0FBRyxNQUFNLElBQUksV0FBVyxFQUFFLENBQUM7SUFDcEMsQ0FBQztDQUNGO0FBeENELG1EQXdDQyJ9
@@ -6,6 +6,7 @@ export default class InMemoryStore implements RunStore {
6
6
  close(): Promise<void>;
7
7
  getStepExecutions(runId: string): Promise<StepExecutionData[]>;
8
8
  saveStepExecution(runId: string, stepExecution: StepExecutionData): Promise<void>;
9
+ deleteStepExecution(runId: string, stepIndex: number): Promise<void>;
9
10
  private callPort;
10
11
  }
11
12
  //# sourceMappingURL=in-memory-store.d.ts.map
@@ -33,6 +33,11 @@ class InMemoryStore {
33
33
  runData.set(stepExecution.stepIndex, stepExecution);
34
34
  });
35
35
  }
36
+ async deleteStepExecution(runId, stepIndex) {
37
+ return this.callPort('deleteStepExecution', async () => {
38
+ this.data.get(runId)?.delete(stepIndex);
39
+ });
40
+ }
36
41
  async callPort(operation, fn) {
37
42
  try {
38
43
  return await fn();
@@ -45,4 +50,4 @@ class InMemoryStore {
45
50
  }
46
51
  }
47
52
  exports.default = InMemoryStore;
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW4tbWVtb3J5LXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3Jlcy9pbi1tZW1vcnktc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxzQ0FBcUU7QUFFckUsTUFBcUIsYUFBYTtJQUFsQztRQUNtQixTQUFJLEdBQUcsSUFBSSxHQUFHLEVBQTBDLENBQUM7SUE2QzVFLENBQUM7SUEzQ0MsS0FBSyxDQUFDLElBQUk7UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3RDLG9EQUFvRDtRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkMsNkJBQTZCO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFhO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVyQyxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFPLEVBQUUsQ0FBQztZQUV4QixPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBYSxFQUFFLGFBQWdDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNuRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVuQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNoQyxDQUFDO1lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxRQUFRLENBQUksU0FBaUIsRUFBRSxFQUFvQjtRQUMvRCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLEtBQUssWUFBWSw4QkFBcUI7Z0JBQUUsTUFBTSxLQUFLLENBQUM7WUFDeEQsTUFBTSxJQUFJLDBCQUFpQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBOUNELGdDQThDQyJ9
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW4tbWVtb3J5LXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0b3Jlcy9pbi1tZW1vcnktc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxzQ0FBcUU7QUFFckUsTUFBcUIsYUFBYTtJQUFsQztRQUNtQixTQUFJLEdBQUcsSUFBSSxHQUFHLEVBQTBDLENBQUM7SUFtRDVFLENBQUM7SUFqREMsS0FBSyxDQUFDLElBQUk7UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3RDLG9EQUFvRDtRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkMsNkJBQTZCO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFhO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVyQyxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFPLEVBQUUsQ0FBQztZQUV4QixPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBYSxFQUFFLGFBQWdDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNuRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVuQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNoQyxDQUFDO1lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsU0FBaUI7UUFDeEQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsUUFBUSxDQUFJLFNBQWlCLEVBQUUsRUFBb0I7UUFDL0QsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxLQUFLLFlBQVksOEJBQXFCO2dCQUFFLE1BQU0sS0FBSyxDQUFDO1lBQ3hELE1BQU0sSUFBSSwwQkFBaUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEQsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXBERCxnQ0FvREMifQ==
@@ -0,0 +1,19 @@
1
+ import type { Logger } from '../ports/logger-port';
2
+ import type { Sequelize } from 'sequelize';
3
+ export declare const DEFAULT_SCHEMA = "forest";
4
+ export declare function resolveSchema(sequelize: Sequelize, configured?: string): string | undefined;
5
+ export declare function tableId(schema: string | undefined, tableName: string): string | {
6
+ tableName: string;
7
+ schema: string;
8
+ };
9
+ export declare function tableReference(schema: string | undefined, tableName: string): string;
10
+ export declare function runMigrations({ sequelize, umzug, schema, logger, failMessage, }: {
11
+ sequelize: Sequelize;
12
+ umzug: {
13
+ up: () => Promise<unknown>;
14
+ };
15
+ schema: string | undefined;
16
+ logger?: Logger;
17
+ failMessage: string;
18
+ }): Promise<void>;
19
+ //# sourceMappingURL=schema-migrations.d.ts.map
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_SCHEMA = void 0;
4
+ exports.resolveSchema = resolveSchema;
5
+ exports.tableId = tableId;
6
+ exports.tableReference = tableReference;
7
+ exports.runMigrations = runMigrations;
8
+ const errors_1 = require("../errors");
9
+ // The schema both executor tables live under, so a shared customer database stays safe: the executor
10
+ // never touches `public`, and its umzug `SequelizeMeta` registries can't collide with the
11
+ // agent/server's own. Skipped on SQLite (test suite), which has no schema support.
12
+ exports.DEFAULT_SCHEMA = 'forest';
13
+ // Must stay constant across releases, or an old and a new deploy could migrate concurrently. Shared
14
+ // by every executor migration runner so all of them serialize against one another on cold start.
15
+ const MIGRATION_ADVISORY_LOCK_KEY = 6438071259157;
16
+ function resolveSchema(sequelize, configured) {
17
+ if (sequelize.getDialect() === 'sqlite')
18
+ return undefined;
19
+ return configured || exports.DEFAULT_SCHEMA;
20
+ }
21
+ function tableId(schema, tableName) {
22
+ return schema ? { tableName, schema } : tableName;
23
+ }
24
+ function tableReference(schema, tableName) {
25
+ return schema ? `"${schema}"."${tableName}"` : `"${tableName}"`;
26
+ }
27
+ // Serializes booting instances via a transaction-scoped advisory lock: auto-releases at commit and
28
+ // is pooler-safe (RDS Proxy / PgBouncer), unlike a session lock which would leak there.
29
+ async function withMigrationLock(sequelize, run) {
30
+ await sequelize.transaction(async (transaction) => {
31
+ // Stop a client idle-in-transaction timeout from killing this idle txn mid-migration, which
32
+ // would drop the lock.
33
+ await sequelize.query('SET LOCAL idle_in_transaction_session_timeout = 0', { transaction });
34
+ await sequelize.query('SELECT pg_advisory_xact_lock($1)', {
35
+ bind: [MIGRATION_ADVISORY_LOCK_KEY],
36
+ transaction,
37
+ });
38
+ await run(transaction);
39
+ });
40
+ }
41
+ // Runs an umzug migration set under the executor's shared-database safety rules: on Postgres the
42
+ // `forest` schema is created and migrations run behind the advisory lock (one writer across booting
43
+ // replicas); on other dialects (SQLite) it just runs. Logs `failMessage` and rethrows on failure.
44
+ async function runMigrations({ sequelize, umzug, schema, logger, failMessage, }) {
45
+ try {
46
+ if (sequelize.getDialect() !== 'postgres') {
47
+ await umzug.up();
48
+ return;
49
+ }
50
+ // The migration lock holds one pool connection while umzug opens a second.
51
+ const { pool } = sequelize.connectionManager;
52
+ // With replication configured, `pool` splits into write/read sub-pools and `maxSize` is
53
+ // undefined; the migration lock runs on the write pool, so size the check against it.
54
+ const poolMax = pool?.maxSize ?? pool?.write?.maxSize ?? pool?.read?.maxSize ?? 1;
55
+ if (poolMax < 2) {
56
+ throw new Error('workflow-executor requires pool.max >= 2 on Postgres: the migration lock holds one connection while migrations run on another');
57
+ }
58
+ // Schema in its own committed transaction so umzug (on other connections) sees it.
59
+ if (schema) {
60
+ await withMigrationLock(sequelize, transaction => sequelize.query(`CREATE SCHEMA IF NOT EXISTS "${schema}"`, { transaction }));
61
+ }
62
+ await withMigrationLock(sequelize, () => umzug.up());
63
+ }
64
+ catch (error) {
65
+ logger?.('Error', failMessage, { error: (0, errors_1.extractErrorMessage)(error) });
66
+ throw error;
67
+ }
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLW1pZ3JhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmVzL3NjaGVtYS1taWdyYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWNBLHNDQUlDO0FBRUQsMEJBS0M7QUFFRCx3Q0FFQztBQXVCRCxzQ0E4Q0M7QUEvRkQsc0NBQWdEO0FBRWhELHFHQUFxRztBQUNyRywwRkFBMEY7QUFDMUYsbUZBQW1GO0FBQ3RFLFFBQUEsY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUV2QyxvR0FBb0c7QUFDcEcsaUdBQWlHO0FBQ2pHLE1BQU0sMkJBQTJCLEdBQUcsYUFBaUIsQ0FBQztBQUV0RCxTQUFnQixhQUFhLENBQUMsU0FBb0IsRUFBRSxVQUFtQjtJQUNyRSxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxRQUFRO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFMUQsT0FBTyxVQUFVLElBQUksc0JBQWMsQ0FBQztBQUN0QyxDQUFDO0FBRUQsU0FBZ0IsT0FBTyxDQUNyQixNQUEwQixFQUMxQixTQUFpQjtJQUVqQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLE1BQTBCLEVBQUUsU0FBaUI7SUFDMUUsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsR0FBRyxDQUFDO0FBQ2xFLENBQUM7QUFFRCxtR0FBbUc7QUFDbkcsd0ZBQXdGO0FBQ3hGLEtBQUssVUFBVSxpQkFBaUIsQ0FDOUIsU0FBb0IsRUFDcEIsR0FBbUQ7SUFFbkQsTUFBTSxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBQyxXQUFXLEVBQUMsRUFBRTtRQUM5Qyw0RkFBNEY7UUFDNUYsdUJBQXVCO1FBQ3ZCLE1BQU0sU0FBUyxDQUFDLEtBQUssQ0FBQyxtREFBbUQsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDNUYsTUFBTSxTQUFTLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxFQUFFO1lBQ3hELElBQUksRUFBRSxDQUFDLDJCQUEyQixDQUFDO1lBQ25DLFdBQVc7U0FDWixDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxpR0FBaUc7QUFDakcsb0dBQW9HO0FBQ3BHLGtHQUFrRztBQUMzRixLQUFLLFVBQVUsYUFBYSxDQUFDLEVBQ2xDLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixXQUFXLEdBT1o7SUFDQyxJQUFJLENBQUM7UUFDSCxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUMxQyxNQUFNLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUVqQixPQUFPO1FBQ1QsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsU0FBUyxDQUFDLGlCQUUxQixDQUFDO1FBQ0Ysd0ZBQXdGO1FBQ3hGLHNGQUFzRjtRQUN0RixNQUFNLE9BQU8sR0FBRyxJQUFJLEVBQUUsT0FBTyxJQUFJLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUVsRixJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksS0FBSyxDQUNiLCtIQUErSCxDQUNoSSxDQUFDO1FBQ0osQ0FBQztRQUVELG1GQUFtRjtRQUNuRixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FDL0MsU0FBUyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsTUFBTSxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUM1RSxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0saUJBQWlCLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFBLDRCQUFtQixFQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RSxNQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDIn0=
@@ -127,11 +127,12 @@ export interface LoadRelatedRecordPendingData {
127
127
  suggestedField: RelationRef;
128
128
  availableRecordIds: LoadRelatedRecordCandidate[];
129
129
  suggestedRecord?: LoadRelatedRecordCandidate;
130
+ suggestNoRecord?: boolean;
130
131
  }
131
132
  export interface LoadRelatedRecordStepExecutionData extends BaseStepExecutionData, WithUserConfirmation<LoadRelatedRecordConfirmation> {
132
133
  type: 'load-related-record';
133
134
  pendingData?: LoadRelatedRecordPendingData;
134
- selectedRecordRef: RecordRef;
135
+ selectedRecordRef?: RecordRef;
135
136
  executionParams?: RelationRef;
136
137
  executionResult?: {
137
138
  relation: RelationRef;
@@ -62,10 +62,11 @@ export declare const StepSchema: z.ZodObject<{
62
62
  title: z.ZodOptional<z.ZodString>;
63
63
  }, z.core.$strip>, z.ZodObject<{
64
64
  type: z.ZodLiteral<import("./step-definition").StepType.LoadRelatedRecord>;
65
- executionType: z.ZodCatch<z.ZodDefault<z.ZodEnum<{
65
+ executionType: z.ZodDefault<z.ZodEnum<{
66
+ manual: import("./step-definition").StepExecutionMode.Manual;
66
67
  "automated-with-confirmation": import("./step-definition").StepExecutionMode.AutomatedWithConfirmation;
67
68
  "fully-automated": import("./step-definition").StepExecutionMode.FullyAutomated;
68
- }>>>;
69
+ }>>;
69
70
  preRecordedArgs: z.ZodOptional<z.ZodObject<{
70
71
  selectedRecordStepId: z.ZodOptional<z.ZodString>;
71
72
  relationName: z.ZodOptional<z.ZodString>;
@@ -122,6 +123,9 @@ export declare const StepSchema: z.ZodObject<{
122
123
  error: "error";
123
124
  "awaiting-input": "awaiting-input";
124
125
  }>;
126
+ awaitingInputReason: z.ZodOptional<z.ZodEnum<{
127
+ "needs-oauth-reauth": "needs-oauth-reauth";
128
+ }>>;
125
129
  stepId: z.ZodString;
126
130
  stepIndex: z.ZodNumber;
127
131
  error: z.ZodOptional<z.ZodString>;
@@ -199,10 +203,11 @@ export declare const AvailableStepExecutionSchema: z.ZodObject<{
199
203
  title: z.ZodOptional<z.ZodString>;
200
204
  }, z.core.$strip>, z.ZodObject<{
201
205
  type: z.ZodLiteral<import("./step-definition").StepType.LoadRelatedRecord>;
202
- executionType: z.ZodCatch<z.ZodDefault<z.ZodEnum<{
206
+ executionType: z.ZodDefault<z.ZodEnum<{
207
+ manual: import("./step-definition").StepExecutionMode.Manual;
203
208
  "automated-with-confirmation": import("./step-definition").StepExecutionMode.AutomatedWithConfirmation;
204
209
  "fully-automated": import("./step-definition").StepExecutionMode.FullyAutomated;
205
- }>>>;
210
+ }>>;
206
211
  preRecordedArgs: z.ZodOptional<z.ZodObject<{
207
212
  selectedRecordStepId: z.ZodOptional<z.ZodString>;
208
213
  relationName: z.ZodOptional<z.ZodString>;
@@ -279,10 +284,11 @@ export declare const AvailableStepExecutionSchema: z.ZodObject<{
279
284
  title: z.ZodOptional<z.ZodString>;
280
285
  }, z.core.$strip>, z.ZodObject<{
281
286
  type: z.ZodLiteral<import("./step-definition").StepType.LoadRelatedRecord>;
282
- executionType: z.ZodCatch<z.ZodDefault<z.ZodEnum<{
287
+ executionType: z.ZodDefault<z.ZodEnum<{
288
+ manual: import("./step-definition").StepExecutionMode.Manual;
283
289
  "automated-with-confirmation": import("./step-definition").StepExecutionMode.AutomatedWithConfirmation;
284
290
  "fully-automated": import("./step-definition").StepExecutionMode.FullyAutomated;
285
- }>>>;
291
+ }>>;
286
292
  preRecordedArgs: z.ZodOptional<z.ZodObject<{
287
293
  selectedRecordStepId: z.ZodOptional<z.ZodString>;
288
294
  relationName: z.ZodOptional<z.ZodString>;
@@ -339,6 +345,9 @@ export declare const AvailableStepExecutionSchema: z.ZodObject<{
339
345
  error: "error";
340
346
  "awaiting-input": "awaiting-input";
341
347
  }>;
348
+ awaitingInputReason: z.ZodOptional<z.ZodEnum<{
349
+ "needs-oauth-reauth": "needs-oauth-reauth";
350
+ }>>;
342
351
  stepId: z.ZodString;
343
352
  stepIndex: z.ZodNumber;
344
353
  error: z.ZodOptional<z.ZodString>;
@@ -75,10 +75,11 @@ export declare const TriggerActionStepDefinitionSchema: z.ZodObject<{
75
75
  export type TriggerActionStepDefinition = z.infer<typeof TriggerActionStepDefinitionSchema>;
76
76
  export declare const LoadRelatedRecordStepDefinitionSchema: z.ZodObject<{
77
77
  type: z.ZodLiteral<StepType.LoadRelatedRecord>;
78
- executionType: z.ZodCatch<z.ZodDefault<z.ZodEnum<{
78
+ executionType: z.ZodDefault<z.ZodEnum<{
79
+ manual: StepExecutionMode.Manual;
79
80
  "automated-with-confirmation": StepExecutionMode.AutomatedWithConfirmation;
80
81
  "fully-automated": StepExecutionMode.FullyAutomated;
81
- }>>>;
82
+ }>>;
82
83
  preRecordedArgs: z.ZodOptional<z.ZodObject<{
83
84
  selectedRecordStepId: z.ZodOptional<z.ZodString>;
84
85
  relationName: z.ZodOptional<z.ZodString>;
@@ -151,10 +152,11 @@ export declare const RecordStepDefinitionSchema: z.ZodDiscriminatedUnion<[z.ZodO
151
152
  title: z.ZodOptional<z.ZodString>;
152
153
  }, z.core.$strip>, z.ZodObject<{
153
154
  type: z.ZodLiteral<StepType.LoadRelatedRecord>;
154
- executionType: z.ZodCatch<z.ZodDefault<z.ZodEnum<{
155
+ executionType: z.ZodDefault<z.ZodEnum<{
156
+ manual: StepExecutionMode.Manual;
155
157
  "automated-with-confirmation": StepExecutionMode.AutomatedWithConfirmation;
156
158
  "fully-automated": StepExecutionMode.FullyAutomated;
157
- }>>>;
159
+ }>>;
158
160
  preRecordedArgs: z.ZodOptional<z.ZodObject<{
159
161
  selectedRecordStepId: z.ZodOptional<z.ZodString>;
160
162
  relationName: z.ZodOptional<z.ZodString>;
@@ -215,10 +217,11 @@ export declare const StepDefinitionSchema: z.ZodDiscriminatedUnion<[z.ZodObject<
215
217
  title: z.ZodOptional<z.ZodString>;
216
218
  }, z.core.$strip>, z.ZodObject<{
217
219
  type: z.ZodLiteral<StepType.LoadRelatedRecord>;
218
- executionType: z.ZodCatch<z.ZodDefault<z.ZodEnum<{
220
+ executionType: z.ZodDefault<z.ZodEnum<{
221
+ manual: StepExecutionMode.Manual;
219
222
  "automated-with-confirmation": StepExecutionMode.AutomatedWithConfirmation;
220
223
  "fully-automated": StepExecutionMode.FullyAutomated;
221
- }>>>;
224
+ }>>;
222
225
  preRecordedArgs: z.ZodOptional<z.ZodObject<{
223
226
  selectedRecordStepId: z.ZodOptional<z.ZodString>;
224
227
  relationName: z.ZodOptional<z.ZodString>;
@@ -90,10 +90,10 @@ exports.TriggerActionStepDefinitionSchema = zod_1.z.object({
90
90
  exports.LoadRelatedRecordStepDefinitionSchema = zod_1.z.object({
91
91
  ...sharedFields,
92
92
  type: zod_1.z.literal(StepType.LoadRelatedRecord),
93
+ // No `.catch`: it would silently coerce `manual` to AutomatedWithConfirmation (AI prefill back on).
93
94
  executionType: zod_1.z
94
- .enum([AutomatedWithConfirmation, FullyAutomated])
95
- .default(AutomatedWithConfirmation)
96
- .catch(AutomatedWithConfirmation),
95
+ .enum([Manual, AutomatedWithConfirmation, FullyAutomated])
96
+ .default(AutomatedWithConfirmation),
97
97
  preRecordedArgs: zod_1.z
98
98
  .object({
99
99
  /**
@@ -141,4 +141,4 @@ exports.StepDefinitionSchema = zod_1.z.discriminatedUnion('type', [
141
141
  exports.McpStepDefinitionSchema,
142
142
  exports.GuidanceStepDefinitionSchema,
143
143
  ]);
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1kZWZpbml0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R5cGVzL3ZhbGlkYXRlZC9zdGVwLWRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXdCO0FBRXhCLElBQVksUUFRWDtBQVJELFdBQVksUUFBUTtJQUNsQixtQ0FBdUIsQ0FBQTtJQUN2QixzQ0FBMEIsQ0FBQTtJQUMxQiwwQ0FBOEIsQ0FBQTtJQUM5Qiw0Q0FBZ0MsQ0FBQTtJQUNoQyxxREFBeUMsQ0FBQTtJQUN6Qyx1QkFBVyxDQUFBO0lBQ1gsaUNBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVJXLFFBQVEsd0JBQVIsUUFBUSxRQVFuQjtBQUVEOzs7R0FHRztBQUNILElBQVksaUJBSVg7QUFKRCxXQUFZLGlCQUFpQjtJQUMzQixzQ0FBaUIsQ0FBQTtJQUNqQiw4RUFBeUQsQ0FBQTtJQUN6RCx1REFBa0MsQ0FBQTtBQUNwQyxDQUFDLEVBSlcsaUJBQWlCLGlDQUFqQixpQkFBaUIsUUFJNUI7QUFFRCxpRkFBaUY7QUFDakYsc0ZBQXNGO0FBQ3RGLE1BQU0sWUFBWSxHQUFHO0lBQ25CLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzdCLFlBQVksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ25DLEtBQUssRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUM7QUFFRixnRkFBZ0Y7QUFDaEYsTUFBTSxFQUFFLE1BQU0sRUFBRSx5QkFBeUIsRUFBRSxjQUFjLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztBQUVuRSxRQUFBLDZCQUE2QixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDcEQsR0FBRyxZQUFZO0lBQ2YsSUFBSSxFQUFFLE9BQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUNuQyxhQUFhLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO0lBQzdGLE9BQU8sRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDcEMsQ0FBQyxDQUFDO0FBR1UsUUFBQSw4QkFBOEIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3JELEdBQUcsWUFBWTtJQUNmLElBQUksRUFBRSxPQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDcEMsYUFBYSxFQUFFLE9BQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7SUFDdEYsZUFBZSxFQUFFLE9BQUM7U0FDZixNQUFNLENBQUM7UUFDTix1QkFBdUIsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ3BELDRDQUE0QztRQUM1QyxVQUFVLEVBQUUsT0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7S0FDM0MsQ0FBQztTQUNELFFBQVEsRUFBRTtDQUNkLENBQUMsQ0FBQztBQUdVLFFBQUEsZ0NBQWdDLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN2RCxHQUFHLFlBQVk7SUFDZixJQUFJLEVBQUUsT0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQ3RDLGFBQWEsRUFBRSxPQUFDO1NBQ2IsSUFBSSxDQUFDLENBQUMseUJBQXlCLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDakQsT0FBTyxDQUFDLHlCQUF5QixDQUFDO1NBQ2xDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQztJQUNuQyxlQUFlLEVBQUUsT0FBQztTQUNmLE1BQU0sQ0FBQztRQUNOLHVCQUF1QixFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUU7UUFDcEQsNENBQTRDO1FBQzVDLFNBQVMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQ2hDLEtBQUssRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO0tBQzlCLENBQUM7U0FDRCxRQUFRLEVBQUU7Q0FDZCxDQUFDLENBQUM7QUFHVSxRQUFBLGlDQUFpQyxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDeEQsR0FBRyxZQUFZO0lBQ2YsSUFBSSxFQUFFLE9BQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztJQUN2QywwRUFBMEU7SUFDMUUsNkZBQTZGO0lBQzdGLDBGQUEwRjtJQUMxRixhQUFhLEVBQUUsT0FBQztTQUNiLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSx5QkFBeUIsRUFBRSxjQUFjLENBQUMsQ0FBQztTQUN6RCxPQUFPLENBQUMseUJBQXlCLENBQUM7SUFDckMsZUFBZSxFQUFFLE9BQUM7U0FDZixNQUFNLENBQUM7UUFDTjs7OztXQUlHO1FBQ0gsb0JBQW9CLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtRQUMzQyw4Q0FBOEM7UUFDOUMsVUFBVSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7S0FDbEMsQ0FBQztTQUNELFFBQVEsRUFBRTtDQUNkLENBQUMsQ0FBQztBQUdVLFFBQUEscUNBQXFDLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM1RCxHQUFHLFlBQVk7SUFDZixJQUFJLEVBQUUsT0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUM7SUFDM0MsYUFBYSxFQUFFLE9BQUM7U0FDYixJQUFJLENBQUMsQ0FBQyx5QkFBeUIsRUFBRSxjQUFjLENBQUMsQ0FBQztTQUNqRCxPQUFPLENBQUMseUJBQXlCLENBQUM7U0FDbEMsS0FBSyxDQUFDLHlCQUF5QixDQUFDO0lBQ25DLGVBQWUsRUFBRSxPQUFDO1NBQ2YsTUFBTSxDQUFDO1FBQ047Ozs7O1dBS0c7UUFDSCxvQkFBb0IsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQzNDLGtFQUFrRTtRQUNsRSxZQUFZLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtRQUNuQyx5SEFBeUg7UUFDekgsT0FBTyxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7S0FDaEMsQ0FBQztTQUNELFFBQVEsRUFBRTtDQUNkLENBQUMsQ0FBQztBQUdILHNHQUFzRztBQUN6RixRQUFBLHNCQUFzQixHQUFHLGdCQUFnQixDQUFDO0FBRTFDLFFBQUEsdUJBQXVCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM5QyxHQUFHLFlBQVk7SUFDZixJQUFJLEVBQUUsT0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO0lBQzdCLGFBQWEsRUFBRSxPQUFDO1NBQ2IsSUFBSSxDQUFDLENBQUMseUJBQXlCLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDakQsT0FBTyxDQUFDLHlCQUF5QixDQUFDO1NBQ2xDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQztJQUNuQyxXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDL0IsQ0FBQyxDQUFDO0FBR1UsUUFBQSw0QkFBNEIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ25ELEdBQUcsWUFBWTtJQUNmLElBQUksRUFBRSxPQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDbEMsYUFBYSxFQUFFLE9BQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7Q0FDL0QsQ0FBQyxDQUFDO0FBR1UsUUFBQSwwQkFBMEIsR0FBRyxPQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFO0lBQ3JFLHNDQUE4QjtJQUM5Qix3Q0FBZ0M7SUFDaEMseUNBQWlDO0lBQ2pDLDZDQUFxQztDQUN0QyxDQUFDLENBQUM7QUFHVSxRQUFBLG9CQUFvQixHQUFHLE9BQUMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7SUFDL0QscUNBQTZCO0lBQzdCLHNDQUE4QjtJQUM5Qix3Q0FBZ0M7SUFDaEMseUNBQWlDO0lBQ2pDLDZDQUFxQztJQUNyQywrQkFBdUI7SUFDdkIsb0NBQTRCO0NBQzdCLENBQUMsQ0FBQyJ9
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1kZWZpbml0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R5cGVzL3ZhbGlkYXRlZC9zdGVwLWRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXdCO0FBRXhCLElBQVksUUFRWDtBQVJELFdBQVksUUFBUTtJQUNsQixtQ0FBdUIsQ0FBQTtJQUN2QixzQ0FBMEIsQ0FBQTtJQUMxQiwwQ0FBOEIsQ0FBQTtJQUM5Qiw0Q0FBZ0MsQ0FBQTtJQUNoQyxxREFBeUMsQ0FBQTtJQUN6Qyx1QkFBVyxDQUFBO0lBQ1gsaUNBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVJXLFFBQVEsd0JBQVIsUUFBUSxRQVFuQjtBQUVEOzs7R0FHRztBQUNILElBQVksaUJBSVg7QUFKRCxXQUFZLGlCQUFpQjtJQUMzQixzQ0FBaUIsQ0FBQTtJQUNqQiw4RUFBeUQsQ0FBQTtJQUN6RCx1REFBa0MsQ0FBQTtBQUNwQyxDQUFDLEVBSlcsaUJBQWlCLGlDQUFqQixpQkFBaUIsUUFJNUI7QUFFRCxpRkFBaUY7QUFDakYsc0ZBQXNGO0FBQ3RGLE1BQU0sWUFBWSxHQUFHO0lBQ25CLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzdCLFlBQVksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ25DLEtBQUssRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUM7QUFFRixnRkFBZ0Y7QUFDaEYsTUFBTSxFQUFFLE1BQU0sRUFBRSx5QkFBeUIsRUFBRSxjQUFjLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztBQUVuRSxRQUFBLDZCQUE2QixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDcEQsR0FBRyxZQUFZO0lBQ2YsSUFBSSxFQUFFLE9BQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUNuQyxh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
@@ -11,6 +11,10 @@ export declare const RecordStepStatusSchema: z.ZodEnum<{
11
11
  "awaiting-input": "awaiting-input";
12
12
  }>;
13
13
  export type RecordStepStatus = z.infer<typeof RecordStepStatusSchema>;
14
+ export declare const AwaitingInputReasonSchema: z.ZodEnum<{
15
+ "needs-oauth-reauth": "needs-oauth-reauth";
16
+ }>;
17
+ export type AwaitingInputReason = z.infer<typeof AwaitingInputReasonSchema>;
14
18
  export type StepStatus = BaseStepStatus | RecordStepStatus;
15
19
  export declare const ConditionStepOutcomeSchema: z.ZodObject<{
16
20
  type: z.ZodLiteral<"condition">;
@@ -47,6 +51,9 @@ export declare const McpStepOutcomeSchema: z.ZodObject<{
47
51
  error: "error";
48
52
  "awaiting-input": "awaiting-input";
49
53
  }>;
54
+ awaitingInputReason: z.ZodOptional<z.ZodEnum<{
55
+ "needs-oauth-reauth": "needs-oauth-reauth";
56
+ }>>;
50
57
  stepId: z.ZodString;
51
58
  stepIndex: z.ZodNumber;
52
59
  error: z.ZodOptional<z.ZodString>;
@@ -95,6 +102,9 @@ export declare const StepOutcomeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
95
102
  error: "error";
96
103
  "awaiting-input": "awaiting-input";
97
104
  }>;
105
+ awaitingInputReason: z.ZodOptional<z.ZodEnum<{
106
+ "needs-oauth-reauth": "needs-oauth-reauth";
107
+ }>>;
98
108
  stepId: z.ZodString;
99
109
  stepIndex: z.ZodNumber;
100
110
  error: z.ZodOptional<z.ZodString>;
@@ -1,12 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StepOutcomeSchema = exports.GuidanceStepOutcomeSchema = exports.McpStepOutcomeSchema = exports.RecordStepOutcomeSchema = exports.ConditionStepOutcomeSchema = exports.RecordStepStatusSchema = exports.BaseStepStatusSchema = void 0;
3
+ exports.StepOutcomeSchema = exports.GuidanceStepOutcomeSchema = exports.McpStepOutcomeSchema = exports.RecordStepOutcomeSchema = exports.ConditionStepOutcomeSchema = exports.AwaitingInputReasonSchema = exports.RecordStepStatusSchema = exports.BaseStepStatusSchema = void 0;
4
4
  exports.stepTypeToOutcomeType = stepTypeToOutcomeType;
5
5
  const zod_1 = require("zod");
6
6
  const step_definition_1 = require("./step-definition");
7
7
  exports.BaseStepStatusSchema = zod_1.z.enum(['success', 'error']);
8
8
  // AI steps can pause mid-execution to await user input (awaiting-input).
9
9
  exports.RecordStepStatusSchema = zod_1.z.enum(['success', 'error', 'awaiting-input']);
10
+ // Typed reason for an awaiting-input pause the user must resolve out of band: the Forest server
11
+ // validates it and the front reads it to prompt the matching action.
12
+ exports.AwaitingInputReasonSchema = zod_1.z.enum(['needs-oauth-reauth']);
10
13
  /**
11
14
  * StepOutcome is sent to the orchestrator — it must NEVER contain client data.
12
15
  * Any privacy-sensitive information (e.g. AI reasoning) must stay in
@@ -40,6 +43,8 @@ exports.McpStepOutcomeSchema = zod_1.z
40
43
  ...baseOutcomeFields,
41
44
  type: zod_1.z.literal('mcp'),
42
45
  status: exports.RecordStepStatusSchema,
46
+ /** Present when status is 'awaiting-input' because the step paused for re-authentication. */
47
+ awaitingInputReason: exports.AwaitingInputReasonSchema.optional(),
43
48
  })
44
49
  .strict();
45
50
  exports.GuidanceStepOutcomeSchema = zod_1.z
@@ -64,4 +69,4 @@ function stepTypeToOutcomeType(type) {
64
69
  return 'guidance';
65
70
  return 'record';
66
71
  }
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1vdXRjb21lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R5cGVzL3ZhbGlkYXRlZC9zdGVwLW91dGNvbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBd0VBLHNEQU1DO0FBOUVELDZCQUF3QjtBQUV4Qix1REFBNkM7QUFFaEMsUUFBQSxvQkFBb0IsR0FBRyxPQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFHakUseUVBQXlFO0FBQzVELFFBQUEsc0JBQXNCLEdBQUcsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBS3JGOzs7O0dBSUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6QixTQUFTLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRTtJQUN6QyxzQ0FBc0M7SUFDdEMsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDN0IsQ0FBQztBQUVXLFFBQUEsMEJBQTBCLEdBQUcsT0FBQztLQUN4QyxNQUFNLENBQUM7SUFDTixHQUFHLGlCQUFpQjtJQUNwQixJQUFJLEVBQUUsT0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDNUIsTUFBTSxFQUFFLDhCQUFzQjtJQUM5Qix3Q0FBd0M7SUFDeEMsY0FBYyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDdEMsQ0FBQztLQUNELE1BQU0sRUFBRSxDQUFDO0FBR0MsUUFBQSx1QkFBdUIsR0FBRyxPQUFDO0tBQ3JDLE1BQU0sQ0FBQztJQUNOLEdBQUcsaUJBQWlCO0lBQ3BCLElBQUksRUFBRSxPQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUN6QixNQUFNLEVBQUUsOEJBQXNCO0lBQzlCLGVBQWUsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQ3pELENBQUM7S0FDRCxNQUFNLEVBQUUsQ0FBQztBQUdDLFFBQUEsb0JBQW9CLEdBQUcsT0FBQztLQUNsQyxNQUFNLENBQUM7SUFDTixHQUFHLGlCQUFpQjtJQUNwQixJQUFJLEVBQUUsT0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDdEIsTUFBTSxFQUFFLDhCQUFzQjtDQUMvQixDQUFDO0tBQ0QsTUFBTSxFQUFFLENBQUM7QUFHQyxRQUFBLHlCQUF5QixHQUFHLE9BQUM7S0FDdkMsTUFBTSxDQUFDO0lBQ04sR0FBRyxpQkFBaUI7SUFDcEIsSUFBSSxFQUFFLE9BQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQzNCLE1BQU0sRUFBRSw4QkFBc0I7Q0FDL0IsQ0FBQztLQUNELE1BQU0sRUFBRSxDQUFDO0FBR0MsUUFBQSxpQkFBaUIsR0FBRyxPQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFO0lBQzVELGtDQUEwQjtJQUMxQiwrQkFBdUI7SUFDdkIsNEJBQW9CO0lBQ3BCLGlDQUF5QjtDQUMxQixDQUFDLENBQUM7QUFHSCxTQUFnQixxQkFBcUIsQ0FBQyxJQUFjO0lBQ2xELElBQUksSUFBSSxLQUFLLDBCQUFRLENBQUMsU0FBUztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQ3BELElBQUksSUFBSSxLQUFLLDBCQUFRLENBQUMsR0FBRztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3hDLElBQUksSUFBSSxLQUFLLDBCQUFRLENBQUMsUUFBUTtRQUFFLE9BQU8sVUFBVSxDQUFDO0lBRWxELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMifQ==
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1vdXRjb21lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R5cGVzL3ZhbGlkYXRlZC9zdGVwLW91dGNvbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBK0VBLHNEQU1DO0FBckZELDZCQUF3QjtBQUV4Qix1REFBNkM7QUFFaEMsUUFBQSxvQkFBb0IsR0FBRyxPQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFHakUseUVBQXlFO0FBQzVELFFBQUEsc0JBQXNCLEdBQUcsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBR3JGLGdHQUFnRztBQUNoRyxxRUFBcUU7QUFDeEQsUUFBQSx5QkFBeUIsR0FBRyxPQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0FBS3hFOzs7O0dBSUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6QixTQUFTLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRTtJQUN6QyxzQ0FBc0M7SUFDdEMsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDN0IsQ0FBQztBQUVXLFFBQUEsMEJBQTBCLEdBQUcsT0FBQztLQUN4QyxNQUFNLENBQUM7SUFDTixHQUFHLGlCQUFpQjtJQUNwQixJQUFJLEVBQUUsT0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDNUIsTUFBTSxFQUFFLDhCQUFzQjtJQUM5Qix3Q0FBd0M7SUFDeEMsY0FBYyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDdEMsQ0FBQztLQUNELE1BQU0sRUFBRSxDQUFDO0FBR0MsUUFBQSx1QkFBdUIsR0FBRyxPQUFDO0tBQ3JDLE1BQU0sQ0FBQztJQUNOLEdBQUcsaUJBQWlCO0lBQ3BCLElBQUksRUFBRSxPQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUN6QixNQUFNLEVBQUUsOEJBQXNCO0lBQzlCLGVBQWUsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO0NBQ3pELENBQUM7S0FDRCxNQUFNLEVBQUUsQ0FBQztBQUdDLFFBQUEsb0JBQW9CLEdBQUcsT0FBQztLQUNsQyxNQUFNLENBQUM7SUFDTixHQUFHLGlCQUFpQjtJQUNwQixJQUFJLEVBQUUsT0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDdEIsTUFBTSxFQUFFLDhCQUFzQjtJQUM5Qiw2RkFBNkY7SUFDN0YsbUJBQW1CLEVBQUUsaUNBQXlCLENBQUMsUUFBUSxFQUFFO0NBQzFELENBQUM7S0FDRCxNQUFNLEVBQUUsQ0FBQztBQUdDLFFBQUEseUJBQXlCLEdBQUcsT0FBQztLQUN2QyxNQUFNLENBQUM7SUFDTixHQUFHLGlCQUFpQjtJQUNwQixJQUFJLEVBQUUsT0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDM0IsTUFBTSxFQUFFLDhCQUFzQjtDQUMvQixDQUFDO0tBQ0QsTUFBTSxFQUFFLENBQUM7QUFHQyxRQUFBLGlCQUFpQixHQUFHLE9BQUMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7SUFDNUQsa0NBQTBCO0lBQzFCLCtCQUF1QjtJQUN2Qiw0QkFBb0I7SUFDcEIsaUNBQXlCO0NBQzFCLENBQUMsQ0FBQztBQUdILFNBQWdCLHFCQUFxQixDQUFDLElBQWM7SUFDbEQsSUFBSSxJQUFJLEtBQUssMEJBQVEsQ0FBQyxTQUFTO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDcEQsSUFBSSxJQUFJLEtBQUssMEJBQVEsQ0FBQyxHQUFHO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDeEMsSUFBSSxJQUFJLEtBQUssMEJBQVEsQ0FBQyxRQUFRO1FBQUUsT0FBTyxVQUFVLENBQUM7SUFFbEQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forestadmin/workflow-executor",
3
- "version": "1.13.0",
3
+ "version": "1.15.0",
4
4
  "main": "dist/index.js",
5
5
  "bin": {
6
6
  "forest-workflow-executor": "dist/cli.js"
@@ -29,9 +29,9 @@
29
29
  "test": "jest"
30
30
  },
31
31
  "dependencies": {
32
- "@forestadmin/agent-client": "1.10.0",
33
- "@forestadmin/ai-proxy": "1.11.3",
34
- "@forestadmin/forestadmin-client": "1.40.3",
32
+ "@forestadmin/agent-client": "1.10.1",
33
+ "@forestadmin/ai-proxy": "1.12.0",
34
+ "@forestadmin/forestadmin-client": "1.40.4",
35
35
  "@koa/bodyparser": "^6.1.0",
36
36
  "@koa/router": "^15.6.0",
37
37
  "jsonwebtoken": "^9.0.3",