agentweaver 0.1.9 → 0.1.11

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 (101) hide show
  1. package/README.md +226 -200
  2. package/dist/artifacts.js +101 -56
  3. package/dist/errors.js +7 -0
  4. package/dist/executors/{codex-local-executor.js → codex-executor.js} +4 -4
  5. package/dist/executors/configs/{codex-local-config.js → codex-config.js} +1 -1
  6. package/dist/executors/configs/jira-fetch-config.js +2 -0
  7. package/dist/executors/configs/telegram-notifier-config.js +3 -0
  8. package/dist/executors/fetch-gitlab-diff-executor.js +1 -1
  9. package/dist/executors/fetch-gitlab-review-executor.js +1 -1
  10. package/dist/executors/git-commit-executor.js +25 -0
  11. package/dist/executors/telegram-notifier-executor.js +54 -0
  12. package/dist/flow-state.js +46 -1
  13. package/dist/gitlab.js +13 -8
  14. package/dist/index.js +507 -520
  15. package/dist/interactive-ui.js +495 -87
  16. package/dist/jira.js +52 -5
  17. package/dist/pipeline/auto-flow.js +6 -6
  18. package/dist/pipeline/context.js +1 -0
  19. package/dist/pipeline/declarative-flows.js +7 -4
  20. package/dist/pipeline/flow-catalog.js +60 -23
  21. package/dist/pipeline/flow-model-settings.js +77 -0
  22. package/dist/pipeline/flow-specs/auto-common.json +446 -0
  23. package/dist/pipeline/flow-specs/auto-golang.json +563 -0
  24. package/dist/pipeline/flow-specs/{bug-analyze.json → bugz/bug-analyze.json} +43 -25
  25. package/dist/pipeline/flow-specs/{bug-fix.json → bugz/bug-fix.json} +5 -4
  26. package/dist/pipeline/flow-specs/git-commit.json +196 -0
  27. package/dist/pipeline/flow-specs/{gitlab-diff-review.json → gitlab/gitlab-diff-review.json} +20 -50
  28. package/dist/pipeline/flow-specs/gitlab/gitlab-review.json +165 -0
  29. package/dist/pipeline/flow-specs/{mr-description.json → gitlab/mr-description.json} +17 -10
  30. package/dist/pipeline/flow-specs/{run-go-linter-loop.json → go/run-go-linter-loop.json} +40 -14
  31. package/dist/pipeline/flow-specs/{run-go-tests-loop.json → go/run-go-tests-loop.json} +40 -14
  32. package/dist/pipeline/flow-specs/implement.json +5 -4
  33. package/dist/pipeline/flow-specs/plan.json +40 -148
  34. package/dist/pipeline/flow-specs/{review-fix.json → review/review-fix.json} +73 -13
  35. package/dist/pipeline/flow-specs/review/review-loop.json +280 -0
  36. package/dist/pipeline/flow-specs/review/review-project.json +87 -0
  37. package/dist/pipeline/flow-specs/review/review.json +126 -0
  38. package/dist/pipeline/flow-specs/task-describe.json +191 -11
  39. package/dist/pipeline/launch-profile-config.js +38 -0
  40. package/dist/pipeline/node-registry.js +75 -45
  41. package/dist/pipeline/nodes/build-failure-summary-node.js +16 -29
  42. package/dist/pipeline/nodes/build-review-fix-prompt-node.js +36 -0
  43. package/dist/pipeline/nodes/codex-prompt-node.js +41 -0
  44. package/dist/pipeline/nodes/commit-message-form-node.js +79 -0
  45. package/dist/pipeline/nodes/git-commit-form-node.js +138 -0
  46. package/dist/pipeline/nodes/git-commit-node.js +28 -0
  47. package/dist/pipeline/nodes/git-status-node.js +221 -0
  48. package/dist/pipeline/nodes/gitlab-review-artifacts-node.js +10 -6
  49. package/dist/pipeline/nodes/jira-context-node.js +10 -0
  50. package/dist/pipeline/nodes/llm-prompt-node.js +62 -0
  51. package/dist/pipeline/nodes/plan-codex-node.js +1 -1
  52. package/dist/pipeline/nodes/read-file-node.js +11 -0
  53. package/dist/pipeline/nodes/review-findings-form-node.js +18 -14
  54. package/dist/pipeline/nodes/select-files-form-node.js +72 -0
  55. package/dist/pipeline/nodes/telegram-notifier-node.js +28 -0
  56. package/dist/pipeline/nodes/user-input-node.js +29 -8
  57. package/dist/pipeline/nodes/write-selection-file-node.js +46 -0
  58. package/dist/pipeline/prompt-registry.js +2 -4
  59. package/dist/pipeline/prompt-runtime.js +13 -3
  60. package/dist/pipeline/registry.js +6 -8
  61. package/dist/pipeline/spec-compiler.js +5 -0
  62. package/dist/pipeline/spec-loader.js +18 -7
  63. package/dist/pipeline/spec-types.js +7 -3
  64. package/dist/pipeline/spec-validator.js +4 -0
  65. package/dist/pipeline/types.js +1 -0
  66. package/dist/pipeline/value-resolver.js +40 -38
  67. package/dist/prompts.js +104 -110
  68. package/dist/runtime/agentweaver-home.js +8 -0
  69. package/dist/runtime/command-resolution.js +0 -38
  70. package/dist/runtime/env-loader.js +43 -0
  71. package/dist/runtime/process-runner.js +45 -1
  72. package/dist/structured-artifact-schema-registry.js +53 -0
  73. package/dist/structured-artifact-schemas.json +0 -20
  74. package/dist/structured-artifacts.js +3 -43
  75. package/dist/user-input.js +30 -2
  76. package/package.json +2 -6
  77. package/Dockerfile.codex +0 -56
  78. package/dist/executors/claude-executor.js +0 -46
  79. package/dist/executors/codex-docker-executor.js +0 -27
  80. package/dist/executors/configs/claude-config.js +0 -12
  81. package/dist/executors/configs/codex-docker-config.js +0 -10
  82. package/dist/executors/configs/verify-build-config.js +0 -7
  83. package/dist/executors/verify-build-executor.js +0 -123
  84. package/dist/pipeline/flow-specs/auto.json +0 -979
  85. package/dist/pipeline/flow-specs/gitlab-review.json +0 -317
  86. package/dist/pipeline/flow-specs/plan-opencode.json +0 -603
  87. package/dist/pipeline/flow-specs/preflight.json +0 -206
  88. package/dist/pipeline/flow-specs/review-project.json +0 -243
  89. package/dist/pipeline/flow-specs/review.json +0 -312
  90. package/dist/pipeline/flow-specs/run-linter-loop.json +0 -155
  91. package/dist/pipeline/flow-specs/run-tests-loop.json +0 -155
  92. package/dist/pipeline/flows/preflight-flow.js +0 -19
  93. package/dist/pipeline/nodes/claude-prompt-node.js +0 -54
  94. package/dist/pipeline/nodes/codex-docker-prompt-node.js +0 -32
  95. package/dist/pipeline/nodes/codex-local-prompt-node.js +0 -32
  96. package/dist/pipeline/nodes/review-claude-node.js +0 -38
  97. package/dist/pipeline/nodes/review-reply-codex-node.js +0 -40
  98. package/dist/pipeline/nodes/verify-build-node.js +0 -15
  99. package/dist/runtime/docker-runtime.js +0 -51
  100. package/docker-compose.yml +0 -445
  101. package/verify_build.sh +0 -105
