@openhands/extensions 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.release-please-manifest.json +1 -1
- package/AGENTS.md +2 -1
- package/MIGRATION.md +31 -0
- package/README.md +9 -7
- package/automations/README.md +251 -8
- package/automations/catalog/github-pr-reviewer/manifest.json +82 -0
- package/automations/catalog/github-repo-monitor/manifest.json +82 -0
- package/automations/catalog/incident-retrospective-drafter/manifest.json +100 -0
- package/automations/catalog/{jira-issue-to-pr.json → jira-issue-to-pr/manifest.json} +10 -5
- package/automations/catalog/{linear-triage-assistant.json → linear-triage-assistant/manifest.json} +8 -4
- package/automations/catalog/{research-brief-writer.json → research-brief-writer/manifest.json} +11 -5
- package/automations/catalog/{slack-channel-monitor.json → slack-channel-monitor/manifest.json} +7 -2
- package/automations/catalog/{slack-standup-digest.json → slack-standup-digest/manifest.json} +8 -5
- package/automations/catalog-index.js +23 -0
- package/automations/catalog.schema.json +273 -0
- package/automations/index.d.ts +111 -3
- package/automations/index.js +21 -18
- package/index.d.ts +16 -1
- package/integrations/catalog/datadog.json +3 -3
- package/integrations/index.d.ts +1 -1
- package/package.json +6 -3
- package/pyproject.toml +1 -1
- package/python/openhands_extensions/__init__.py +0 -4
- package/python/openhands_extensions/_version.py +3 -2
- package/python/openhands_extensions/integrations.py +8 -30
- package/scripts/build-automation-catalog.mjs +51 -0
- package/skills/bitbucket/SKILL.md +0 -1
- package/skills/github/SKILL.md +0 -1
- package/skills/gitlab/SKILL.md +0 -1
- package/skills/index.js +4 -7
- package/skills/openhands-sdk/SKILL.md +2 -0
- package/tests/fixtures/automations/capabilities.json +92 -0
- package/tests/fixtures/automations/github-pr-reviewer.json +251 -0
- package/tests/fixtures/automations/github-repo-monitor.json +180 -0
- package/tests/fixtures/automations/incident-retrospective-drafter.json +91 -0
- package/tests/test_automation_setup.py +526 -0
- package/tests/test_catalogs.py +37 -12
- package/tests/test_deprecations.py +39 -4
- package/tests/test_integration_catalog_in_sync.py +50 -60
- package/automations/catalog/github-pr-reviewer.json +0 -13
- package/automations/catalog/github-repo-monitor.json +0 -11
- package/automations/catalog/incident-retrospective-drafter.json +0 -15
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
{
|
|
2
|
+
"automationId": "github-pr-reviewer",
|
|
3
|
+
"description": "Direct scheduled setup. Every create request body below is verified against the live CreatePromptAutomationRequest model in OpenHands/automation (openhands/automation/preset_router.py).",
|
|
4
|
+
"capabilities": "supported",
|
|
5
|
+
"blockedBy": [
|
|
6
|
+
"notReady"
|
|
7
|
+
],
|
|
8
|
+
"scenarios": [
|
|
9
|
+
{
|
|
10
|
+
"id": "happy-path",
|
|
11
|
+
"description": "Defaults plus a repository and a thorough review tone. Preflight passes, the automation is created.",
|
|
12
|
+
"formValues": {
|
|
13
|
+
"repository": "OpenHands/agent-server-gui",
|
|
14
|
+
"triggerLabel": "openhands-review",
|
|
15
|
+
"reviewTone": "thorough",
|
|
16
|
+
"schedule": "*/15 * * * *",
|
|
17
|
+
"timezone": "UTC"
|
|
18
|
+
},
|
|
19
|
+
"preflight": {
|
|
20
|
+
"request": {
|
|
21
|
+
"method": "POST",
|
|
22
|
+
"path": "/v1/validate",
|
|
23
|
+
"body": {
|
|
24
|
+
"automationId": "github-pr-reviewer",
|
|
25
|
+
"endpoint": "/v1/preset/prompt",
|
|
26
|
+
"draft": {
|
|
27
|
+
"name": "GitHub Code Review Agent - OpenHands/agent-server-gui",
|
|
28
|
+
"prompt": "Review pull requests labeled 'openhands-review' in OpenHands/agent-server-gui. Review tone: thorough.",
|
|
29
|
+
"repos": [
|
|
30
|
+
{
|
|
31
|
+
"url": "OpenHands/agent-server-gui",
|
|
32
|
+
"provider": "github"
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"trigger": {
|
|
36
|
+
"type": "cron",
|
|
37
|
+
"schedule": "*/15 * * * *",
|
|
38
|
+
"timezone": "UTC"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"response": {
|
|
44
|
+
"status": 200,
|
|
45
|
+
"body": {
|
|
46
|
+
"valid": true,
|
|
47
|
+
"errors": []
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"create": {
|
|
52
|
+
"request": {
|
|
53
|
+
"method": "POST",
|
|
54
|
+
"path": "/v1/preset/prompt",
|
|
55
|
+
"body": {
|
|
56
|
+
"name": "GitHub Code Review Agent - OpenHands/agent-server-gui",
|
|
57
|
+
"prompt": "Review pull requests labeled 'openhands-review' in OpenHands/agent-server-gui. Review tone: thorough.",
|
|
58
|
+
"repos": [
|
|
59
|
+
{
|
|
60
|
+
"url": "OpenHands/agent-server-gui",
|
|
61
|
+
"provider": "github"
|
|
62
|
+
}
|
|
63
|
+
],
|
|
64
|
+
"trigger": {
|
|
65
|
+
"type": "cron",
|
|
66
|
+
"schedule": "*/15 * * * *",
|
|
67
|
+
"timezone": "UTC"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
"response": {
|
|
72
|
+
"status": 201,
|
|
73
|
+
"body": {
|
|
74
|
+
"id": "6f1b8e64-2f6a-4f0e-9a1c-2b7d0c4e5f11",
|
|
75
|
+
"user_id": "1a2b3c4d-0000-4000-8000-000000000001",
|
|
76
|
+
"org_id": "1a2b3c4d-0000-4000-8000-000000000002",
|
|
77
|
+
"model": null,
|
|
78
|
+
"name": "GitHub Code Review Agent - OpenHands/agent-server-gui",
|
|
79
|
+
"prompt": "Review pull requests labeled 'openhands-review' in OpenHands/agent-server-gui. Review tone: thorough.",
|
|
80
|
+
"trigger": {
|
|
81
|
+
"type": "cron",
|
|
82
|
+
"schedule": "*/15 * * * *",
|
|
83
|
+
"timezone": "UTC"
|
|
84
|
+
},
|
|
85
|
+
"tarball_path": "oh-internal://uploads/8d2c1f90-7e34-4a55-b0d1-6c9e3a2f4b88",
|
|
86
|
+
"setup_script_path": "setup.sh",
|
|
87
|
+
"entrypoint": ".venv/bin/python main.py",
|
|
88
|
+
"timeout": 600,
|
|
89
|
+
"keep_alive": null,
|
|
90
|
+
"enabled": true,
|
|
91
|
+
"last_triggered_at": null,
|
|
92
|
+
"created_at": "2026-07-27T12:00:00Z",
|
|
93
|
+
"updated_at": "2026-07-27T12:00:00Z"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"id": "interval-below-deployment-minimum",
|
|
100
|
+
"description": "A one-minute schedule. The create model accepts it, so only the deployment can reject it - this is precisely why preflight exists and why local validation is not authoritative.",
|
|
101
|
+
"formValues": {
|
|
102
|
+
"repository": "OpenHands/agent-server-gui",
|
|
103
|
+
"triggerLabel": "openhands-review",
|
|
104
|
+
"reviewTone": "concise",
|
|
105
|
+
"schedule": "*/1 * * * *",
|
|
106
|
+
"timezone": "UTC"
|
|
107
|
+
},
|
|
108
|
+
"preflight": {
|
|
109
|
+
"request": {
|
|
110
|
+
"method": "POST",
|
|
111
|
+
"path": "/v1/validate",
|
|
112
|
+
"body": {
|
|
113
|
+
"automationId": "github-pr-reviewer",
|
|
114
|
+
"endpoint": "/v1/preset/prompt",
|
|
115
|
+
"draft": {
|
|
116
|
+
"name": "GitHub Code Review Agent - OpenHands/agent-server-gui",
|
|
117
|
+
"prompt": "Review pull requests labeled 'openhands-review' in OpenHands/agent-server-gui. Review tone: concise.",
|
|
118
|
+
"repos": [
|
|
119
|
+
{
|
|
120
|
+
"url": "OpenHands/agent-server-gui",
|
|
121
|
+
"provider": "github"
|
|
122
|
+
}
|
|
123
|
+
],
|
|
124
|
+
"trigger": {
|
|
125
|
+
"type": "cron",
|
|
126
|
+
"schedule": "*/1 * * * *",
|
|
127
|
+
"timezone": "UTC"
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
"response": {
|
|
133
|
+
"status": 200,
|
|
134
|
+
"body": {
|
|
135
|
+
"valid": false,
|
|
136
|
+
"errors": [
|
|
137
|
+
{
|
|
138
|
+
"field": "trigger.schedule",
|
|
139
|
+
"code": "interval_too_short",
|
|
140
|
+
"message": "Minimum interval for this deployment is 5 minutes."
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
"expectedFieldErrors": {
|
|
147
|
+
"schedule": "Minimum interval for this deployment is 5 minutes."
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"id": "unfireable-cron-rejected-at-create",
|
|
152
|
+
"description": "31 February. Syntactically valid, so a local check passes, but the service rejects it. Shows the real 422 body: detail is a list and the loc path carries the trigger discriminator tag.",
|
|
153
|
+
"formValues": {
|
|
154
|
+
"repository": "OpenHands/agent-server-gui",
|
|
155
|
+
"triggerLabel": "openhands-review",
|
|
156
|
+
"reviewTone": "concise",
|
|
157
|
+
"schedule": "0 0 31 2 *",
|
|
158
|
+
"timezone": "UTC"
|
|
159
|
+
},
|
|
160
|
+
"create": {
|
|
161
|
+
"request": {
|
|
162
|
+
"method": "POST",
|
|
163
|
+
"path": "/v1/preset/prompt",
|
|
164
|
+
"body": {
|
|
165
|
+
"name": "GitHub Code Review Agent - OpenHands/agent-server-gui",
|
|
166
|
+
"prompt": "Review pull requests labeled 'openhands-review' in OpenHands/agent-server-gui. Review tone: concise.",
|
|
167
|
+
"repos": [
|
|
168
|
+
{
|
|
169
|
+
"url": "OpenHands/agent-server-gui",
|
|
170
|
+
"provider": "github"
|
|
171
|
+
}
|
|
172
|
+
],
|
|
173
|
+
"trigger": {
|
|
174
|
+
"type": "cron",
|
|
175
|
+
"schedule": "0 0 31 2 *",
|
|
176
|
+
"timezone": "UTC"
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
"response": {
|
|
181
|
+
"status": 422,
|
|
182
|
+
"body": {
|
|
183
|
+
"detail": [
|
|
184
|
+
{
|
|
185
|
+
"type": "value_error",
|
|
186
|
+
"loc": [
|
|
187
|
+
"body",
|
|
188
|
+
"trigger",
|
|
189
|
+
"cron",
|
|
190
|
+
"schedule"
|
|
191
|
+
],
|
|
192
|
+
"msg": "Value error, Cron expression cannot produce any future fire times: 0 0 31 2 *"
|
|
193
|
+
}
|
|
194
|
+
]
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
"expectedFieldErrors": {
|
|
199
|
+
"schedule": "Value error, Cron expression cannot produce any future fire times: 0 0 31 2 *"
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"id": "short-repo-url-without-provider-is-rejected",
|
|
204
|
+
"description": "The mapping bug this fixture set exists to prevent. A short owner/repo URL without an explicit provider is a hard 422, because CreatePromptAutomationRequest is extra-forbid and RepoSource requires the provider. The setup block's payload always sets it; this records what happens if that is ever dropped.",
|
|
205
|
+
"formValues": {
|
|
206
|
+
"repository": "OpenHands/agent-server-gui",
|
|
207
|
+
"triggerLabel": "openhands-review",
|
|
208
|
+
"reviewTone": "concise",
|
|
209
|
+
"schedule": "*/15 * * * *",
|
|
210
|
+
"timezone": "UTC"
|
|
211
|
+
},
|
|
212
|
+
"create": {
|
|
213
|
+
"request": {
|
|
214
|
+
"method": "POST",
|
|
215
|
+
"path": "/v1/preset/prompt",
|
|
216
|
+
"body": {
|
|
217
|
+
"name": "GitHub Code Review Agent - OpenHands/agent-server-gui",
|
|
218
|
+
"prompt": "Review pull requests labeled 'openhands-review' in OpenHands/agent-server-gui. Review tone: concise.",
|
|
219
|
+
"repos": [
|
|
220
|
+
{
|
|
221
|
+
"url": "OpenHands/agent-server-gui"
|
|
222
|
+
}
|
|
223
|
+
],
|
|
224
|
+
"trigger": {
|
|
225
|
+
"type": "cron",
|
|
226
|
+
"schedule": "*/15 * * * *",
|
|
227
|
+
"timezone": "UTC"
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
"response": {
|
|
232
|
+
"status": 422,
|
|
233
|
+
"body": {
|
|
234
|
+
"detail": [
|
|
235
|
+
{
|
|
236
|
+
"type": "value_error",
|
|
237
|
+
"loc": [
|
|
238
|
+
"body",
|
|
239
|
+
"repos",
|
|
240
|
+
0
|
|
241
|
+
],
|
|
242
|
+
"msg": "Value error, Short URL format 'OpenHands/agent-server-gui' requires explicit 'provider' field. Use: {\"url\": \"owner/repo\", \"provider\": \"github\"} or provide a full URL like https://github.com/owner/repo"
|
|
243
|
+
}
|
|
244
|
+
]
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
"matchesSetupPayload": false
|
|
249
|
+
}
|
|
250
|
+
]
|
|
251
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
{
|
|
2
|
+
"automationId": "github-repo-monitor",
|
|
3
|
+
"description": "Direct GitHub-event setup. Every create request body below is verified against the live CreatePromptAutomationRequest model, and every filter expression against validate_filter() in OpenHands/automation.",
|
|
4
|
+
"capabilities": "supported",
|
|
5
|
+
"blockedBy": [
|
|
6
|
+
"cronOnly",
|
|
7
|
+
"notReady"
|
|
8
|
+
],
|
|
9
|
+
"scenarios": [
|
|
10
|
+
{
|
|
11
|
+
"id": "happy-path",
|
|
12
|
+
"description": "Watch issue and pull request comments for the default mention phrase.",
|
|
13
|
+
"formValues": {
|
|
14
|
+
"repository": "OpenHands/agent-server-gui",
|
|
15
|
+
"triggerPhrase": "@openhands",
|
|
16
|
+
"on": "issue_comment.created",
|
|
17
|
+
"ref": "main"
|
|
18
|
+
},
|
|
19
|
+
"preflight": {
|
|
20
|
+
"request": {
|
|
21
|
+
"method": "POST",
|
|
22
|
+
"path": "/v1/validate",
|
|
23
|
+
"body": {
|
|
24
|
+
"automationId": "github-repo-monitor",
|
|
25
|
+
"endpoint": "/v1/preset/prompt",
|
|
26
|
+
"draft": {
|
|
27
|
+
"name": "GitHub repository monitor - OpenHands/agent-server-gui",
|
|
28
|
+
"prompt": "A comment in OpenHands/agent-server-gui mentions '@openhands'. Read the surrounding issue or pull request context from the event payload, then post a helpful reply as a comment on the same thread.",
|
|
29
|
+
"repos": [
|
|
30
|
+
{
|
|
31
|
+
"url": "OpenHands/agent-server-gui",
|
|
32
|
+
"ref": "main",
|
|
33
|
+
"provider": "github"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"trigger": {
|
|
37
|
+
"type": "event",
|
|
38
|
+
"source": "github",
|
|
39
|
+
"on": "issue_comment.created",
|
|
40
|
+
"filter": "icontains(comment.body, '@openhands') && glob(repository.full_name, 'OpenHands/agent-server-gui')"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"response": {
|
|
46
|
+
"status": 200,
|
|
47
|
+
"body": {
|
|
48
|
+
"valid": true,
|
|
49
|
+
"errors": []
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"create": {
|
|
54
|
+
"request": {
|
|
55
|
+
"method": "POST",
|
|
56
|
+
"path": "/v1/preset/prompt",
|
|
57
|
+
"body": {
|
|
58
|
+
"name": "GitHub repository monitor - OpenHands/agent-server-gui",
|
|
59
|
+
"prompt": "A comment in OpenHands/agent-server-gui mentions '@openhands'. Read the surrounding issue or pull request context from the event payload, then post a helpful reply as a comment on the same thread.",
|
|
60
|
+
"repos": [
|
|
61
|
+
{
|
|
62
|
+
"url": "OpenHands/agent-server-gui",
|
|
63
|
+
"ref": "main",
|
|
64
|
+
"provider": "github"
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
"trigger": {
|
|
68
|
+
"type": "event",
|
|
69
|
+
"source": "github",
|
|
70
|
+
"on": "issue_comment.created",
|
|
71
|
+
"filter": "icontains(comment.body, '@openhands') && glob(repository.full_name, 'OpenHands/agent-server-gui')"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"response": {
|
|
76
|
+
"status": 201,
|
|
77
|
+
"body": {
|
|
78
|
+
"id": "b2d47c10-5a91-4e3f-8c62-1d7a9f0e4c33",
|
|
79
|
+
"user_id": "1a2b3c4d-0000-4000-8000-000000000001",
|
|
80
|
+
"org_id": "1a2b3c4d-0000-4000-8000-000000000002",
|
|
81
|
+
"model": null,
|
|
82
|
+
"name": "GitHub repository monitor - OpenHands/agent-server-gui",
|
|
83
|
+
"prompt": "A comment in OpenHands/agent-server-gui mentions '@openhands'. Read the surrounding issue or pull request context from the event payload, then post a helpful reply as a comment on the same thread.",
|
|
84
|
+
"trigger": {
|
|
85
|
+
"type": "event",
|
|
86
|
+
"source": "github",
|
|
87
|
+
"on": "issue_comment.created",
|
|
88
|
+
"filter": "icontains(comment.body, '@openhands') && glob(repository.full_name, 'OpenHands/agent-server-gui')"
|
|
89
|
+
},
|
|
90
|
+
"tarball_path": "oh-internal://uploads/c41e7b28-9d05-4a6b-8f13-2e5c7a90d146",
|
|
91
|
+
"setup_script_path": "setup.sh",
|
|
92
|
+
"entrypoint": ".venv/bin/python main.py",
|
|
93
|
+
"timeout": 600,
|
|
94
|
+
"keep_alive": null,
|
|
95
|
+
"enabled": true,
|
|
96
|
+
"last_triggered_at": null,
|
|
97
|
+
"created_at": "2026-07-27T12:00:00Z",
|
|
98
|
+
"updated_at": "2026-07-27T12:00:00Z"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"id": "quote-in-trigger-phrase-blocked-locally",
|
|
105
|
+
"description": "The trigger phrase is interpolated into a JMESPath string literal, so an apostrophe would break the expression. The field's safeExpressionLiteral constraint rejects it before any request is made. Without that constraint the service returns 422 with: Bad jmespath expression: Unknown token.",
|
|
106
|
+
"formValues": {
|
|
107
|
+
"repository": "OpenHands/agent-server-gui",
|
|
108
|
+
"triggerPhrase": "@open'hands",
|
|
109
|
+
"on": "issue_comment.created",
|
|
110
|
+
"ref": "main"
|
|
111
|
+
},
|
|
112
|
+
"localValidation": {
|
|
113
|
+
"valid": false,
|
|
114
|
+
"errors": [
|
|
115
|
+
{
|
|
116
|
+
"field": "triggerPhrase",
|
|
117
|
+
"constraint": "format",
|
|
118
|
+
"message": "Quotes and backslashes are not allowed in the trigger phrase."
|
|
119
|
+
}
|
|
120
|
+
]
|
|
121
|
+
},
|
|
122
|
+
"expectedFieldErrors": {
|
|
123
|
+
"triggerPhrase": "Quotes and backslashes are not allowed in the trigger phrase."
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"id": "event-type-not-delivered-by-deployment",
|
|
128
|
+
"description": "Preflight rejects an event type the deployment does not receive. Nothing is created, so there is no half-broken automation to clean up.",
|
|
129
|
+
"formValues": {
|
|
130
|
+
"repository": "OpenHands/agent-server-gui",
|
|
131
|
+
"triggerPhrase": "@openhands",
|
|
132
|
+
"on": "pull_request_review_comment.created",
|
|
133
|
+
"ref": "main"
|
|
134
|
+
},
|
|
135
|
+
"preflight": {
|
|
136
|
+
"request": {
|
|
137
|
+
"method": "POST",
|
|
138
|
+
"path": "/v1/validate",
|
|
139
|
+
"body": {
|
|
140
|
+
"automationId": "github-repo-monitor",
|
|
141
|
+
"endpoint": "/v1/preset/prompt",
|
|
142
|
+
"draft": {
|
|
143
|
+
"name": "GitHub repository monitor - OpenHands/agent-server-gui",
|
|
144
|
+
"prompt": "A comment in OpenHands/agent-server-gui mentions '@openhands'. Read the surrounding issue or pull request context from the event payload, then post a helpful reply as a comment on the same thread.",
|
|
145
|
+
"repos": [
|
|
146
|
+
{
|
|
147
|
+
"url": "OpenHands/agent-server-gui",
|
|
148
|
+
"ref": "main",
|
|
149
|
+
"provider": "github"
|
|
150
|
+
}
|
|
151
|
+
],
|
|
152
|
+
"trigger": {
|
|
153
|
+
"type": "event",
|
|
154
|
+
"source": "github",
|
|
155
|
+
"on": "pull_request_review_comment.created",
|
|
156
|
+
"filter": "icontains(comment.body, '@openhands') && glob(repository.full_name, 'OpenHands/agent-server-gui')"
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
"response": {
|
|
162
|
+
"status": 200,
|
|
163
|
+
"body": {
|
|
164
|
+
"valid": false,
|
|
165
|
+
"errors": [
|
|
166
|
+
{
|
|
167
|
+
"field": "trigger.on",
|
|
168
|
+
"code": "event_type_not_delivered",
|
|
169
|
+
"message": "No GitHub webhook delivering pull_request_review_comment.created is registered for this organization."
|
|
170
|
+
}
|
|
171
|
+
]
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
"expectedFieldErrors": {
|
|
176
|
+
"on": "No GitHub webhook delivering pull_request_review_comment.created is registered for this organization."
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
]
|
|
180
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"automationId": "incident-retrospective-drafter",
|
|
3
|
+
"description": "Assisted conversation setup. There is no create request in this archetype - at the end of the flow no automation exists yet, because the agent creates it during the conversation. That is the defining property of assisted setup, and the reason the entry declares a seed message instead of a payload.",
|
|
4
|
+
"capabilities": "supported",
|
|
5
|
+
"blockedBy": [
|
|
6
|
+
"notReady"
|
|
7
|
+
],
|
|
8
|
+
"scenarios": [
|
|
9
|
+
{
|
|
10
|
+
"id": "partial-seed-with-notion-warning",
|
|
11
|
+
"description": "Slack and Linear are connected, Notion is not. Notion is declared required false, so setup continues and the agent resolves it. The user fills two fields and leaves the rest for the agent.",
|
|
12
|
+
"integrationState": {
|
|
13
|
+
"slack": "connected",
|
|
14
|
+
"linear": "connected",
|
|
15
|
+
"notion": "missing"
|
|
16
|
+
},
|
|
17
|
+
"expectedPrerequisiteOutcome": {
|
|
18
|
+
"behavior": "continue",
|
|
19
|
+
"unmet": [
|
|
20
|
+
"notion"
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
"formValues": {
|
|
24
|
+
"incidentChannel": "#incidents",
|
|
25
|
+
"linearTeam": "Reliability",
|
|
26
|
+
"notionDestination": "",
|
|
27
|
+
"triggerPreference": "undecided",
|
|
28
|
+
"notes": ""
|
|
29
|
+
},
|
|
30
|
+
"conversation": {
|
|
31
|
+
"request": {
|
|
32
|
+
"action": "conversation.start",
|
|
33
|
+
"message": "The user supplied these starting points. Confirm each one, ask about anything left blank, then create the automation.\n\n- Incident channel: #incidents\n- Linear team: Reliability\n- Notion destination: \n- Preferred trigger: undecided\n- Notes: \n\nStill undecided and required before creation: the incident identifier format and the approved Notion retrospective template."
|
|
34
|
+
},
|
|
35
|
+
"response": {
|
|
36
|
+
"status": 201,
|
|
37
|
+
"body": {
|
|
38
|
+
"conversation_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "nothing-filled-in",
|
|
45
|
+
"description": "Every field is optional, so local validation passes with an empty form and the seed message carries only the standing questions.",
|
|
46
|
+
"integrationState": {
|
|
47
|
+
"slack": "connected",
|
|
48
|
+
"linear": "connected",
|
|
49
|
+
"notion": "connected"
|
|
50
|
+
},
|
|
51
|
+
"formValues": {
|
|
52
|
+
"incidentChannel": "",
|
|
53
|
+
"linearTeam": "",
|
|
54
|
+
"notionDestination": "",
|
|
55
|
+
"triggerPreference": "undecided",
|
|
56
|
+
"notes": ""
|
|
57
|
+
},
|
|
58
|
+
"localValidation": {
|
|
59
|
+
"valid": true,
|
|
60
|
+
"errors": []
|
|
61
|
+
},
|
|
62
|
+
"conversation": {
|
|
63
|
+
"request": {
|
|
64
|
+
"action": "conversation.start",
|
|
65
|
+
"message": "The user supplied these starting points. Confirm each one, ask about anything left blank, then create the automation.\n\n- Incident channel: \n- Linear team: \n- Notion destination: \n- Preferred trigger: undecided\n- Notes: \n\nStill undecided and required before creation: the incident identifier format and the approved Notion retrospective template."
|
|
66
|
+
},
|
|
67
|
+
"response": {
|
|
68
|
+
"status": 201,
|
|
69
|
+
"body": {
|
|
70
|
+
"conversation_id": "0b1d9e77-3c42-4a18-9f65-8ac2e1b4d090"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"id": "required-integration-missing-blocks",
|
|
77
|
+
"description": "Slack is declared required, so setup stops before the form renders. Contrast with Notion above - assisted setup can start with a gap the agent will close, but not with a gap that leaves the agent no data to read.",
|
|
78
|
+
"integrationState": {
|
|
79
|
+
"slack": "missing",
|
|
80
|
+
"linear": "connected",
|
|
81
|
+
"notion": "connected"
|
|
82
|
+
},
|
|
83
|
+
"expectedPrerequisiteOutcome": {
|
|
84
|
+
"behavior": "block",
|
|
85
|
+
"unmet": [
|
|
86
|
+
"slack"
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
}
|