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.
Files changed (100) hide show
  1. package/README.md +29 -7
  2. package/dist/artifact-manifest.js +219 -0
  3. package/dist/artifacts.js +21 -1
  4. package/dist/doctor/checks/cwd-context.js +4 -3
  5. package/dist/doctor/checks/env-diagnostics.js +193 -71
  6. package/dist/doctor/checks/flow-readiness.js +212 -203
  7. package/dist/doctor/index.js +1 -1
  8. package/dist/doctor/orchestrator.js +18 -7
  9. package/dist/doctor/runner.js +9 -8
  10. package/dist/doctor/types.js +12 -0
  11. package/dist/flow-state.js +75 -15
  12. package/dist/index.js +499 -199
  13. package/dist/interactive/blessed-session.js +361 -0
  14. package/dist/interactive/controller.js +1293 -0
  15. package/dist/interactive/create-interactive-session.js +5 -0
  16. package/dist/interactive/ink/index.js +576 -0
  17. package/dist/interactive/progress.js +245 -0
  18. package/dist/interactive/selectors.js +14 -0
  19. package/dist/interactive/session.js +1 -0
  20. package/dist/interactive/state.js +34 -0
  21. package/dist/interactive/tree.js +155 -0
  22. package/dist/interactive/types.js +1 -0
  23. package/dist/interactive/view-model.js +1 -0
  24. package/dist/interactive-ui.js +159 -194
  25. package/dist/pipeline/context.js +1 -0
  26. package/dist/pipeline/declarative-flow-runner.js +212 -6
  27. package/dist/pipeline/declarative-flows.js +27 -0
  28. package/dist/pipeline/execution-routing-config.js +15 -0
  29. package/dist/pipeline/flow-catalog.js +23 -3
  30. package/dist/pipeline/flow-run-resume.js +29 -0
  31. package/dist/pipeline/flow-specs/auto-common.json +89 -360
  32. package/dist/pipeline/flow-specs/auto-golang.json +58 -363
  33. package/dist/pipeline/flow-specs/auto-simple.json +141 -0
  34. package/dist/pipeline/flow-specs/bugz/bug-analyze.json +2 -0
  35. package/dist/pipeline/flow-specs/bugz/bug-fix.json +1 -0
  36. package/dist/pipeline/flow-specs/design-review/design-review-loop.json +304 -0
  37. package/dist/pipeline/flow-specs/design-review.json +249 -0
  38. package/dist/pipeline/flow-specs/gitlab/gitlab-diff-review.json +11 -0
  39. package/dist/pipeline/flow-specs/gitlab/gitlab-review.json +2 -0
  40. package/dist/pipeline/flow-specs/gitlab/mr-description.json +1 -0
  41. package/dist/pipeline/flow-specs/go/run-go-linter-loop.json +2 -0
  42. package/dist/pipeline/flow-specs/go/run-go-tests-loop.json +2 -0
  43. package/dist/pipeline/flow-specs/implement.json +24 -5
  44. package/dist/pipeline/flow-specs/instant-task.json +177 -0
  45. package/dist/pipeline/flow-specs/normalize-task-source.json +311 -0
  46. package/dist/pipeline/flow-specs/plan-revise.json +267 -0
  47. package/dist/pipeline/flow-specs/plan.json +48 -70
  48. package/dist/pipeline/flow-specs/review/review-fix.json +24 -4
  49. package/dist/pipeline/flow-specs/review/review-loop.json +351 -45
  50. package/dist/pipeline/flow-specs/review/review-project-loop.json +590 -0
  51. package/dist/pipeline/flow-specs/review/review-project.json +12 -0
  52. package/dist/pipeline/flow-specs/review/review.json +37 -31
  53. package/dist/pipeline/flow-specs/task-describe.json +62 -2
  54. package/dist/pipeline/flow-specs/task-source/jira-fetch.json +70 -0
  55. package/dist/pipeline/flow-specs/task-source/manual-input.json +216 -0
  56. package/dist/pipeline/node-registry.js +49 -1
  57. package/dist/pipeline/node-runner.js +3 -2
  58. package/dist/pipeline/nodes/build-review-fix-prompt-node.js +5 -1
  59. package/dist/pipeline/nodes/clear-ready-to-merge-node.js +11 -0
  60. package/dist/pipeline/nodes/commit-message-form-node.js +8 -0
  61. package/dist/pipeline/nodes/design-review-verdict-node.js +36 -0
  62. package/dist/pipeline/nodes/ensure-summary-json-node.js +70 -0
  63. package/dist/pipeline/nodes/fetch-gitlab-diff-node.js +19 -2
  64. package/dist/pipeline/nodes/fetch-gitlab-review-node.js +19 -2
  65. package/dist/pipeline/nodes/flow-run-node.js +226 -7
  66. package/dist/pipeline/nodes/git-commit-form-node.js +8 -0
  67. package/dist/pipeline/nodes/gitlab-review-artifacts-node.js +19 -2
  68. package/dist/pipeline/nodes/jira-fetch-node.js +50 -4
  69. package/dist/pipeline/nodes/llm-prompt-node.js +32 -12
  70. package/dist/pipeline/nodes/planning-bundle-node.js +10 -0
  71. package/dist/pipeline/nodes/review-verdict-node.js +86 -0
  72. package/dist/pipeline/nodes/select-files-form-node.js +8 -0
  73. package/dist/pipeline/nodes/structured-summary-node.js +24 -0
  74. package/dist/pipeline/nodes/user-input-node.js +38 -3
  75. package/dist/pipeline/nodes/write-selection-file-node.js +20 -4
  76. package/dist/pipeline/prompt-registry.js +5 -1
  77. package/dist/pipeline/prompt-runtime.js +4 -1
  78. package/dist/pipeline/review-iteration.js +26 -0
  79. package/dist/pipeline/spec-compiler.js +2 -0
  80. package/dist/pipeline/spec-types.js +5 -0
  81. package/dist/pipeline/spec-validator.js +14 -0
  82. package/dist/pipeline/value-resolver.js +84 -1
  83. package/dist/prompts.js +82 -13
  84. package/dist/review-severity.js +45 -0
  85. package/dist/runtime/artifact-registry.js +402 -0
  86. package/dist/runtime/design-review-input-contract.js +113 -0
  87. package/dist/runtime/env-loader.js +3 -0
  88. package/dist/runtime/execution-routing-store.js +134 -0
  89. package/dist/runtime/execution-routing.js +227 -0
  90. package/dist/runtime/interactive-execution-routing.js +462 -0
  91. package/dist/runtime/plan-revise-input-contract.js +147 -0
  92. package/dist/runtime/planning-bundle.js +123 -0
  93. package/dist/runtime/ready-to-merge.js +31 -0
  94. package/dist/runtime/review-input-contract.js +100 -0
  95. package/dist/scope.js +11 -2
  96. package/dist/structured-artifact-schema-registry.js +10 -0
  97. package/dist/structured-artifact-schemas.json +257 -1
  98. package/dist/structured-artifacts.js +83 -6
  99. package/dist/user-input.js +70 -3
  100. package/package.json +6 -3