@@ -0,0 +1,165 @@
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
+ "iteration": { "ref": "params.gitlabReviewIteration" }
62
+ }
63
+ },
64
+ "outputJsonFile": {
65
+ "artifact": {
66
+ "kind": "gitlab-review-json-file",
67
+ "taskKey": { "ref": "params.taskKey" },
68
+ "iteration": { "ref": "params.gitlabReviewIteration" }
69
+ }
70
+ }
71
+ },
72
+ "expect": [
73
+ {
74
+ "kind": "require-file",
75
+ "path": {
76
+ "artifact": {
77
+ "kind": "gitlab-review-file",
78
+ "taskKey": { "ref": "params.taskKey" },
79
+ "iteration": { "ref": "params.gitlabReviewIteration" }
80
+ }
81
+ },
82
+ "message": "Fetch GitLab review node did not produce the markdown artifact."
83
+ },
84
+ {
85
+ "kind": "require-structured-artifacts",
86
+ "items": [
87
+ {
88
+ "path": {
89
+ "artifact": {
90
+ "kind": "gitlab-review-json-file",
91
+ "taskKey": { "ref": "params.taskKey" },
92
+ "iteration": { "ref": "params.gitlabReviewIteration" }
93
+ }
94
+ },
95
+ "schemaId": "gitlab-review/v1"
96
+ }
97
+ ],
98
+ "message": "Fetch GitLab review node produced invalid structured artifacts."
99
+ }
100
+ ]
101
+ },
102
+ {
103
+ "id": "materialize_review_artifacts",
104
+ "node": "gitlab-review-artifacts",
105
+ "params": {
106
+ "gitlabReviewJsonFile": {
107
+ "artifact": {
108
+ "kind": "gitlab-review-json-file",
109
+ "taskKey": { "ref": "params.taskKey" },
110
+ "iteration": { "ref": "params.gitlabReviewIteration" }
111
+ }
112
+ },
113
+ "reviewFile": {
114
+ "artifact": {
115
+ "kind": "review-file",
116
+ "taskKey": { "ref": "params.taskKey" },
117
+ "iteration": { "ref": "params.iteration" }
118
+ }
119
+ },
120
+ "reviewJsonFile": {
121
+ "artifact": {
122
+ "kind": "review-json-file",
123
+ "taskKey": { "ref": "params.taskKey" },
124
+ "iteration": { "ref": "params.iteration" }
125
+ }
126
+ }
127
+ },
128
+ "expect": [
129
+ {
130
+ "kind": "require-artifacts",
131
+ "paths": {
132
+ "list": [
133
+ {
134
+ "artifact": {
135
+ "kind": "review-file",
136
+ "taskKey": { "ref": "params.taskKey" },
137
+ "iteration": { "ref": "params.iteration" }
138
+ }
139
+ }
140
+ ]
141
+ },
142
+ "message": "GitLab review materialization did not produce the required review artifact."
143
+ },
144
+ {
145
+ "kind": "require-structured-artifacts",
146
+ "items": [
147
+ {
148
+ "path": {
149
+ "artifact": {
150
+ "kind": "review-json-file",
151
+ "taskKey": { "ref": "params.taskKey" },
152
+ "iteration": { "ref": "params.iteration" }
153
+ }
154
+ },
155
+ "schemaId": "review-findings/v1"
156
+ }
157
+ ],
158
+ "message": "GitLab review materialization produced invalid structured review artifacts."
159
+ }
160
+ ]
161
+ }
162
+ ]
163
+ }
164
+ ]
165
+ }
@@ -6,8 +6,8 @@
6
6
  "id": "mr_description",
