agentweaver 0.1.2 → 0.1.4

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 (61) hide show
  1. package/README.md +58 -23
  2. package/dist/artifacts.js +58 -2
  3. package/dist/executors/claude-executor.js +12 -2
  4. package/dist/executors/claude-summary-executor.js +1 -1
  5. package/dist/executors/codex-docker-executor.js +1 -1
  6. package/dist/executors/codex-local-executor.js +1 -1
  7. package/dist/executors/configs/claude-config.js +2 -1
  8. package/dist/executors/verify-build-executor.js +110 -9
  9. package/dist/index.js +466 -452
  10. package/dist/interactive-ui.js +538 -194
  11. package/dist/jira.js +3 -1
  12. package/dist/pipeline/auto-flow.js +9 -0
  13. package/dist/pipeline/checks.js +5 -0
  14. package/dist/pipeline/context.js +2 -0
  15. package/dist/pipeline/declarative-flow-runner.js +262 -0
  16. package/dist/pipeline/declarative-flows.js +24 -0
  17. package/dist/pipeline/flow-specs/auto.json +485 -0
  18. package/dist/pipeline/flow-specs/bug-analyze.json +140 -0
  19. package/dist/pipeline/flow-specs/bug-fix.json +44 -0
  20. package/dist/pipeline/flow-specs/implement.json +47 -0
  21. package/dist/pipeline/flow-specs/mr-description.json +61 -0
  22. package/dist/pipeline/flow-specs/plan.json +88 -0
  23. package/dist/pipeline/flow-specs/preflight.json +174 -0
  24. package/dist/pipeline/flow-specs/review-fix.json +76 -0
  25. package/dist/pipeline/flow-specs/review.json +233 -0
  26. package/dist/pipeline/flow-specs/run-linter-loop.json +149 -0
  27. package/dist/pipeline/flow-specs/run-tests-loop.json +149 -0
  28. package/dist/pipeline/flow-specs/task-describe.json +61 -0
  29. package/dist/pipeline/flow-specs/test-fix.json +24 -0
  30. package/dist/pipeline/flow-specs/test-linter-fix.json +24 -0
  31. package/dist/pipeline/flow-specs/test.json +19 -0
  32. package/dist/pipeline/flows/implement-flow.js +3 -4
  33. package/dist/pipeline/flows/preflight-flow.js +17 -57
  34. package/dist/pipeline/flows/review-fix-flow.js +3 -4
  35. package/dist/pipeline/flows/review-flow.js +8 -4
  36. package/dist/pipeline/flows/test-fix-flow.js +3 -4
  37. package/dist/pipeline/node-registry.js +74 -0
  38. package/dist/pipeline/node-runner.js +9 -3
  39. package/dist/pipeline/nodes/build-failure-summary-node.js +4 -4
  40. package/dist/pipeline/nodes/claude-prompt-node.js +54 -0
  41. package/dist/pipeline/nodes/claude-summary-node.js +12 -6
  42. package/dist/pipeline/nodes/codex-docker-prompt-node.js +1 -0
  43. package/dist/pipeline/nodes/codex-local-prompt-node.js +32 -0
  44. package/dist/pipeline/nodes/file-check-node.js +15 -0
  45. package/dist/pipeline/nodes/flow-run-node.js +40 -0
  46. package/dist/pipeline/nodes/summary-file-load-node.js +16 -0
  47. package/dist/pipeline/nodes/task-summary-node.js +12 -6
  48. package/dist/pipeline/nodes/verify-build-node.js +1 -0
  49. package/dist/pipeline/prompt-registry.js +27 -0
  50. package/dist/pipeline/prompt-runtime.js +18 -0
  51. package/dist/pipeline/registry.js +0 -2
  52. package/dist/pipeline/spec-compiler.js +213 -0
  53. package/dist/pipeline/spec-loader.js +14 -0
  54. package/dist/pipeline/spec-types.js +1 -0
  55. package/dist/pipeline/spec-validator.js +302 -0
  56. package/dist/pipeline/value-resolver.js +217 -0
  57. package/dist/prompts.js +22 -3
  58. package/dist/runtime/process-runner.js +24 -23
  59. package/dist/structured-artifacts.js +178 -0
  60. package/dist/tui.js +39 -0
  61. package/package.json +2 -2
