@elizaos/plugin-workflow 2.0.0-beta.1 → 2.0.3-beta.6

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 (170) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +28 -26
  3. package/dist/actions/eval-code.d.ts +12 -0
  4. package/dist/actions/eval-code.d.ts.map +1 -0
  5. package/dist/actions/eval-code.js +59 -0
  6. package/dist/actions/eval-code.js.map +1 -0
  7. package/dist/actions/index.d.ts +1 -0
  8. package/dist/actions/index.d.ts.map +1 -1
  9. package/dist/actions/index.js +1 -0
  10. package/dist/actions/index.js.map +1 -1
  11. package/dist/actions/workflow.d.ts +7 -0
  12. package/dist/actions/workflow.d.ts.map +1 -1
  13. package/dist/actions/workflow.js +462 -10
  14. package/dist/actions/workflow.js.map +1 -1
  15. package/dist/db/schema.d.ts +196 -0
  16. package/dist/db/schema.d.ts.map +1 -1
  17. package/dist/db/schema.js +23 -0
  18. package/dist/db/schema.js.map +1 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +9 -64
  21. package/dist/index.js.map +1 -1
  22. package/dist/lib/automations-builder.d.ts.map +1 -1
  23. package/dist/lib/automations-builder.js +10 -35
  24. package/dist/lib/automations-builder.js.map +1 -1
  25. package/dist/lib/automations-types.d.ts +2 -2
  26. package/dist/lib/automations-types.d.ts.map +1 -1
  27. package/dist/lib/automations-types.js.map +1 -1
  28. package/dist/lib/index.d.ts +0 -2
  29. package/dist/lib/index.d.ts.map +1 -1
  30. package/dist/lib/index.js +1 -2
  31. package/dist/lib/index.js.map +1 -1
  32. package/dist/lib/workflow-clarification.d.ts +2 -2
  33. package/dist/lib/workflow-clarification.d.ts.map +1 -1
  34. package/dist/lib/workflow-clarification.js +15 -11
  35. package/dist/lib/workflow-clarification.js.map +1 -1
  36. package/dist/plugin-routes.d.ts.map +1 -1
  37. package/dist/plugin-routes.js +6 -0
  38. package/dist/plugin-routes.js.map +1 -1
  39. package/dist/providers/activeWorkflows.js +2 -2
  40. package/dist/providers/activeWorkflows.js.map +1 -1
  41. package/dist/providers/workflowStatus.js +1 -1
  42. package/dist/providers/workflowStatus.js.map +1 -1
  43. package/dist/routes/workflow-routes.d.ts.map +1 -1
  44. package/dist/routes/workflow-routes.js +68 -2
  45. package/dist/routes/workflow-routes.js.map +1 -1
  46. package/dist/routes/workflows.d.ts.map +1 -1
  47. package/dist/routes/workflows.js +5 -1
  48. package/dist/routes/workflows.js.map +1 -1
  49. package/dist/services/embedded-workflow-service.d.ts +74 -17
  50. package/dist/services/embedded-workflow-service.d.ts.map +1 -1
  51. package/dist/services/embedded-workflow-service.js +343 -149
  52. package/dist/services/embedded-workflow-service.js.map +1 -1
  53. package/dist/services/smithers-runtime.d.ts +47 -0
  54. package/dist/services/smithers-runtime.d.ts.map +1 -0
  55. package/dist/services/smithers-runtime.js +444 -0
  56. package/dist/services/smithers-runtime.js.map +1 -0
  57. package/dist/services/workflow-credential-store.js +1 -1
  58. package/dist/services/workflow-credential-store.js.map +1 -1
  59. package/dist/services/workflow-dispatch.d.ts +31 -1
  60. package/dist/services/workflow-dispatch.d.ts.map +1 -1
  61. package/dist/services/workflow-dispatch.js +75 -10
  62. package/dist/services/workflow-dispatch.js.map +1 -1
  63. package/dist/services/workflow-service.d.ts +27 -1
  64. package/dist/services/workflow-service.d.ts.map +1 -1
  65. package/dist/services/workflow-service.js +133 -11
  66. package/dist/services/workflow-service.js.map +1 -1
  67. package/dist/trigger-routes.d.ts +2 -18
  68. package/dist/trigger-routes.d.ts.map +1 -1
  69. package/dist/trigger-routes.js +11 -39
  70. package/dist/trigger-routes.js.map +1 -1
  71. package/dist/types/index.d.ts +82 -2
  72. package/dist/types/index.d.ts.map +1 -1
  73. package/dist/types/index.js.map +1 -1
  74. package/dist/types/workflow-contracts.d.ts +118 -0
  75. package/dist/types/workflow-contracts.d.ts.map +1 -0
  76. package/dist/types/workflow-contracts.js +2 -0
  77. package/dist/types/workflow-contracts.js.map +1 -0
  78. package/dist/utils/catalog.js +2 -2
  79. package/dist/utils/catalog.js.map +1 -1
  80. package/dist/utils/clarification.d.ts +1 -1
  81. package/dist/utils/clarification.d.ts.map +1 -1
  82. package/dist/utils/clarification.js +15 -4
  83. package/dist/utils/clarification.js.map +1 -1
  84. package/dist/utils/context.js +1 -1
  85. package/dist/utils/context.js.map +1 -1
  86. package/dist/utils/evaluation-samples.d.ts +6 -0
  87. package/dist/utils/evaluation-samples.d.ts.map +1 -0
  88. package/dist/utils/evaluation-samples.js +216 -0
  89. package/dist/utils/evaluation-samples.js.map +1 -0
  90. package/dist/utils/execution-diagnostics.d.ts +26 -0
  91. package/dist/utils/execution-diagnostics.d.ts.map +1 -0
  92. package/dist/utils/execution-diagnostics.js +159 -0
  93. package/dist/utils/execution-diagnostics.js.map +1 -0
  94. package/dist/utils/generation.d.ts.map +1 -1
  95. package/dist/utils/generation.js +134 -19
  96. package/dist/utils/generation.js.map +1 -1
  97. package/dist/utils/host-capabilities.d.ts.map +1 -1
  98. package/dist/utils/host-capabilities.js +20 -5
  99. package/dist/utils/host-capabilities.js.map +1 -1
  100. package/dist/utils/inferSyntheticOutputSchema.js +3 -3
  101. package/dist/utils/inferSyntheticOutputSchema.js.map +1 -1
  102. package/dist/utils/outputSchema.js +1 -1
  103. package/dist/utils/outputSchema.js.map +1 -1
  104. package/dist/utils/validateAndRepair.js +10 -10
  105. package/dist/utils/validateAndRepair.js.map +1 -1
  106. package/dist/utils/workflow-prompts/draftIntent.d.ts +1 -1
  107. package/dist/utils/workflow-prompts/draftIntent.d.ts.map +1 -1
  108. package/dist/utils/workflow-prompts/draftIntent.js +1 -1
  109. package/dist/utils/workflow-prompts/keywordExtraction.d.ts +1 -1
  110. package/dist/utils/workflow-prompts/keywordExtraction.d.ts.map +1 -1
  111. package/dist/utils/workflow-prompts/keywordExtraction.js +1 -1
  112. package/dist/utils/workflow-prompts/workflowGeneration.d.ts +1 -1
  113. package/dist/utils/workflow-prompts/workflowGeneration.d.ts.map +1 -1
  114. package/dist/utils/workflow-prompts/workflowGeneration.js +4 -4
  115. package/dist/utils/workflow-prompts/workflowMatching.d.ts +1 -1
  116. package/dist/utils/workflow-prompts/workflowMatching.d.ts.map +1 -1
  117. package/dist/utils/workflow-prompts/workflowMatching.js +1 -1
  118. package/dist/utils/workflow.d.ts +1 -0
  119. package/dist/utils/workflow.d.ts.map +1 -1
  120. package/dist/utils/workflow.js +44 -8
  121. package/dist/utils/workflow.js.map +1 -1
  122. package/package.json +27 -8
  123. package/registry-entry.json +25 -0
  124. package/src/actions/eval-code.ts +81 -0
  125. package/src/actions/index.ts +1 -0
  126. package/src/actions/workflow.ts +518 -10
  127. package/src/db/schema.ts +31 -0
  128. package/src/index.ts +9 -82
  129. package/src/lib/automations-builder.ts +11 -35
  130. package/src/lib/automations-types.ts +1 -2
  131. package/src/lib/index.ts +0 -8
  132. package/src/lib/workflow-clarification.ts +18 -13
  133. package/src/plugin-routes.ts +6 -0
  134. package/src/providers/activeWorkflows.ts +2 -2
  135. package/src/providers/workflowStatus.ts +1 -1
  136. package/src/routes/workflow-routes.ts +100 -2
  137. package/src/routes/workflows.ts +5 -1
  138. package/src/services/embedded-workflow-service.ts +447 -172
  139. package/src/services/smithers-runtime.ts +526 -0
  140. package/src/services/workflow-credential-store.ts +1 -1
  141. package/src/services/workflow-dispatch.ts +116 -13
  142. package/src/services/workflow-service.ts +186 -10
  143. package/src/trigger-routes.ts +12 -70
  144. package/src/types/index.ts +94 -2
  145. package/src/types/workflow-contracts.ts +166 -0
  146. package/src/utils/catalog.ts +2 -2
  147. package/src/utils/clarification.ts +19 -5
  148. package/src/utils/context.ts +1 -1
  149. package/src/utils/evaluation-samples.ts +239 -0
  150. package/src/utils/execution-diagnostics.ts +192 -0
  151. package/src/utils/generation.ts +224 -32
  152. package/src/utils/host-capabilities.ts +21 -5
  153. package/src/utils/inferSyntheticOutputSchema.ts +3 -3
  154. package/src/utils/outputSchema.ts +1 -1
  155. package/src/utils/validateAndRepair.ts +10 -10
  156. package/src/utils/workflow-prompts/draftIntent.ts +1 -1
  157. package/src/utils/workflow-prompts/keywordExtraction.ts +1 -1
  158. package/src/utils/workflow-prompts/workflowGeneration.ts +4 -4
  159. package/src/utils/workflow-prompts/workflowMatching.ts +1 -1
  160. package/src/utils/workflow.ts +56 -8
  161. package/dist/lib/legacy-task-migration.d.ts +0 -20
  162. package/dist/lib/legacy-task-migration.d.ts.map +0 -1
  163. package/dist/lib/legacy-task-migration.js +0 -110
  164. package/dist/lib/legacy-task-migration.js.map +0 -1
  165. package/dist/lib/legacy-text-trigger-migration.d.ts +0 -18
  166. package/dist/lib/legacy-text-trigger-migration.d.ts.map +0 -1
  167. package/dist/lib/legacy-text-trigger-migration.js +0 -131
  168. package/dist/lib/legacy-text-trigger-migration.js.map +0 -1
  169. package/src/lib/legacy-task-migration.ts +0 -143
  170. package/src/lib/legacy-text-trigger-migration.ts +0 -178
