agentweaver 0.1.4 → 0.1.6

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 (53) hide show
  1. package/Dockerfile.codex +55 -0
  2. package/README.md +11 -7
  3. package/dist/artifacts.js +64 -6
  4. package/dist/executors/configs/fetch-gitlab-review-config.js +3 -0
  5. package/dist/executors/fetch-gitlab-review-executor.js +25 -0
  6. package/dist/gitlab.js +153 -0
  7. package/dist/index.js +123 -98
  8. package/dist/interactive-ui.js +433 -28
  9. package/dist/pipeline/context.js +1 -0
  10. package/dist/pipeline/flow-specs/auto.json +176 -2
  11. package/dist/pipeline/flow-specs/gitlab-review.json +347 -0
  12. package/dist/pipeline/flow-specs/implement.json +12 -9
  13. package/dist/pipeline/flow-specs/mr-description.json +28 -0
  14. package/dist/pipeline/flow-specs/plan.json +52 -0
  15. package/dist/pipeline/flow-specs/preflight.json +32 -0
  16. package/dist/pipeline/flow-specs/review-fix.json +79 -10
  17. package/dist/pipeline/flow-specs/review.json +79 -0
  18. package/dist/pipeline/flow-specs/run-linter-loop.json +17 -11
  19. package/dist/pipeline/flow-specs/run-tests-loop.json +17 -11
  20. package/dist/pipeline/flow-specs/task-describe.json +29 -1
  21. package/dist/pipeline/node-registry.js +35 -0
  22. package/dist/pipeline/nodes/fetch-gitlab-review-node.js +34 -0
  23. package/dist/pipeline/nodes/gitlab-review-artifacts-node.js +105 -0
  24. package/dist/pipeline/nodes/local-script-check-node.js +81 -0
  25. package/dist/pipeline/nodes/review-findings-form-node.js +65 -0
  26. package/dist/pipeline/nodes/user-input-node.js +93 -0
  27. package/dist/pipeline/prompt-registry.js +1 -3
  28. package/dist/pipeline/registry.js +2 -0
  29. package/dist/pipeline/value-resolver.js +37 -4
  30. package/dist/prompts.js +26 -17
  31. package/dist/structured-artifacts.js +208 -81
  32. package/dist/user-input.js +171 -0
  33. package/docker-compose.yml +384 -0
  34. package/package.json +7 -3
  35. package/run_linter.sh +89 -0
  36. package/run_tests.sh +113 -0
  37. package/verify_build.sh +104 -0
  38. package/dist/executors/claude-summary-executor.js +0 -31
  39. package/dist/executors/configs/claude-summary-config.js +0 -8
  40. package/dist/pipeline/flow-runner.js +0 -13
  41. package/dist/pipeline/flow-specs/test-fix.json +0 -24
  42. package/dist/pipeline/flow-specs/test-linter-fix.json +0 -24
  43. package/dist/pipeline/flow-specs/test.json +0 -19
  44. package/dist/pipeline/flow-types.js +0 -1
  45. package/dist/pipeline/flows/implement-flow.js +0 -47
  46. package/dist/pipeline/flows/plan-flow.js +0 -42
  47. package/dist/pipeline/flows/review-fix-flow.js +0 -62
  48. package/dist/pipeline/flows/review-flow.js +0 -124
  49. package/dist/pipeline/flows/test-fix-flow.js +0 -12
  50. package/dist/pipeline/flows/test-flow.js +0 -32
  51. package/dist/pipeline/nodes/claude-summary-node.js +0 -38
  52. package/dist/pipeline/nodes/implement-codex-node.js +0 -16
  53. package/dist/pipeline/nodes/task-summary-node.js +0 -42
@@ -15,5 +15,6 @@ export function createPipelineContext(input) {
15
15
  executors: createExecutorRegistry(),
16
16
  nodes: createNodeRegistry(),
17
17
  ...(input.setSummary ? { setSummary: input.setSummary } : {}),
18
+ ...(input.requestUserInput ? { requestUserInput: input.requestUserInput } : {}),
18
19
  };
19
20
  }
@@ -51,17 +51,35 @@
51
51
  "taskKey": { "ref": "params.taskKey" }
52
52
  }
53
53
  },
54
+ "design_json_file": {
55
+ "artifact": {
56
+ "kind": "design-json-file",
57
+ "taskKey": { "ref": "params.taskKey" }
58
+ }
59
+ },
54
60
  "plan_file": {
55
61
  "artifact": {
56
62
  "kind": "plan-file",
57
63
  "taskKey": { "ref": "params.taskKey" }
58
64
  }
59
65
  },
