agentweaver 0.1.14 → 0.1.16
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 +29 -7
- package/dist/artifact-manifest.js +219 -0
- package/dist/artifacts.js +21 -1
- package/dist/doctor/checks/cwd-context.js +4 -3
- package/dist/doctor/checks/env-diagnostics.js +193 -71
- package/dist/doctor/checks/flow-readiness.js +212 -203
- package/dist/doctor/index.js +1 -1
- package/dist/doctor/orchestrator.js +18 -7
- package/dist/doctor/runner.js +9 -8
- package/dist/doctor/types.js +12 -0
- package/dist/flow-state.js +75 -15
- package/dist/index.js +499 -199
- package/dist/interactive/blessed-session.js +361 -0
- package/dist/interactive/controller.js +1293 -0
- package/dist/interactive/create-interactive-session.js +5 -0
- package/dist/interactive/ink/index.js +576 -0
- package/dist/interactive/progress.js +245 -0
- package/dist/interactive/selectors.js +14 -0
- package/dist/interactive/session.js +1 -0
- package/dist/interactive/state.js +34 -0
- package/dist/interactive/tree.js +155 -0
- package/dist/interactive/types.js +1 -0
- package/dist/interactive/view-model.js +1 -0
- package/dist/interactive-ui.js +159 -194
- package/dist/pipeline/context.js +1 -0
- package/dist/pipeline/declarative-flow-runner.js +212 -6
- package/dist/pipeline/declarative-flows.js +27 -0
- package/dist/pipeline/execution-routing-config.js +15 -0
- package/dist/pipeline/flow-catalog.js +23 -3
- package/dist/pipeline/flow-run-resume.js +29 -0
- package/dist/pipeline/flow-specs/auto-common.json +89 -360
- package/dist/pipeline/flow-specs/auto-golang.json +58 -363
- package/dist/pipeline/flow-specs/auto-simple.json +141 -0
- package/dist/pipeline/flow-specs/bugz/bug-analyze.json +2 -0
- package/dist/pipeline/flow-specs/bugz/bug-fix.json +1 -0
- package/dist/pipeline/flow-specs/design-review/design-review-loop.json +304 -0
- package/dist/pipeline/flow-specs/design-review.json +249 -0
- package/dist/pipeline/flow-specs/gitlab/gitlab-diff-review.json +11 -0
- package/dist/pipeline/flow-specs/gitlab/gitlab-review.json +2 -0
- package/dist/pipeline/flow-specs/gitlab/mr-description.json +1 -0
- package/dist/pipeline/flow-specs/go/run-go-linter-loop.json +2 -0
- package/dist/pipeline/flow-specs/go/run-go-tests-loop.json +2 -0
- package/dist/pipeline/flow-specs/implement.json +24 -5
- package/dist/pipeline/flow-specs/instant-task.json +177 -0
- package/dist/pipeline/flow-specs/normalize-task-source.json +311 -0
- package/dist/pipeline/flow-specs/plan-revise.json +267 -0
- package/dist/pipeline/flow-specs/plan.json +48 -70
- package/dist/pipeline/flow-specs/review/review-fix.json +24 -4
- package/dist/pipeline/flow-specs/review/review-loop.json +351 -45
- package/dist/pipeline/flow-specs/review/review-project-loop.json +590 -0
- package/dist/pipeline/flow-specs/review/review-project.json +12 -0
- package/dist/pipeline/flow-specs/review/review.json +37 -31
- package/dist/pipeline/flow-specs/task-describe.json +62 -2
- package/dist/pipeline/flow-specs/task-source/jira-fetch.json +70 -0
- package/dist/pipeline/flow-specs/task-source/manual-input.json +216 -0
- package/dist/pipeline/node-registry.js +49 -1
- package/dist/pipeline/node-runner.js +3 -2
- package/dist/pipeline/nodes/build-review-fix-prompt-node.js +5 -1
- package/dist/pipeline/nodes/clear-ready-to-merge-node.js +11 -0
- package/dist/pipeline/nodes/commit-message-form-node.js +8 -0
- package/dist/pipeline/nodes/design-review-verdict-node.js +36 -0
- package/dist/pipeline/nodes/ensure-summary-json-node.js +70 -0
- package/dist/pipeline/nodes/fetch-gitlab-diff-node.js +19 -2
- package/dist/pipeline/nodes/fetch-gitlab-review-node.js +19 -2
- package/dist/pipeline/nodes/flow-run-node.js +226 -7
- package/dist/pipeline/nodes/git-commit-form-node.js +8 -0
- package/dist/pipeline/nodes/gitlab-review-artifacts-node.js +19 -2
- package/dist/pipeline/nodes/jira-fetch-node.js +50 -4
- package/dist/pipeline/nodes/llm-prompt-node.js +32 -12
- package/dist/pipeline/nodes/planning-bundle-node.js +10 -0
- package/dist/pipeline/nodes/review-verdict-node.js +86 -0
- package/dist/pipeline/nodes/select-files-form-node.js +8 -0
- package/dist/pipeline/nodes/structured-summary-node.js +24 -0
- package/dist/pipeline/nodes/user-input-node.js +38 -3
- package/dist/pipeline/nodes/write-selection-file-node.js +20 -4
- package/dist/pipeline/prompt-registry.js +5 -1
- package/dist/pipeline/prompt-runtime.js +4 -1
- package/dist/pipeline/review-iteration.js +26 -0
- package/dist/pipeline/spec-compiler.js +2 -0
- package/dist/pipeline/spec-types.js +5 -0
- package/dist/pipeline/spec-validator.js +14 -0
- package/dist/pipeline/value-resolver.js +84 -1
- package/dist/prompts.js +82 -13
- package/dist/review-severity.js +45 -0
- package/dist/runtime/artifact-registry.js +402 -0
- package/dist/runtime/design-review-input-contract.js +113 -0
- package/dist/runtime/env-loader.js +3 -0
- package/dist/runtime/execution-routing-store.js +134 -0
- package/dist/runtime/execution-routing.js +227 -0
- package/dist/runtime/interactive-execution-routing.js +462 -0
- package/dist/runtime/plan-revise-input-contract.js +147 -0
- package/dist/runtime/planning-bundle.js +123 -0
- package/dist/runtime/ready-to-merge.js +31 -0
- package/dist/runtime/review-input-contract.js +100 -0
- package/dist/scope.js +11 -2
- package/dist/structured-artifact-schema-registry.js +10 -0
- package/dist/structured-artifact-schemas.json +257 -1
- package/dist/structured-artifacts.js +83 -6
- package/dist/user-input.js +70 -3
- package/package.json +6 -3
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "design-review-loop-flow",
|
|
3
|
+
"version": 1,
|
|
4
|
+
"description": "Runs design-review and plan-revise for up to 3 iterations. Stops early on approval. If the final design review still requires revision, notifies the user and asks whether to continue with the latest planning artifacts or stop the parent flow.",
|
|
5
|
+
"catalogVisibility": "hidden",
|
|
6
|
+
"phases": [
|
|
7
|
+
{
|
|
8
|
+
"repeat": {
|
|
9
|
+
"var": "iteration",
|
|
10
|
+
"from": 1,
|
|
11
|
+
"to": 3
|
|
12
|
+
},
|
|
13
|
+
"phases": [
|
|
14
|
+
{
|
|
15
|
+
"id": "design_review_iteration_${iteration}",
|
|
16
|
+
"steps": [
|
|
17
|
+
{
|
|
18
|
+
"id": "run_design_review",
|
|
19
|
+
"node": "flow-run",
|
|
20
|
+
"params": {
|
|
21
|
+
"fileName": { "const": "design-review.json" },
|
|
22
|
+
"labelText": {
|
|
23
|
+
"template": "Running design review (iteration ${iteration})"
|
|
24
|
+
},
|
|
25
|
+
"taskKey": { "ref": "params.taskKey" },
|
|
26
|
+
"workspaceDir": { "ref": "params.workspaceDir" },
|
|
27
|
+
"extraPrompt": { "ref": "params.extraPrompt" },
|
|
28
|
+
"llmExecutor": { "ref": "params.llmExecutor" },
|
|
29
|
+
"llmModel": { "ref": "params.llmModel" }
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "check_design_review_verdict",
|
|
34
|
+
"node": "design-review-verdict",
|
|
35
|
+
"params": {
|
|
36
|
+
"taskKey": { "ref": "params.taskKey" }
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "notify_review_complete",
|
|
41
|
+
"node": "telegram-notify",
|
|
42
|
+
"params": {
|
|
43
|
+
"message": {
|
|
44
|
+
"template": "Design review iteration ${iteration} verdict: {verdict}",
|
|
45
|
+
"vars": {
|
|
46
|
+
"iteration": { "ref": "repeat.iteration" },
|
|
47
|
+
"verdict": { "ref": "steps.design_review_iteration_${iteration}.check_design_review_verdict.value.verdict" }
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "stop_on_approved",
|
|
54
|
+
"when": {
|
|
55
|
+
"equals": [
|
|
56
|
+
{ "ref": "steps.design_review_iteration_${iteration}.check_design_review_verdict.value.needsRevision" },
|
|
57
|
+
{ "const": false }
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"node": "telegram-notify",
|
|
61
|
+
"params": {
|
|
62
|
+
"message": {
|
|
63
|
+
"template": "Design review approved on iteration ${iteration}. Proceeding with implementation.",
|
|
64
|
+
"vars": {
|
|
65
|
+
"iteration": { "ref": "repeat.iteration" }
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"stopFlowIf": {
|
|
70
|
+
"equals": [
|
|
71
|
+
{ "ref": "steps.design_review_iteration_${iteration}.check_design_review_verdict.value.needsRevision" },
|
|
72
|
+
{ "const": false }
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
"stopFlowOutcome": "success"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "run_plan_revise",
|
|
79
|
+
"when": {
|
|
80
|
+
"all": [
|
|
81
|
+
{
|
|
82
|
+
"equals": [
|
|
83
|
+
{ "ref": "steps.design_review_iteration_${iteration}.check_design_review_verdict.value.needsRevision" },
|
|
84
|
+
{ "const": true }
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"not": {
|
|
89
|
+
"equals": [{ "ref": "repeat.iteration" }, { "const": 3 }]
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
"node": "flow-run",
|
|
95
|
+
"params": {
|
|
96
|
+
"fileName": { "const": "plan-revise.json" },
|
|
97
|
+
"labelText": {
|
|
98
|
+
"template": "Running plan revision (iteration ${iteration})"
|
|
99
|
+
},
|
|
100
|
+
"taskKey": { "ref": "params.taskKey" },
|
|
101
|
+
"workspaceDir": { "ref": "params.workspaceDir" },
|
|
102
|
+
"extraPrompt": { "ref": "params.extraPrompt" },
|
|
103
|
+
"llmExecutor": { "ref": "params.llmExecutor" },
|
|
104
|
+
"llmModel": { "ref": "params.llmModel" }
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"id": "notify_revise_complete",
|
|
109
|
+
"when": {
|
|
110
|
+
"all": [
|
|
111
|
+
{
|
|
112
|
+
"equals": [
|
|
113
|
+
{ "ref": "steps.design_review_iteration_${iteration}.check_design_review_verdict.value.needsRevision" },
|
|
114
|
+
{ "const": true }
|
|
115
|
+
]
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"not": {
|
|
119
|
+
"equals": [{ "ref": "repeat.iteration" }, { "const": 3 }]
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
"node": "telegram-notify",
|
|
125
|
+
"params": {
|
|
126
|
+
"message": {
|
|
127
|
+
"template": "Plan revision after design review iteration ${iteration} is complete.",
|
|
128
|
+
"vars": {
|
|
129
|
+
"iteration": { "ref": "repeat.iteration" }
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"id": "notify_max_iterations_reached",
|
|
136
|
+
"when": {
|
|
137
|
+
"all": [
|
|
138
|
+
{
|
|
139
|
+
"equals": [
|
|
140
|
+
{ "ref": "steps.design_review_iteration_${iteration}.check_design_review_verdict.value.needsRevision" },
|
|
141
|
+
{ "const": true }
|
|
142
|
+
]
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"equals": [{ "ref": "repeat.iteration" }, { "const": 3 }]
|
|
146
|
+
}
|
|
147
|
+
]
|
|
148
|
+
},
|
|
149
|
+
"node": "telegram-notify",
|
|
150
|
+
"params": {
|
|
151
|
+
"message": { "const": "Design review still requires revision after 3 iterations. User confirmation is required to continue with the latest planning artifacts." }
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"id": "collect_continue_decision",
|
|
156
|
+
"when": {
|
|
157
|
+
"all": [
|
|
158
|
+
{
|
|
159
|
+
"equals": [
|
|
160
|
+
{ "ref": "steps.design_review_iteration_${iteration}.check_design_review_verdict.value.needsRevision" },
|
|
161
|
+
{ "const": true }
|
|
162
|
+
]
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"equals": [{ "ref": "repeat.iteration" }, { "const": 3 }]
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
},
|
|
169
|
+
"node": "user-input",
|
|
170
|
+
"params": {
|
|
171
|
+
"formId": { "const": "design-review-loop-final-decision" },
|
|
172
|
+
"title": { "const": "Design Review Requires Revision" },
|
|
173
|
+
"description": { "const": "The latest design review still requires revision after 3 iterations. Decide whether to continue with the latest design and plan artifacts or stop the flow." },
|
|
174
|
+
"submitLabel": { "const": "Confirm decision" },
|
|
175
|
+
"fields": {
|
|
176
|
+
"list": [
|
|
177
|
+
{
|
|
178
|
+
"const": {
|
|
179
|
+
"id": "decision",
|
|
180
|
+
"type": "single-select",
|
|
181
|
+
"label": "How to proceed",
|
|
182
|
+
"required": true,
|
|
183
|
+
"default": "continue",
|
|
184
|
+
"options": [
|
|
185
|
+
{
|
|
186
|
+
"value": "continue",
|
|
187
|
+
"label": "Continue with latest artifacts",
|
|
188
|
+
"description": "Proceed to implementation using the most recently revised design and plan."
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"value": "stop",
|
|
192
|
+
"label": "Stop the flow",
|
|
193
|
+
"description": "Do not continue automatically. Review and revise the planning artifacts manually."
|
|
194
|
+
}
|
|
195
|
+
]
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
]
|
|
199
|
+
},
|
|
200
|
+
"outputFile": {
|
|
201
|
+
"template": "{workspace}/design-review-loop-decision-{taskKey}.json",
|
|
202
|
+
"vars": {
|
|
203
|
+
"workspace": { "ref": "params.workspaceDir" },
|
|
204
|
+
"taskKey": { "ref": "params.taskKey" }
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
"expect": [
|
|
209
|
+
{
|
|
210
|
+
"kind": "require-structured-artifacts",
|
|
211
|
+
"items": [
|
|
212
|
+
{
|
|
213
|
+
"path": {
|
|
214
|
+
"template": "{workspace}/design-review-loop-decision-{taskKey}.json",
|
|
215
|
+
"vars": {
|
|
216
|
+
"workspace": { "ref": "params.workspaceDir" },
|
|
217
|
+
"taskKey": { "ref": "params.taskKey" }
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
"schemaId": "user-input/v1"
|
|
221
|
+
}
|
|
222
|
+
],
|
|
223
|
+
"message": "Design-review loop final decision input is missing or invalid."
|
|
224
|
+
}
|
|
225
|
+
]
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"id": "notify_continue_with_latest_artifacts",
|
|
229
|
+
"when": {
|
|
230
|
+
"all": [
|
|
231
|
+
{
|
|
232
|
+
"equals": [
|
|
233
|
+
{ "ref": "steps.design_review_iteration_${iteration}.check_design_review_verdict.value.needsRevision" },
|
|
234
|
+
{ "const": true }
|
|
235
|
+
]
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"equals": [{ "ref": "repeat.iteration" }, { "const": 3 }]
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"equals": [
|
|
242
|
+
{ "ref": "steps.design_review_iteration_${iteration}.collect_continue_decision.value.values.decision" },
|
|
243
|
+
{ "const": "continue" }
|
|
244
|
+
]
|
|
245
|
+
}
|
|
246
|
+
]
|
|
247
|
+
},
|
|
248
|
+
"node": "telegram-notify",
|
|
249
|
+
"params": {
|
|
250
|
+
"message": { "const": "User chose to continue with the latest planning artifacts despite the final design-review verdict." }
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"id": "stop_after_user_declined",
|
|
255
|
+
"when": {
|
|
256
|
+
"all": [
|
|
257
|
+
{
|
|
258
|
+
"equals": [
|
|
259
|
+
{ "ref": "steps.design_review_iteration_${iteration}.check_design_review_verdict.value.needsRevision" },
|
|
260
|
+
{ "const": true }
|
|
261
|
+
]
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"equals": [{ "ref": "repeat.iteration" }, { "const": 3 }]
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"equals": [
|
|
268
|
+
{ "ref": "steps.design_review_iteration_${iteration}.collect_continue_decision.value.values.decision" },
|
|
269
|
+
{ "const": "stop" }
|
|
270
|
+
]
|
|
271
|
+
}
|
|
272
|
+
]
|
|
273
|
+
},
|
|
274
|
+
"node": "telegram-notify",
|
|
275
|
+
"params": {
|
|
276
|
+
"message": { "const": "User chose to stop after the final design-review verdict still required revision." }
|
|
277
|
+
},
|
|
278
|
+
"stopFlowIf": {
|
|
279
|
+
"all": [
|
|
280
|
+
{
|
|
281
|
+
"equals": [
|
|
282
|
+
{ "ref": "steps.design_review_iteration_${iteration}.check_design_review_verdict.value.needsRevision" },
|
|
283
|
+
{ "const": true }
|
|
284
|
+
]
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"equals": [{ "ref": "repeat.iteration" }, { "const": 3 }]
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"equals": [
|
|
291
|
+
{ "ref": "steps.design_review_iteration_${iteration}.collect_continue_decision.value.values.decision" },
|
|
292
|
+
{ "const": "stop" }
|
|
293
|
+
]
|
|
294
|
+
}
|
|
295
|
+
]
|
|
296
|
+
},
|
|
297
|
+
"stopFlowOutcome": "stopped"
|
|
298
|
+
}
|
|
299
|
+
]
|
|
300
|
+
}
|
|
301
|
+
]
|
|
302
|
+
}
|
|
303
|
+
]
|
|
304
|
+
}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "design-review-flow",
|
|
3
|
+
"version": 1,
|
|
4
|
+
"description": "Performs a structured planning critique of the latest completed planning artifacts against the task context available in the scope. Produces a verdict-oriented design review artifact and treats approved_with_warnings as ready to proceed.",
|
|
5
|
+
"phases": [
|
|
6
|
+
{
|
|
7
|
+
"id": "phase_1_load_contract",
|
|
8
|
+
"steps": [
|
|
9
|
+
{
|
|
10
|
+
"id": "validate_design_markdown_artifact",
|
|
11
|
+
"node": "file-check",
|
|
12
|
+
"params": {
|
|
13
|
+
"path": { "ref": "params.designFile" },
|
|
14
|
+
"panelTitle": { "const": "Design Markdown Artifact" },
|
|
15
|
+
"foundMessage": { "const": "Design markdown artifact found for the resolved planning iteration." },
|
|
16
|
+
"tone": { "const": "cyan" }
|
|
17
|
+
},
|
|
18
|
+
"expect": [
|
|
19
|
+
{
|
|
20
|
+
"kind": "require-file",
|
|
21
|
+
"path": { "ref": "params.designFile" },
|
|
22
|
+
"message": "Design-review contract is missing the required design markdown artifact."
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": "validate_design_json_artifact",
|
|
28
|
+
"node": "file-check",
|
|
29
|
+
"params": {
|
|
30
|
+
"path": { "ref": "params.designJsonFile" },
|
|
31
|
+
"panelTitle": { "const": "Design Structured Artifact" },
|
|
32
|
+
"foundMessage": { "const": "Design structured artifact found for the resolved planning iteration." },
|
|
33
|
+
"tone": { "const": "cyan" }
|
|
34
|
+
},
|
|
35
|
+
"expect": [
|
|
36
|
+
{
|
|
37
|
+
"kind": "require-file",
|
|
38
|
+
"path": { "ref": "params.designJsonFile" },
|
|
39
|
+
"message": "Design-review contract is missing the required design structured artifact."
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "validate_plan_markdown_artifact",
|
|
45
|
+
"node": "file-check",
|
|
46
|
+
"params": {
|
|
47
|
+
"path": { "ref": "params.planFile" },
|
|
48
|
+
"panelTitle": { "const": "Plan Markdown Artifact" },
|
|
49
|
+
"foundMessage": { "const": "Implementation plan markdown artifact found for the resolved planning iteration." },
|
|
50
|
+
"tone": { "const": "cyan" }
|
|
51
|
+
},
|
|
52
|
+
"expect": [
|
|
53
|
+
{
|
|
54
|
+
"kind": "require-file",
|
|
55
|
+
"path": { "ref": "params.planFile" },
|
|
56
|
+
"message": "Design-review contract is missing the required implementation plan markdown artifact."
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"id": "validate_plan_json_artifact",
|
|
62
|
+
"node": "file-check",
|
|
63
|
+
"params": {
|
|
64
|
+
"path": { "ref": "params.planJsonFile" },
|
|
65
|
+
"panelTitle": { "const": "Plan Structured Artifact" },
|
|
66
|
+
"foundMessage": { "const": "Implementation plan structured artifact found for the resolved planning iteration." },
|
|
67
|
+
"tone": { "const": "cyan" }
|
|
68
|
+
},
|
|
69
|
+
"expect": [
|
|
70
|
+
{
|
|
71
|
+
"kind": "require-file",
|
|
72
|
+
"path": { "ref": "params.planJsonFile" },
|
|
73
|
+
"message": "Design-review contract is missing the required implementation plan structured artifact."
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "validate_qa_markdown_artifact",
|
|
79
|
+
"when": { "ref": "params.hasQaArtifacts" },
|
|
80
|
+
"node": "file-check",
|
|
81
|
+
"params": {
|
|
82
|
+
"path": { "ref": "params.qaFilePath" },
|
|
83
|
+
"panelTitle": { "const": "QA Markdown Artifact" },
|
|
84
|
+
"foundMessage": { "const": "QA markdown artifact found and will be included in the critique." },
|
|
85
|
+
"tone": { "const": "cyan" }
|
|
86
|
+
},
|
|
87
|
+
"expect": [
|
|
88
|
+
{
|
|
89
|
+
"kind": "require-file",
|
|
90
|
+
"path": { "ref": "params.qaFilePath" },
|
|
91
|
+
"message": "Design-review contract expected a QA markdown artifact, but the file is missing."
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"id": "validate_qa_json_artifact",
|
|
97
|
+
"when": { "ref": "params.hasQaArtifacts" },
|
|
98
|
+
"node": "file-check",
|
|
99
|
+
"params": {
|
|
100
|
+
"path": { "ref": "params.qaJsonFilePath" },
|
|
101
|
+
"panelTitle": { "const": "QA Structured Artifact" },
|
|
102
|
+
"foundMessage": { "const": "QA structured artifact found and will be included in the critique." },
|
|
103
|
+
"tone": { "const": "cyan" }
|
|
104
|
+
},
|
|
105
|
+
"expect": [
|
|
106
|
+
{
|
|
107
|
+
"kind": "require-file",
|
|
108
|
+
"path": { "ref": "params.qaJsonFilePath" },
|
|
109
|
+
"message": "Design-review contract expected a QA structured artifact, but the file is missing."
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"id": "phase_2_review",
|
|
117
|
+
"steps": [
|
|
118
|
+
{
|
|
119
|
+
"id": "run_design_review",
|
|
120
|
+
"node": "llm-prompt",
|
|
121
|
+
"routingGroup": "design-review",
|
|
122
|
+
"prompt": {
|
|
123
|
+
"templateRef": "design-review",
|
|
124
|
+
"vars": {
|
|
125
|
+
"task_context_json_file": { "ref": "params.taskContextJsonFile" },
|
|
126
|
+
"jira_task_file": { "ref": "params.jiraTaskFile" },
|
|
127
|
+
"jira_attachments_manifest_file": { "ref": "params.jiraAttachmentsManifestFile" },
|
|
128
|
+
"jira_attachments_context_file": { "ref": "params.jiraAttachmentsContextFile" },
|
|
129
|
+
"planning_answers_json_file": { "ref": "params.planningAnswersJsonFile" },
|
|
130
|
+
"task_input_json_file": { "ref": "params.taskInputJsonFile" },
|
|
131
|
+
"design_file": { "ref": "params.designFile" },
|
|
132
|
+
"design_json_file": { "ref": "params.designJsonFile" },
|
|
133
|
+
"plan_file": { "ref": "params.planFile" },
|
|
134
|
+
"plan_json_file": { "ref": "params.planJsonFile" },
|
|
135
|
+
"qa_file": { "ref": "params.qaFile" },
|
|
136
|
+
"qa_json_file": { "ref": "params.qaJsonFile" },
|
|
137
|
+
"review_file": {
|
|
138
|
+
"artifact": {
|
|
139
|
+
"kind": "design-review-file",
|
|
140
|
+
"taskKey": { "ref": "params.taskKey" },
|
|
141
|
+
"iteration": { "ref": "params.iteration" }
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
"review_json_file": {
|
|
145
|
+
"artifact": {
|
|
146
|
+
"kind": "design-review-json-file",
|
|
147
|
+
"taskKey": { "ref": "params.taskKey" },
|
|
148
|
+
"iteration": { "ref": "params.iteration" }
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"extraPrompt": { "ref": "params.extraPrompt" },
|
|
153
|
+
"format": "task-prompt"
|
|
154
|
+
},
|
|
155
|
+
"params": {
|
|
156
|
+
"labelText": {
|
|
157
|
+
"template": "Running design review (iteration {iteration})",
|
|
158
|
+
"vars": {
|
|
159
|
+
"iteration": { "ref": "params.iteration" }
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
"model": { "ref": "params.llmModel" },
|
|
163
|
+
"executor": { "ref": "params.llmExecutor" },
|
|
164
|
+
"requiredArtifacts": {
|
|
165
|
+
"list": [
|
|
166
|
+
{
|
|
167
|
+
"artifact": {
|
|
168
|
+
"kind": "design-review-file",
|
|
169
|
+
"taskKey": { "ref": "params.taskKey" },
|
|
170
|
+
"iteration": { "ref": "params.iteration" }
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"artifact": {
|
|
175
|
+
"kind": "design-review-json-file",
|
|
176
|
+
"taskKey": { "ref": "params.taskKey" },
|
|
177
|
+
"iteration": { "ref": "params.iteration" }
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
]
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
"expect": [
|
|
184
|
+
{
|
|
185
|
+
"kind": "require-artifacts",
|
|
186
|
+
"when": { "not": { "ref": "context.dryRun" } },
|
|
187
|
+
"paths": {
|
|
188
|
+
"list": [
|
|
189
|
+
{
|
|
190
|
+
"artifact": {
|
|
191
|
+
"kind": "design-review-file",
|
|
192
|
+
"taskKey": { "ref": "params.taskKey" },
|
|
193
|
+
"iteration": { "ref": "params.iteration" }
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
]
|
|
197
|
+
},
|
|
198
|
+
"message": "Design review did not produce the required review artifact."
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"kind": "require-structured-artifacts",
|
|
202
|
+
"when": { "not": { "ref": "context.dryRun" } },
|
|
203
|
+
"items": [
|
|
204
|
+
{
|
|
205
|
+
"path": {
|
|
206
|
+
"artifact": {
|
|
207
|
+
"kind": "design-review-json-file",
|
|
208
|
+
"taskKey": { "ref": "params.taskKey" },
|
|
209
|
+
"iteration": { "ref": "params.iteration" }
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
"schemaId": "design-review/v1"
|
|
213
|
+
}
|
|
214
|
+
],
|
|
215
|
+
"message": "Design review produced invalid structured artifacts."
|
|
216
|
+
}
|
|
217
|
+
]
|
|
218
|
+
}
|
|
219
|
+
]
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"id": "phase_3_finalize",
|
|
223
|
+
"steps": [
|
|
224
|
+
{
|
|
225
|
+
"id": "check_ready_to_merge",
|
|
226
|
+
"node": "file-check",
|
|
227
|
+
"params": {
|
|
228
|
+
"path": {
|
|
229
|
+
"artifact": {
|
|
230
|
+
"kind": "ready-to-merge-file",
|
|
231
|
+
"taskKey": { "ref": "params.taskKey" }
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
"panelTitle": { "const": "Ready To Merge" },
|
|
235
|
+
"foundMessage": { "const": "Design review is ready to proceed. File ready-to-merge.md has been created." },
|
|
236
|
+
"tone": { "const": "green" }
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"id": "notify_review_complete",
|
|
241
|
+
"node": "telegram-notify",
|
|
242
|
+
"params": {
|
|
243
|
+
"message": { "const": "Design review phase complete" }
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
]
|
|
247
|
+
}
|
|
248
|
+
]
|
|
249
|
+
}
|
|
@@ -104,6 +104,7 @@
|
|
|
104
104
|
"id": "run_diff_review",
|
|
105
105
|
"when": { "not": { "ref": "context.dryRun" } },
|
|
106
106
|
"node": "llm-prompt",
|
|
107
|
+
"routingGroup": "review",
|
|
107
108
|
"prompt": {
|
|
108
109
|
"templateRef": "gitlab-diff-review",
|
|
109
110
|
"vars": {
|
|
@@ -190,6 +191,16 @@
|
|
|
190
191
|
"message": "Diff review produced invalid structured artifacts."
|
|
191
192
|
}
|
|
192
193
|
]
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"id": "review_verdict",
|
|
197
|
+
"node": "review-verdict",
|
|
198
|
+
"when": { "not": { "ref": "context.dryRun" } },
|
|
199
|
+
"params": {
|
|
200
|
+
"taskKey": { "ref": "params.taskKey" },
|
|
201
|
+
"iteration": { "ref": "params.iteration" },
|
|
202
|
+
"blockingSeverities": { "ref": "params.reviewBlockingSeverities" }
|
|
203
|
+
}
|
|
193
204
|
}
|
|
194
205
|
]
|
|
195
206
|
}
|
|
@@ -104,6 +104,7 @@
|
|
|
104
104
|
"id": "assess_gitlab_review",
|
|
105
105
|
"when": { "not": { "ref": "context.dryRun" } },
|
|
106
106
|
"node": "llm-prompt",
|
|
107
|
+
"routingGroup": "review",
|
|
107
108
|
"prompt": {
|
|
108
109
|
"templateRef": "gitlab-review",
|
|
109
110
|
"vars": {
|
|
@@ -239,6 +240,7 @@
|
|
|
239
240
|
},
|
|
240
241
|
"reviewFixSelectionJsonFile": { "ref": "params.reviewFixSelectionJsonFile" },
|
|
241
242
|
"reviewFixPoints": { "ref": "params.reviewFixPoints" },
|
|
243
|
+
"reviewBlockingSeverities": { "ref": "params.reviewBlockingSeverities" },
|
|
242
244
|
"extraPrompt": { "ref": "params.extraPrompt" },
|
|
243
245
|
"llmModel": { "ref": "params.llmModel" },
|
|
244
246
|
"llmExecutor": { "ref": "params.llmExecutor" }
|
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
]
|
|
57
57
|
},
|
|
58
58
|
"node": "llm-prompt",
|
|
59
|
+
"routingGroup": "local-fix-loop",
|
|
59
60
|
"prompt": {
|
|
60
61
|
"templateRef": "run-go-linter-loop-fix",
|
|
61
62
|
"vars": {
|
|
@@ -177,6 +178,7 @@
|
|
|
177
178
|
]
|
|
178
179
|
},
|
|
179
180
|
"node": "llm-prompt",
|
|
181
|
+
"routingGroup": "local-fix-loop",
|
|
180
182
|
"prompt": {
|
|
181
183
|
"templateRef": "run-go-linter-loop-fix",
|
|
182
184
|
"vars": {
|
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
]
|
|
57
57
|
},
|
|
58
58
|
"node": "llm-prompt",
|
|
59
|
+
"routingGroup": "local-fix-loop",
|
|
59
60
|
"prompt": {
|
|
60
61
|
"templateRef": "run-go-tests-loop-fix",
|
|
61
62
|
"vars": {
|
|
@@ -177,6 +178,7 @@
|
|
|
177
178
|
]
|
|
178
179
|
},
|
|
179
180
|
"node": "llm-prompt",
|
|
181
|
+
"routingGroup": "local-fix-loop",
|
|
180
182
|
"prompt": {
|
|
181
183
|
"templateRef": "run-go-tests-loop-fix",
|
|
182
184
|
"vars": {
|