@@ -1,143 +0,0 @@
1
- /**
2
- * Idempotent migration: legacy `workbench-task` Task records → workflows
3
- *
4
- * Walks every Task tagged `workbench-task` for the running agent and, for
5
- * each task that has not already been converted, deploys a one-node workflow
6
- * built around `workflows-nodes-base.respondToEvent`. The original task is
7
- * mutated in place to record `metadata.migratedToWorkflowId` so subsequent
8
- * boots skip it.
9
- *
10
- * Designed to run on every plugin init; per-task try/catch keeps a single
11
- * failed conversion from aborting the loop. The function never throws.
12
- */
13
-
14
- import { type IAgentRuntime, logger, type Task } from '@elizaos/core';
15
- import type { WorkflowService } from '../services/workflow-service';
16
- import { WORKFLOW_SERVICE_TYPE } from '../services/workflow-service';
17
- import type { WorkflowDefinition } from '../types/index';
18
-
19
- const WORKBENCH_TASK_TAG = 'workbench-task';
20
- const RESPOND_TO_EVENT_NODE_TYPE = 'workflows-nodes-base.respondToEvent';
21
-
22
- export interface LegacyTaskMigrationSummary {
23
- migrated: number;
24
- skipped: number;
25
- failed: number;
26
- }
27
-
28
- function readWorkflowService(runtime: IAgentRuntime): WorkflowService | null {
29
- const svc = runtime.getService(WORKFLOW_SERVICE_TYPE) as WorkflowService | null;
30
- return svc ?? null;
31
- }
32
-
33
- function buildRespondToEventWorkflow(task: Task): WorkflowDefinition {
34
- const displayName = task.name?.trim().length ? task.name : 'Workbench Task';
35
- const instructions = task.description?.trim().length ? task.description : displayName;
36
-
37
- return {
38
- name: displayName,
39
- nodes: [
40
- {
41
- id: 'respond-to-event',
42
- name: 'Respond To Event',
43
- type: RESPOND_TO_EVENT_NODE_TYPE,
44
- typeVersion: 1,
45
- position: [0, 0],
46
- parameters: {
47
- instructions,
48
- displayName,
49
- wakeMode: 'inject_now',
50
- },
51
- },
52
- ],
53
- connections: {},
54
- };
55
- }
56
-
57
- export async function migrateLegacyWorkbenchTasks(
58
- runtime: IAgentRuntime
59
- ): Promise<LegacyTaskMigrationSummary> {
60
- const summary: LegacyTaskMigrationSummary = { migrated: 0, skipped: 0, failed: 0 };
61
-
62
- const service = readWorkflowService(runtime);
63
- if (!service) {
64
- logger.debug(
65
- { src: 'plugin:workflow:migration:workbench' },
66
- 'WorkflowService not registered; skipping workbench-task migration'
67
- );
68
- return summary;
69
- }
70
-
71
- let tasks: Task[];
72
- try {
73
- tasks = await runtime.getTasks({
74
- agentIds: [runtime.agentId],
75
- tags: [WORKBENCH_TASK_TAG],
76
- });
77
- } catch (err) {
78
- logger.warn(
79
- {
80
- src: 'plugin:workflow:migration:workbench',
81
- err: err instanceof Error ? err.message : String(err),
82
- },
83
- 'Failed to list workbench-tagged tasks; aborting migration'
84
- );
85
- return summary;
86
- }
87
-
88
- for (const task of tasks) {
89
- if (!task.id) {
90
- summary.skipped += 1;
91
- continue;
92
- }
93
-
94
- const metadata = (task.metadata ?? {}) as Record<string, unknown>;
95
- if (typeof metadata.migratedToWorkflowId === 'string') {
96
- summary.skipped += 1;
97
- continue;
98
- }
99
-
100
- try {
101
- const draft = buildRespondToEventWorkflow(task);
102
- const deployed = await service.deployWorkflow(draft, runtime.agentId);
103
-
104
- if (!deployed.id) {
105
- // Deploy returned without a workflow id (typically: missing
106
- // credentials). Treat as a failure rather than marking the task
107
- // migrated — we want to retry on a future boot.
108
- summary.failed += 1;
109
- logger.warn(
110
- {
111
- src: 'plugin:workflow:migration:workbench',
112
- taskId: task.id,
113
- taskName: task.name,
114
- },
115
- 'deployWorkflow returned no id; will retry on next boot'
116
- );
117
- continue;
118
- }
119
-
120
- await runtime.updateTask(task.id, {
121
- metadata: {
122
- ...metadata,
123
- migratedToWorkflowId: deployed.id,
124
- migratedAt: Date.now(),
125
- },
126
- });
127
- summary.migrated += 1;
128
- } catch (err) {
129
- summary.failed += 1;
130
- logger.warn(
131
- {
132
- src: 'plugin:workflow:migration:workbench',
133
- taskId: task.id,
134
- taskName: task.name,
135
- err: err instanceof Error ? err.message : String(err),
136
- },
137
- 'Failed to migrate workbench task to workflow'
138
- );
139
- }
140
- }
141
-
142
- return summary;
143
- }
@@ -1,178 +0,0 @@
1
- /**
2
- * Idempotent migration: legacy `kind: "text"` trigger Tasks → workflow triggers
3
- *
4
- * Walks every TRIGGER_DISPATCH task for the running agent. For each task whose
5
- * stored `metadata.trigger.kind` is `"text"` (or omitted, which is the legacy
6
- * default), deploy a one-node workflow built around
7
- * `workflows-nodes-base.respondToEvent` and rewrite the trigger metadata so
8
- * `kind = "workflow"` plus a pointer to the new workflow. A `migratedFromText`
9
- * marker prevents double-conversion on subsequent boots.
10
- */
11
-
12
- import {
13
- type IAgentRuntime,
14
- logger,
15
- type Task,
16
- type TaskMetadata,
17
- type TriggerConfig,
18
- } from '@elizaos/core';
19
- import type { WorkflowService } from '../services/workflow-service';
20
- import { WORKFLOW_SERVICE_TYPE } from '../services/workflow-service';
21
- import type { WorkflowDefinition } from '../types/index';
22
-
23
- const TRIGGER_TASK_NAME = 'TRIGGER_DISPATCH';
24
- const RESPOND_TO_EVENT_NODE_TYPE = 'workflows-nodes-base.respondToEvent';
25
-
26
- export interface LegacyTextTriggerMigrationSummary {
27
- migrated: number;
28
- skipped: number;
29
- failed: number;
30
- }
31
-
32
- function readWorkflowService(runtime: IAgentRuntime): WorkflowService | null {
33
- const svc = runtime.getService(WORKFLOW_SERVICE_TYPE) as WorkflowService | null;
34
- return svc ?? null;
35
- }
36
-
37
- function readTriggerFromMetadata(task: Task): TriggerConfig | null {
38
- const trigger = task.metadata?.trigger;
39
- if (!trigger || typeof trigger !== 'object' || Array.isArray(trigger)) return null;
40
- if (typeof trigger.triggerId !== 'string') return null;
41
- return trigger;
42
- }
43
-
44
- function buildRespondToEventWorkflow(
45
- trigger: TriggerConfig,
46
- fallbackName: string
47
- ): WorkflowDefinition {
48
- const displayName =
49
- typeof trigger.displayName === 'string' && trigger.displayName.trim().length > 0
50
- ? trigger.displayName
51
- : fallbackName;
52
- const instructions =
53
- typeof trigger.instructions === 'string' && trigger.instructions.trim().length > 0
54
- ? trigger.instructions
55
- : displayName;
56
-
57
- return {
58
- name: displayName,
59
- nodes: [
60
- {
61
- id: 'respond-to-event',
62
- name: 'Respond To Event',
63
- type: RESPOND_TO_EVENT_NODE_TYPE,
64
- typeVersion: 1,
65
- position: [0, 0],
66
- parameters: {
67
- instructions,
68
- displayName,
69
- wakeMode: 'inject_now',
70
- },
71
- },
72
- ],
73
- connections: {},
74
- };
75
- }
76
-
77
- export async function migrateLegacyTextTriggers(
78
- runtime: IAgentRuntime
79
- ): Promise<LegacyTextTriggerMigrationSummary> {
80
- const summary: LegacyTextTriggerMigrationSummary = { migrated: 0, skipped: 0, failed: 0 };
81
-
82
- const service = readWorkflowService(runtime);
83
- if (!service) {
84
- logger.debug(
85
- { src: 'plugin:workflow:migration:text-trigger' },
86
- 'WorkflowService not registered; skipping text-trigger migration'
87
- );
88
- return summary;
89
- }
90
-
91
- let tasks: Task[];
92
- try {
93
- tasks = await runtime.getTasksByName(TRIGGER_TASK_NAME);
94
- } catch (err) {
95
- logger.warn(
96
- {
97
- src: 'plugin:workflow:migration:text-trigger',
98
- err: err instanceof Error ? err.message : String(err),
99
- },
100
- 'Failed to list trigger dispatch tasks; aborting migration'
101
- );
102
- return summary;
103
- }
104
-
105
- for (const task of tasks) {
106
- if (!task.id || task.agentId !== runtime.agentId) {
107
- summary.skipped += 1;
108
- continue;
109
- }
110
-
111
- const metadata: TaskMetadata = task.metadata ?? {};
112
- if (metadata.migratedFromText === true) {
113
- summary.skipped += 1;
114
- continue;
115
- }
116
-
117
- const trigger = readTriggerFromMetadata(task);
118
- if (!trigger) {
119
- summary.skipped += 1;
120
- continue;
121
- }
122
-
123
- // `kind` is optional in the legacy schema; absence implies "text".
124
- const isTextKind = trigger.kind === 'text' || trigger.kind === undefined;
125
- if (!isTextKind) {
126
- summary.skipped += 1;
127
- continue;
128
- }
129
-
130
- try {
131
- const draft = buildRespondToEventWorkflow(trigger, task.name ?? 'Trigger');
132
- const deployed = await service.deployWorkflow(draft, runtime.agentId);
133
-
134
- if (!deployed.id) {
135
- summary.failed += 1;
136
- logger.warn(
137
- {
138
- src: 'plugin:workflow:migration:text-trigger',
139
- taskId: task.id,
140
- triggerId: trigger.triggerId,
141
- },
142
- 'deployWorkflow returned no id; will retry on next boot'
143
- );
144
- continue;
145
- }
146
-
147
- const updatedTrigger: TriggerConfig = {
148
- ...trigger,
149
- kind: 'workflow',
150
- workflowId: deployed.id,
151
- workflowName: deployed.name,
152
- };
153
-
154
- const nextMetadata: TaskMetadata = {
155
- ...metadata,
156
- trigger: updatedTrigger,
157
- migratedFromText: true,
158
- migratedAt: Date.now(),
159
- };
160
-
161
- await runtime.updateTask(task.id, { metadata: nextMetadata });
162
- summary.migrated += 1;
163
- } catch (err) {
164
- summary.failed += 1;
165
- logger.warn(
166
- {
167
- src: 'plugin:workflow:migration:text-trigger',
168
- taskId: task.id,
169
- triggerId: trigger.triggerId,
170
- err: err instanceof Error ? err.message : String(err),
171
- },
172
- 'Failed to migrate text trigger to workflow trigger'
173
- );
174
- }
175
- }
176
-
177
- return summary;
178
- }