@hailer/mcp 0.0.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/.claude/commands/tool-builder.md +37 -0
- package/.claude/commands/ws-pull.md +44 -0
- package/.claude/settings.json +8 -0
- package/.claude/settings.local.json +49 -0
- package/.claude/skills/activity-api/SKILL.md +96 -0
- package/.claude/skills/activity-api/references/activity-endpoints.md +845 -0
- package/.claude/skills/add-app-member-skill/SKILL.md +977 -0
- package/.claude/skills/agent-building/SKILL.md +243 -0
- package/.claude/skills/agent-building/references/architecture-patterns.md +446 -0
- package/.claude/skills/agent-building/references/code-examples.md +587 -0
- package/.claude/skills/agent-building/references/implementation-guide.md +619 -0
- package/.claude/skills/app-api/SKILL.md +219 -0
- package/.claude/skills/app-api/references/app-endpoints.md +759 -0
- package/.claude/skills/building-hailer-apps-skill/SKILL.md +548 -0
- package/.claude/skills/create-app-skill/SKILL.md +1101 -0
- package/.claude/skills/create-insight-skill/SKILL.md +1317 -0
- package/.claude/skills/get-insight-data-skill/SKILL.md +1053 -0
- package/.claude/skills/hailer-api/SKILL.md +283 -0
- package/.claude/skills/hailer-api/references/activities.md +620 -0
- package/.claude/skills/hailer-api/references/authentication.md +216 -0
- package/.claude/skills/hailer-api/references/datasets.md +437 -0
- package/.claude/skills/hailer-api/references/files.md +301 -0
- package/.claude/skills/hailer-api/references/insights.md +469 -0
- package/.claude/skills/hailer-api/references/workflows.md +720 -0
- package/.claude/skills/hailer-api/references/workspaces-users.md +445 -0
- package/.claude/skills/insight-api/SKILL.md +185 -0
- package/.claude/skills/insight-api/references/insight-endpoints.md +514 -0
- package/.claude/skills/install-workflow-skill/SKILL.md +1056 -0
- package/.claude/skills/list-apps-skill/SKILL.md +1010 -0
- package/.claude/skills/list-workflows-minimal-skill/SKILL.md +992 -0
- package/.claude/skills/local-first-skill/SKILL.md +570 -0
- package/.claude/skills/mcp-tools/SKILL.md +419 -0
- package/.claude/skills/mcp-tools/references/api-endpoints.md +499 -0
- package/.claude/skills/mcp-tools/references/data-structures.md +554 -0
- package/.claude/skills/mcp-tools/references/implementation-patterns.md +717 -0
- package/.claude/skills/preview-insight-skill/SKILL.md +1290 -0
- package/.claude/skills/publish-hailer-app-skill/SKILL.md +453 -0
- package/.claude/skills/remove-app-member-skill/SKILL.md +671 -0
- package/.claude/skills/remove-app-skill/SKILL.md +985 -0
- package/.claude/skills/remove-insight-skill/SKILL.md +1011 -0
- package/.claude/skills/remove-workflow-skill/SKILL.md +920 -0
- package/.claude/skills/scaffold-hailer-app-skill/SKILL.md +1034 -0
- package/.claude/skills/skill-testing/README.md +137 -0
- package/.claude/skills/skill-testing/SKILL.md +348 -0
- package/.claude/skills/skill-testing/references/test-patterns.md +705 -0
- package/.claude/skills/skill-testing/references/testing-guide.md +603 -0
- package/.claude/skills/skill-testing/references/validation-checklist.md +537 -0
- package/.claude/skills/tool-builder/SKILL.md +328 -0
- package/.claude/skills/update-app-skill/SKILL.md +970 -0
- package/.claude/skills/update-workflow-field-skill/SKILL.md +1098 -0
- package/.env.example +81 -0
- package/.mcp.json +13 -0
- package/README.md +297 -0
- package/dist/app.d.ts +4 -0
- package/dist/app.js +74 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.js +5 -0
- package/dist/client/adaptive-documentation-bot.d.ts +108 -0
- package/dist/client/adaptive-documentation-bot.js +475 -0
- package/dist/client/adaptive-documentation-types.d.ts +66 -0
- package/dist/client/adaptive-documentation-types.js +9 -0
- package/dist/client/agent-activity-bot.d.ts +51 -0
- package/dist/client/agent-activity-bot.js +166 -0
- package/dist/client/agent-tracker.d.ts +499 -0
- package/dist/client/agent-tracker.js +659 -0
- package/dist/client/description-updater.d.ts +56 -0
- package/dist/client/description-updater.js +259 -0
- package/dist/client/log-parser.d.ts +72 -0
- package/dist/client/log-parser.js +387 -0
- package/dist/client/mcp-client.d.ts +50 -0
- package/dist/client/mcp-client.js +532 -0
- package/dist/client/message-processor.d.ts +35 -0
- package/dist/client/message-processor.js +352 -0
- package/dist/client/multi-bot-manager.d.ts +24 -0
- package/dist/client/multi-bot-manager.js +74 -0
- package/dist/client/providers/anthropic-provider.d.ts +19 -0
- package/dist/client/providers/anthropic-provider.js +631 -0
- package/dist/client/providers/llm-provider.d.ts +47 -0
- package/dist/client/providers/llm-provider.js +367 -0
- package/dist/client/providers/openai-provider.d.ts +23 -0
- package/dist/client/providers/openai-provider.js +621 -0
- package/dist/client/simple-llm-caller.d.ts +19 -0
- package/dist/client/simple-llm-caller.js +100 -0
- package/dist/client/skill-generator.d.ts +81 -0
- package/dist/client/skill-generator.js +386 -0
- package/dist/client/test-adaptive-bot.d.ts +9 -0
- package/dist/client/test-adaptive-bot.js +82 -0
- package/dist/client/token-pricing.d.ts +38 -0
- package/dist/client/token-pricing.js +127 -0
- package/dist/client/token-tracker.d.ts +232 -0
- package/dist/client/token-tracker.js +457 -0
- package/dist/client/token-usage-bot.d.ts +53 -0
- package/dist/client/token-usage-bot.js +153 -0
- package/dist/client/tool-executor.d.ts +69 -0
- package/dist/client/tool-executor.js +159 -0
- package/dist/client/tool-schema-loader.d.ts +60 -0
- package/dist/client/tool-schema-loader.js +178 -0
- package/dist/client/types.d.ts +69 -0
- package/dist/client/types.js +7 -0
- package/dist/config.d.ts +162 -0
- package/dist/config.js +296 -0
- package/dist/core.d.ts +26 -0
- package/dist/core.js +147 -0
- package/dist/lib/context-manager.d.ts +111 -0
- package/dist/lib/context-manager.js +431 -0
- package/dist/lib/logger.d.ts +74 -0
- package/dist/lib/logger.js +277 -0
- package/dist/lib/materialize.d.ts +3 -0
- package/dist/lib/materialize.js +101 -0
- package/dist/lib/normalizedName.d.ts +7 -0
- package/dist/lib/normalizedName.js +48 -0
- package/dist/lib/prompt-length-manager.d.ts +81 -0
- package/dist/lib/prompt-length-manager.js +457 -0
- package/dist/lib/terminal-prompt.d.ts +9 -0
- package/dist/lib/terminal-prompt.js +108 -0
- package/dist/mcp/UserContextCache.d.ts +56 -0
- package/dist/mcp/UserContextCache.js +163 -0
- package/dist/mcp/auth.d.ts +2 -0
- package/dist/mcp/auth.js +29 -0
- package/dist/mcp/hailer-clients.d.ts +42 -0
- package/dist/mcp/hailer-clients.js +246 -0
- package/dist/mcp/signal-handler.d.ts +45 -0
- package/dist/mcp/signal-handler.js +317 -0
- package/dist/mcp/tool-registry.d.ts +100 -0
- package/dist/mcp/tool-registry.js +306 -0
- package/dist/mcp/tools/activity.d.ts +15 -0
- package/dist/mcp/tools/activity.js +955 -0
- package/dist/mcp/tools/app.d.ts +20 -0
- package/dist/mcp/tools/app.js +1488 -0
- package/dist/mcp/tools/discussion.d.ts +19 -0
- package/dist/mcp/tools/discussion.js +950 -0
- package/dist/mcp/tools/file.d.ts +15 -0
- package/dist/mcp/tools/file.js +119 -0
- package/dist/mcp/tools/insight.d.ts +17 -0
- package/dist/mcp/tools/insight.js +806 -0
- package/dist/mcp/tools/skill.d.ts +10 -0
- package/dist/mcp/tools/skill.js +279 -0
- package/dist/mcp/tools/user.d.ts +10 -0
- package/dist/mcp/tools/user.js +108 -0
- package/dist/mcp/tools/workflow-template.d.ts +19 -0
- package/dist/mcp/tools/workflow-template.js +822 -0
- package/dist/mcp/tools/workflow.d.ts +18 -0
- package/dist/mcp/tools/workflow.js +1362 -0
- package/dist/mcp/utils/api-errors.d.ts +45 -0
- package/dist/mcp/utils/api-errors.js +160 -0
- package/dist/mcp/utils/data-transformers.d.ts +102 -0
- package/dist/mcp/utils/data-transformers.js +194 -0
- package/dist/mcp/utils/file-upload.d.ts +33 -0
- package/dist/mcp/utils/file-upload.js +148 -0
- package/dist/mcp/utils/hailer-api-client.d.ts +120 -0
- package/dist/mcp/utils/hailer-api-client.js +323 -0
- package/dist/mcp/utils/index.d.ts +13 -0
- package/dist/mcp/utils/index.js +39 -0
- package/dist/mcp/utils/logger.d.ts +42 -0
- package/dist/mcp/utils/logger.js +103 -0
- package/dist/mcp/utils/types.d.ts +286 -0
- package/dist/mcp/utils/types.js +7 -0
- package/dist/mcp/workspace-cache.d.ts +42 -0
- package/dist/mcp/workspace-cache.js +97 -0
- package/dist/mcp-server.d.ts +42 -0
- package/dist/mcp-server.js +280 -0
- package/package.json +56 -0
- package/tsconfig.json +23 -0
|
@@ -0,0 +1,720 @@
|
|
|
1
|
+
# Hailer Workflows API
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Workflows automate business processes by defining a series of steps, transitions, and actions that activities follow. Workflows can include conditional logic, automatic assignments, notifications, and integrations.
|
|
6
|
+
|
|
7
|
+
## Workflow Concepts
|
|
8
|
+
|
|
9
|
+
- **Workflow** - A defined process with steps and transitions
|
|
10
|
+
- **Step** - A stage in the workflow (maps to activity status)
|
|
11
|
+
- **Transition** - Movement from one step to another
|
|
12
|
+
- **Trigger** - Event that starts or advances a workflow
|
|
13
|
+
- **Action** - Automated task performed during workflow execution
|
|
14
|
+
- **Condition** - Logic that determines workflow behavior
|
|
15
|
+
|
|
16
|
+
## Endpoints
|
|
17
|
+
|
|
18
|
+
### List Workflows
|
|
19
|
+
|
|
20
|
+
```http
|
|
21
|
+
GET /v3/workflows?workspace_id=ws_123
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**Response:**
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"data": [
|
|
28
|
+
{
|
|
29
|
+
"id": "wf_123",
|
|
30
|
+
"name": "Invoice Approval Process",
|
|
31
|
+
"description": "Multi-step invoice approval workflow",
|
|
32
|
+
"workspace_id": "ws_456",
|
|
33
|
+
"active": true,
|
|
34
|
+
"steps": [
|
|
35
|
+
{
|
|
36
|
+
"id": "step_1",
|
|
37
|
+
"name": "Submitted",
|
|
38
|
+
"status": "submitted"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "step_2",
|
|
42
|
+
"name": "Manager Review",
|
|
43
|
+
"status": "manager_review"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "step_3",
|
|
47
|
+
"name": "Finance Approval",
|
|
48
|
+
"status": "finance_approval"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"id": "step_4",
|
|
52
|
+
"name": "Approved",
|
|
53
|
+
"status": "approved"
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Get Workflow
|
|
62
|
+
|
|
63
|
+
```http
|
|
64
|
+
GET /v3/workflows/{workflow_id}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Returns complete workflow definition including steps, transitions, actions, and conditions.
|
|
68
|
+
|
|
69
|
+
### Create Workflow
|
|
70
|
+
|
|
71
|
+
```http
|
|
72
|
+
POST /v3/workflows
|
|
73
|
+
Content-Type: application/json
|
|
74
|
+
|
|
75
|
+
{
|
|
76
|
+
"name": "Bug Fix Workflow",
|
|
77
|
+
"workspace_id": "ws_123",
|
|
78
|
+
"description": "Standard process for bug fixes",
|
|
79
|
+
"steps": [
|
|
80
|
+
{
|
|
81
|
+
"name": "Reported",
|
|
82
|
+
"status": "reported"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "Triaged",
|
|
86
|
+
"status": "triaged"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"name": "In Progress",
|
|
90
|
+
"status": "in_progress"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"name": "Testing",
|
|
94
|
+
"status": "testing"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"name": "Resolved",
|
|
98
|
+
"status": "resolved"
|
|
99
|
+
}
|
|
100
|
+
],
|
|
101
|
+
"transitions": [
|
|
102
|
+
{
|
|
103
|
+
"from": "reported",
|
|
104
|
+
"to": "triaged",
|
|
105
|
+
"name": "Triage",
|
|
106
|
+
"conditions": []
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"from": "triaged",
|
|
110
|
+
"to": "in_progress",
|
|
111
|
+
"name": "Start Work",
|
|
112
|
+
"actions": [
|
|
113
|
+
{
|
|
114
|
+
"type": "assign",
|
|
115
|
+
"user_id": ":current_user"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"type": "notify",
|
|
119
|
+
"recipients": ["manager"]
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
],
|
|
124
|
+
"triggers": [
|
|
125
|
+
{
|
|
126
|
+
"event": "activity.created",
|
|
127
|
+
"conditions": [
|
|
128
|
+
{
|
|
129
|
+
"field": "tags",
|
|
130
|
+
"operator": "contains",
|
|
131
|
+
"value": "bug"
|
|
132
|
+
}
|
|
133
|
+
]
|
|
134
|
+
}
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Update Workflow
|
|
140
|
+
|
|
141
|
+
```http
|
|
142
|
+
PATCH /v3/workflows/{workflow_id}
|
|
143
|
+
{
|
|
144
|
+
"active": true,
|
|
145
|
+
"description": "Updated description"
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Delete Workflow
|
|
150
|
+
|
|
151
|
+
```http
|
|
152
|
+
DELETE /v3/workflows/{workflow_id}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Workflow Steps
|
|
156
|
+
|
|
157
|
+
### Step Object
|
|
158
|
+
|
|
159
|
+
```json
|
|
160
|
+
{
|
|
161
|
+
"id": "step_123",
|
|
162
|
+
"name": "In Review",
|
|
163
|
+
"status": "review",
|
|
164
|
+
"order": 2,
|
|
165
|
+
"color": "#FF9800",
|
|
166
|
+
"actions": [
|
|
167
|
+
{
|
|
168
|
+
"type": "assign",
|
|
169
|
+
"role": "reviewer"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"type": "notify",
|
|
173
|
+
"template": "review_requested"
|
|
174
|
+
}
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Add Step
|
|
180
|
+
|
|
181
|
+
```http
|
|
182
|
+
POST /v3/workflows/{workflow_id}/steps
|
|
183
|
+
{
|
|
184
|
+
"name": "Quality Assurance",
|
|
185
|
+
"status": "qa",
|
|
186
|
+
"order": 3
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Update Step
|
|
191
|
+
|
|
192
|
+
```http
|
|
193
|
+
PATCH /v3/workflows/{workflow_id}/steps/{step_id}
|
|
194
|
+
{
|
|
195
|
+
"name": "QA Testing",
|
|
196
|
+
"color": "#9C27B0"
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Delete Step
|
|
201
|
+
|
|
202
|
+
```http
|
|
203
|
+
DELETE /v3/workflows/{workflow_id}/steps/{step_id}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Workflow Transitions
|
|
207
|
+
|
|
208
|
+
### Transition Object
|
|
209
|
+
|
|
210
|
+
```json
|
|
211
|
+
{
|
|
212
|
+
"id": "trans_123",
|
|
213
|
+
"from": "in_progress",
|
|
214
|
+
"to": "review",
|
|
215
|
+
"name": "Submit for Review",
|
|
216
|
+
"conditions": [
|
|
217
|
+
{
|
|
218
|
+
"field": "custom_fields.test_coverage",
|
|
219
|
+
"operator": ">=",
|
|
220
|
+
"value": 80
|
|
221
|
+
}
|
|
222
|
+
],
|
|
223
|
+
"actions": [
|
|
224
|
+
{
|
|
225
|
+
"type": "comment",
|
|
226
|
+
"text": "Submitted for review"
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"type": "assign",
|
|
230
|
+
"role": "reviewer"
|
|
231
|
+
}
|
|
232
|
+
]
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Available Operators
|
|
237
|
+
|
|
238
|
+
- `=` / `!=` - Equals / Not equals
|
|
239
|
+
- `>` / `<` / `>=` / `<=` - Comparisons
|
|
240
|
+
- `contains` - String contains
|
|
241
|
+
- `in` - Value in list
|
|
242
|
+
- `is_empty` / `is_not_empty` - Empty checks
|
|
243
|
+
|
|
244
|
+
### Add Transition
|
|
245
|
+
|
|
246
|
+
```http
|
|
247
|
+
POST /v3/workflows/{workflow_id}/transitions
|
|
248
|
+
{
|
|
249
|
+
"from": "review",
|
|
250
|
+
"to": "approved",
|
|
251
|
+
"name": "Approve",
|
|
252
|
+
"conditions": [
|
|
253
|
+
{
|
|
254
|
+
"field": "assigned_to",
|
|
255
|
+
"operator": "=",
|
|
256
|
+
"value": ":current_user"
|
|
257
|
+
}
|
|
258
|
+
]
|
|
259
|
+
}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
## Workflow Actions
|
|
263
|
+
|
|
264
|
+
Actions are automated tasks performed when transitions occur or steps are entered.
|
|
265
|
+
|
|
266
|
+
### Available Action Types
|
|
267
|
+
|
|
268
|
+
#### Assign Activity
|
|
269
|
+
|
|
270
|
+
```json
|
|
271
|
+
{
|
|
272
|
+
"type": "assign",
|
|
273
|
+
"user_id": "user_123"
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Or use role-based assignment:
|
|
278
|
+
```json
|
|
279
|
+
{
|
|
280
|
+
"type": "assign",
|
|
281
|
+
"role": "manager"
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
#### Send Notification
|
|
286
|
+
|
|
287
|
+
```json
|
|
288
|
+
{
|
|
289
|
+
"type": "notify",
|
|
290
|
+
"recipients": ["assigned_to", "creator"],
|
|
291
|
+
"template": "status_changed",
|
|
292
|
+
"custom_message": "Activity moved to {{status}}"
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
#### Add Comment
|
|
297
|
+
|
|
298
|
+
```json
|
|
299
|
+
{
|
|
300
|
+
"type": "comment",
|
|
301
|
+
"text": "Automatically moved to {{step_name}} on {{date}}"
|
|
302
|
+
}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
#### Update Field
|
|
306
|
+
|
|
307
|
+
```json
|
|
308
|
+
{
|
|
309
|
+
"type": "update_field",
|
|
310
|
+
"field": "priority",
|
|
311
|
+
"value": "high"
|
|
312
|
+
}
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
#### Create Subtask
|
|
316
|
+
|
|
317
|
+
```json
|
|
318
|
+
{
|
|
319
|
+
"type": "create_activity",
|
|
320
|
+
"title": "Code Review for {{parent_title}}",
|
|
321
|
+
"template_id": "tmpl_review"
|
|
322
|
+
}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
#### Trigger Webhook
|
|
326
|
+
|
|
327
|
+
```json
|
|
328
|
+
{
|
|
329
|
+
"type": "webhook",
|
|
330
|
+
"url": "https://your-server.com/webhook",
|
|
331
|
+
"method": "POST",
|
|
332
|
+
"payload": {
|
|
333
|
+
"activity_id": "{{activity_id}}",
|
|
334
|
+
"status": "{{status}}"
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
#### Send Email
|
|
340
|
+
|
|
341
|
+
```json
|
|
342
|
+
{
|
|
343
|
+
"type": "email",
|
|
344
|
+
"to": ["{{assigned_to}}"],
|
|
345
|
+
"subject": "Activity {{title}} needs your attention",
|
|
346
|
+
"template": "activity_assigned"
|
|
347
|
+
}
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
## Workflow Triggers
|
|
351
|
+
|
|
352
|
+
Triggers start or advance workflows based on events.
|
|
353
|
+
|
|
354
|
+
### Trigger Types
|
|
355
|
+
|
|
356
|
+
#### Activity Created
|
|
357
|
+
|
|
358
|
+
```json
|
|
359
|
+
{
|
|
360
|
+
"event": "activity.created",
|
|
361
|
+
"conditions": [
|
|
362
|
+
{
|
|
363
|
+
"field": "priority",
|
|
364
|
+
"operator": "=",
|
|
365
|
+
"value": "critical"
|
|
366
|
+
}
|
|
367
|
+
],
|
|
368
|
+
"workflow_id": "wf_123"
|
|
369
|
+
}
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
#### Activity Updated
|
|
373
|
+
|
|
374
|
+
```json
|
|
375
|
+
{
|
|
376
|
+
"event": "activity.updated",
|
|
377
|
+
"conditions": [
|
|
378
|
+
{
|
|
379
|
+
"field": "status",
|
|
380
|
+
"operator": "=",
|
|
381
|
+
"value": "completed"
|
|
382
|
+
}
|
|
383
|
+
],
|
|
384
|
+
"actions": [
|
|
385
|
+
{
|
|
386
|
+
"type": "notify",
|
|
387
|
+
"recipients": ["creator"]
|
|
388
|
+
}
|
|
389
|
+
]
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
#### Time-Based
|
|
394
|
+
|
|
395
|
+
```json
|
|
396
|
+
{
|
|
397
|
+
"event": "scheduled",
|
|
398
|
+
"schedule": "0 9 * * 1",
|
|
399
|
+
"conditions": [
|
|
400
|
+
{
|
|
401
|
+
"field": "status",
|
|
402
|
+
"operator": "in",
|
|
403
|
+
"value": ["open", "in_progress"]
|
|
404
|
+
}
|
|
405
|
+
]
|
|
406
|
+
}
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
Schedule uses cron syntax:
|
|
410
|
+
- `* * * * *` - Every minute
|
|
411
|
+
- `0 9 * * 1` - Every Monday at 9:00 AM
|
|
412
|
+
- `0 0 1 * *` - First day of each month
|
|
413
|
+
|
|
414
|
+
#### Field Changed
|
|
415
|
+
|
|
416
|
+
```json
|
|
417
|
+
{
|
|
418
|
+
"event": "activity.field_changed",
|
|
419
|
+
"field": "assigned_to",
|
|
420
|
+
"workflow_id": "wf_123"
|
|
421
|
+
}
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
## Workflow Execution
|
|
425
|
+
|
|
426
|
+
### Trigger Workflow
|
|
427
|
+
|
|
428
|
+
```http
|
|
429
|
+
POST /v3/workflows/{workflow_id}/trigger
|
|
430
|
+
{
|
|
431
|
+
"activity_id": "act_123",
|
|
432
|
+
"input": {
|
|
433
|
+
"priority": "high",
|
|
434
|
+
"requester": "Johan Rekna"
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
### Advance Activity in Workflow
|
|
440
|
+
|
|
441
|
+
```http
|
|
442
|
+
POST /v3/workflows/{workflow_id}/advance
|
|
443
|
+
{
|
|
444
|
+
"activity_id": "act_123",
|
|
445
|
+
"to_step": "step_456"
|
|
446
|
+
}
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
### Get Workflow State
|
|
450
|
+
|
|
451
|
+
```http
|
|
452
|
+
GET /v3/activities/{activity_id}/workflow
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
**Response:**
|
|
456
|
+
```json
|
|
457
|
+
{
|
|
458
|
+
"workflow_id": "wf_123",
|
|
459
|
+
"current_step": {
|
|
460
|
+
"id": "step_2",
|
|
461
|
+
"name": "In Review",
|
|
462
|
+
"status": "review"
|
|
463
|
+
},
|
|
464
|
+
"available_transitions": [
|
|
465
|
+
{
|
|
466
|
+
"id": "trans_3",
|
|
467
|
+
"name": "Approve",
|
|
468
|
+
"to": "step_3"
|
|
469
|
+
},
|
|
470
|
+
{
|
|
471
|
+
"id": "trans_4",
|
|
472
|
+
"name": "Reject",
|
|
473
|
+
"to": "step_1"
|
|
474
|
+
}
|
|
475
|
+
],
|
|
476
|
+
"history": [
|
|
477
|
+
{
|
|
478
|
+
"from": "step_1",
|
|
479
|
+
"to": "step_2",
|
|
480
|
+
"timestamp": "2025-01-15T10:30:00Z",
|
|
481
|
+
"user_id": "user_123"
|
|
482
|
+
}
|
|
483
|
+
]
|
|
484
|
+
}
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
## Conditional Logic
|
|
488
|
+
|
|
489
|
+
### Condition Object
|
|
490
|
+
|
|
491
|
+
```json
|
|
492
|
+
{
|
|
493
|
+
"field": "custom_fields.budget",
|
|
494
|
+
"operator": ">",
|
|
495
|
+
"value": 10000
|
|
496
|
+
}
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
### Complex Conditions
|
|
500
|
+
|
|
501
|
+
Use `AND` / `OR` logic:
|
|
502
|
+
|
|
503
|
+
```json
|
|
504
|
+
{
|
|
505
|
+
"operator": "AND",
|
|
506
|
+
"conditions": [
|
|
507
|
+
{
|
|
508
|
+
"field": "priority",
|
|
509
|
+
"operator": "=",
|
|
510
|
+
"value": "high"
|
|
511
|
+
},
|
|
512
|
+
{
|
|
513
|
+
"field": "assigned_to",
|
|
514
|
+
"operator": "is_not_empty"
|
|
515
|
+
}
|
|
516
|
+
]
|
|
517
|
+
}
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
```json
|
|
521
|
+
{
|
|
522
|
+
"operator": "OR",
|
|
523
|
+
"conditions": [
|
|
524
|
+
{
|
|
525
|
+
"field": "status",
|
|
526
|
+
"operator": "=",
|
|
527
|
+
"value": "completed"
|
|
528
|
+
},
|
|
529
|
+
{
|
|
530
|
+
"field": "status",
|
|
531
|
+
"operator": "=",
|
|
532
|
+
"value": "cancelled"
|
|
533
|
+
}
|
|
534
|
+
]
|
|
535
|
+
}
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
## Workflow Templates
|
|
539
|
+
|
|
540
|
+
### Create from Template
|
|
541
|
+
|
|
542
|
+
```http
|
|
543
|
+
POST /v3/workflows/from-template
|
|
544
|
+
{
|
|
545
|
+
"template_id": "tmpl_invoice_approval",
|
|
546
|
+
"workspace_id": "ws_123",
|
|
547
|
+
"customizations": {
|
|
548
|
+
"approval_threshold": 5000,
|
|
549
|
+
"approver_role": "finance_manager"
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
### Available Templates
|
|
555
|
+
|
|
556
|
+
- Invoice Approval
|
|
557
|
+
- Bug Tracking
|
|
558
|
+
- Change Request
|
|
559
|
+
- Customer Support Ticket
|
|
560
|
+
- Project Management
|
|
561
|
+
- HR Onboarding
|
|
562
|
+
|
|
563
|
+
## Workflow Analytics
|
|
564
|
+
|
|
565
|
+
### Get Workflow Statistics
|
|
566
|
+
|
|
567
|
+
```http
|
|
568
|
+
GET /v3/workflows/{workflow_id}/stats
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
**Response:**
|
|
572
|
+
```json
|
|
573
|
+
{
|
|
574
|
+
"total_activities": 523,
|
|
575
|
+
"active_activities": 89,
|
|
576
|
+
"completed_activities": 434,
|
|
577
|
+
"average_completion_time_days": 5.3,
|
|
578
|
+
"step_statistics": [
|
|
579
|
+
{
|
|
580
|
+
"step": "submitted",
|
|
581
|
+
"count": 89,
|
|
582
|
+
"average_time_in_step_days": 0.5
|
|
583
|
+
},
|
|
584
|
+
{
|
|
585
|
+
"step": "review",
|
|
586
|
+
"count": 45,
|
|
587
|
+
"average_time_in_step_days": 2.1
|
|
588
|
+
}
|
|
589
|
+
]
|
|
590
|
+
}
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
## Best Practices
|
|
594
|
+
|
|
595
|
+
1. **Keep workflows simple** - Complex workflows are hard to maintain
|
|
596
|
+
2. **Use clear step names** - Self-explanatory names improve usability
|
|
597
|
+
3. **Add conditions to transitions** - Prevent invalid state changes
|
|
598
|
+
4. **Automate notifications** - Keep stakeholders informed
|
|
599
|
+
5. **Test workflows thoroughly** - Test all paths before deployment
|
|
600
|
+
6. **Monitor workflow performance** - Track bottlenecks and delays
|
|
601
|
+
7. **Document workflow purpose** - Add descriptions for team understanding
|
|
602
|
+
8. **Use templates** - Start with proven workflow patterns
|
|
603
|
+
9. **Version workflows** - Track changes over time
|
|
604
|
+
10. **Limit workflow complexity** - Maximum 10-15 steps for maintainability
|
|
605
|
+
|
|
606
|
+
## Example Workflows
|
|
607
|
+
|
|
608
|
+
### Simple Approval Workflow
|
|
609
|
+
|
|
610
|
+
```json
|
|
611
|
+
{
|
|
612
|
+
"name": "Simple Approval",
|
|
613
|
+
"steps": [
|
|
614
|
+
{"name": "Submitted", "status": "submitted"},
|
|
615
|
+
{"name": "Approved", "status": "approved"},
|
|
616
|
+
{"name": "Rejected", "status": "rejected"}
|
|
617
|
+
],
|
|
618
|
+
"transitions": [
|
|
619
|
+
{
|
|
620
|
+
"from": "submitted",
|
|
621
|
+
"to": "approved",
|
|
622
|
+
"name": "Approve",
|
|
623
|
+
"actions": [
|
|
624
|
+
{"type": "comment", "text": "Approved by {{current_user}}"},
|
|
625
|
+
{"type": "notify", "recipients": ["creator"]}
|
|
626
|
+
]
|
|
627
|
+
},
|
|
628
|
+
{
|
|
629
|
+
"from": "submitted",
|
|
630
|
+
"to": "rejected",
|
|
631
|
+
"name": "Reject",
|
|
632
|
+
"actions": [
|
|
633
|
+
{"type": "comment", "text": "Rejected by {{current_user}}"},
|
|
634
|
+
{"type": "notify", "recipients": ["creator"]}
|
|
635
|
+
]
|
|
636
|
+
}
|
|
637
|
+
]
|
|
638
|
+
}
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
### Multi-Stage Review Workflow
|
|
642
|
+
|
|
643
|
+
```json
|
|
644
|
+
{
|
|
645
|
+
"name": "Multi-Stage Review",
|
|
646
|
+
"steps": [
|
|
647
|
+
{"name": "Draft", "status": "draft"},
|
|
648
|
+
{"name": "Peer Review", "status": "peer_review"},
|
|
649
|
+
{"name": "Manager Review", "status": "manager_review"},
|
|
650
|
+
{"name": "Final Approval", "status": "final_approval"},
|
|
651
|
+
{"name": "Published", "status": "published"}
|
|
652
|
+
],
|
|
653
|
+
"transitions": [
|
|
654
|
+
{
|
|
655
|
+
"from": "draft",
|
|
656
|
+
"to": "peer_review",
|
|
657
|
+
"name": "Submit for Peer Review",
|
|
658
|
+
"actions": [
|
|
659
|
+
{"type": "assign", "role": "peer_reviewer"},
|
|
660
|
+
{"type": "notify", "recipients": ["assigned_to"]}
|
|
661
|
+
]
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
"from": "peer_review",
|
|
665
|
+
"to": "manager_review",
|
|
666
|
+
"name": "Escalate to Manager",
|
|
667
|
+
"conditions": [
|
|
668
|
+
{"field": "custom_fields.peer_approved", "operator": "=", "value": true}
|
|
669
|
+
],
|
|
670
|
+
"actions": [
|
|
671
|
+
{"type": "assign", "role": "manager"},
|
|
672
|
+
{"type": "update_field", "field": "priority", "value": "high"}
|
|
673
|
+
]
|
|
674
|
+
}
|
|
675
|
+
]
|
|
676
|
+
}
|
|
677
|
+
```
|
|
678
|
+
|
|
679
|
+
## Workflow Variables
|
|
680
|
+
|
|
681
|
+
Use variables in action templates:
|
|
682
|
+
|
|
683
|
+
- `{{activity_id}}` - Activity ID
|
|
684
|
+
- `{{activity_title}}` - Activity title
|
|
685
|
+
- `{{status}}` - Current status
|
|
686
|
+
- `{{assigned_to}}` - Assigned user
|
|
687
|
+
- `{{creator}}` - Activity creator
|
|
688
|
+
- `{{current_user}}` - User performing action
|
|
689
|
+
- `{{step_name}}` - Current step name
|
|
690
|
+
- `{{date}}` - Current date
|
|
691
|
+
- `{{custom_fields.field_name}}` - Custom field value
|
|
692
|
+
|
|
693
|
+
## Error Handling
|
|
694
|
+
|
|
695
|
+
Workflows can fail due to:
|
|
696
|
+
- Invalid conditions
|
|
697
|
+
- Missing required fields
|
|
698
|
+
- Permission errors
|
|
699
|
+
- Action execution failures
|
|
700
|
+
|
|
701
|
+
Get workflow errors:
|
|
702
|
+
|
|
703
|
+
```http
|
|
704
|
+
GET /v3/workflows/{workflow_id}/errors?activity_id=act_123
|
|
705
|
+
```
|
|
706
|
+
|
|
707
|
+
**Response:**
|
|
708
|
+
```json
|
|
709
|
+
{
|
|
710
|
+
"errors": [
|
|
711
|
+
{
|
|
712
|
+
"timestamp": "2025-01-15T10:30:00Z",
|
|
713
|
+
"step": "review",
|
|
714
|
+
"action": "assign",
|
|
715
|
+
"error": "User not found",
|
|
716
|
+
"details": "Attempted to assign to user_999 which does not exist"
|
|
717
|
+
}
|
|
718
|
+
]
|
|
719
|
+
}
|
|
720
|
+
```
|