@elizaos/plugin-workflow 2.0.0-beta.1

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 (294) hide show
  1. package/README.md +71 -0
  2. package/auto-enable.ts +18 -0
  3. package/dist/actions/index.d.ts +2 -0
  4. package/dist/actions/index.d.ts.map +1 -0
  5. package/dist/actions/index.js +2 -0
  6. package/dist/actions/index.js.map +1 -0
  7. package/dist/actions/workflow.d.ts +23 -0
  8. package/dist/actions/workflow.d.ts.map +1 -0
  9. package/dist/actions/workflow.js +425 -0
  10. package/dist/actions/workflow.js.map +1 -0
  11. package/dist/data/defaultNodes.json +9887 -0
  12. package/dist/data/schemaIndex.json +1 -0
  13. package/dist/data/triggerSchemaIndex.json +1 -0
  14. package/dist/db/index.d.ts +2 -0
  15. package/dist/db/index.d.ts.map +1 -0
  16. package/dist/db/index.js +2 -0
  17. package/dist/db/index.js.map +1 -0
  18. package/dist/db/schema.d.ts +588 -0
  19. package/dist/db/schema.d.ts.map +1 -0
  20. package/dist/db/schema.js +59 -0
  21. package/dist/db/schema.js.map +1 -0
  22. package/dist/index.d.ts +34 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +126 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/lib/automations-builder.d.ts +21 -0
  27. package/dist/lib/automations-builder.d.ts.map +1 -0
  28. package/dist/lib/automations-builder.js +557 -0
  29. package/dist/lib/automations-builder.js.map +1 -0
  30. package/dist/lib/automations-types.d.ts +153 -0
  31. package/dist/lib/automations-types.d.ts.map +1 -0
  32. package/dist/lib/automations-types.js +191 -0
  33. package/dist/lib/automations-types.js.map +1 -0
  34. package/dist/lib/index.d.ts +3 -0
  35. package/dist/lib/index.d.ts.map +1 -0
  36. package/dist/lib/index.js +3 -0
  37. package/dist/lib/index.js.map +1 -0
  38. package/dist/lib/legacy-task-migration.d.ts +20 -0
  39. package/dist/lib/legacy-task-migration.d.ts.map +1 -0
  40. package/dist/lib/legacy-task-migration.js +110 -0
  41. package/dist/lib/legacy-task-migration.js.map +1 -0
  42. package/dist/lib/legacy-text-trigger-migration.d.ts +18 -0
  43. package/dist/lib/legacy-text-trigger-migration.d.ts.map +1 -0
  44. package/dist/lib/legacy-text-trigger-migration.js +131 -0
  45. package/dist/lib/legacy-text-trigger-migration.js.map +1 -0
  46. package/dist/lib/workflow-clarification.d.ts +113 -0
  47. package/dist/lib/workflow-clarification.d.ts.map +1 -0
  48. package/dist/lib/workflow-clarification.js +425 -0
  49. package/dist/lib/workflow-clarification.js.map +1 -0
  50. package/dist/plugin-routes.d.ts +9 -0
  51. package/dist/plugin-routes.d.ts.map +1 -0
  52. package/dist/plugin-routes.js +147 -0
  53. package/dist/plugin-routes.js.map +1 -0
  54. package/dist/providers/activeWorkflows.d.ts +11 -0
  55. package/dist/providers/activeWorkflows.d.ts.map +1 -0
  56. package/dist/providers/activeWorkflows.js +72 -0
  57. package/dist/providers/activeWorkflows.js.map +1 -0
  58. package/dist/providers/index.d.ts +4 -0
  59. package/dist/providers/index.d.ts.map +1 -0
  60. package/dist/providers/index.js +4 -0
  61. package/dist/providers/index.js.map +1 -0
  62. package/dist/providers/pendingDraft.d.ts +9 -0
  63. package/dist/providers/pendingDraft.d.ts.map +1 -0
  64. package/dist/providers/pendingDraft.js +48 -0
  65. package/dist/providers/pendingDraft.js.map +1 -0
  66. package/dist/providers/workflowStatus.d.ts +3 -0
  67. package/dist/providers/workflowStatus.d.ts.map +1 -0
  68. package/dist/providers/workflowStatus.js +69 -0
  69. package/dist/providers/workflowStatus.js.map +1 -0
  70. package/dist/register-routes.d.ts +2 -0
  71. package/dist/register-routes.d.ts.map +1 -0
  72. package/dist/register-routes.js +6 -0
  73. package/dist/register-routes.js.map +1 -0
  74. package/dist/routes/_helpers.d.ts +11 -0
  75. package/dist/routes/_helpers.d.ts.map +1 -0
  76. package/dist/routes/_helpers.js +22 -0
  77. package/dist/routes/_helpers.js.map +1 -0
  78. package/dist/routes/automations.d.ts +19 -0
  79. package/dist/routes/automations.d.ts.map +1 -0
  80. package/dist/routes/automations.js +32 -0
  81. package/dist/routes/automations.js.map +1 -0
  82. package/dist/routes/embedded-webhooks.d.ts +3 -0
  83. package/dist/routes/embedded-webhooks.d.ts.map +1 -0
  84. package/dist/routes/embedded-webhooks.js +47 -0
  85. package/dist/routes/embedded-webhooks.js.map +1 -0
  86. package/dist/routes/executions.d.ts +3 -0
  87. package/dist/routes/executions.d.ts.map +1 -0
  88. package/dist/routes/executions.js +58 -0
  89. package/dist/routes/executions.js.map +1 -0
  90. package/dist/routes/index.d.ts +4 -0
  91. package/dist/routes/index.d.ts.map +1 -0
  92. package/dist/routes/index.js +14 -0
  93. package/dist/routes/index.js.map +1 -0
  94. package/dist/routes/nodes.d.ts +3 -0
  95. package/dist/routes/nodes.d.ts.map +1 -0
  96. package/dist/routes/nodes.js +168 -0
  97. package/dist/routes/nodes.js.map +1 -0
  98. package/dist/routes/validation.d.ts +3 -0
  99. package/dist/routes/validation.d.ts.map +1 -0
  100. package/dist/routes/validation.js +41 -0
  101. package/dist/routes/validation.js.map +1 -0
  102. package/dist/routes/workflow-routes.d.ts +27 -0
  103. package/dist/routes/workflow-routes.d.ts.map +1 -0
  104. package/dist/routes/workflow-routes.js +326 -0
  105. package/dist/routes/workflow-routes.js.map +1 -0
  106. package/dist/routes/workflows.d.ts +3 -0
  107. package/dist/routes/workflows.d.ts.map +1 -0
  108. package/dist/routes/workflows.js +252 -0
  109. package/dist/routes/workflows.js.map +1 -0
  110. package/dist/schemas/draftIntent.d.ts +22 -0
  111. package/dist/schemas/draftIntent.d.ts.map +1 -0
  112. package/dist/schemas/draftIntent.js +22 -0
  113. package/dist/schemas/draftIntent.js.map +1 -0
  114. package/dist/schemas/feasibility.d.ts +13 -0
  115. package/dist/schemas/feasibility.d.ts.map +1 -0
  116. package/dist/schemas/feasibility.js +9 -0
  117. package/dist/schemas/feasibility.js.map +1 -0
  118. package/dist/schemas/index.d.ts +5 -0
  119. package/dist/schemas/index.d.ts.map +1 -0
  120. package/dist/schemas/index.js +5 -0
  121. package/dist/schemas/index.js.map +1 -0
  122. package/dist/schemas/keywordExtraction.d.ts +14 -0
  123. package/dist/schemas/keywordExtraction.d.ts.map +1 -0
  124. package/dist/schemas/keywordExtraction.js +12 -0
  125. package/dist/schemas/keywordExtraction.js.map +1 -0
  126. package/dist/schemas/workflowMatching.d.ts +36 -0
  127. package/dist/schemas/workflowMatching.d.ts.map +1 -0
  128. package/dist/schemas/workflowMatching.js +30 -0
  129. package/dist/schemas/workflowMatching.js.map +1 -0
  130. package/dist/services/embedded-workflow-service.d.ts +106 -0
  131. package/dist/services/embedded-workflow-service.d.ts.map +1 -0
  132. package/dist/services/embedded-workflow-service.js +1900 -0
  133. package/dist/services/embedded-workflow-service.js.map +1 -0
  134. package/dist/services/index.d.ts +5 -0
  135. package/dist/services/index.d.ts.map +1 -0
  136. package/dist/services/index.js +5 -0
  137. package/dist/services/index.js.map +1 -0
  138. package/dist/services/workflow-credential-store.d.ts +27 -0
  139. package/dist/services/workflow-credential-store.d.ts.map +1 -0
  140. package/dist/services/workflow-credential-store.js +92 -0
  141. package/dist/services/workflow-credential-store.js.map +1 -0
  142. package/dist/services/workflow-dispatch.d.ts +41 -0
  143. package/dist/services/workflow-dispatch.d.ts.map +1 -0
  144. package/dist/services/workflow-dispatch.js +86 -0
  145. package/dist/services/workflow-dispatch.js.map +1 -0
  146. package/dist/services/workflow-service.d.ts +63 -0
  147. package/dist/services/workflow-service.d.ts.map +1 -0
  148. package/dist/services/workflow-service.js +492 -0
  149. package/dist/services/workflow-service.js.map +1 -0
  150. package/dist/trigger-routes.d.ts +153 -0
  151. package/dist/trigger-routes.d.ts.map +1 -0
  152. package/dist/trigger-routes.js +424 -0
  153. package/dist/trigger-routes.js.map +1 -0
  154. package/dist/types/index.d.ts +457 -0
  155. package/dist/types/index.d.ts.map +1 -0
  156. package/dist/types/index.js +59 -0
  157. package/dist/types/index.js.map +1 -0
  158. package/dist/utils/catalog.d.ts +16 -0
  159. package/dist/utils/catalog.d.ts.map +1 -0
  160. package/dist/utils/catalog.js +211 -0
  161. package/dist/utils/catalog.js.map +1 -0
  162. package/dist/utils/clarification.d.ts +17 -0
  163. package/dist/utils/clarification.d.ts.map +1 -0
  164. package/dist/utils/clarification.js +46 -0
  165. package/dist/utils/clarification.js.map +1 -0
  166. package/dist/utils/context.d.ts +4 -0
  167. package/dist/utils/context.d.ts.map +1 -0
  168. package/dist/utils/context.js +18 -0
  169. package/dist/utils/context.js.map +1 -0
  170. package/dist/utils/credentialResolver.d.ts +22 -0
  171. package/dist/utils/credentialResolver.d.ts.map +1 -0
  172. package/dist/utils/credentialResolver.js +146 -0
  173. package/dist/utils/credentialResolver.js.map +1 -0
  174. package/dist/utils/generation.d.ts +36 -0
  175. package/dist/utils/generation.d.ts.map +1 -0
  176. package/dist/utils/generation.js +701 -0
  177. package/dist/utils/generation.js.map +1 -0
  178. package/dist/utils/host-capabilities.d.ts +27 -0
  179. package/dist/utils/host-capabilities.d.ts.map +1 -0
  180. package/dist/utils/host-capabilities.js +59 -0
  181. package/dist/utils/host-capabilities.js.map +1 -0
  182. package/dist/utils/inferSyntheticOutputSchema.d.ts +20 -0
  183. package/dist/utils/inferSyntheticOutputSchema.d.ts.map +1 -0
  184. package/dist/utils/inferSyntheticOutputSchema.js +151 -0
  185. package/dist/utils/inferSyntheticOutputSchema.js.map +1 -0
  186. package/dist/utils/outputSchema.d.ts +26 -0
  187. package/dist/utils/outputSchema.d.ts.map +1 -0
  188. package/dist/utils/outputSchema.js +297 -0
  189. package/dist/utils/outputSchema.js.map +1 -0
  190. package/dist/utils/validateAndRepair.d.ts +41 -0
  191. package/dist/utils/validateAndRepair.d.ts.map +1 -0
  192. package/dist/utils/validateAndRepair.js +483 -0
  193. package/dist/utils/validateAndRepair.js.map +1 -0
  194. package/dist/utils/workflow-prompts/actionResponse.d.ts +2 -0
  195. package/dist/utils/workflow-prompts/actionResponse.d.ts.map +1 -0
  196. package/dist/utils/workflow-prompts/actionResponse.js +17 -0
  197. package/dist/utils/workflow-prompts/actionResponse.js.map +1 -0
  198. package/dist/utils/workflow-prompts/draftIntent.d.ts +2 -0
  199. package/dist/utils/workflow-prompts/draftIntent.d.ts.map +1 -0
  200. package/dist/utils/workflow-prompts/draftIntent.js +23 -0
  201. package/dist/utils/workflow-prompts/draftIntent.js.map +1 -0
  202. package/dist/utils/workflow-prompts/feasibilityCheck.d.ts +2 -0
  203. package/dist/utils/workflow-prompts/feasibilityCheck.d.ts.map +1 -0
  204. package/dist/utils/workflow-prompts/feasibilityCheck.js +21 -0
  205. package/dist/utils/workflow-prompts/feasibilityCheck.js.map +1 -0
  206. package/dist/utils/workflow-prompts/fieldCorrection.d.ts +3 -0
  207. package/dist/utils/workflow-prompts/fieldCorrection.d.ts.map +1 -0
  208. package/dist/utils/workflow-prompts/fieldCorrection.js +20 -0
  209. package/dist/utils/workflow-prompts/fieldCorrection.js.map +1 -0
  210. package/dist/utils/workflow-prompts/index.d.ts +8 -0
  211. package/dist/utils/workflow-prompts/index.d.ts.map +1 -0
  212. package/dist/utils/workflow-prompts/index.js +8 -0
  213. package/dist/utils/workflow-prompts/index.js.map +1 -0
  214. package/dist/utils/workflow-prompts/keywordExtraction.d.ts +2 -0
  215. package/dist/utils/workflow-prompts/keywordExtraction.d.ts.map +1 -0
  216. package/dist/utils/workflow-prompts/keywordExtraction.js +21 -0
  217. package/dist/utils/workflow-prompts/keywordExtraction.js.map +1 -0
  218. package/dist/utils/workflow-prompts/parameterCorrection.d.ts +3 -0
  219. package/dist/utils/workflow-prompts/parameterCorrection.d.ts.map +1 -0
  220. package/dist/utils/workflow-prompts/parameterCorrection.js +29 -0
  221. package/dist/utils/workflow-prompts/parameterCorrection.js.map +1 -0
  222. package/dist/utils/workflow-prompts/workflowGeneration.d.ts +2 -0
  223. package/dist/utils/workflow-prompts/workflowGeneration.d.ts.map +1 -0
  224. package/dist/utils/workflow-prompts/workflowGeneration.js +529 -0
  225. package/dist/utils/workflow-prompts/workflowGeneration.js.map +1 -0
  226. package/dist/utils/workflow-prompts/workflowMatching.d.ts +2 -0
  227. package/dist/utils/workflow-prompts/workflowMatching.d.ts.map +1 -0
  228. package/dist/utils/workflow-prompts/workflowMatching.js +23 -0
  229. package/dist/utils/workflow-prompts/workflowMatching.js.map +1 -0
  230. package/dist/utils/workflow.d.ts +62 -0
  231. package/dist/utils/workflow.d.ts.map +1 -0
  232. package/dist/utils/workflow.js +712 -0
  233. package/dist/utils/workflow.js.map +1 -0
  234. package/package.json +87 -0
  235. package/src/actions/index.ts +1 -0
  236. package/src/actions/workflow.ts +494 -0
  237. package/src/data/defaultNodes.json +9887 -0
  238. package/src/data/schemaIndex.json +1 -0
  239. package/src/data/triggerSchemaIndex.json +1 -0
  240. package/src/db/index.ts +8 -0
  241. package/src/db/schema.ts +94 -0
  242. package/src/index.ts +179 -0
  243. package/src/lib/automations-builder.ts +679 -0
  244. package/src/lib/automations-types.ts +391 -0
  245. package/src/lib/index.ts +8 -0
  246. package/src/lib/legacy-task-migration.ts +143 -0
  247. package/src/lib/legacy-text-trigger-migration.ts +178 -0
  248. package/src/lib/workflow-clarification.ts +497 -0
  249. package/src/plugin-routes.ts +164 -0
  250. package/src/providers/activeWorkflows.ts +81 -0
  251. package/src/providers/index.ts +3 -0
  252. package/src/providers/pendingDraft.ts +55 -0
  253. package/src/providers/workflowStatus.ts +88 -0
  254. package/src/register-routes.ts +6 -0
  255. package/src/routes/_helpers.ts +27 -0
  256. package/src/routes/automations.ts +46 -0
  257. package/src/routes/embedded-webhooks.ts +64 -0
  258. package/src/routes/executions.ts +75 -0
  259. package/src/routes/index.ts +16 -0
  260. package/src/routes/nodes.ts +211 -0
  261. package/src/routes/validation.ts +51 -0
  262. package/src/routes/workflow-routes.ts +469 -0
  263. package/src/routes/workflows.ts +310 -0
  264. package/src/schemas/draftIntent.ts +21 -0
  265. package/src/schemas/feasibility.ts +8 -0
  266. package/src/schemas/index.ts +4 -0
  267. package/src/schemas/keywordExtraction.ts +11 -0
  268. package/src/schemas/workflowMatching.ts +29 -0
  269. package/src/services/embedded-workflow-service.ts +2224 -0
  270. package/src/services/index.ts +17 -0
  271. package/src/services/workflow-credential-store.ts +132 -0
  272. package/src/services/workflow-dispatch.ts +121 -0
  273. package/src/services/workflow-service.ts +839 -0
  274. package/src/trigger-routes.ts +714 -0
  275. package/src/types/index.ts +562 -0
  276. package/src/utils/catalog.ts +260 -0
  277. package/src/utils/clarification.ts +52 -0
  278. package/src/utils/context.ts +22 -0
  279. package/src/utils/credentialResolver.ts +234 -0
  280. package/src/utils/generation.ts +987 -0
  281. package/src/utils/host-capabilities.ts +81 -0
  282. package/src/utils/inferSyntheticOutputSchema.ts +163 -0
  283. package/src/utils/outputSchema.ts +372 -0
  284. package/src/utils/validateAndRepair.ts +610 -0
  285. package/src/utils/workflow-prompts/actionResponse.ts +16 -0
  286. package/src/utils/workflow-prompts/draftIntent.ts +22 -0
  287. package/src/utils/workflow-prompts/feasibilityCheck.ts +20 -0
  288. package/src/utils/workflow-prompts/fieldCorrection.ts +20 -0
  289. package/src/utils/workflow-prompts/index.ts +10 -0
  290. package/src/utils/workflow-prompts/keywordExtraction.ts +20 -0
  291. package/src/utils/workflow-prompts/parameterCorrection.ts +29 -0
  292. package/src/utils/workflow-prompts/workflowGeneration.ts +528 -0
  293. package/src/utils/workflow-prompts/workflowMatching.ts +22 -0
  294. package/src/utils/workflow.ts +895 -0