7
7
  "steps": [
8
8
  {
9
- "id": "run_codex_mr_description",
10
- "node": "codex-local-prompt",
9
+ "id": "run_mr_description",
10
+ "node": "llm-prompt",
11
11
  "prompt": {
12
12
  "templateRef": "mr-description",
13
13
  "vars": {
@@ -20,13 +20,15 @@
20
20
  "mr_description_file": {
21
21
  "artifact": {
22
22
  "kind": "mr-description-file",
23
- "taskKey": { "ref": "params.taskKey" }
23
+ "taskKey": { "ref": "params.taskKey" },
24
+ "iteration": { "ref": "params.iteration" }
24
25
  }
25
26
  },
26
27
  "mr_description_json_file": {
27
28
  "artifact": {
28
29
  "kind": "mr-description-json-file",
29
- "taskKey": { "ref": "params.taskKey" }
30
+ "taskKey": { "ref": "params.taskKey" },
31
+ "iteration": { "ref": "params.iteration" }
30
32
  }
31
33
  }
32
34
  },
@@ -34,20 +36,23 @@
34
36
  "format": "task-prompt"
35
37
  },
36
38
  "params": {
37
- "labelText": { "const": "Running Codex MR description mode" },
38
- "model": { "const": "gpt-5.4" },
39
+ "labelText": { "const": "Running MR description mode" },
40
+ "model": { "ref": "params.llmModel" },
41
+ "executor": { "ref": "params.llmExecutor" },
39
42
  "requiredArtifacts": {
40
43
  "list": [
41
44
  {
42
45
  "artifact": {
43
46
  "kind": "mr-description-file",
44
- "taskKey": { "ref": "params.taskKey" }
47
+ "taskKey": { "ref": "params.taskKey" },
48
+ "iteration": { "ref": "params.iteration" }
45
49
  }
46
50
  },
47
51
  {
48
52
  "artifact": {
49
53
  "kind": "mr-description-json-file",
50
- "taskKey": { "ref": "params.taskKey" }
54
+ "taskKey": { "ref": "params.taskKey" },
55
+ "iteration": { "ref": "params.iteration" }
51
56
  }
52
57
  }
53
58
  ]
@@ -60,7 +65,8 @@
60
65
  "path": {
61
66
  "artifact": {
62
67
  "kind": "mr-description-file",
63
- "taskKey": { "ref": "params.taskKey" }
68
+ "taskKey": { "ref": "params.taskKey" },
69
+ "iteration": { "ref": "params.iteration" }
64
70
  }
65
71
  },
66
72
  "message": "MR description mode did not produce the MR description artifact."
@@ -73,7 +79,8 @@
73
79
  "path": {
74
80
  "artifact": {
75
81
  "kind": "mr-description-json-file",
76
- "taskKey": { "ref": "params.taskKey" }
82
+ "taskKey": { "ref": "params.taskKey" },
83
+ "iteration": { "ref": "params.iteration" }
77
84
  }
78
85
  },
79
86
  "schemaId": "mr-description/v1"
@@ -18,7 +18,7 @@
18
18
  "artifact": {
19
19
  "kind": "run-go-linter-result-json-file",
20
20
  "taskKey": { "ref": "params.taskKey" },
21
- "iteration": { "const": 1 }
21
+ "iteration": { "ref": "params.runGoLinterIteration" }
22
22
  }
23
23
  },
24
24
  "labelText": {
@@ -33,7 +33,7 @@
33
33
  "artifact": {
34
34
  "kind": "run-go-linter-result-json-file",
35
35
  "taskKey": { "ref": "params.taskKey" },
36
- "iteration": { "const": 1 }
36
+ "iteration": { "ref": "params.runGoLinterIteration" }
37
37
  }
38
38
  },
39
39
  "message": "run-go-linter-loop did not produce the structured linter result artifact."
@@ -54,7 +54,7 @@
54
54
  { "const": false }
55
55
  ]
56
56
  },
57
- "node": "codex-local-prompt",
57
+ "node": "llm-prompt",
58
58
  "prompt": {
59
59
  "templateRef": "run-go-linter-loop-fix",
60
60
  "vars": {
@@ -62,7 +62,7 @@
62
62
  "artifact": {
63
63
  "kind": "run-go-linter-result-json-file",
64
64
  "taskKey": { "ref": "params.taskKey" },
65
- "iteration": { "const": 1 }
65
+ "iteration": { "ref": "params.runGoLinterIteration" }
66
66
  }
67
67
  }
68
68
  },
@@ -76,7 +76,7 @@
76
76
  "artifact": {
77
77
  "kind": "run-go-linter-result-json-file",
78
78
  "taskKey": { "ref": "params.taskKey" },
79
- "iteration": { "const": 1 }
79
+ "iteration": { "ref": "params.runGoLinterIteration" }
80
80
  }
81
81
  },
