@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.
- package/README.md +71 -0
- package/auto-enable.ts +18 -0
- package/dist/actions/index.d.ts +2 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +2 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/workflow.d.ts +23 -0
- package/dist/actions/workflow.d.ts.map +1 -0
- package/dist/actions/workflow.js +425 -0
- package/dist/actions/workflow.js.map +1 -0
- package/dist/data/defaultNodes.json +9887 -0
- package/dist/data/schemaIndex.json +1 -0
- package/dist/data/triggerSchemaIndex.json +1 -0
- package/dist/db/index.d.ts +2 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +2 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema.d.ts +588 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +59 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +126 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/automations-builder.d.ts +21 -0
- package/dist/lib/automations-builder.d.ts.map +1 -0
- package/dist/lib/automations-builder.js +557 -0
- package/dist/lib/automations-builder.js.map +1 -0
- package/dist/lib/automations-types.d.ts +153 -0
- package/dist/lib/automations-types.d.ts.map +1 -0
- package/dist/lib/automations-types.js +191 -0
- package/dist/lib/automations-types.js.map +1 -0
- package/dist/lib/index.d.ts +3 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +3 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/legacy-task-migration.d.ts +20 -0
- package/dist/lib/legacy-task-migration.d.ts.map +1 -0
- package/dist/lib/legacy-task-migration.js +110 -0
- package/dist/lib/legacy-task-migration.js.map +1 -0
- package/dist/lib/legacy-text-trigger-migration.d.ts +18 -0
- package/dist/lib/legacy-text-trigger-migration.d.ts.map +1 -0
- package/dist/lib/legacy-text-trigger-migration.js +131 -0
- package/dist/lib/legacy-text-trigger-migration.js.map +1 -0
- package/dist/lib/workflow-clarification.d.ts +113 -0
- package/dist/lib/workflow-clarification.d.ts.map +1 -0
- package/dist/lib/workflow-clarification.js +425 -0
- package/dist/lib/workflow-clarification.js.map +1 -0
- package/dist/plugin-routes.d.ts +9 -0
- package/dist/plugin-routes.d.ts.map +1 -0
- package/dist/plugin-routes.js +147 -0
- package/dist/plugin-routes.js.map +1 -0
- package/dist/providers/activeWorkflows.d.ts +11 -0
- package/dist/providers/activeWorkflows.d.ts.map +1 -0
- package/dist/providers/activeWorkflows.js +72 -0
- package/dist/providers/activeWorkflows.js.map +1 -0
- package/dist/providers/index.d.ts +4 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +4 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/pendingDraft.d.ts +9 -0
- package/dist/providers/pendingDraft.d.ts.map +1 -0
- package/dist/providers/pendingDraft.js +48 -0
- package/dist/providers/pendingDraft.js.map +1 -0
- package/dist/providers/workflowStatus.d.ts +3 -0
- package/dist/providers/workflowStatus.d.ts.map +1 -0
- package/dist/providers/workflowStatus.js +69 -0
- package/dist/providers/workflowStatus.js.map +1 -0
- package/dist/register-routes.d.ts +2 -0
- package/dist/register-routes.d.ts.map +1 -0
- package/dist/register-routes.js +6 -0
- package/dist/register-routes.js.map +1 -0
- package/dist/routes/_helpers.d.ts +11 -0
- package/dist/routes/_helpers.d.ts.map +1 -0
- package/dist/routes/_helpers.js +22 -0
- package/dist/routes/_helpers.js.map +1 -0
- package/dist/routes/automations.d.ts +19 -0
- package/dist/routes/automations.d.ts.map +1 -0
- package/dist/routes/automations.js +32 -0
- package/dist/routes/automations.js.map +1 -0
- package/dist/routes/embedded-webhooks.d.ts +3 -0
- package/dist/routes/embedded-webhooks.d.ts.map +1 -0
- package/dist/routes/embedded-webhooks.js +47 -0
- package/dist/routes/embedded-webhooks.js.map +1 -0
- package/dist/routes/executions.d.ts +3 -0
- package/dist/routes/executions.d.ts.map +1 -0
- package/dist/routes/executions.js +58 -0
- package/dist/routes/executions.js.map +1 -0
- package/dist/routes/index.d.ts +4 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +14 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/nodes.d.ts +3 -0
- package/dist/routes/nodes.d.ts.map +1 -0
- package/dist/routes/nodes.js +168 -0
- package/dist/routes/nodes.js.map +1 -0
- package/dist/routes/validation.d.ts +3 -0
- package/dist/routes/validation.d.ts.map +1 -0
- package/dist/routes/validation.js +41 -0
- package/dist/routes/validation.js.map +1 -0
- package/dist/routes/workflow-routes.d.ts +27 -0
- package/dist/routes/workflow-routes.d.ts.map +1 -0
- package/dist/routes/workflow-routes.js +326 -0
- package/dist/routes/workflow-routes.js.map +1 -0
- package/dist/routes/workflows.d.ts +3 -0
- package/dist/routes/workflows.d.ts.map +1 -0
- package/dist/routes/workflows.js +252 -0
- package/dist/routes/workflows.js.map +1 -0
- package/dist/schemas/draftIntent.d.ts +22 -0
- package/dist/schemas/draftIntent.d.ts.map +1 -0
- package/dist/schemas/draftIntent.js +22 -0
- package/dist/schemas/draftIntent.js.map +1 -0
- package/dist/schemas/feasibility.d.ts +13 -0
- package/dist/schemas/feasibility.d.ts.map +1 -0
- package/dist/schemas/feasibility.js +9 -0
- package/dist/schemas/feasibility.js.map +1 -0
- package/dist/schemas/index.d.ts +5 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +5 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/keywordExtraction.d.ts +14 -0
- package/dist/schemas/keywordExtraction.d.ts.map +1 -0
- package/dist/schemas/keywordExtraction.js +12 -0
- package/dist/schemas/keywordExtraction.js.map +1 -0
- package/dist/schemas/workflowMatching.d.ts +36 -0
- package/dist/schemas/workflowMatching.d.ts.map +1 -0
- package/dist/schemas/workflowMatching.js +30 -0
- package/dist/schemas/workflowMatching.js.map +1 -0
- package/dist/services/embedded-workflow-service.d.ts +106 -0
- package/dist/services/embedded-workflow-service.d.ts.map +1 -0
- package/dist/services/embedded-workflow-service.js +1900 -0
- package/dist/services/embedded-workflow-service.js.map +1 -0
- package/dist/services/index.d.ts +5 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +5 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/workflow-credential-store.d.ts +27 -0
- package/dist/services/workflow-credential-store.d.ts.map +1 -0
- package/dist/services/workflow-credential-store.js +92 -0
- package/dist/services/workflow-credential-store.js.map +1 -0
- package/dist/services/workflow-dispatch.d.ts +41 -0
- package/dist/services/workflow-dispatch.d.ts.map +1 -0
- package/dist/services/workflow-dispatch.js +86 -0
- package/dist/services/workflow-dispatch.js.map +1 -0
- package/dist/services/workflow-service.d.ts +63 -0
- package/dist/services/workflow-service.d.ts.map +1 -0
- package/dist/services/workflow-service.js +492 -0
- package/dist/services/workflow-service.js.map +1 -0
- package/dist/trigger-routes.d.ts +153 -0
- package/dist/trigger-routes.d.ts.map +1 -0
- package/dist/trigger-routes.js +424 -0
- package/dist/trigger-routes.js.map +1 -0
- package/dist/types/index.d.ts +457 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +59 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/catalog.d.ts +16 -0
- package/dist/utils/catalog.d.ts.map +1 -0
- package/dist/utils/catalog.js +211 -0
- package/dist/utils/catalog.js.map +1 -0
- package/dist/utils/clarification.d.ts +17 -0
- package/dist/utils/clarification.d.ts.map +1 -0
- package/dist/utils/clarification.js +46 -0
- package/dist/utils/clarification.js.map +1 -0
- package/dist/utils/context.d.ts +4 -0
- package/dist/utils/context.d.ts.map +1 -0
- package/dist/utils/context.js +18 -0
- package/dist/utils/context.js.map +1 -0
- package/dist/utils/credentialResolver.d.ts +22 -0
- package/dist/utils/credentialResolver.d.ts.map +1 -0
- package/dist/utils/credentialResolver.js +146 -0
- package/dist/utils/credentialResolver.js.map +1 -0
- package/dist/utils/generation.d.ts +36 -0
- package/dist/utils/generation.d.ts.map +1 -0
- package/dist/utils/generation.js +701 -0
- package/dist/utils/generation.js.map +1 -0
- package/dist/utils/host-capabilities.d.ts +27 -0
- package/dist/utils/host-capabilities.d.ts.map +1 -0
- package/dist/utils/host-capabilities.js +59 -0
- package/dist/utils/host-capabilities.js.map +1 -0
- package/dist/utils/inferSyntheticOutputSchema.d.ts +20 -0
- package/dist/utils/inferSyntheticOutputSchema.d.ts.map +1 -0
- package/dist/utils/inferSyntheticOutputSchema.js +151 -0
- package/dist/utils/inferSyntheticOutputSchema.js.map +1 -0
- package/dist/utils/outputSchema.d.ts +26 -0
- package/dist/utils/outputSchema.d.ts.map +1 -0
- package/dist/utils/outputSchema.js +297 -0
- package/dist/utils/outputSchema.js.map +1 -0
- package/dist/utils/validateAndRepair.d.ts +41 -0
- package/dist/utils/validateAndRepair.d.ts.map +1 -0
- package/dist/utils/validateAndRepair.js +483 -0
- package/dist/utils/validateAndRepair.js.map +1 -0
- package/dist/utils/workflow-prompts/actionResponse.d.ts +2 -0
- package/dist/utils/workflow-prompts/actionResponse.d.ts.map +1 -0
- package/dist/utils/workflow-prompts/actionResponse.js +17 -0
- package/dist/utils/workflow-prompts/actionResponse.js.map +1 -0
- package/dist/utils/workflow-prompts/draftIntent.d.ts +2 -0
- package/dist/utils/workflow-prompts/draftIntent.d.ts.map +1 -0
- package/dist/utils/workflow-prompts/draftIntent.js +23 -0
- package/dist/utils/workflow-prompts/draftIntent.js.map +1 -0
- package/dist/utils/workflow-prompts/feasibilityCheck.d.ts +2 -0
- package/dist/utils/workflow-prompts/feasibilityCheck.d.ts.map +1 -0
- package/dist/utils/workflow-prompts/feasibilityCheck.js +21 -0
- package/dist/utils/workflow-prompts/feasibilityCheck.js.map +1 -0
- package/dist/utils/workflow-prompts/fieldCorrection.d.ts +3 -0
- package/dist/utils/workflow-prompts/fieldCorrection.d.ts.map +1 -0
- package/dist/utils/workflow-prompts/fieldCorrection.js +20 -0
- package/dist/utils/workflow-prompts/fieldCorrection.js.map +1 -0
- package/dist/utils/workflow-prompts/index.d.ts +8 -0
- package/dist/utils/workflow-prompts/index.d.ts.map +1 -0
- package/dist/utils/workflow-prompts/index.js +8 -0
- package/dist/utils/workflow-prompts/index.js.map +1 -0
- package/dist/utils/workflow-prompts/keywordExtraction.d.ts +2 -0
- package/dist/utils/workflow-prompts/keywordExtraction.d.ts.map +1 -0
- package/dist/utils/workflow-prompts/keywordExtraction.js +21 -0
- package/dist/utils/workflow-prompts/keywordExtraction.js.map +1 -0
- package/dist/utils/workflow-prompts/parameterCorrection.d.ts +3 -0
- package/dist/utils/workflow-prompts/parameterCorrection.d.ts.map +1 -0
- package/dist/utils/workflow-prompts/parameterCorrection.js +29 -0
- package/dist/utils/workflow-prompts/parameterCorrection.js.map +1 -0
- package/dist/utils/workflow-prompts/workflowGeneration.d.ts +2 -0
- package/dist/utils/workflow-prompts/workflowGeneration.d.ts.map +1 -0
- package/dist/utils/workflow-prompts/workflowGeneration.js +529 -0
- package/dist/utils/workflow-prompts/workflowGeneration.js.map +1 -0
- package/dist/utils/workflow-prompts/workflowMatching.d.ts +2 -0
- package/dist/utils/workflow-prompts/workflowMatching.d.ts.map +1 -0
- package/dist/utils/workflow-prompts/workflowMatching.js +23 -0
- package/dist/utils/workflow-prompts/workflowMatching.js.map +1 -0
- package/dist/utils/workflow.d.ts +62 -0
- package/dist/utils/workflow.d.ts.map +1 -0
- package/dist/utils/workflow.js +712 -0
- package/dist/utils/workflow.js.map +1 -0
- package/package.json +87 -0
- package/src/actions/index.ts +1 -0
- package/src/actions/workflow.ts +494 -0
- package/src/data/defaultNodes.json +9887 -0
- package/src/data/schemaIndex.json +1 -0
- package/src/data/triggerSchemaIndex.json +1 -0
- package/src/db/index.ts +8 -0
- package/src/db/schema.ts +94 -0
- package/src/index.ts +179 -0
- package/src/lib/automations-builder.ts +679 -0
- package/src/lib/automations-types.ts +391 -0
- package/src/lib/index.ts +8 -0
- package/src/lib/legacy-task-migration.ts +143 -0
- package/src/lib/legacy-text-trigger-migration.ts +178 -0
- package/src/lib/workflow-clarification.ts +497 -0
- package/src/plugin-routes.ts +164 -0
- package/src/providers/activeWorkflows.ts +81 -0
- package/src/providers/index.ts +3 -0
- package/src/providers/pendingDraft.ts +55 -0
- package/src/providers/workflowStatus.ts +88 -0
- package/src/register-routes.ts +6 -0
- package/src/routes/_helpers.ts +27 -0
- package/src/routes/automations.ts +46 -0
- package/src/routes/embedded-webhooks.ts +64 -0
- package/src/routes/executions.ts +75 -0
- package/src/routes/index.ts +16 -0
- package/src/routes/nodes.ts +211 -0
- package/src/routes/validation.ts +51 -0
- package/src/routes/workflow-routes.ts +469 -0
- package/src/routes/workflows.ts +310 -0
- package/src/schemas/draftIntent.ts +21 -0
- package/src/schemas/feasibility.ts +8 -0
- package/src/schemas/index.ts +4 -0
- package/src/schemas/keywordExtraction.ts +11 -0
- package/src/schemas/workflowMatching.ts +29 -0
- package/src/services/embedded-workflow-service.ts +2224 -0
- package/src/services/index.ts +17 -0
- package/src/services/workflow-credential-store.ts +132 -0
- package/src/services/workflow-dispatch.ts +121 -0
- package/src/services/workflow-service.ts +839 -0
- package/src/trigger-routes.ts +714 -0
- package/src/types/index.ts +562 -0
- package/src/utils/catalog.ts +260 -0
- package/src/utils/clarification.ts +52 -0
- package/src/utils/context.ts +22 -0
- package/src/utils/credentialResolver.ts +234 -0
- package/src/utils/generation.ts +987 -0
- package/src/utils/host-capabilities.ts +81 -0
- package/src/utils/inferSyntheticOutputSchema.ts +163 -0
- package/src/utils/outputSchema.ts +372 -0
- package/src/utils/validateAndRepair.ts +610 -0
- package/src/utils/workflow-prompts/actionResponse.ts +16 -0
- package/src/utils/workflow-prompts/draftIntent.ts +22 -0
- package/src/utils/workflow-prompts/feasibilityCheck.ts +20 -0
- package/src/utils/workflow-prompts/fieldCorrection.ts +20 -0
- package/src/utils/workflow-prompts/index.ts +10 -0
- package/src/utils/workflow-prompts/keywordExtraction.ts +20 -0
- package/src/utils/workflow-prompts/parameterCorrection.ts +29 -0
- package/src/utils/workflow-prompts/workflowGeneration.ts +528 -0
- package/src/utils/workflow-prompts/workflowMatching.ts +22 -0
- package/src/utils/workflow.ts +895 -0
package/README.md
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# @elizaos/plugin-workflow
|
|
2
|
+
|
|
3
|
+
In-process workflow engine for elizaOS agents. Generate and deploy automation workflows from natural language using a RAG pipeline. The plugin embeds its own execution engine — workflows run in the agent process, no separate sidecar.
|
|
4
|
+
|
|
5
|
+
Built on shared workflow type contracts from `@elizaos/workflows`. Supports the bundled node catalog used by the in-process runtime for routing decisions, with intelligent credential resolution and lifecycle management.
|
|
6
|
+
|
|
7
|
+
## Configuration
|
|
8
|
+
|
|
9
|
+
No workflow-specific env vars are required. The plugin's `EmbeddedWorkflowService` runs CRUD + execution + scheduler + webhook handling locally inside the agent, persisted to the agent's Postgres schema.
|
|
10
|
+
|
|
11
|
+
## Plugin Components
|
|
12
|
+
|
|
13
|
+
| Component | Purpose |
|
|
14
|
+
|---|---|
|
|
15
|
+
| `EmbeddedWorkflowService` | In-process workflow execution engine (CRUD + node runtime + scheduler + webhooks). |
|
|
16
|
+
| `WorkflowService` | Public service surface used by the agent's `WORKFLOW` umbrella action. Routes to the embedded workflows engine. |
|
|
17
|
+
| `WorkflowCredentialStore` | Stores workflow-scoped credentials (encrypted at rest). |
|
|
18
|
+
| `workflowStatusProvider` | Exposes engine status to the planner. |
|
|
19
|
+
| `activeWorkflowsProvider` | Lists active workflows for context. |
|
|
20
|
+
| `pendingDraftProvider` | Surfaces an in-progress draft so the agent can clarify before persisting. |
|
|
21
|
+
| Routes | Mounted at `/api/workflow/*` on the agent's HTTP server. |
|
|
22
|
+
|
|
23
|
+
The `WORKFLOW` umbrella action lives in `@elizaos/agent` and dispatches op-based commands (`create`, `update`, `activate`, `run`, `delete`, …) to this plugin's services.
|
|
24
|
+
|
|
25
|
+
## RAG Pipeline (workflow generation from natural language)
|
|
26
|
+
|
|
27
|
+
1. **Extract keywords** from the user request.
|
|
28
|
+
2. **Match** against existing workflows (RAG over the workflow store) — return a match if one exists.
|
|
29
|
+
3. **Generate** a new workflow definition if no match — LLM produces a node graph against the catalog from `src/data/`.
|
|
30
|
+
4. **Validate & repair** node parameters / credentials / connections.
|
|
31
|
+
5. **Synthesize output schemas** for downstream nodes.
|
|
32
|
+
6. **Position** nodes for the visual editor.
|
|
33
|
+
|
|
34
|
+
## Credential Resolution
|
|
35
|
+
|
|
36
|
+
Credentials are resolved at workflow-execution time. The plugin checks:
|
|
37
|
+
1. Plugin-level `workflows.credentials` config map (deterministic).
|
|
38
|
+
2. Cached secrets via the agent's secret service.
|
|
39
|
+
3. Stored credentials via `WorkflowCredentialStore`.
|
|
40
|
+
4. LLM-driven `request_credential` resolution (prompts the user).
|
|
41
|
+
|
|
42
|
+
## Routes
|
|
43
|
+
|
|
44
|
+
All routes mount at `/api/workflow/`:
|
|
45
|
+
|
|
46
|
+
- `GET /api/workflow/status` — engine + plugin status
|
|
47
|
+
- `GET /api/workflow/workflows` — list
|
|
48
|
+
- `POST /api/workflow/workflows` — create
|
|
49
|
+
- `GET /api/workflow/workflows/:id`
|
|
50
|
+
- `PUT /api/workflow/workflows/:id`
|
|
51
|
+
- `DELETE /api/workflow/workflows/:id`
|
|
52
|
+
- `POST /api/workflow/workflows/:id/run` — trigger execution
|
|
53
|
+
- `GET /api/workflow/executions/:id` — execution status / result
|
|
54
|
+
- `POST /api/workflow/executions/:id/cancel`
|
|
55
|
+
- Webhook endpoints for trigger nodes are exposed dynamically per workflow.
|
|
56
|
+
|
|
57
|
+
## Development
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
bun install
|
|
61
|
+
bun run build
|
|
62
|
+
bun run typecheck
|
|
63
|
+
bun run test
|
|
64
|
+
bun run lint
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Lint/format is [Biome 2.x](https://biomejs.dev). TypeScript 6+. ESM only.
|
|
68
|
+
|
|
69
|
+
## License
|
|
70
|
+
|
|
71
|
+
MIT.
|
package/auto-enable.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Auto-enable check for @elizaos/plugin-workflow.
|
|
2
|
+
//
|
|
3
|
+
// Plugin manifest entry-point — referenced by package.json's
|
|
4
|
+
// `elizaos.plugin.autoEnableModule`. Keep this module light: config reads
|
|
5
|
+
// only, no service init, no transitive imports of the full plugin runtime.
|
|
6
|
+
import type { PluginAutoEnableContext } from '@elizaos/core';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Default-on: enable workflows in-process unless the user's config has
|
|
10
|
+
* `workflow.enabled === false` as a master switch. The central engine
|
|
11
|
+
* additionally honors `plugins.entries.workflow.enabled === false`.
|
|
12
|
+
*/
|
|
13
|
+
export function shouldEnable(ctx: PluginAutoEnableContext): boolean {
|
|
14
|
+
const workflow = (ctx.config as Record<string, unknown> | undefined)?.workflow as
|
|
15
|
+
| Record<string, unknown>
|
|
16
|
+
| undefined;
|
|
17
|
+
return workflow?.enabled !== false;
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WORKFLOW — single umbrella action for workflow lifecycle ops.
|
|
3
|
+
*
|
|
4
|
+
* Action-based dispatch (provide `action` parameter):
|
|
5
|
+
* create — generate + deploy a new workflow from a seed prompt
|
|
6
|
+
* modify — load a deployed workflow into the draft editor by id
|
|
7
|
+
* activate — activate a workflow by id
|
|
8
|
+
* deactivate — deactivate a workflow by id
|
|
9
|
+
* toggle_active — explicit active=true|false (preferred when scripting)
|
|
10
|
+
* delete — permanently delete a workflow by id
|
|
11
|
+
* executions — fetch recent executions for a workflow id
|
|
12
|
+
*
|
|
13
|
+
* All actions talk to the in-process `WorkflowService` via
|
|
14
|
+
* `runtime.getService(WORKFLOW_SERVICE_TYPE)`. There is no HTTP boundary.
|
|
15
|
+
*
|
|
16
|
+
* Trigger CRUD (create/update/delete/run a scheduled trigger, including
|
|
17
|
+
* promoting a task into a workflow) lives in the agent-side `TRIGGER` action,
|
|
18
|
+
* which uses agent-internal trigger helpers that this plugin cannot import
|
|
19
|
+
* without a dependency cycle.
|
|
20
|
+
*/
|
|
21
|
+
import { type Action } from '@elizaos/core';
|
|
22
|
+
export declare const workflowAction: Action;
|
|
23
|
+
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/actions/workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACL,KAAK,MAAM,EAQZ,MAAM,eAAe,CAAC;AAsSvB,eAAO,MAAM,cAAc,EAAE,MAyK5B,CAAC"}
|
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WORKFLOW — single umbrella action for workflow lifecycle ops.
|
|
3
|
+
*
|
|
4
|
+
* Action-based dispatch (provide `action` parameter):
|
|
5
|
+
* create — generate + deploy a new workflow from a seed prompt
|
|
6
|
+
* modify — load a deployed workflow into the draft editor by id
|
|
7
|
+
* activate — activate a workflow by id
|
|
8
|
+
* deactivate — deactivate a workflow by id
|
|
9
|
+
* toggle_active — explicit active=true|false (preferred when scripting)
|
|
10
|
+
* delete — permanently delete a workflow by id
|
|
11
|
+
* executions — fetch recent executions for a workflow id
|
|
12
|
+
*
|
|
13
|
+
* All actions talk to the in-process `WorkflowService` via
|
|
14
|
+
* `runtime.getService(WORKFLOW_SERVICE_TYPE)`. There is no HTTP boundary.
|
|
15
|
+
*
|
|
16
|
+
* Trigger CRUD (create/update/delete/run a scheduled trigger, including
|
|
17
|
+
* promoting a task into a workflow) lives in the agent-side `TRIGGER` action,
|
|
18
|
+
* which uses agent-internal trigger helpers that this plugin cannot import
|
|
19
|
+
* without a dependency cycle.
|
|
20
|
+
*/
|
|
21
|
+
import { logger, } from '@elizaos/core';
|
|
22
|
+
import { WORKFLOW_SERVICE_TYPE } from '../services/workflow-service';
|
|
23
|
+
const WORKFLOW_ACTION = 'WORKFLOW';
|
|
24
|
+
const WORKFLOW_OPS = [
|
|
25
|
+
'create',
|
|
26
|
+
'modify',
|
|
27
|
+
'activate',
|
|
28
|
+
'deactivate',
|
|
29
|
+
'toggle_active',
|
|
30
|
+
'delete',
|
|
31
|
+
'executions',
|
|
32
|
+
];
|
|
33
|
+
const WORKFLOW_CONTEXTS = ['automation', 'tasks', 'agent_internal'];
|
|
34
|
+
function readString(value) {
|
|
35
|
+
return typeof value === 'string' && value.trim() ? value.trim() : undefined;
|
|
36
|
+
}
|
|
37
|
+
function readNumber(value) {
|
|
38
|
+
if (typeof value === 'number' && Number.isFinite(value))
|
|
39
|
+
return value;
|
|
40
|
+
if (typeof value === 'string' && value.trim()) {
|
|
41
|
+
const parsed = Number(value);
|
|
42
|
+
if (Number.isFinite(parsed))
|
|
43
|
+
return parsed;
|
|
44
|
+
}
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
function readBoolean(value) {
|
|
48
|
+
if (typeof value === 'boolean')
|
|
49
|
+
return value;
|
|
50
|
+
if (typeof value === 'string') {
|
|
51
|
+
const v = value.trim().toLowerCase();
|
|
52
|
+
if (v === 'true' || v === '1' || v === 'yes' || v === 'on')
|
|
53
|
+
return true;
|
|
54
|
+
if (v === 'false' || v === '0' || v === 'no' || v === 'off')
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
function readOp(value) {
|
|
60
|
+
const s = readString(value)?.toLowerCase();
|
|
61
|
+
if (!s)
|
|
62
|
+
return undefined;
|
|
63
|
+
if (WORKFLOW_OPS.includes(s))
|
|
64
|
+
return s;
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
function getWorkflowService(runtime) {
|
|
68
|
+
return runtime.getService(WORKFLOW_SERVICE_TYPE) ?? null;
|
|
69
|
+
}
|
|
70
|
+
function resolveAgentId(runtime) {
|
|
71
|
+
return runtime.agentId ?? runtime.character?.id ?? '00000000-0000-0000-0000-000000000000';
|
|
72
|
+
}
|
|
73
|
+
function summarizeWorkflow(workflow) {
|
|
74
|
+
return {
|
|
75
|
+
id: String(workflow.id ?? ''),
|
|
76
|
+
name: String(workflow.name ?? ''),
|
|
77
|
+
active: Boolean(workflow.active),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
async function handleCreate(runtime, service, params, message, callback) {
|
|
81
|
+
const seedPrompt = readString(params.seedPrompt);
|
|
82
|
+
const name = readString(params.name);
|
|
83
|
+
if (!seedPrompt) {
|
|
84
|
+
return {
|
|
85
|
+
success: false,
|
|
86
|
+
text: 'seedPrompt parameter is required to generate a workflow.',
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
const draft = await service.generateWorkflowDraft(seedPrompt, {
|
|
91
|
+
userId: String(message.entityId ?? resolveAgentId(runtime)),
|
|
92
|
+
});
|
|
93
|
+
if (name) {
|
|
94
|
+
draft.name = name;
|
|
95
|
+
}
|
|
96
|
+
const deployed = await service.deployWorkflow(draft, resolveAgentId(runtime));
|
|
97
|
+
if (!deployed.id) {
|
|
98
|
+
const missing = (deployed.missingCredentials ?? []).map((c) => c.credType).join(', ');
|
|
99
|
+
const text = missing
|
|
100
|
+
? `Workflow generated but missing credentials: ${missing}.`
|
|
101
|
+
: 'Workflow generation produced no deployable result.';
|
|
102
|
+
return { success: false, text, data: { missingCredentials: deployed.missingCredentials } };
|
|
103
|
+
}
|
|
104
|
+
const text = `Created workflow "${deployed.name}".`;
|
|
105
|
+
if (callback) {
|
|
106
|
+
await callback({
|
|
107
|
+
text,
|
|
108
|
+
action: WORKFLOW_ACTION,
|
|
109
|
+
metadata: { workflowId: deployed.id, workflowName: deployed.name },
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
success: true,
|
|
114
|
+
text,
|
|
115
|
+
values: { workflowId: deployed.id, workflowName: deployed.name },
|
|
116
|
+
data: { workflow: summarizeWorkflow(deployed) },
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
121
|
+
logger.warn({ src: 'plugin:workflow:action:create' }, message);
|
|
122
|
+
return { success: false, text: message };
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async function handleModify(service, params, callback) {
|
|
126
|
+
const workflowId = readString(params.workflowId);
|
|
127
|
+
if (!workflowId) {
|
|
128
|
+
return { success: false, text: 'workflowId is required to modify a workflow.' };
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
const existing = await service.getWorkflow(workflowId);
|
|
132
|
+
const text = `Loaded workflow "${existing.name}" for editing.`;
|
|
133
|
+
if (callback) {
|
|
134
|
+
await callback({
|
|
135
|
+
text,
|
|
136
|
+
action: WORKFLOW_ACTION,
|
|
137
|
+
metadata: { workflowId, workflowName: existing.name },
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
success: true,
|
|
142
|
+
text,
|
|
143
|
+
values: { workflowId, workflowName: existing.name },
|
|
144
|
+
data: { workflow: existing, awaitingUserInput: true },
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return { success: false, text: `Workflow not found: ${workflowId}` };
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async function handleToggleActive(service, params, desiredActive, callback) {
|
|
152
|
+
const workflowId = readString(params.workflowId);
|
|
153
|
+
if (!workflowId) {
|
|
154
|
+
return { success: false, text: 'workflowId parameter is required.' };
|
|
155
|
+
}
|
|
156
|
+
const explicitActive = desiredActive ?? readBoolean(params.active);
|
|
157
|
+
if (explicitActive === undefined) {
|
|
158
|
+
return {
|
|
159
|
+
success: false,
|
|
160
|
+
text: 'active parameter is required (true or false).',
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
let existing;
|
|
164
|
+
try {
|
|
165
|
+
existing = await service.getWorkflow(workflowId);
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
return { success: false, text: `Workflow not found: ${workflowId}` };
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
if (explicitActive) {
|
|
172
|
+
await service.activateWorkflow(workflowId);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
await service.deactivateWorkflow(workflowId);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
180
|
+
logger.warn({ src: 'plugin:workflow:action:toggle_active' }, msg);
|
|
181
|
+
return { success: false, text: msg };
|
|
182
|
+
}
|
|
183
|
+
const refreshed = await service.getWorkflow(workflowId);
|
|
184
|
+
const text = explicitActive
|
|
185
|
+
? `Activated workflow "${existing.name}".`
|
|
186
|
+
: `Deactivated workflow "${existing.name}".`;
|
|
187
|
+
if (callback) {
|
|
188
|
+
await callback({
|
|
189
|
+
text,
|
|
190
|
+
action: WORKFLOW_ACTION,
|
|
191
|
+
metadata: { workflowId, active: explicitActive },
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
success: true,
|
|
196
|
+
text,
|
|
197
|
+
values: { workflowId, active: explicitActive },
|
|
198
|
+
data: { workflow: summarizeWorkflow(refreshed) },
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
async function handleDeleteWorkflow(service, params, callback) {
|
|
202
|
+
const workflowId = readString(params.workflowId);
|
|
203
|
+
if (!workflowId) {
|
|
204
|
+
return { success: false, text: 'workflowId parameter is required.' };
|
|
205
|
+
}
|
|
206
|
+
let existing;
|
|
207
|
+
try {
|
|
208
|
+
existing = await service.getWorkflow(workflowId);
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
return { success: false, text: `Workflow not found: ${workflowId}` };
|
|
212
|
+
}
|
|
213
|
+
try {
|
|
214
|
+
await service.deleteWorkflow(workflowId);
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
218
|
+
logger.warn({ src: 'plugin:workflow:action:delete' }, msg);
|
|
219
|
+
return { success: false, text: msg };
|
|
220
|
+
}
|
|
221
|
+
const text = `Deleted workflow "${existing.name}".`;
|
|
222
|
+
if (callback) {
|
|
223
|
+
await callback({
|
|
224
|
+
text,
|
|
225
|
+
action: WORKFLOW_ACTION,
|
|
226
|
+
metadata: { workflowId, workflowName: existing.name },
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
return {
|
|
230
|
+
success: true,
|
|
231
|
+
text,
|
|
232
|
+
data: { workflowId, workflowName: existing.name },
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
async function handleExecutions(service, params, callback) {
|
|
236
|
+
const workflowId = readString(params.workflowId);
|
|
237
|
+
if (!workflowId) {
|
|
238
|
+
return { success: false, text: 'workflowId is required to fetch executions.' };
|
|
239
|
+
}
|
|
240
|
+
const limit = readNumber(params.limit) ?? 10;
|
|
241
|
+
try {
|
|
242
|
+
const response = await service.listExecutions({ workflowId, limit });
|
|
243
|
+
const executions = response.data ?? [];
|
|
244
|
+
const text = executions.length === 0
|
|
245
|
+
? `No executions found for workflow ${workflowId}.`
|
|
246
|
+
: `Fetched ${executions.length} executions for workflow ${workflowId}.`;
|
|
247
|
+
if (callback) {
|
|
248
|
+
await callback({
|
|
249
|
+
text,
|
|
250
|
+
action: WORKFLOW_ACTION,
|
|
251
|
+
metadata: { workflowId, count: executions.length },
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
return {
|
|
255
|
+
success: true,
|
|
256
|
+
text,
|
|
257
|
+
values: { workflowId, count: executions.length },
|
|
258
|
+
data: { executions },
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
catch (err) {
|
|
262
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
263
|
+
logger.warn({ src: 'plugin:workflow:action:executions' }, msg);
|
|
264
|
+
return { success: false, text: msg };
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
export const workflowAction = {
|
|
268
|
+
name: WORKFLOW_ACTION,
|
|
269
|
+
contexts: [...WORKFLOW_CONTEXTS],
|
|
270
|
+
contextGate: { anyOf: [...WORKFLOW_CONTEXTS] },
|
|
271
|
+
roleGate: { minRole: 'OWNER' },
|
|
272
|
+
similes: [
|
|
273
|
+
'CREATE_WORKFLOW',
|
|
274
|
+
'DELETE_WORKFLOW',
|
|
275
|
+
'TOGGLE_WORKFLOW_ACTIVE',
|
|
276
|
+
'ACTIVATE_WORKFLOW',
|
|
277
|
+
'DEACTIVATE_WORKFLOW',
|
|
278
|
+
'ENABLE_WORKFLOW',
|
|
279
|
+
'DISABLE_WORKFLOW',
|
|
280
|
+
'PAUSE_WORKFLOW',
|
|
281
|
+
'RESUME_WORKFLOW',
|
|
282
|
+
'MODIFY_WORKFLOW',
|
|
283
|
+
'UPDATE_WORKFLOW',
|
|
284
|
+
'EDIT_WORKFLOW',
|
|
285
|
+
'EDIT_EXISTING_WORKFLOW',
|
|
286
|
+
'UPDATE_EXISTING_WORKFLOW',
|
|
287
|
+
'CHANGE_EXISTING_WORKFLOW',
|
|
288
|
+
'LOAD_WORKFLOW_FOR_EDIT',
|
|
289
|
+
'GET_WORKFLOW_EXECUTIONS',
|
|
290
|
+
'GET_EXECUTIONS',
|
|
291
|
+
'SHOW_EXECUTIONS',
|
|
292
|
+
'EXECUTION_HISTORY',
|
|
293
|
+
'WORKFLOW_RUNS',
|
|
294
|
+
'WORKFLOW_EXECUTIONS',
|
|
295
|
+
],
|
|
296
|
+
description: 'Manage workflows. Action-based dispatch - provide an `action` parameter:\n' +
|
|
297
|
+
' create, modify, activate, deactivate, toggle_active, delete, executions.\n' +
|
|
298
|
+
'For creating/updating scheduled triggers (including promoting a task to a workflow), use the TRIGGER action.',
|
|
299
|
+
descriptionCompressed: 'manage workflows; action-based dispatch (create modify activate deactivate toggle_active delete executions)',
|
|
300
|
+
parameters: [
|
|
301
|
+
{
|
|
302
|
+
name: 'action',
|
|
303
|
+
description: 'Operation: create, modify, activate, deactivate, toggle_active, delete, executions.',
|
|
304
|
+
required: true,
|
|
305
|
+
schema: { type: 'string', enum: [...WORKFLOW_OPS] },
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
name: 'workflowId',
|
|
309
|
+
description: 'Workflow id.',
|
|
310
|
+
required: false,
|
|
311
|
+
schema: { type: 'string' },
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
name: 'workflowName',
|
|
315
|
+
description: 'Workflow name fragment for fuzzy matching.',
|
|
316
|
+
required: false,
|
|
317
|
+
schema: { type: 'string' },
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
name: 'seedPrompt',
|
|
321
|
+
description: 'Natural-language description for action=create.',
|
|
322
|
+
required: false,
|
|
323
|
+
schema: { type: 'string' },
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
name: 'name',
|
|
327
|
+
description: 'Optional explicit name for created workflow.',
|
|
328
|
+
required: false,
|
|
329
|
+
schema: { type: 'string' },
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
name: 'active',
|
|
333
|
+
description: 'Target state for action=toggle_active (true to activate).',
|
|
334
|
+
required: false,
|
|
335
|
+
schema: { type: 'boolean' },
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
name: 'limit',
|
|
339
|
+
description: 'Max executions to return for action=executions (default 10).',
|
|
340
|
+
required: false,
|
|
341
|
+
schema: { type: 'number' },
|
|
342
|
+
},
|
|
343
|
+
],
|
|
344
|
+
validate: async (runtime, _message, _state) => {
|
|
345
|
+
return getWorkflowService(runtime) !== null;
|
|
346
|
+
},
|
|
347
|
+
handler: async (runtime, message, _state, options, callback) => {
|
|
348
|
+
const params = (options?.parameters ?? {});
|
|
349
|
+
const op = readOp(params.action ?? params.op);
|
|
350
|
+
if (!op) {
|
|
351
|
+
return {
|
|
352
|
+
success: false,
|
|
353
|
+
text: `action parameter is required (one of: ${WORKFLOW_OPS.join(', ')}).`,
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
const service = getWorkflowService(runtime);
|
|
357
|
+
if (!service) {
|
|
358
|
+
return { success: false, text: 'Workflow service is not registered.' };
|
|
359
|
+
}
|
|
360
|
+
switch (op) {
|
|
361
|
+
case 'create':
|
|
362
|
+
return handleCreate(runtime, service, params, message, callback);
|
|
363
|
+
case 'modify':
|
|
364
|
+
return handleModify(service, params, callback);
|
|
365
|
+
case 'activate':
|
|
366
|
+
return handleToggleActive(service, params, true, callback);
|
|
367
|
+
case 'deactivate':
|
|
368
|
+
return handleToggleActive(service, params, false, callback);
|
|
369
|
+
case 'toggle_active':
|
|
370
|
+
return handleToggleActive(service, params, undefined, callback);
|
|
371
|
+
case 'delete':
|
|
372
|
+
return handleDeleteWorkflow(service, params, callback);
|
|
373
|
+
case 'executions':
|
|
374
|
+
return handleExecutions(service, params, callback);
|
|
375
|
+
}
|
|
376
|
+
},
|
|
377
|
+
examples: [
|
|
378
|
+
[
|
|
379
|
+
{
|
|
380
|
+
name: '{{name1}}',
|
|
381
|
+
content: {
|
|
382
|
+
text: 'Create a workflow that posts daily summaries to Slack at 5pm.',
|
|
383
|
+
source: 'chat',
|
|
384
|
+
},
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
name: '{{agentName}}',
|
|
388
|
+
content: {
|
|
389
|
+
text: 'Generating the workflow.',
|
|
390
|
+
actions: ['WORKFLOW'],
|
|
391
|
+
thought: 'New workflow from a natural-language seed maps to WORKFLOW op=create with seedPrompt set.',
|
|
392
|
+
},
|
|
393
|
+
},
|
|
394
|
+
],
|
|
395
|
+
[
|
|
396
|
+
{
|
|
397
|
+
name: '{{name1}}',
|
|
398
|
+
content: { text: 'Pause the daily summary workflow.', source: 'chat' },
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
name: '{{agentName}}',
|
|
402
|
+
content: {
|
|
403
|
+
text: 'Deactivating the workflow.',
|
|
404
|
+
actions: ['WORKFLOW'],
|
|
405
|
+
thought: 'Pause/disable maps to WORKFLOW op=deactivate (or toggle_active with active=false) on the matching workflowId.',
|
|
406
|
+
},
|
|
407
|
+
},
|
|
408
|
+
],
|
|
409
|
+
[
|
|
410
|
+
{
|
|
411
|
+
name: '{{name1}}',
|
|
412
|
+
content: { text: 'Show me the last 5 executions of workflow wf-123.', source: 'chat' },
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
name: '{{agentName}}',
|
|
416
|
+
content: {
|
|
417
|
+
text: 'Fetching recent executions.',
|
|
418
|
+
actions: ['WORKFLOW'],
|
|
419
|
+
thought: 'Execution history maps to WORKFLOW op=executions with workflowId=wf-123 and limit=5.',
|
|
420
|
+
},
|
|
421
|
+
},
|
|
422
|
+
],
|
|
423
|
+
],
|
|
424
|
+
};
|
|
425
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/actions/workflow.ts"],"names":[],"mappings":"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"}
|