@@ -0,0 +1,485 @@
1
+ {
2
+ "kind": "auto-flow",
3
+ "version": 1,
4
+ "constants": {
5
+ "autoReviewFixExtraPrompt": "Исправлять только блокеры, критикалы и важные"
6
+ },
7
+ "phases": [
8
+ {
9
+ "id": "plan",
10
+ "steps": [
11
+ {
12
+ "id": "fetch_jira",
13
+ "node": "jira-fetch",
14
+ "params": {
15
+ "jiraApiUrl": { "ref": "params.jiraApiUrl" },
16
+ "outputFile": {
17
+ "artifact": {
18
+ "kind": "jira-task-file",
19
+ "taskKey": { "ref": "params.taskKey" }
20
+ }
21
+ }
22
+ },
23
+ "expect": [
24
+ {
25
+ "kind": "require-file",
26
+ "path": {
27
+ "artifact": {
28
+ "kind": "jira-task-file",
29
+ "taskKey": { "ref": "params.taskKey" }
30
+ }
31
+ },
32
+ "message": "Jira fetch node did not produce the Jira task file."
33
+ }
34
+ ]
35
+ },
36
+ {
37
+ "id": "run_codex_plan",
38
+ "node": "codex-local-prompt",
39
+ "prompt": {
40
+ "templateRef": "plan",
41
+ "vars": {
42
+ "jira_task_file": {
43
+ "artifact": {
44
+ "kind": "jira-task-file",
45
+ "taskKey": { "ref": "params.taskKey" }
46
+ }
47
+ },
48
+ "design_file": {
49
+ "artifact": {
50
+ "kind": "design-file",
51
+ "taskKey": { "ref": "params.taskKey" }
52
+ }
53
+ },
54
+ "plan_file": {
55
+ "artifact": {
56
+ "kind": "plan-file",
57
+ "taskKey": { "ref": "params.taskKey" }
58
+ }
59
+ },
60
+ "qa_file": {
61
+ "artifact": {
62
+ "kind": "qa-file",
63
+ "taskKey": { "ref": "params.taskKey" }
64
+ }
65
+ }
66
+ },
67
+ "extraPrompt": { "ref": "params.extraPrompt" },
68
+ "format": "task-prompt"
69
+ },
70
+ "params": {
71
+ "labelText": { "const": "Running Codex planning mode" },
72
+ "model": { "const": "gpt-5.4" }
73
+ },
74
+ "expect": [
75
+ {
76
+ "kind": "require-artifacts",
77
+ "when": { "not": { "ref": "context.dryRun" } },
78
+ "paths": {
79
+ "artifactList": {
80
+ "kind": "plan-artifacts",
81
+ "taskKey": { "ref": "params.taskKey" }
82
+ }
83
+ },
84
+ "message": "Plan mode did not produce the required artifacts."
85
+ }
86
+ ]
87
+ }
88
+ ]
89
+ },
90
+ {
91
+ "id": "implement",
92
+ "steps": [
93
+ {
94
+ "id": "run_codex_implement",
95
+ "node": "codex-local-prompt",
96
+ "prompt": {
97
+ "templateRef": "implement",
98
+ "vars": {
99
+ "design_file": {
100
+ "artifact": {
101
+ "kind": "design-file",
102
+ "taskKey": { "ref": "params.taskKey" }
103
+ }
104
+ },
105
+ "plan_file": {
106
+ "artifact": {
107
+ "kind": "plan-file",
108
+ "taskKey": { "ref": "params.taskKey" }
109
+ }
110
+ }
111
+ },
112
+ "extraPrompt": { "ref": "params.extraPrompt" },
113
+ "format": "task-prompt"
114
+ },
115
+ "params": {
116
+ "labelText": { "const": "Running Codex implementation mode locally" },
117
+ "model": { "const": "gpt-5.4" }
118
+ }
119
+ }
120
+ ]
121
+ },
122
+ {
123
+ "id": "test_after_implement",
124
+ "steps": [
125
+ {
126
+ "id": "run_linter_loop_after_implement",
127
+ "node": "flow-run",
128
+ "params": {
129
+ "fileName": { "const": "run-linter-loop.json" },
130
+ "labelText": { "const": "Running run-linter-loop after implement" },
131
+ "taskKey": { "ref": "params.taskKey" },
132
+ "dockerComposeFile": { "ref": "params.dockerComposeFile" },
133
+ "extraPrompt": { "ref": "params.extraPrompt" }
134
+ }
135
+ },
136
+ {
137
+ "id": "run_tests_loop_after_implement",
138
+ "node": "flow-run",
139
+ "params": {
140
+ "fileName": { "const": "run-tests-loop.json" },
141
+ "labelText": { "const": "Running run-tests-loop after implement" },
142
+ "taskKey": { "ref": "params.taskKey" },
143
+ "dockerComposeFile": { "ref": "params.dockerComposeFile" },
144
+ "extraPrompt": { "ref": "params.extraPrompt" }
145
+ }
146
+ }
147
+ ]
148
+ },
149
+ {
150
+ "repeat": {
151
+ "var": "iteration",
152
+ "from": 1,
153
+ "to": 3
154
+ },
155
+ "phases": [
156
+ {
157
+ "id": "review_${iteration}",
158
+ "when": {
159
+ "not": {
160
+ "exists": {
161
+ "artifact": {
162
+ "kind": "ready-to-merge-file",
163
+ "taskKey": { "ref": "params.taskKey" }
164
+ }
165
+ }
166
+ }
167
+ },
168
+ "steps": [
169
+ {
170
+ "id": "run_claude_review",
171
+ "node": "claude-prompt",
172
+ "prompt": {
173
+ "templateRef": "review",
174
+ "vars": {
175
+ "jira_task_file": {
176
+ "artifact": {
177
+ "kind": "jira-task-file",
178
+ "taskKey": { "ref": "params.taskKey" }
179
+ }
180
+ },
181
+ "design_file": {
182
+ "artifact": {
183
+ "kind": "design-file",
184
+ "taskKey": { "ref": "params.taskKey" }
185
+ }
186
+ },
187
+ "plan_file": {
188
+ "artifact": {
189
+ "kind": "plan-file",
190
+ "taskKey": { "ref": "params.taskKey" }
191
+ }
192
+ },
193
+ "review_file": {
194
+ "artifact": {
195
+ "kind": "review-file",
196
+ "taskKey": { "ref": "params.taskKey" },
197
+ "iteration": { "ref": "repeat.iteration" }
198
+ }
199
+ }
200
+ },
201
+ "extraPrompt": { "ref": "params.extraPrompt" },
202
+ "format": "task-prompt"
203
+ },
204
+ "params": {
205
+ "labelText": {
206
+ "template": "Running Claude review mode (iteration {iteration})",
207
+ "vars": {
208
+ "iteration": { "ref": "repeat.iteration" }
209
+ }
210
+ },
211
+ "model": { "const": "opus" }
212
+ },
213
+ "expect": [
214
+ {
215
+ "kind": "require-artifacts",
216
+ "when": { "not": { "ref": "context.dryRun" } },
217
+ "paths": {
218
+ "list": [
219
+ {
220
+ "artifact": {
221
+ "kind": "review-file",
222
+ "taskKey": { "ref": "params.taskKey" },
223
+ "iteration": { "ref": "repeat.iteration" }
224
+ }
225
+ }
226
+ ]
227
+ },
228
+ "message": "Claude review did not produce the required review artifact."
229
+ }
230
+ ]
231
+ },
232
+ {
233
+ "id": "summarize_review",
234
+ "when": { "not": { "ref": "context.dryRun" } },
235
+ "node": "claude-prompt",
236
+ "prompt": {
237
+ "templateRef": "review-summary",
238
+ "vars": {
239
+ "review_file": {
240
+ "artifact": {
241
+ "kind": "review-file",
242
+ "taskKey": { "ref": "params.taskKey" },
243
+ "iteration": { "ref": "repeat.iteration" }
244
+ }
245
+ },
246
+ "review_summary_file": {
247
+ "artifact": {
248
+ "kind": "review-summary-file",
249
+ "taskKey": { "ref": "params.taskKey" },
250
+ "iteration": { "ref": "repeat.iteration" }
251
+ }
252
+ }
253
+ },
254
+ "format": "plain"
255
+ },
256
+ "params": {
257
+ "labelText": { "const": "Preparing Claude review summary" },
258
+ "outputFile": {
259
+ "artifact": {
260
+ "kind": "review-summary-file",
261
+ "taskKey": { "ref": "params.taskKey" },
262
+ "iteration": { "ref": "repeat.iteration" }
263
+ }
264
+ },
265
+ "summaryTitle": { "const": "Claude Comments" },
266
+ "model": { "const": "haiku" }
267
+ }
268
+ },
269
+ {
270
+ "id": "run_codex_review_reply",
271
+ "node": "codex-local-prompt",
272
+ "prompt": {
273
+ "templateRef": "review-reply",
274
+ "vars": {
275
+ "review_file": {
276
+ "artifact": {
277
+ "kind": "review-file",
278
+ "taskKey": { "ref": "params.taskKey" },
279
+ "iteration": { "ref": "repeat.iteration" }
280
+ }
281
+ },
282
+ "jira_task_file": {
283
+ "artifact": {
284
+ "kind": "jira-task-file",
285
+ "taskKey": { "ref": "params.taskKey" }
286
+ }
287
+ },
288
+ "design_file": {
289
+ "artifact": {
290
+ "kind": "design-file",
291
+ "taskKey": { "ref": "params.taskKey" }
292
+ }
293
+ },
294
+ "plan_file": {
295
+ "artifact": {
296
+ "kind": "plan-file",
297
+ "taskKey": { "ref": "params.taskKey" }
298
+ }
299
+ },
300
+ "review_reply_file": {
301
+ "artifact": {
302
+ "kind": "review-reply-file",
303
+ "taskKey": { "ref": "params.taskKey" },
304
+ "iteration": { "ref": "repeat.iteration" }
305
+ }
306
+ }
307
+ },
308
+ "extraPrompt": { "ref": "params.extraPrompt" },
309
+ "format": "task-prompt"
310
+ },
311
+ "params": {
312
+ "labelText": {
313
+ "template": "Running Codex review reply mode (iteration {iteration})",
314
+ "vars": {
315
+ "iteration": { "ref": "repeat.iteration" }
316
+ }
317
+ },
318
+ "model": { "const": "gpt-5.4" }
319
+ },
320
+ "expect": [
321
+ {
322
+ "kind": "require-artifacts",
323
+ "when": { "not": { "ref": "context.dryRun" } },
324
+ "paths": {
325
+ "list": [
326
+ {
327
+ "artifact": {
328
+ "kind": "review-reply-file",
329
+ "taskKey": { "ref": "params.taskKey" },
330
+ "iteration": { "ref": "repeat.iteration" }
331
+ }
332
+ }
333
+ ]
334
+ },
335
+ "message": "Codex review reply did not produce the required review-reply artifact."
336
+ }
337
+ ]
338
+ },
339
+ {
340
+ "id": "summarize_review_reply",
341
+ "when": { "not": { "ref": "context.dryRun" } },
342
+ "node": "claude-prompt",
343
+ "prompt": {
344
+ "templateRef": "review-reply-summary",
345
+ "vars": {
346
+ "review_reply_file": {
347
+ "artifact": {
348
+ "kind": "review-reply-file",
349
+ "taskKey": { "ref": "params.taskKey" },
350
+ "iteration": { "ref": "repeat.iteration" }
351
+ }
352
+ },
353
+ "review_reply_summary_file": {
354
+ "artifact": {
355
+ "kind": "review-reply-summary-file",
356
+ "taskKey": { "ref": "params.taskKey" },
357
+ "iteration": { "ref": "repeat.iteration" }
358
+ }
359
+ }
360
+ },
361
+ "format": "plain"
362
+ },
363
+ "params": {
364
+ "labelText": { "const": "Preparing Codex reply summary" },
365
+ "outputFile": {
366
+ "artifact": {
367
+ "kind": "review-reply-summary-file",
368
+ "taskKey": { "ref": "params.taskKey" },
369
+ "iteration": { "ref": "repeat.iteration" }
370
+ }
371
+ },
372
+ "summaryTitle": { "const": "Codex Reply Summary" },
373
+ "model": { "const": "haiku" }
374
+ }
375
+ },
376
+ {
377
+ "id": "check_ready_to_merge",
378
+ "node": "file-check",
379
+ "stopFlowIf": {
380
+ "ref": "steps.review_${iteration}.check_ready_to_merge.outputs.exists"
381
+ },
382
+ "params": {
383
+ "path": {
384
+ "artifact": {
385
+ "kind": "ready-to-merge-file",
386
+ "taskKey": { "ref": "params.taskKey" }
387
+ }
388
+ },
389
+ "panelTitle": { "const": "Ready To Merge" },
390
+ "foundMessage": { "const": "Изменения готовы к merge\nФайл ready-to-merge.md создан." },
391
+ "tone": { "const": "green" }
392
+ }
393
+ }
394
+ ]
395
+ },
396
+ {
397
+ "id": "review_fix_${iteration}",
398
+ "when": {
399
+ "not": {
400
+ "ref": "steps.review_${iteration}.check_ready_to_merge.outputs.exists"
401
+ }
402
+ },
403
+ "steps": [
404
+ {
405
+ "id": "run_codex_review_fix",
406
+ "node": "codex-local-prompt",
407
+ "prompt": {
408
+ "templateRef": "review-fix",
409
+ "vars": {
410
+ "review_reply_file": {
411
+ "artifact": {
412
+ "kind": "review-reply-file",
413
+ "taskKey": { "ref": "params.taskKey" },
414
+ "iteration": { "ref": "repeat.iteration" }
415
+ }
416
+ },
417
+ "items": { "ref": "params.reviewFixPoints" },
418
+ "review_fix_file": {
419
+ "artifact": {
420
+ "kind": "review-fix-file",
421
+ "taskKey": { "ref": "params.taskKey" },
422
+ "iteration": { "ref": "repeat.iteration" }
423
+ }
424
+ }
425
+ },
426
+ "extraPrompt": {
427
+ "appendPrompt": {
428
+ "base": { "ref": "params.extraPrompt" },
429
+ "suffix": { "ref": "flow.autoReviewFixExtraPrompt" }
430
+ }
431
+ },
432
+ "format": "task-prompt"
433
+ },
434
+ "params": {
435
+ "labelText": {
436
+ "template": "Running Codex review-fix mode locally (iteration {iteration})",
437
+ "vars": {
438
+ "iteration": { "ref": "repeat.iteration" }
439
+ }
440
+ },
441
+ "model": { "const": "gpt-5.4" }
442
+ },
443
+ "expect": [
444
+ {
445
+ "kind": "require-artifacts",
446
+ "when": { "not": { "ref": "context.dryRun" } },
447
+ "paths": {
448
+ "list": [
449
+ {
450
+ "artifact": {
451
+ "kind": "review-fix-file",
452
+ "taskKey": { "ref": "params.taskKey" },
453
+ "iteration": { "ref": "repeat.iteration" }
454
+ }
455
+ }
456
+ ]
457
+ },
458
+ "message": "Review-fix mode did not produce the required review-fix artifact."
459
+ }
460
+ ]
461
+ }
462
+ ]
463
+ },
464
+ {
465
+ "id": "test_after_review_fix_${iteration}",
466
+ "when": {
467
+ "not": {
468
+ "ref": "steps.review_${iteration}.check_ready_to_merge.outputs.exists"
469
+ }
470
+ },
471
+ "steps": [
472
+ {
473
+ "id": "verify_build_after_review_fix",
474
+ "node": "verify-build",
475
+ "params": {
476
+ "dockerComposeFile": { "ref": "params.dockerComposeFile" },
477
+ "labelText": { "const": "Running build verification in isolated Docker" }
478
+ }
479
+ }
480
+ ]
481
+ }
482
+ ]
483
+ }
484
+ ]
485
+ }
@@ -0,0 +1,140 @@
1
+ {
2
+ "kind": "bug-analyze-flow",
3
+ "version": 1,
4
+ "phases": [
5
+ {
6
+ "id": "bug_analyze",
7
+ "steps": [
8
+ {
9
+ "id": "fetch_jira",
10
+ "node": "jira-fetch",
11
+ "params": {
12
+ "jiraApiUrl": { "ref": "params.jiraApiUrl" },
13
+ "outputFile": {
14
+ "artifact": {
15
+ "kind": "jira-task-file",
16
+ "taskKey": { "ref": "params.taskKey" }
17
+ }
18
+ }
19
+ },
20
+ "expect": [
21
+ {
22
+ "kind": "require-file",
23
+ "path": {
24
+ "artifact": {
25
+ "kind": "jira-task-file",
26
+ "taskKey": { "ref": "params.taskKey" }
27
+ }
28
+ },
29
+ "message": "Jira fetch node did not produce the Jira task file."
30
+ }
31
+ ]
32
+ },
33
+ {
34
+ "id": "run_codex_bug_analyze",
35
+ "node": "codex-local-prompt",
36
+ "prompt": {
37
+ "templateRef": "bug-analyze",
38
+ "vars": {
39
+ "jira_task_file": {
40
+ "artifact": {
41
+ "kind": "jira-task-file",
42
+ "taskKey": { "ref": "params.taskKey" }
43
+ }
44
+ },
45
+ "bug_analyze_file": {
46
+ "artifact": {
47
+ "kind": "bug-analyze-file",
48
+ "taskKey": { "ref": "params.taskKey" }
49
+ }
50
+ },
51
+ "bug_analyze_json_file": {
52
+ "artifact": {
53
+ "kind": "bug-analyze-json-file",
54
+ "taskKey": { "ref": "params.taskKey" }
55
+ }
56
+ },
57
+ "bug_fix_design_file": {
58
+ "artifact": {
59
+ "kind": "bug-fix-design-file",
60
+ "taskKey": { "ref": "params.taskKey" }
61
+ }
62
+ },
63
+ "bug_fix_design_json_file": {
64
+ "artifact": {
65
+ "kind": "bug-fix-design-json-file",
66
+ "taskKey": { "ref": "params.taskKey" }
67
+ }
68
+ },
69
+ "bug_fix_plan_file": {
70
+ "artifact": {
71
+ "kind": "bug-fix-plan-file",
72
+ "taskKey": { "ref": "params.taskKey" }
73
+ }
74
+ },
75
+ "bug_fix_plan_json_file": {
76
+ "artifact": {
77
+ "kind": "bug-fix-plan-json-file",
78
+ "taskKey": { "ref": "params.taskKey" }
79
+ }
80
+ }
81
+ },
82
+ "extraPrompt": { "ref": "params.extraPrompt" },
83
+ "format": "task-prompt"
84
+ },
85
+ "params": {
86
+ "labelText": { "const": "Running Codex bug analysis mode" },
87
+ "model": { "const": "gpt-5.4" }
88
+ },
89
+ "expect": [
90
+ {
91
+ "kind": "require-artifacts",
92
+ "when": { "not": { "ref": "context.dryRun" } },
93
+ "paths": {
94
+ "artifactList": {
95
+ "kind": "bug-analyze-artifacts",
96
+ "taskKey": { "ref": "params.taskKey" }
97
+ }
98
+ },
99
+ "message": "Bug analyze mode did not produce the required artifacts."
100
+ },
101
+ {
102
+ "kind": "require-structured-artifacts",
103
+ "when": { "not": { "ref": "context.dryRun" } },
104
+ "items": [
105
+ {
106
+ "path": {
107
+ "artifact": {
108
+ "kind": "bug-analyze-json-file",
109
+ "taskKey": { "ref": "params.taskKey" }
110
+ }
111
+ },
112
+ "schemaId": "bug-analysis/v1"
113
+ },
114
+ {
115
+ "path": {
116
+ "artifact": {
117
+ "kind": "bug-fix-design-json-file",
118
+ "taskKey": { "ref": "params.taskKey" }
119
+ }
120
+ },
121
+ "schemaId": "bug-fix-design/v1"
122
+ },
123
+ {
124
+ "path": {
125
+ "artifact": {
126
+ "kind": "bug-fix-plan-json-file",
127
+ "taskKey": { "ref": "params.taskKey" }
128
+ }
129
+ },
130
+ "schemaId": "bug-fix-plan/v1"
131
+ }
132
+ ],
133
+ "message": "Bug analyze mode produced invalid structured artifacts."
134
+ }
135
+ ]
136
+ }
137
+ ]
138
+ }
139
+ ]
140
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "kind": "bug-fix-flow",
3
+ "version": 1,
4
+ "phases": [
5
+ {
6
+ "id": "bug_fix",
7
+ "steps": [
8
+ {
9
+ "id": "run_codex_bug_fix",
10
+ "node": "codex-local-prompt",
11
+ "prompt": {
12
+ "templateRef": "bug-fix",
13
+ "vars": {
14
+ "bug_analyze_json_file": {
15
+ "artifact": {
16
+ "kind": "bug-analyze-json-file",
17
+ "taskKey": { "ref": "params.taskKey" }
18
+ }
19
+ },
20
+ "bug_fix_design_json_file": {
21
+ "artifact": {
22
+ "kind": "bug-fix-design-json-file",
23
+ "taskKey": { "ref": "params.taskKey" }
24
+ }
25
+ },
26
+ "bug_fix_plan_json_file": {
27
+ "artifact": {
28
+ "kind": "bug-fix-plan-json-file",
29
+ "taskKey": { "ref": "params.taskKey" }
30
+ }
31
+ }
32
+ },
33
+ "extraPrompt": { "ref": "params.extraPrompt" },
34
+ "format": "task-prompt"
35
+ },
36
+ "params": {
37
+ "labelText": { "const": "Running Codex bug fix mode locally" },
38
+ "model": { "const": "gpt-5.4" }
39
+ }
40
+ }
41
+ ]
42
+ }
43
+ ]
44
+ }