82
82
  "exit_code": { "ref": "steps.run_go_linter_try_1.run_go_linter.outputs.parsed.exitCode" },
@@ -90,9 +90,10 @@
90
90
  },
91
91
  "params": {
92
92
  "labelText": {
93
- "const": "Running Codex Go linter loop fix (attempt 1)"
93
+ "const": "Running Go linter loop fix (attempt 1)"
94
94
  },
95
- "model": { "const": "gpt-5.4" }
95
+ "model": { "ref": "params.llmModel" },
96
+ "executor": { "ref": "params.llmExecutor" }
96
97
  }
97
98
  }
98
99
  ]
@@ -126,7 +127,13 @@
126
127
  "artifact": {
127
128
  "kind": "run-go-linter-result-json-file",
128
129
  "taskKey": { "ref": "params.taskKey" },
129
- "iteration": { "ref": "repeat.attempt" }
130
+ "iteration": {
131
+ "add": [
132
+ { "ref": "params.runGoLinterIteration" },
133
+ { "const": -1 },
134
+ { "ref": "repeat.attempt" }
135
+ ]
136
+ }
130
137
  }
131
138
  },
132
139
  "labelText": {
@@ -141,7 +148,13 @@
141
148
  "artifact": {
142
149
  "kind": "run-go-linter-result-json-file",
143
150
  "taskKey": { "ref": "params.taskKey" },
144
- "iteration": { "ref": "repeat.attempt" }
151
+ "iteration": {
152
+ "add": [
153
+ { "ref": "params.runGoLinterIteration" },
154
+ { "const": -1 },
155
+ { "ref": "repeat.attempt" }
156
+ ]
157
+ }
145
158
  }
146
159
  },