66
+ "plan_json_file": {
67
+ "artifact": {
68
+ "kind": "plan-json-file",
69
+ "taskKey": { "ref": "params.taskKey" }
70
+ }
71
+ },
60
72
  "qa_file": {
61
73
  "artifact": {
62
74
  "kind": "qa-file",
63
75
  "taskKey": { "ref": "params.taskKey" }
64
76
  }
77
+ },
78
+ "qa_json_file": {
79
+ "artifact": {
80
+ "kind": "qa-json-file",
81
+ "taskKey": { "ref": "params.taskKey" }
82
+ }
65
83
  }
66
84
  },
67
85
  "extraPrompt": { "ref": "params.extraPrompt" },
@@ -82,6 +100,40 @@
82
100
  }
83
101
  },
84
102
  "message": "Plan mode did not produce the required artifacts."
103
+ },
104
+ {
105
+ "kind": "require-structured-artifacts",
106
+ "when": { "not": { "ref": "context.dryRun" } },
107
+ "items": [
108
+ {
109
+ "path": {
110
+ "artifact": {
111
+ "kind": "design-json-file",
112
+ "taskKey": { "ref": "params.taskKey" }
113
+ }
114
+ },
115
+ "schemaId": "implementation-design/v1"
116
+ },
117
+ {
118
+ "path": {
119
+ "artifact": {
120
+ "kind": "plan-json-file",
121
+ "taskKey": { "ref": "params.taskKey" }
122
+ }
123
+ },
124
+ "schemaId": "implementation-plan/v1"
125
+ },
126
+ {
127
+ "path": {
128
+ "artifact": {
129
+ "kind": "qa-json-file",
130
+ "taskKey": { "ref": "params.taskKey" }
131
+ }
132
+ },
133
+ "schemaId": "qa-plan/v1"
134
+ }
135
+ ],
136
+ "message": "Plan mode produced invalid structured artifacts."
85
137
  }
86
138
  ]
87
139
  }
@@ -102,11 +154,23 @@
102
154
  "taskKey": { "ref": "params.taskKey" }
103
155
  }
104
156
  },
157
+ "design_json_file": {
158
+ "artifact": {
159
+ "kind": "design-json-file",
160
+ "taskKey": { "ref": "params.taskKey" }
161
+ }
162
+ },
105
163
  "plan_file": {
106
164
  "artifact": {
107
165
  "kind": "plan-file",
108
166
  "taskKey": { "ref": "params.taskKey" }
109
167
  }
168
+ },
169
+ "plan_json_file": {
170
+ "artifact": {
171
+ "kind": "plan-json-file",
172
+ "taskKey": { "ref": "params.taskKey" }
173
+ }
110
174
  }
111
175
  },
112
176
  "extraPrompt": { "ref": "params.extraPrompt" },
@@ -129,7 +193,7 @@
129
193
  "fileName": { "const": "run-linter-loop.json" },
130
194
  "labelText": { "const": "Running run-linter-loop after implement" },
131
195
  "taskKey": { "ref": "params.taskKey" },
132
- "dockerComposeFile": { "ref": "params.dockerComposeFile" },
196
+ "runLinterScript": { "ref": "params.runLinterScript" },
133
197
  "extraPrompt": { "ref": "params.extraPrompt" }
134
198
  }
135
199
  },
@@ -140,7 +204,7 @@
140
204
  "fileName": { "const": "run-tests-loop.json" },
141
205
  "labelText": { "const": "Running run-tests-loop after implement" },
142
206
  "taskKey": { "ref": "params.taskKey" },
143
- "dockerComposeFile": { "ref": "params.dockerComposeFile" },
207
+ "runTestsScript": { "ref": "params.runTestsScript" },
144
208
  "extraPrompt": { "ref": "params.extraPrompt" }
145
209
  }
146
210
  }
@@ -184,18 +248,37 @@
184
248
  "taskKey": { "ref": "params.taskKey" }
185
249
  }
186
250
  },
251
+ "design_json_file": {
252
+ "artifact": {
253
+ "kind": "design-json-file",
254
+ "taskKey": { "ref": "params.taskKey" }
255
+ }
256
+ },
187
257
  "plan_file": {
188
258
  "artifact": {
189
259
  "kind": "plan-file",
190
260
  "taskKey": { "ref": "params.taskKey" }
191
261
  }
192
262
  },
