agentweaver 0.1.2 → 0.1.3

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