147
160
  "message": "run-go-linter-loop did not produce the structured linter result artifact."
@@ -162,7 +175,7 @@
162
175
  { "const": false }
163
176
  ]
164
177
  },
165
- "node": "codex-local-prompt",
178
+ "node": "llm-prompt",
166
179
  "prompt": {
167
180
  "templateRef": "run-go-linter-loop-fix",
168
181
  "vars": {
@@ -170,7 +183,13 @@
170
183
  "artifact": {
171
184
  "kind": "run-go-linter-result-json-file",
172
185
  "taskKey": { "ref": "params.taskKey" },
173
- "iteration": { "ref": "repeat.attempt" }
186
+ "iteration": {
187
+ "add": [
188
+ { "ref": "params.runGoLinterIteration" },
189
+ { "const": -1 },
190
+ { "ref": "repeat.attempt" }
191
+ ]
192
+ }
174
193
  }
175
194
  }
176
195
  },
@@ -184,7 +203,13 @@
184
203
  "artifact": {
185
204
  "kind": "run-go-linter-result-json-file",
186
205
  "taskKey": { "ref": "params.taskKey" },
187
- "iteration": { "ref": "repeat.attempt" }
206
+ "iteration": {
207
+ "add": [
208
+ { "ref": "params.runGoLinterIteration" },
209
+ { "const": -1 },
210
+ { "ref": "repeat.attempt" }
211
+ ]
212
+ }
188
213
  }
189
214
  },
190
215
  "exit_code": { "ref": "steps.run_go_linter_try_${attempt}.run_go_linter.outputs.parsed.exitCode" },
@@ -198,9 +223,10 @@
198
223
  },
199
224
  "params": {
200
225
  "labelText": {
201
- "template": "Running Codex Go linter loop fix (attempt ${attempt})"
226
+ "template": "Running Go linter loop fix (attempt ${attempt})"
202
227
  },
203
- "model": { "const": "gpt-5.4" }
228
+ "model": { "ref": "params.llmModel" },
229
+ "executor": { "ref": "params.llmExecutor" }
204
230
  }
205
231
  }
206
232
  ]
@@ -18,7 +18,7 @@
18
18
  "artifact": {
19
19
  "kind": "run-go-tests-result-json-file",
20
20
  "taskKey": { "ref": "params.taskKey" },
21
- "iteration": { "const": 1 }
21
+ "iteration": { "ref": "params.runGoTestsIteration" }
22
22
  }
23
23
  },
24
24
  "labelText": {
@@ -33,7 +33,7 @@
33
33
  "artifact": {
34
34
  "kind": "run-go-tests-result-json-file",
35
35
  "taskKey": { "ref": "params.taskKey" },
36
- "iteration": { "const": 1 }
36
+ "iteration": { "ref": "params.runGoTestsIteration" }
37
37
  }
38
38
  },
39
39
  "message": "run-go-tests-loop did not produce the structured tests result artifact."
@@ -54,7 +54,7 @@
54
54
  { "const": false }
55
55
  ]
56
56
  },
57
- "node": "codex-local-prompt",
57
+ "node": "llm-prompt",
58
58
  "prompt": {
59
59
  "templateRef": "run-go-tests-loop-fix",
60
60
  "vars": {
@@ -62,7 +62,7 @@
62
62
  "artifact": {
63
63
  "kind": "run-go-tests-result-json-file",
64
64
  "taskKey": { "ref": "params.taskKey" },
65
- "iteration": { "const": 1 }
65
+ "iteration": { "ref": "params.runGoTestsIteration" }
66
66
  }
67
67
  }
68
68
  },
@@ -76,7 +76,7 @@
76
76
  "artifact": {
77
77
  "kind": "run-go-tests-result-json-file",
78
78
  "taskKey": { "ref": "params.taskKey" },
79
- "iteration": { "const": 1 }
79
+ "iteration": { "ref": "params.runGoTestsIteration" }
80
80
  }
81
81
  },
82
82
  "exit_code": { "ref": "steps.run_go_tests_try_1.run_go_tests.outputs.parsed.exitCode" },
@@ -90,9 +90,10 @@
90
90
  },