263
+ "plan_json_file": {
264
+ "artifact": {
265
+ "kind": "plan-json-file",
266
+ "taskKey": { "ref": "params.taskKey" }
267
+ }
268
+ },
193
269
  "review_file": {
194
270
  "artifact": {
195
271
  "kind": "review-file",
196
272
  "taskKey": { "ref": "params.taskKey" },
197
273
  "iteration": { "ref": "repeat.iteration" }
198
274
  }
275
+ },
276
+ "review_json_file": {
277
+ "artifact": {
278
+ "kind": "review-json-file",
279
+ "taskKey": { "ref": "params.taskKey" },
280
+ "iteration": { "ref": "repeat.iteration" }
281
+ }
199
282
  }
200
283
  },
201
284
  "extraPrompt": { "ref": "params.extraPrompt" },
@@ -226,6 +309,23 @@
226
309
  ]
227
310
  },
228
311
  "message": "Claude review did not produce the required review artifact."
312
+ },
313
+ {
314
+ "kind": "require-structured-artifacts",
315
+ "when": { "not": { "ref": "context.dryRun" } },
316
+ "items": [
317
+ {
318
+ "path": {
319
+ "artifact": {
320
+ "kind": "review-json-file",
321
+ "taskKey": { "ref": "params.taskKey" },
322
+ "iteration": { "ref": "repeat.iteration" }
323
+ }
324
+ },
325
+ "schemaId": "review-findings/v1"
326
+ }
327
+ ],
328
+ "message": "Claude review produced invalid structured artifacts."
229
329
  }
230
330
  ]
231
331
  },
@@ -279,6 +379,13 @@
279
379
  "iteration": { "ref": "repeat.iteration" }
280
380
  }
281
381
  },
382
+ "review_json_file": {
383
+ "artifact": {
384
+ "kind": "review-json-file",
385
+ "taskKey": { "ref": "params.taskKey" },
386
+ "iteration": { "ref": "repeat.iteration" }
387
+ }
388
+ },
282
389
  "jira_task_file": {
283
390
  "artifact": {
284
391
  "kind": "jira-task-file",
@@ -291,18 +398,37 @@
291
398
  "taskKey": { "ref": "params.taskKey" }
292
399
  }
293
400
  },
401
+ "design_json_file": {
402
+ "artifact": {
403
+ "kind": "design-json-file",
404
+ "taskKey": { "ref": "params.taskKey" }
405
+ }
406
+ },
294
407
  "plan_file": {
295
408
  "artifact": {
296
409
  "kind": "plan-file",
297
410
  "taskKey": { "ref": "params.taskKey" }
298
411
  }
299
412
  },
413
+ "plan_json_file": {
414
+ "artifact": {
415
+ "kind": "plan-json-file",
416
+ "taskKey": { "ref": "params.taskKey" }
417
+ }
418
+ },
300
419
  "review_reply_file": {
301
420
  "artifact": {
302
421
  "kind": "review-reply-file",
303
422
  "taskKey": { "ref": "params.taskKey" },
304
423
  "iteration": { "ref": "repeat.iteration" }
305
424
  }
425
+ },
426
+ "review_reply_json_file": {
427
+ "artifact": {
428
+ "kind": "review-reply-json-file",
429
+ "taskKey": { "ref": "params.taskKey" },
430
+ "iteration": { "ref": "repeat.iteration" }
431
+ }
306
432
  }
307
433
  },
308
434
  "extraPrompt": { "ref": "params.extraPrompt" },
@@ -333,6 +459,23 @@
333
459
  ]
334
460
  },
335
461
  "message": "Codex review reply did not produce the required review-reply artifact."
462
+ },
463
+ {
464
+ "kind": "require-structured-artifacts",
465
+ "when": { "not": { "ref": "context.dryRun" } },
466
+ "items": [
467
+ {
468
+ "path": {
469
+ "artifact": {
470
+ "kind": "review-reply-json-file",
471
+ "taskKey": { "ref": "params.taskKey" },
472
+ "iteration": { "ref": "repeat.iteration" }
473
+ }
474
+ },
475
+ "schemaId": "review-reply/v1"
476
+ }
477
+ ],
478
+ "message": "Codex review reply produced invalid structured artifacts."
336
479
  }
337
480
  ]
338
481
  },
@@ -414,6 +557,13 @@
414
557
  "iteration": { "ref": "repeat.iteration" }
415
558
  }
416
559
  },