@@ -0,0 +1,557 @@
1
+ /**
2
+ * Builder for the `/api/automations` response surface.
3
+ *
4
+ * Reads workflows in-process via WorkflowService, runtime tasks via the core
5
+ * runtime task API, and draft conversations via runtime room APIs. There is
6
+ * no dynamic import of plugin-workflow because this code IS the plugin.
7
+ *
8
+ * Trigger task lookup: the runtime stores trigger tasks under three tag
9
+ * combinations — `["queue","repeat","trigger"]` for user-defined triggers and
10
+ * `["queue","repeat","heartbeat"]` for plugin-owned heartbeats. We replicate
11
+ * `listTriggerTasks` from `packages/agent/src/triggers/runtime.ts` here
12
+ * because plugin-workflow cannot depend on @elizaos/agent.
13
+ */
14
+ import { stringToUuid } from '@elizaos/core';
15
+ import { WORKFLOW_SERVICE_TYPE } from '../services/workflow-service';
16
+ import { isAutomationConversationMetadata, taskToTriggerSummary, toWorkbenchTaskView, } from './automations-types';
17
+ const WORKFLOW_DRAFT_TITLE = 'New Workflow Draft';
18
+ const SYSTEM_TASK_NAMES = new Set([
19
+ 'EMBEDDING_DRAIN',
20
+ 'PROACTIVE_AGENT',
21
+ 'LIFEOPS_SCHEDULER',
22
+ 'TRIGGER_DISPATCH',
23
+ 'heartbeat',
24
+ ]);
25
+ // 30s cache for last-execution data — avoids hammering the workflow runtime on
26
+ // every automations poll. null data = checked and found no executions yet
27
+ // (still cached to avoid re-polling).
28
+ const lastExecutionCache = new Map();
29
+ const LAST_EXECUTION_TTL_MS = 30_000;
30
+ function isRecord(value) {
31
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
32
+ }
33
+ function asString(value) {
34
+ if (typeof value !== 'string') {
35
+ return undefined;
36
+ }
37
+ const trimmed = value.trim();
38
+ return trimmed.length > 0 ? trimmed : undefined;
39
+ }
40
+ function normalizeDateValue(value) {
41
+ if (typeof value === 'string') {
42
+ const parsed = Date.parse(value);
43
+ return Number.isFinite(parsed) ? new Date(parsed).toISOString() : null;
44
+ }
45
+ if (typeof value === 'number' && Number.isFinite(value)) {
46
+ return new Date(value).toISOString();
47
+ }
48
+ if (value instanceof Date) {
49
+ return value.toISOString();
50
+ }
51
+ return null;
52
+ }
53
+ function resolveAgentName(runtime) {
54
+ return runtime.character?.name?.trim() || 'Eliza';
55
+ }
56
+ function isSystemTask(task) {
57
+ if (SYSTEM_TASK_NAMES.has(task.name)) {
58
+ return true;
59
+ }
60
+ const tags = new Set(task.tags ?? []);
61
+ return tags.has('queue') && tags.has('repeat');
62
+ }
63
+ /**
64
+ * True when the raw runtime task carries the `migratedToWorkflowId` metadata
65
+ * flag set by `migrateLegacyWorkbenchTasks`. The workflow representation is
66
+ * already surfaced by the workflow listing path; the original task should not
67
+ * also appear as a coordinator-text item.
68
+ */
69
+ function taskHasMigrationFlag(rawTasks, taskId) {
70
+ for (const raw of rawTasks) {
71
+ if (raw.id !== taskId)
72
+ continue;
73
+ const meta = isRecord(raw.metadata) ? raw.metadata : null;
74
+ if (meta && typeof meta.migratedToWorkflowId === 'string') {
75
+ return true;
76
+ }
77
+ return false;
78
+ }
79
+ return false;
80
+ }
81
+ function choosePreferredSystemTask(current, candidate) {
82
+ const currentHasDescription = current.description.trim().length > 0;
83
+ const candidateHasDescription = candidate.description.trim().length > 0;
84
+ if (candidateHasDescription && !currentHasDescription) {
85
+ return candidate;
86
+ }
87
+ if (currentHasDescription && !candidateHasDescription) {
88
+ return current;
89
+ }
90
+ return (candidate.updatedAt ?? 0) > (current.updatedAt ?? 0) ? candidate : current;
91
+ }
92
+ function deduplicateSystemTasks(tasks) {
93
+ const systemTasksByName = new Map();
94
+ const userTasks = [];
95
+ for (const task of tasks) {
96
+ if (!isSystemTask(task)) {
97
+ userTasks.push(task);
98
+ continue;
99
+ }
100
+ const existing = systemTasksByName.get(task.name);
101
+ if (!existing) {
102
+ systemTasksByName.set(task.name, task);
103
+ continue;
104
+ }
105
+ systemTasksByName.set(task.name, choosePreferredSystemTask(existing, task));
106
+ }
107
+ return [...userTasks, ...systemTasksByName.values()];
108
+ }
109
+ function buildRoomBinding(room) {
110
+ if (!room) {
111
+ return null;
112
+ }
113
+ return {
114
+ conversationId: room.conversationId,
115
+ roomId: room.roomId,
116
+ scope: (room.metadata.scope ?? 'general'),
117
+ ...(room.metadata.sourceConversationId
118
+ ? { sourceConversationId: room.metadata.sourceConversationId }
119
+ : {}),
120
+ ...(room.metadata.terminalBridgeConversationId
121
+ ? {
122
+ terminalBridgeConversationId: room.metadata.terminalBridgeConversationId,
123
+ }
124
+ : {}),
125
+ };
126
+ }
127
+ function extractConversationMetadataFromRoom(room) {
128
+ const roomMetadata = isRecord(room?.metadata) ? room.metadata : null;
129
+ if (!roomMetadata) {
130
+ return undefined;
131
+ }
132
+ const stored = isRecord(roomMetadata.webConversation) ? roomMetadata.webConversation : null;
133
+ if (!stored) {
134
+ return undefined;
135
+ }
136
+ // The full sanitization lives in @elizaos/agent; here we just extract the
137
+ // metadata fields we actually consume in the automations response.
138
+ const next = {};
139
+ const scope = asString(stored.scope);
140
+ if (scope)
141
+ next.scope = scope;
142
+ const automationType = asString(stored.automationType);
143
+ if (automationType === 'coordinator_text' || automationType === 'workflow') {
144
+ next.automationType = automationType;
145
+ }
146
+ const taskId = asString(stored.taskId);
147
+ if (taskId)
148
+ next.taskId = taskId;
149
+ const triggerId = asString(stored.triggerId);
150
+ if (triggerId)
151
+ next.triggerId = triggerId;
152
+ const workflowId = asString(stored.workflowId);
153
+ if (workflowId)
154
+ next.workflowId = workflowId;
155
+ const workflowName = asString(stored.workflowName);
156
+ if (workflowName)
157
+ next.workflowName = workflowName;
158
+ const draftId = asString(stored.draftId);
159
+ if (draftId)
160
+ next.draftId = draftId;
161
+ const sourceConversationId = asString(stored.sourceConversationId);
162
+ if (sourceConversationId)
163
+ next.sourceConversationId = sourceConversationId;
164
+ const terminalBridgeConversationId = asString(stored.terminalBridgeConversationId);
165
+ if (terminalBridgeConversationId)
166
+ next.terminalBridgeConversationId = terminalBridgeConversationId;
167
+ return Object.keys(next).length > 0 ? next : undefined;
168
+ }
169
+ function readAutomationRoomRecord(room) {
170
+ const roomId = asString(room.id);
171
+ if (!roomId) {
172
+ return null;
173
+ }
174
+ const metadata = extractConversationMetadataFromRoom(room);
175
+ if (!metadata || !isAutomationConversationMetadata(metadata)) {
176
+ return null;
177
+ }
178
+ const roomMetadata = isRecord(room.metadata) ? room.metadata : null;
179
+ const webConversation = isRecord(roomMetadata?.webConversation)
180
+ ? roomMetadata.webConversation
181
+ : null;
182
+ return {
183
+ title: asString(room.name) ?? 'Automation',
184
+ roomId,
185
+ conversationId: asString(webConversation?.conversationId) ?? null,
186
+ metadata,
187
+ updatedAt: normalizeDateValue(room.updatedAt),
188
+ };
189
+ }
190
+ async function listAutomationRooms(runtime, agentName) {
191
+ const worldId = stringToUuid(`${agentName}-web-chat-world`);
192
+ const rooms = await runtime.getRooms(worldId);
193
+ return rooms
194
+ .map((room) => readAutomationRoomRecord(room))
195
+ .filter((room) => room !== null);
196
+ }
197
+ /**
198
+ * Replicates `listTriggerTasks` from @elizaos/agent's triggers/runtime.ts.
199
+ * We can't import from @elizaos/agent (would create a dependency cycle),
200
+ * so we hit the runtime's task API directly with the same tag filters.
201
+ * `runtime.getTasks` automatically scopes by `agentId`.
202
+ */
203
+ async function listTriggerTasks(runtime) {
204
+ const [triggerTasks, heartbeatTasks] = await Promise.all([
205
+ runtime.getTasks({ tags: ['repeat', 'trigger'] }),
206
+ runtime.getTasks({ tags: ['repeat', 'heartbeat'] }),
207
+ ]);
208
+ const merged = new Map();
209
+ for (const task of [...triggerTasks, ...heartbeatTasks]) {
210
+ const key = task.id ?? `${task.name ?? ''}:${task.description ?? ''}:${(task.tags ?? []).join(',')}`;
211
+ if (!merged.has(key)) {
212
+ merged.set(key, task);
213
+ }
214
+ }
215
+ return [...merged.values()];
216
+ }
217
+ function buildCoordinatorTaskItem(task, room) {
218
+ const system = isSystemTask(task);
219
+ return {
220
+ id: `task:${task.id}`,
221
+ type: 'coordinator_text',
222
+ source: 'workbench_task',
223
+ title: task.name,
224
+ description: task.description,
225
+ status: system ? 'system' : task.isCompleted ? 'completed' : 'active',
226
+ enabled: !task.isCompleted,
227
+ system,
228
+ isDraft: false,
229
+ hasBackingWorkflow: false,
230
+ updatedAt: room?.updatedAt ?? normalizeDateValue(task.updatedAt),
231
+ taskId: task.id,
232
+ task,
233
+ schedules: [],
234
+ room: buildRoomBinding(room),
235
+ };
236
+ }
237
+ function buildCoordinatorTriggerItem(trigger, room) {
238
+ return {
239
+ id: `trigger:${trigger.id}`,
240
+ type: 'coordinator_text',
241
+ source: 'trigger',
242
+ title: trigger.displayName,
243
+ description: trigger.instructions,
244
+ status: trigger.enabled ? 'active' : 'paused',
245
+ enabled: trigger.enabled,
246
+ system: false,
247
+ isDraft: false,
248
+ hasBackingWorkflow: false,
249
+ updatedAt: room?.updatedAt ??
250
+ normalizeDateValue(trigger.updatedAt) ??
251
+ normalizeDateValue(trigger.lastRunAtIso),
252
+ triggerId: trigger.id,
253
+ trigger,
254
+ schedules: [trigger],
255
+ room: buildRoomBinding(room),
256
+ };
257
+ }
258
+ function buildWorkflowDraftItem(room) {
259
+ const metadata = room.metadata;
260
+ const title = metadata.workflowName?.trim() || room.title.trim() || WORKFLOW_DRAFT_TITLE;
261
+ return {
262
+ id: `workflow-draft:${metadata.draftId}`,
263
+ type: 'workflow',
264
+ source: 'workflow_draft',
265
+ title,
266
+ description: '',
267
+ status: 'draft',
268
+ enabled: true,
269
+ system: false,
270
+ isDraft: true,
271
+ hasBackingWorkflow: false,
272
+ updatedAt: room.updatedAt,
273
+ draftId: room.metadata.draftId,
274
+ schedules: [],
275
+ room: buildRoomBinding(room),
276
+ };
277
+ }
278
+ function buildAutomationDraftItem(room) {
279
+ const metadata = room.metadata;
280
+ const trimmedTitle = room.title.trim();
281
+ const title = trimmedTitle && trimmedTitle.toLowerCase() !== 'default' ? trimmedTitle : 'New automation';
282
+ return {
283
+ id: `automation-draft:${metadata.draftId}`,
284
+ type: 'automation_draft',
285
+ source: 'automation_draft',
286
+ title,
287
+ description: '',
288
+ status: 'draft',
289
+ enabled: true,
290
+ system: false,
291
+ isDraft: true,
292
+ hasBackingWorkflow: false,
293
+ updatedAt: room.updatedAt,
294
+ draftId: metadata.draftId,
295
+ schedules: [],
296
+ room: buildRoomBinding(room),
297
+ };
298
+ }
299
+ function buildWorkflowItem(workflow, room, fallback) {
300
+ const missingBackingWorkflow = !workflow && !fallback.trigger;
301
+ const title = workflow?.name?.trim() ||
302
+ room?.metadata.workflowName?.trim() ||
303
+ fallback.workflowName?.trim() ||
304
+ fallback.workflowId;
305
+ const enabled = missingBackingWorkflow === true
306
+ ? false
307
+ : (workflow?.active ?? fallback.trigger?.enabled ?? false);
308
+ const description = workflow?.description?.trim() ||
309
+ (fallback.trigger ? `Scheduled workflow automation for ${title}.` : '');
310
+ return {
311
+ id: `workflow:${fallback.workflowId}`,
312
+ type: 'workflow',
313
+ source: workflow ? 'workflow' : 'workflow_shadow',
314
+ title,
315
+ description,
316
+ status: missingBackingWorkflow ? 'draft' : enabled ? 'active' : 'paused',
317
+ enabled,
318
+ system: false,
319
+ isDraft: missingBackingWorkflow,
320
+ hasBackingWorkflow: Boolean(workflow),
321
+ updatedAt: room?.updatedAt ??
322
+ normalizeDateValue(fallback.trigger?.updatedAt) ??
323
+ normalizeDateValue(fallback.trigger?.lastRunAtIso),
324
+ workflowId: fallback.workflowId,
325
+ workflow,
326
+ schedules: fallback.trigger ? [fallback.trigger] : [],
327
+ room: buildRoomBinding(room),
328
+ };
329
+ }
330
+ function compareAutomationItems(left, right) {
331
+ if (left.system !== right.system) {
332
+ return left.system ? 1 : -1;
333
+ }
334
+ if (left.isDraft !== right.isDraft) {
335
+ return left.isDraft ? -1 : 1;
336
+ }
337
+ const leftUpdated = left.updatedAt ? Date.parse(left.updatedAt) : 0;
338
+ const rightUpdated = right.updatedAt ? Date.parse(right.updatedAt) : 0;
339
+ if (rightUpdated !== leftUpdated) {
340
+ return rightUpdated - leftUpdated;
341
+ }
342
+ return left.title.localeCompare(right.title);
343
+ }
344
+ function normalizeLastExecution(raw) {
345
+ const rawStatus = raw.status;
346
+ if (typeof rawStatus !== 'string')
347
+ return null;
348
+ const STATUS_MAP = {
349
+ success: 'success',
350
+ error: 'error',
351
+ crashed: 'error',
352
+ running: 'running',
353
+ waiting: 'waiting',
354
+ };
355
+ const status = STATUS_MAP[rawStatus] ?? 'unknown';
356
+ const startedAt = typeof raw.startedAt === 'string' ? raw.startedAt : null;
357
+ if (!startedAt)
358
+ return null;
359
+ const stoppedAt = typeof raw.stoppedAt === 'string' ? raw.stoppedAt : null;
360
+ const errorMessage = (() => {
361
+ const data = isRecord(raw.data) ? raw.data : null;
362
+ const resultData = isRecord(data?.resultData) ? data.resultData : null;
363
+ const error = isRecord(resultData?.error) ? resultData.error : null;
364
+ return typeof error?.message === 'string' ? error.message : undefined;
365
+ })();
366
+ return {
367
+ status,
368
+ startedAt,
369
+ stoppedAt,
370
+ ...(errorMessage ? { errorMessage } : {}),
371
+ };
372
+ }
373
+ function getWorkflowService(runtime) {
374
+ const candidate = runtime.getService?.(WORKFLOW_SERVICE_TYPE);
375
+ return candidate ?? null;
376
+ }
377
+ function buildWorkflowStatus(service) {
378
+ return {
379
+ mode: service ? 'local' : 'disabled',
380
+ host: 'in-process',
381
+ status: service ? 'ready' : 'error',
382
+ cloudConnected: false,
383
+ localEnabled: Boolean(service),
384
+ platform: 'desktop',
385
+ cloudHealth: 'unknown',
386
+ errorMessage: service ? null : 'Workflow service is not registered',
387
+ };
388
+ }
389
+ async function loadWorkflowList(service) {
390
+ if (!service) {
391
+ return { workflows: [], workflowFetchError: 'Workflow service is not registered' };
392
+ }
393
+ try {
394
+ const workflows = await service.listWorkflows();
395
+ return { workflows, workflowFetchError: null };
396
+ }
397
+ catch (error) {
398
+ return {
399
+ workflows: [],
400
+ workflowFetchError: error instanceof Error ? error.message : 'Unable to load workflows',
401
+ };
402
+ }
403
+ }
404
+ async function fetchLastExecution(service, workflowId) {
405
+ const cached = lastExecutionCache.get(workflowId);
406
+ if (cached && cached.expiresAt > Date.now()) {
407
+ return cached.data;
408
+ }
409
+ const response = await service.listExecutions({ workflowId, limit: 1 });
410
+ if (!response.data || response.data.length === 0) {
411
+ lastExecutionCache.set(workflowId, {
412
+ data: null,
413
+ expiresAt: Date.now() + LAST_EXECUTION_TTL_MS,
414
+ });
415
+ return null;
416
+ }
417
+ const exec = normalizeLastExecution(response.data[0]);
418
+ lastExecutionCache.set(workflowId, {
419
+ data: exec,
420
+ expiresAt: Date.now() + LAST_EXECUTION_TTL_MS,
421
+ });
422
+ return exec;
423
+ }
424
+ export async function buildAutomationListResponse(runtime) {
425
+ const agentName = resolveAgentName(runtime);
426
+ const rooms = await listAutomationRooms(runtime, agentName);
427
+ const taskRooms = new Map(rooms
428
+ .filter((room) => room.metadata.taskId)
429
+ .map((room) => [room.metadata.taskId, room]));
430
+ const triggerRooms = new Map(rooms
431
+ .filter((room) => room.metadata.triggerId)
432
+ .map((room) => [room.metadata.triggerId, room]));
433
+ const workflowRooms = new Map(rooms
434
+ .filter((room) => room.metadata.workflowId)
435
+ .map((room) => [room.metadata.workflowId, room]));
436
+ const workflowDraftItems = rooms
437
+ .filter((room) => room.metadata.scope === 'automation-workflow-draft')
438
+ .filter((room) => typeof room.metadata.draftId === 'string')
439
+ .map((room) => buildWorkflowDraftItem(room));
440
+ const automationDraftItems = rooms
441
+ .filter((room) => room.metadata.scope === 'automation-draft')
442
+ .filter((room) => typeof room.metadata.draftId === 'string')
443
+ .map((room) => buildAutomationDraftItem(room));
444
+ const allTasks = await runtime.getTasks({});
445
+ const tasks = deduplicateSystemTasks(allTasks
446
+ .map((task) => toWorkbenchTaskView(task))
447
+ .filter((task) => task !== null)
448
+ // Tasks migrated to workflows by plugin-workflow's boot migration carry
449
+ // a `migratedToWorkflowId` metadata flag; their workflow representation
450
+ // is already in the workflowItemsById map below, so skip them here to
451
+ // avoid duplicate Automations entries.
452
+ .filter((task) => !taskHasMigrationFlag(allTasks, task.id)));
453
+ const triggerTaskRecords = await listTriggerTasks(runtime);
454
+ const triggerItems = triggerTaskRecords
455
+ .map((task) => taskToTriggerSummary(task))
456
+ .filter((trigger) => trigger !== null);
457
+ const triggerTaskIds = new Set(triggerItems.map((trigger) => trigger.taskId));
458
+ const taskItems = tasks
459
+ .filter((task) => !triggerTaskIds.has(task.id))
460
+ .map((task) => buildCoordinatorTaskItem(task, taskRooms.get(task.id)));
461
+ const service = getWorkflowService(runtime);
462
+ const workflowStatus = buildWorkflowStatus(service);
463
+ const { workflows: workflowList, workflowFetchError } = await loadWorkflowList(service);
464
+ const workflowItemsById = new Map();
465
+ for (const workflow of workflowList) {
466
+ workflowItemsById.set(workflow.id, buildWorkflowItem(workflow, workflowRooms.get(workflow.id), {
467
+ workflowId: workflow.id,
468
+ workflowName: workflow.name,
469
+ }));
470
+ }
471
+ for (const trigger of triggerItems) {
472
+ if (trigger.kind === 'workflow' && trigger.workflowId) {
473
+ const existing = workflowItemsById.get(trigger.workflowId);
474
+ if (existing) {
475
+ existing.schedules = [...existing.schedules, trigger];
476
+ existing.updatedAt =
477
+ existing.updatedAt ??
478
+ normalizeDateValue(trigger.updatedAt) ??
479
+ normalizeDateValue(trigger.lastRunAtIso);
480
+ continue;
481
+ }
482
+ workflowItemsById.set(trigger.workflowId, buildWorkflowItem(undefined, workflowRooms.get(trigger.workflowId), {
483
+ workflowId: trigger.workflowId,
484
+ workflowName: trigger.workflowName,
485
+ trigger,
486
+ }));
487
+ }
488
+ }
489
+ // Only synthesize workflow items from rooms when workflow runtime is offline
490
+ // (`workflowFetchError` set) — in that case the room is the most-recent
491
+ // ground truth we have and should be surfaced. When workflow runtime is online and
492
+ // returned a list, any workflowId in `workflowRooms` that isn't in the
493
+ // current workflow list is an ORPHAN: the workflow was deleted but the chat
494
+ // room/conversation wasn't cleaned up. Surfacing those creates ghost
495
+ // rows the user can't dismiss. Skip them; the UI's deleteWorkflow path
496
+ // also deletes the conversation now, so future deletions won't leak rooms.
497
+ const workflowOffline = workflowFetchError !== null;
498
+ if (workflowOffline) {
499
+ for (const [workflowId, room] of workflowRooms.entries()) {
500
+ if (!workflowItemsById.has(workflowId)) {
501
+ workflowItemsById.set(workflowId, buildWorkflowItem(undefined, room, {
502
+ workflowId,
503
+ workflowName: room.metadata.workflowName,
504
+ }));
505
+ }
506
+ }
507
+ }
508
+ // Fetch last execution for each live workflow in parallel.
509
+ // Promise.allSettled ensures one failure does not block the full list.
510
+ if (!workflowOffline && service && workflowItemsById.size > 0) {
511
+ const now = Date.now();
512
+ for (const [k, v] of lastExecutionCache) {
513
+ if (v.expiresAt < now)
514
+ lastExecutionCache.delete(k);
515
+ }
516
+ const workflowIds = [...workflowItemsById.keys()];
517
+ await Promise.allSettled(workflowIds.map(async (workflowId) => {
518
+ const exec = await fetchLastExecution(service, workflowId);
519
+ if (!exec)
520
+ return;
521
+ const item = workflowItemsById.get(workflowId);
522
+ if (item)
523
+ item.lastExecution = exec;
524
+ }));
525
+ }
526
+ const coordinatorTriggerItems = triggerItems
527
+ .filter((trigger) => trigger.kind !== 'workflow')
528
+ .map((trigger) => buildCoordinatorTriggerItem(trigger, triggerRooms.get(trigger.id)));
529
+ const automations = [
530
+ ...automationDraftItems,
531
+ ...workflowDraftItems,
532
+ ...taskItems,
533
+ ...coordinatorTriggerItems,
534
+ ...workflowItemsById.values(),
535
+ ].sort(compareAutomationItems);
536
+ const summary = {
537
+ total: automations.length,
538
+ coordinatorCount: automations.filter((automation) => automation.type === 'coordinator_text')
539
+ .length,
540
+ workflowCount: automations.filter((automation) => automation.type === 'workflow').length,
541
+ scheduledCount: automations.filter((automation) => automation.schedules.length > 0).length,
542
+ draftCount: automations.filter((automation) => automation.isDraft).length,
543
+ };
544
+ return {
545
+ automations,
546
+ summary,
547
+ workflowStatus,
548
+ workflowFetchError,
549
+ };
550
+ }
551
+ /**
552
+ * Test-only: clear the last-execution cache between cases.
553
+ */
554
+ export function __resetAutomationsCacheForTests() {
555
+ lastExecutionCache.clear();
556
+ }
557
+ //# sourceMappingURL=automations-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automations-builder.js","sourceRoot":"","sources":["../../src/lib/automations-builder.ts"],"names":[],"mappings":"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"}