@@ -0,0 +1,267 @@
1
+ {
2
+ "kind": "plan-revise-flow",
3
+ "version": 1,
4
+ "description": "Consumes a design-review verdict artifact and the latest planning artifacts, then produces revised design, implementation plan, and QA artifacts at the next iteration number without modifying originals.",
5
+ "phases": [
6
+ {
7
+ "id": "phase_1_load_contract",
8
+ "steps": [
9
+ {
10
+ "id": "validate_review_markdown",
11
+ "node": "file-check",
12
+ "params": {
13
+ "path": { "ref": "params.reviewFile" },
14
+ "panelTitle": { "const": "Design Review Verdict Markdown" },
15
+ "foundMessage": { "const": "Design review verdict markdown found." },
16
+ "tone": { "const": "cyan" }
17
+ },
18
+ "expect": [
19
+ {
20
+ "kind": "require-file",
21
+ "path": { "ref": "params.reviewFile" },
22
+ "message": "Plan-revise contract is missing the required design-review verdict markdown."
23
+ }
24
+ ]
25
+ },
26
+ {
27
+ "id": "validate_review_json",
28
+ "node": "file-check",
29
+ "params": {
30
+ "path": { "ref": "params.reviewJsonFile" },
31
+ "panelTitle": { "const": "Design Review Verdict JSON" },
32
+ "foundMessage": { "const": "Design review verdict JSON found." },
33
+ "tone": { "const": "cyan" }
34
+ },
35
+ "expect": [
36
+ {
37
+ "kind": "require-file",
38
+ "path": { "ref": "params.reviewJsonFile" },
39
+ "message": "Plan-revise contract is missing the required design-review verdict JSON."
40
+ }
41
+ ]
42
+ },
43
+ {
44
+ "id": "validate_source_design_markdown",
45
+ "node": "file-check",
46
+ "params": {
47
+ "path": { "ref": "params.designFile" },
48
+ "panelTitle": { "const": "Source Design Markdown" },
49
+ "foundMessage": { "const": "Source design markdown artifact found." },
50
+ "tone": { "const": "cyan" }
51
+ },
52
+ "expect": [
53
+ {
54
+ "kind": "require-file",
55
+ "path": { "ref": "params.designFile" },
56
+ "message": "Plan-revise contract is missing the required source design markdown."
57
+ }
58
+ ]
59
+ },
60
+ {
61
+ "id": "validate_source_design_json",
62
+ "node": "file-check",
63
+ "params": {
64
+ "path": { "ref": "params.designJsonFile" },
65
+ "panelTitle": { "const": "Source Design JSON" },
66
+ "foundMessage": { "const": "Source design structured artifact found." },
67
+ "tone": { "const": "cyan" }
68
+ },
69
+ "expect": [
70
+ {
71
+ "kind": "require-file",
72
+ "path": { "ref": "params.designJsonFile" },
73
+ "message": "Plan-revise contract is missing the required source design JSON."
74
+ }
75
+ ]
76
+ },
77
+ {
78
+ "id": "validate_source_plan_markdown",
79
+ "node": "file-check",
80
+ "params": {
81
+ "path": { "ref": "params.planFile" },
82
+ "panelTitle": { "const": "Source Plan Markdown" },
83
+ "foundMessage": { "const": "Source implementation plan markdown found." },
84
+ "tone": { "const": "cyan" }
85
+ },
86
+ "expect": [
87
+ {
88
+ "kind": "require-file",
89
+ "path": { "ref": "params.planFile" },
90
+ "message": "Plan-revise contract is missing the required source plan markdown."
91
+ }
92
+ ]
93
+ },
94
+ {
95
+ "id": "validate_source_plan_json",
96
+ "node": "file-check",
97
+ "params": {
98
+ "path": { "ref": "params.planJsonFile" },
99
+ "panelTitle": { "const": "Source Plan JSON" },
100
+ "foundMessage": { "const": "Source implementation plan structured artifact found." },
101
+ "tone": { "const": "cyan" }
102
+ },
103
+ "expect": [
104
+ {
105
+ "kind": "require-file",
106
+ "path": { "ref": "params.planJsonFile" },
107
+ "message": "Plan-revise contract is missing the required source plan JSON."
108
+ }
109
+ ]
110
+ },
111
+ {
112
+ "id": "validate_source_qa_markdown",
113
+ "when": { "ref": "params.hasQaArtifacts" },
114
+ "node": "file-check",
115
+ "params": {
116
+ "path": { "ref": "params.qaFilePath" },
117
+ "panelTitle": { "const": "Source QA Markdown" },
118
+ "foundMessage": { "const": "Source QA markdown artifact found." },
119
+ "tone": { "const": "cyan" }
120
+ },
121
+ "expect": [
122
+ {
123
+ "kind": "require-file",
124
+ "path": { "ref": "params.qaFilePath" },
125
+ "message": "Plan-revise contract expected a source QA markdown artifact, but the file is missing."
126
+ }
127
+ ]
128
+ },
129
+ {
130
+ "id": "validate_source_qa_json",
131
+ "when": { "ref": "params.hasQaArtifacts" },
132
+ "node": "file-check",
133
+ "params": {
134
+ "path": { "ref": "params.qaJsonFilePath" },
135
+ "panelTitle": { "const": "Source QA JSON" },
136
+ "foundMessage": { "const": "Source QA structured artifact found." },
137
+ "tone": { "const": "cyan" }
138
+ },
139
+ "expect": [
140
+ {
141
+ "kind": "require-file",
142
+ "path": { "ref": "params.qaJsonFilePath" },
143
+ "message": "Plan-revise contract expected a source QA JSON artifact, but the file is missing."
144
+ }
145
+ ]
146
+ }
147
+ ]
148
+ },
149
+ {
150
+ "id": "phase_2_revise",
151
+ "steps": [
152
+ {
153
+ "id": "run_plan_revise",
154
+ "node": "llm-prompt",
155
+ "routingGroup": "planning",
156
+ "prompt": {
157
+ "templateRef": "plan-revise",
158
+ "vars": {
159
+ "review_file": { "ref": "params.reviewFile" },
160
+ "review_json_file": { "ref": "params.reviewJsonFile" },
161
+ "design_file": { "ref": "params.designFile" },
162
+ "design_json_file": { "ref": "params.designJsonFile" },
163
+ "plan_file": { "ref": "params.planFile" },
164
+ "plan_json_file": { "ref": "params.planJsonFile" },
165
+ "qa_file": { "ref": "params.qaFile" },
166
+ "qa_json_file": { "ref": "params.qaJsonFile" },
167
+ "task_context_json_file": { "ref": "params.taskContextJsonFile" },
168
+ "jira_task_file": { "ref": "params.jiraTaskFile" },
169
+ "jira_attachments_manifest_file": { "ref": "params.jiraAttachmentsManifestFile" },
170
+ "jira_attachments_context_file": { "ref": "params.jiraAttachmentsContextFile" },
171
+ "planning_answers_json_file": { "ref": "params.planningAnswersJsonFile" },
172
+ "task_input_json_file": { "ref": "params.taskInputJsonFile" },
173
+ "revised_design_file": { "ref": "params.revisedDesignFile" },
174
+ "revised_design_json_file": { "ref": "params.revisedDesignJsonFile" },
175
+ "revised_plan_file": { "ref": "params.revisedPlanFile" },
176
+ "revised_plan_json_file": { "ref": "params.revisedPlanJsonFile" },
177
+ "revised_qa_file": { "ref": "params.revisedQaFile" },
178
+ "revised_qa_json_file": { "ref": "params.revisedQaJsonFile" }
179
+ },
180
+ "extraPrompt": { "ref": "params.extraPrompt" },
181
+ "format": "task-prompt"
182
+ },
183
+ "params": {
184
+ "labelText": {
185
+ "template": "Revising planning artifacts (iteration {outputIteration})",
186
+ "vars": {
187
+ "outputIteration": { "ref": "params.outputIteration" }
188
+ }
189
+ },
190
+ "model": { "ref": "params.llmModel" },
191
+ "executor": { "ref": "params.llmExecutor" },
192
+ "requiredArtifacts": {
193
+ "list": [
194
+ { "ref": "params.revisedDesignFile" },
195
+ { "ref": "params.revisedDesignJsonFile" },
196
+ { "ref": "params.revisedPlanFile" },
197
+ { "ref": "params.revisedPlanJsonFile" },
198
+ { "ref": "params.revisedQaFile" },
199
+ { "ref": "params.revisedQaJsonFile" }
200
+ ]
201
+ }
202
+ },
203
+ "expect": [
204
+ {
205
+ "kind": "require-artifacts",
206
+ "when": { "not": { "ref": "context.dryRun" } },
207
+ "paths": {
208
+ "list": [
209
+ { "ref": "params.revisedDesignFile" },
210
+ { "ref": "params.revisedPlanFile" },
211
+ { "ref": "params.revisedQaFile" }
212
+ ]
213
+ },
214
+ "message": "Plan-revise did not produce the required revised markdown artifacts."
215
+ },
216
+ {
217
+ "kind": "require-structured-artifacts",
218
+ "when": { "not": { "ref": "context.dryRun" } },
219
+ "items": [
220
+ {
221
+ "path": { "ref": "params.revisedDesignJsonFile" },
222
+ "schemaId": "implementation-design/v1"
223
+ },
224
+ {
225
+ "path": { "ref": "params.revisedPlanJsonFile" },
226
+ "schemaId": "implementation-plan/v1"
227
+ },
228
+ {
229
+ "path": { "ref": "params.revisedQaJsonFile" },
230
+ "schemaId": "qa-plan/v1"
231
+ }
232
+ ],
233
+ "message": "Plan-revise produced invalid structured artifacts."
234
+ }
235
+ ]
236
+ }
237
+ ]
238
+ },
239
+ {
240
+ "id": "phase_3_finalize",
241
+ "steps": [
242
+ {
243
+ "id": "check_ready_to_merge",
244
+ "node": "file-check",
245
+ "params": {
246
+ "path": {
247
+ "artifact": {
248
+ "kind": "ready-to-merge-file",
249
+ "taskKey": { "ref": "params.taskKey" }
250
+ }
251
+ },
252
+ "panelTitle": { "const": "Ready To Merge" },
253
+ "foundMessage": { "const": "Plan-revise completed and all blocking findings addressed. File ready-to-merge.md has been created." },
254
+ "tone": { "const": "green" }
255
+ }
256
+ },
257
+ {
258
+ "id": "notify_revise_complete",
259
+ "node": "telegram-notify",
260
+ "params": {
261
+ "message": { "const": "Plan-revise phase complete" }
262
+ }
263
+ }
264
+ ]
265
+ }
266
+ ]
267
+ }
@@ -1,90 +1,68 @@
1
1
  {
2
2
  "kind": "plan-flow",
3
3
  "version": 1,
4
- "description": "Fetches Jira task with attachments, generates clarifying questions for the developer, collects answers, and produces design, implementation plan, and QA plan as structured JSON and markdown artifacts.",
4
+ "description": "Consumes the normalized task-context artifact, generates clarifying questions for the developer, collects answers, and produces design, implementation plan, and QA plan as structured JSON and markdown artifacts.",
5
5
  "phases": [
6
6
  {
7
7
  "id": "plan",
8
8
  "steps": [
9
9
  {
10
- "id": "fetch_jira",
11
- "node": "jira-fetch",
10
+ "id": "validate_task_context",
11
+ "node": "file-check",
12
12
  "params": {
13
- "jiraApiUrl": { "ref": "params.jiraApiUrl" },
14
- "outputFile": {
13
+ "path": {
15
14
  "artifact": {
16
- "kind": "jira-task-file",
17
- "taskKey": { "ref": "params.taskKey" }
15
+ "kind": "task-context-json-file",
16
+ "taskKey": { "ref": "params.taskKey" },
17
+ "iteration": { "ref": "params.taskContextIteration" }
18
18
  }
19
19
  },
20
- "attachmentsManifestFile": {
21
- "artifact": {
22
- "kind": "jira-attachments-manifest-file",
23
- "taskKey": { "ref": "params.taskKey" }
24
- }
25
- },
26
- "attachmentsContextFile": {
27
- "artifact": {
28
- "kind": "jira-attachments-context-file",
29
- "taskKey": { "ref": "params.taskKey" }
30
- }
31
- }
20
+ "panelTitle": { "const": "Task Context" },
21
+ "foundMessage": { "const": "Normalized task context artifact found for planning." },
22
+ "tone": { "const": "cyan" }
32
23
  },
33
24
  "expect": [
34
25
  {
35
26
  "kind": "require-file",
36
27
  "path": {
37
28
  "artifact": {
38
- "kind": "jira-task-file",
39
- "taskKey": { "ref": "params.taskKey" }
40
- }
41
- },
42
- "message": "Jira fetch node did not produce the Jira task file."
43
- },
44
- {
45
- "kind": "require-file",
46
- "path": {
47
- "artifact": {
48
- "kind": "jira-attachments-manifest-file",
49
- "taskKey": { "ref": "params.taskKey" }
29
+ "kind": "task-context-json-file",
30
+ "taskKey": { "ref": "params.taskKey" },
31
+ "iteration": { "ref": "params.taskContextIteration" }
50
32
  }
51
33
  },
52
- "message": "Jira fetch node did not produce the Jira attachments manifest file."
34
+ "message": "Plan mode requires a normalized task-context artifact."
53
35
  },
54
36
  {
55
- "kind": "require-file",
56
- "path": {
57
- "artifact": {
58
- "kind": "jira-attachments-context-file",
59
- "taskKey": { "ref": "params.taskKey" }
37
+ "kind": "require-structured-artifacts",
38
+ "items": [
39
+ {
40
+ "path": {
41
+ "artifact": {
42
+ "kind": "task-context-json-file",
43
+ "taskKey": { "ref": "params.taskKey" },
44
+ "iteration": { "ref": "params.taskContextIteration" }
45
+ }
46
+ },
47
+ "schemaId": "task-context/v1"
60
48
  }
61
- },
62
- "message": "Jira fetch node did not produce the Jira attachments context file."
49
+ ],
50
+ "message": "Plan mode requires a valid task-context artifact."
63
51
  }
64
52
  ]
65
53
  },
66
54
  {
67
55
  "id": "generate_planning_questions",
68
56
  "node": "llm-prompt",
57
+ "routingGroup": "planning",
69
58
  "prompt": {
70
59
  "templateRef": "plan-questions",
71
60
  "vars": {
72
- "jira_task_file": {
73
- "artifact": {
74
- "kind": "jira-task-file",
75
- "taskKey": { "ref": "params.taskKey" }
76
- }
77
- },
78
- "jira_attachments_manifest_file": {
79
- "artifact": {
80
- "kind": "jira-attachments-manifest-file",
81
- "taskKey": { "ref": "params.taskKey" }
82
- }
83
- },
84
- "jira_attachments_context_file": {
61
+ "task_context_json_file": {
85
62
  "artifact": {
86
- "kind": "jira-attachments-context-file",
87
- "taskKey": { "ref": "params.taskKey" }
63
+ "kind": "task-context-json-file",
64
+ "taskKey": { "ref": "params.taskKey" },
65
+ "iteration": { "ref": "params.taskContextIteration" }
88
66
  }
89
67
  },
90
68
  "planning_questions_json_file": {
@@ -165,6 +143,7 @@
165
143
  },
166
144
  {
167
145
  "id": "notify_questions_need_answering",
146
+ "when": { "not": { "equals": [{ "ref": "steps.plan.build_planning_questions_form.value.questionCount" }, { "const": 0 }] } },
168
147
  "node": "telegram-notify",
169
148
  "params": {
170
149
  "message": { "const": "Questions need answering" }
@@ -207,24 +186,20 @@
207
186
  {
208
187
  "id": "run_plan",
209
188
  "node": "llm-prompt",
189
+ "routingGroup": "planning",
210
190
  "prompt": {
211
191
  "templateRef": "plan",
212
192
  "vars": {
213
- "jira_task_file": {
193
+ "task_context_json_file": {
214
194
  "artifact": {
215
- "kind": "jira-task-file",
216
- "taskKey": { "ref": "params.taskKey" }
217
- }
218
- },
219
- "jira_attachments_manifest_file": {
220
- "artifact": {
221
- "kind": "jira-attachments-manifest-file",
222
- "taskKey": { "ref": "params.taskKey" }
195
+ "kind": "task-context-json-file",
196
+ "taskKey": { "ref": "params.taskKey" },
197
+ "iteration": { "ref": "params.taskContextIteration" }
223
198
  }
224
199
  },
225
- "jira_attachments_context_file": {
200
+ "planning_answers_json_file": {
226
201
  "artifact": {
227
- "kind": "jira-attachments-context-file",
202
+ "kind": "planning-answers-json-file",
228
203
  "taskKey": { "ref": "params.taskKey" }
229
204
  }
230
205
  },
@@ -272,17 +247,20 @@
272
247
  }
273
248
  },
274
249
  "extraPrompt": {
275
- "appendPrompt": {
276
- "base": { "ref": "params.extraPrompt" },
277
- "suffix": { "ref": "steps.plan.collect_planning_answers.value.promptSuffix" }
278
- }
250
+ "ref": "params.extraPrompt"
279
251
  },
280
252
  "format": "task-prompt"
281
253
  },
282
254
  "params": {
283
255
  "labelText": { "const": "Running planning mode" },
284
256
  "model": { "ref": "params.llmModel" },
285
- "executor": { "ref": "params.llmExecutor" }
257
+ "executor": { "ref": "params.llmExecutor" },
258
+ "requiredArtifacts": {
259
+ "artifactList": {
260
+ "kind": "plan-artifacts",
261
+ "taskKey": { "ref": "params.taskKey" }
262
+ }
263
+ }
286
264
  },
287
265
  "expect": [
288
266
  {
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "kind": "review-fix-flow",
3
3
  "version": 1,
4
- "description": "Takes review findings, auto-selects blockers and criticals (or lets the developer pick manually), builds a targeted fix prompt, and applies fixes locally. Runs mandatory checks after modifications.",
4
+ "description": "Takes review findings, auto-selects the configured blocking severities (or lets the developer pick manually), builds a targeted fix prompt, and applies fixes locally. Runs mandatory checks after modifications.",
5
5
  "constants": {
6
- "autoReviewFixExtraPrompt": "Fix only blockers and criticals"
6
+ "autoReviewFixExtraPrompt": "Fix only blocking severities"
7
7
  },
8
8
  "phases": [
9
9
  {
@@ -56,7 +56,8 @@
56
56
  "iteration": { "ref": "params.latestIteration" }
57
57
  }
58
58
  },
59
- "selectionMode": { "const": "auto-blockers-criticals" }
59
+ "selectionMode": { "const": "auto-blocking-severities" },
60
+ "blockingSeverities": { "ref": "params.reviewBlockingSeverities" }
60
61
  }
61
62
  },
62
63
  {
@@ -114,6 +115,7 @@
114
115
  {
115
116
  "id": "run_review_fix",
116
117
  "node": "llm-prompt",
118
+ "routingGroup": "repair-loop",
117
119
  "prompt": {
118
120
  "templateRef": "review-fix",
119
121
  "vars": {
@@ -163,7 +165,25 @@
163
165
  }
164
166
  },
165
167
  "model": { "ref": "params.llmModel" },
166
- "executor": { "ref": "params.llmExecutor" }
168
+ "executor": { "ref": "params.llmExecutor" },
169
+ "requiredArtifacts": {
170
+ "list": [
171
+ {
172
+ "artifact": {
173
+ "kind": "review-fix-file",
174
+ "taskKey": { "ref": "params.taskKey" },
175
+ "iteration": { "ref": "params.latestIteration" }
176
+ }
177
+ },
178
+ {
179
+ "artifact": {
180
+ "kind": "review-fix-json-file",
181
+ "taskKey": { "ref": "params.taskKey" },
182
+ "iteration": { "ref": "params.latestIteration" }
183
+ }
184
+ }
185
+ ]
186
+ }
167
187
  },
168
188
  "expect": [
169
189
  {