560
+ "review_reply_json_file": {
561
+ "artifact": {
562
+ "kind": "review-reply-json-file",
563
+ "taskKey": { "ref": "params.taskKey" },
564
+ "iteration": { "ref": "repeat.iteration" }
565
+ }
566
+ },
417
567
  "items": { "ref": "params.reviewFixPoints" },
418
568
  "review_fix_file": {
419
569
  "artifact": {
@@ -421,6 +571,13 @@
421
571
  "taskKey": { "ref": "params.taskKey" },
422
572
  "iteration": { "ref": "repeat.iteration" }
423
573
  }
574
+ },
575
+ "review_fix_json_file": {
576
+ "artifact": {
577
+ "kind": "review-fix-json-file",
578
+ "taskKey": { "ref": "params.taskKey" },
579
+ "iteration": { "ref": "repeat.iteration" }
580
+ }
424
581
  }
425
582
  },
426
583
  "extraPrompt": {
@@ -456,6 +613,23 @@
456
613
  ]
457
614
  },
458
615
  "message": "Review-fix mode did not produce the required review-fix artifact."
616
+ },
617
+ {
618
+ "kind": "require-structured-artifacts",
619
+ "when": { "not": { "ref": "context.dryRun" } },
620
+ "items": [
621
+ {
622
+ "path": {
623
+ "artifact": {
624
+ "kind": "review-fix-json-file",
625
+ "taskKey": { "ref": "params.taskKey" },
626
+ "iteration": { "ref": "repeat.iteration" }
627
+ }
628
+ },
629
+ "schemaId": "review-fix-report/v1"
630
+ }
631
+ ],
632
+ "message": "Review-fix mode produced invalid structured artifacts."
459
633
  }
460
634
  ]
461
635
  }