91
91
  "params": {
92
92
  "labelText": {
93
- "const": "Running Codex Go tests loop fix (attempt 1)"
93
+ "const": "Running Go tests loop fix (attempt 1)"
94
94
  },
95
- "model": { "const": "gpt-5.4" }
95
+ "model": { "ref": "params.llmModel" },
96
+ "executor": { "ref": "params.llmExecutor" }
96
97
  }
97
98
  }
98
99
  ]
@@ -126,7 +127,13 @@
126
127
  "artifact": {
127
128
  "kind": "run-go-tests-result-json-file",
128
129
  "taskKey": { "ref": "params.taskKey" },
129
- "iteration": { "ref": "repeat.attempt" }
130
+ "iteration": {
131
+ "add": [
132
+ { "ref": "params.runGoTestsIteration" },
133
+ { "const": -1 },
134
+ { "ref": "repeat.attempt" }
135
+ ]
136
+ }
130
137
  }
131
138
  },
132
139
  "labelText": {
@@ -141,7 +148,13 @@
141
148
  "artifact": {
142
149
  "kind": "run-go-tests-result-json-file",
143
150
  "taskKey": { "ref": "params.taskKey" },
144
- "iteration": { "ref": "repeat.attempt" }
151
+ "iteration": {
152
+ "add": [
153
+ { "ref": "params.runGoTestsIteration" },
154
+ { "const": -1 },
155
+ { "ref": "repeat.attempt" }
156
+ ]
157
+ }
145
158
  }
146
159
  },
147
160
  "message": "run-go-tests-loop did not produce the structured tests result artifact."
@@ -162,7 +175,7 @@
162
175
  { "const": false }
163
176
  ]
164
177
  },
165
- "node": "codex-local-prompt",
178
+ "node": "llm-prompt",
166
179
  "prompt": {
167
180
  "templateRef": "run-go-tests-loop-fix",
168
181
  "vars": {
@@ -170,7 +183,13 @@
170
183
  "artifact": {
171
184
  "kind": "run-go-tests-result-json-file",
172
185
  "taskKey": { "ref": "params.taskKey" },
173
- "iteration": { "ref": "repeat.attempt" }
186
+ "iteration": {
187
+ "add": [
188
+ { "ref": "params.runGoTestsIteration" },
189
+ { "const": -1 },
190
+ { "ref": "repeat.attempt" }
191
+ ]
192
+ }
174
193
  }
175
194
  }
176
195
  },
@@ -184,7 +203,13 @@
184
203
  "artifact": {
185
204
  "kind": "run-go-tests-result-json-file",
186
205
  "taskKey": { "ref": "params.taskKey" },
187
- "iteration": { "ref": "repeat.attempt" }
206
+ "iteration": {
207
+ "add": [
208
+ { "ref": "params.runGoTestsIteration" },
209
+ { "const": -1 },
210
+ { "ref": "repeat.attempt" }
211
+ ]
212
+ }
188
213
  }
189
214
  },
190
215
  "exit_code": { "ref": "steps.run_go_tests_try_${attempt}.run_go_tests.outputs.parsed.exitCode" },
@@ -198,9 +223,10 @@
198
223
  },
199
224
  "params": {
200
225
  "labelText": {
201
- "template": "Running Codex Go tests loop fix (attempt ${attempt})"
226
+ "template": "Running Go tests loop fix (attempt ${attempt})"
202
227
  },
203
- "model": { "const": "gpt-5.4" }
228
+ "model": { "ref": "params.llmModel" },
229
+ "executor": { "ref": "params.llmExecutor" }
204
230
  }
205
231
  }
206
232
  ]
@@ -6,8 +6,8 @@
6
6
  "id": "implement",
7
7
  "steps": [
8
8
  {
9
- "id": "run_codex_implement",
10
- "node": "codex-local-prompt",
9
+ "id": "run_implement",
10
+ "node": "llm-prompt",
11
11
  "prompt": {
12
12
  "templateRef": "implement",
13
13
  "vars": {
@@ -40,8 +40,9 @@
40
40
  "format": "task-prompt"
41
41
  },
42
42
  "params": {
43
- "labelText": { "const": "Running Codex implementation mode locally" },
44
- "model": { "const": "gpt-5.4" }
43
+ "labelText": { "const": "Running implementation mode locally" },
44
+ "model": { "ref": "params.llmModel" },
45
+ "executor": { "ref": "params.llmExecutor" }
45
46
  }
46
47
  }
47
48
  ]