@@ -0,0 +1,347 @@
1
+ {
2
+ "kind": "gitlab-review-flow",
3
+ "version": 1,
4
+ "phases": [
5
+ {
6
+ "id": "gitlab_review",
7
+ "steps": [
8
+ {
9
+ "id": "collect_merge_request_url",
10
+ "node": "user-input",
11
+ "params": {
12
+ "formId": { "const": "gitlab-review-input" },
13
+ "title": { "const": "GitLab Review" },
14
+ "description": { "const": "Укажи ссылку на GitLab merge request, чтобы загрузить комментарии код-ревью." },
15
+ "fields": {
16
+ "const": [
17
+ {
18
+ "id": "merge_request_url",
19
+ "type": "text",
20
+ "label": "GitLab MR URL",
21
+ "help": "Например: https://gitlab.example.com/group/project/-/merge_requests/123",
22
+ "required": true,
23
+ "placeholder": "https://gitlab.example.com/group/project/-/merge_requests/123"
24
+ }
25
+ ]
26
+ },
27
+ "outputFile": {
28
+ "artifact": {
29
+ "kind": "gitlab-review-input-json-file",
30
+ "taskKey": { "ref": "params.taskKey" }
31
+ }
32
+ }
33
+ },
34
+ "expect": [
35
+ {
36
+ "kind": "require-structured-artifacts",
37
+ "items": [
38
+ {
39
+ "path": {
40
+ "artifact": {
41
+ "kind": "gitlab-review-input-json-file",
42
+ "taskKey": { "ref": "params.taskKey" }
43
+ }
44
+ },
45
+ "schemaId": "user-input/v1"
46
+ }
47
+ ],
48
+ "message": "GitLab review input form produced invalid structured artifacts."
49
+ }
50
+ ]
51
+ },
52
+ {
53
+ "id": "fetch_gitlab_review",
54
+ "node": "fetch-gitlab-review",
55
+ "params": {
56
+ "mergeRequestUrl": { "ref": "steps.gitlab_review.collect_merge_request_url.value.values.merge_request_url" },
57
+ "outputFile": {
58
+ "artifact": {
59
+ "kind": "gitlab-review-file",
60
+ "taskKey": { "ref": "params.taskKey" }
61
+ }
62
+ },
63
+ "outputJsonFile": {
64
+ "artifact": {
65
+ "kind": "gitlab-review-json-file",
66
+ "taskKey": { "ref": "params.taskKey" }
67
+ }
68
+ }
69
+ },
70
+ "expect": [
71
+ {
72
+ "kind": "require-file",
73
+ "path": {
74
+ "artifact": {
75
+ "kind": "gitlab-review-file",
76
+ "taskKey": { "ref": "params.taskKey" }
77
+ }
78
+ },
79
+ "message": "Fetch GitLab review node did not produce the markdown artifact."
80
+ },
81
+ {
82
+ "kind": "require-structured-artifacts",
83
+ "items": [
84
+ {
85
+ "path": {
86
+ "artifact": {
87
+ "kind": "gitlab-review-json-file",
88
+ "taskKey": { "ref": "params.taskKey" }
89
+ }
90
+ },
91
+ "schemaId": "gitlab-review/v1"
92
+ }
93
+ ],
94
+ "message": "Fetch GitLab review node produced invalid structured artifacts."
95
+ }
96
+ ]
97
+ },
98
+ {
99
+ "id": "materialize_review_artifacts",
100
+ "node": "gitlab-review-artifacts",
101
+ "params": {
102
+ "gitlabReviewJsonFile": {
103
+ "artifact": {
104
+ "kind": "gitlab-review-json-file",
105
+ "taskKey": { "ref": "params.taskKey" }
106
+ }
107
+ },
108
+ "reviewFile": {
109
+ "artifact": {
110
+ "kind": "review-file",
111
+ "taskKey": { "ref": "params.taskKey" },
112
+ "iteration": { "ref": "params.iteration" }
113
+ }
114
+ },
115
+ "reviewJsonFile": {
116
+ "artifact": {
117
+ "kind": "review-json-file",
118
+ "taskKey": { "ref": "params.taskKey" },
119
+ "iteration": { "ref": "params.iteration" }
120
+ }
121
+ }
122
+ },
123
+ "expect": [
124
+ {
125
+ "kind": "require-artifacts",
126
+ "paths": {
127
+ "list": [
128
+ {
129
+ "artifact": {
130
+ "kind": "review-file",
131
+ "taskKey": { "ref": "params.taskKey" },
132
+ "iteration": { "ref": "params.iteration" }
133
+ }
134
+ }
135
+ ]
136
+ },
137
+ "message": "GitLab review materialization did not produce the required review artifact."
138
+ },
139
+ {
140
+ "kind": "require-structured-artifacts",
141
+ "items": [
142
+ {
143
+ "path": {
144
+ "artifact": {
145
+ "kind": "review-json-file",
146
+ "taskKey": { "ref": "params.taskKey" },
147
+ "iteration": { "ref": "params.iteration" }
148
+ }
149
+ },
150
+ "schemaId": "review-findings/v1"
151
+ }
152
+ ],
153
+ "message": "GitLab review materialization produced invalid structured review artifacts."
154
+ }
155
+ ]
156
+ },
157
+ {
158
+ "id": "summarize_review",
159
+ "when": { "not": { "ref": "context.dryRun" } },
160
+ "node": "claude-prompt",
161
+ "prompt": {
162
+ "templateRef": "review-summary",
163
+ "vars": {
164
+ "review_file": {
165
+ "artifact": {
166
+ "kind": "review-file",
167
+ "taskKey": { "ref": "params.taskKey" },
168
+ "iteration": { "ref": "params.iteration" }
169
+ }
170
+ },
171
+ "review_summary_file": {
172
+ "artifact": {
173
+ "kind": "review-summary-file",
174
+ "taskKey": { "ref": "params.taskKey" },
175
+ "iteration": { "ref": "params.iteration" }
176
+ }
177
+ }
178
+ },
179
+ "format": "plain"
180
+ },
181
+ "params": {
182
+ "labelText": { "const": "Preparing imported review summary" },
183
+ "summaryTitle": { "const": "Imported GitLab Comments" },
184
+ "model": { "const": "haiku" },
185
+ "outputFile": {
186
+ "artifact": {
187
+ "kind": "review-summary-file",
188
+ "taskKey": { "ref": "params.taskKey" },
189
+ "iteration": { "ref": "params.iteration" }
190
+ }
191
+ }
192
+ }
193
+ },
194
+ {
195
+ "id": "run_codex_review_reply",
196
+ "node": "codex-local-prompt",
197
+ "prompt": {
198
+ "templateRef": "review-reply",
199
+ "vars": {
200
+ "review_file": {
201
+ "artifact": {
202
+ "kind": "review-file",
203
+ "taskKey": { "ref": "params.taskKey" },
204
+ "iteration": { "ref": "params.iteration" }
205
+ }
206
+ },
207
+ "review_json_file": {
208
+ "artifact": {
209
+ "kind": "review-json-file",
210
+ "taskKey": { "ref": "params.taskKey" },
211
+ "iteration": { "ref": "params.iteration" }
212
+ }
213
+ },
214
+ "jira_task_file": {
215
+ "artifact": {
216
+ "kind": "jira-task-file",
217
+ "taskKey": { "ref": "params.taskKey" }
218
+ }
219
+ },
220
+ "design_file": {
221
+ "artifact": {
222
+ "kind": "design-file",
223
+ "taskKey": { "ref": "params.taskKey" }
224
+ }
225
+ },
226
+ "design_json_file": {
227
+ "artifact": {
228
+ "kind": "design-json-file",
229
+ "taskKey": { "ref": "params.taskKey" }
230
+ }
231
+ },
232
+ "plan_file": {
233
+ "artifact": {
234
+ "kind": "plan-file",
235
+ "taskKey": { "ref": "params.taskKey" }
236
+ }
237
+ },
238
+ "plan_json_file": {
239
+ "artifact": {
240
+ "kind": "plan-json-file",
241
+ "taskKey": { "ref": "params.taskKey" }
242
+ }
243
+ },
244
+ "review_reply_file": {
245
+ "artifact": {
246
+ "kind": "review-reply-file",
247
+ "taskKey": { "ref": "params.taskKey" },
248
+ "iteration": { "ref": "params.iteration" }
249
+ }
250
+ },
251
+ "review_reply_json_file": {
252
+ "artifact": {
253
+ "kind": "review-reply-json-file",
254
+ "taskKey": { "ref": "params.taskKey" },
255
+ "iteration": { "ref": "params.iteration" }
256
+ }
257
+ }
258
+ },
259
+ "extraPrompt": { "ref": "params.extraPrompt" },
260
+ "format": "task-prompt"
261
+ },
262
+ "params": {
263
+ "labelText": {
264
+ "template": "Running Codex review reply mode for imported GitLab review (iteration {iteration})",
265
+ "vars": {
266
+ "iteration": { "ref": "params.iteration" }
267
+ }
268
+ },
269
+ "model": { "const": "gpt-5.4" }
270
+ },
271
+ "expect": [
272
+ {
273
+ "kind": "require-artifacts",
274
+ "when": { "not": { "ref": "context.dryRun" } },
275
+ "paths": {
276
+ "list": [
277
+ {
278
+ "artifact": {
279
+ "kind": "review-reply-file",
280
+ "taskKey": { "ref": "params.taskKey" },
281
+ "iteration": { "ref": "params.iteration" }
282
+ }
283
+ }
284
+ ]
285
+ },
286
+ "message": "Codex review reply did not produce the required review-reply artifact."
287
+ },
288
+ {
289
+ "kind": "require-structured-artifacts",
290
+ "when": { "not": { "ref": "context.dryRun" } },
291
+ "items": [
292
+ {
293
+ "path": {
294
+ "artifact": {
295
+ "kind": "review-reply-json-file",
296
+ "taskKey": { "ref": "params.taskKey" },
297
+ "iteration": { "ref": "params.iteration" }
298
+ }
299
+ },
300
+ "schemaId": "review-reply/v1"
301
+ }
302
+ ],
303
+ "message": "Codex review reply produced invalid structured artifacts."
304
+ }
305
+ ]
306
+ },
307
+ {
308
+ "id": "summarize_review_reply",
309
+ "when": { "not": { "ref": "context.dryRun" } },
310
+ "node": "claude-prompt",
311
+ "prompt": {
312
+ "templateRef": "review-reply-summary",
313
+ "vars": {
314
+ "review_reply_file": {
315
+ "artifact": {
316
+ "kind": "review-reply-file",
317
+ "taskKey": { "ref": "params.taskKey" },
318
+ "iteration": { "ref": "params.iteration" }
319
+ }
320
+ },
321
+ "review_reply_summary_file": {
322
+ "artifact": {
323
+ "kind": "review-reply-summary-file",
324
+ "taskKey": { "ref": "params.taskKey" },
325
+ "iteration": { "ref": "params.iteration" }
326
+ }
327
+ }
328
+ },
329
+ "format": "plain"
330
+ },
331
+ "params": {
332
+ "labelText": { "const": "Preparing Codex reply summary" },
333
+ "summaryTitle": { "const": "Codex Reply Summary" },
334
+ "model": { "const": "haiku" },
335
+ "outputFile": {
336
+ "artifact": {
337
+ "kind": "review-reply-summary-file",
338
+ "taskKey": { "ref": "params.taskKey" },
339
+ "iteration": { "ref": "params.iteration" }
340
+ }
341
+ }
342
+ }
343
+ }
344
+ ]
345
+ }
346
+ ]
347
+ }