workflow-ai 1.0.64 → 1.0.66

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 (160) hide show
  1. package/README.md +377 -277
  2. package/configs/agent-health-rules.yaml +75 -0
  3. package/configs/pipeline.yaml +24 -7
  4. package/package.json +1 -1
  5. package/src/init.mjs +20 -3
  6. package/src/lib/agent-health-registry.mjs +245 -0
  7. package/src/lib/agent-spawner.mjs +47 -6
  8. package/src/lib/artifact-snapshot.mjs +233 -0
  9. package/src/lib/error-classifier.mjs +311 -0
  10. package/src/lib/test-error-classifier.mjs +60 -0
  11. package/src/lib/test-extends.mjs +58 -0
  12. package/src/lib/test-version.mjs +21 -0
  13. package/src/runner.mjs +215 -58
  14. package/src/scripts/move-to-review.js +5 -7
  15. package/src/scripts/reset-agent-health.js +62 -0
  16. package/src/skills/coach/SKILL.md +1 -0
  17. package/src/skills/coach/tests/cases/TC-COACH-001/current/meta.json +93 -94
  18. package/src/skills/coach/tests/cases/TC-COACH-002/current/meta.json +93 -94
  19. package/src/skills/create-plan/SKILL.md +1 -0
  20. package/src/skills/create-plan/knowledge/test-hygiene.md +47 -0
  21. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-1.md +23 -31
  22. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-2.md +20 -35
  23. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/claude-sonnet/trial-3.md +36 -19
  24. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/judge.json +1 -1
  25. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-2.md +11 -5
  26. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-deepseek/trial-3.md +12 -16
  27. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-1.md +15 -9
  28. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-glm/trial-3.md +15 -14
  29. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-1.md +22 -18
  30. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-2.md +24 -16
  31. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/kilo-minimax/trial-3.md +13 -20
  32. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-001/current/meta.json +2 -2
  33. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-1.md +14 -19
  34. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-2.md +24 -14
  35. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/claude-sonnet/trial-3.md +20 -19
  36. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/judge.json +16 -17
  37. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-1.md +0 -7
  38. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-2.md +9 -10
  39. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-deepseek/trial-3.md +5 -5
  40. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-1.md +20 -4
  41. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-2.md +36 -9
  42. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-glm/trial-3.md +9 -6
  43. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-1.md +4 -12
  44. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-2.md +6 -8
  45. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/kilo-minimax/trial-3.md +8 -4
  46. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-002/current/meta.json +10 -11
  47. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-1.md +30 -0
  48. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-2.md +30 -0
  49. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/claude-sonnet/trial-3.md +30 -0
  50. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/judge.json +165 -0
  51. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-1.md +5 -0
  52. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-2.md +26 -0
  53. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-deepseek/trial-3.md +5 -0
  54. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-1.md +39 -0
  55. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-2.md +37 -0
  56. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-glm/trial-3.md +45 -0
  57. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-1.md +26 -0
  58. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-2.md +27 -0
  59. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/kilo-minimax/trial-3.md +7 -0
  60. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003/current/meta.json +117 -0
  61. package/src/skills/decompose-gaps/tests/cases/TC-DECOMPOSE-GAPS-003-parent-plan-mandatory.yaml +41 -0
  62. package/src/skills/decompose-gaps/tests/index.yaml +5 -0
  63. package/src/skills/decompose-gaps/tests/rubrics/parent-plan-mandatory.md +22 -0
  64. package/src/skills/decompose-gaps/workflows/decompose.md +5 -2
  65. package/src/skills/decompose-plan/knowledge/atomicity-checklist.md +31 -5
  66. package/src/skills/decompose-plan/knowledge/capabilities.md +29 -5
  67. package/src/skills/decompose-plan/knowledge/human-task-rules.md +15 -0
  68. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-1.md +55 -0
  69. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-2.md +49 -0
  70. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/claude-sonnet/trial-3.md +49 -0
  71. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/judge.json +163 -0
  72. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-1.md +104 -0
  73. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-2.md +45 -0
  74. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-deepseek/trial-3.md +58 -0
  75. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-1.md +193 -0
  76. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-2.md +202 -0
  77. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-glm/trial-3.md +155 -0
  78. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-1.md +52 -0
  79. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-2.md +17 -0
  80. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/kilo-minimax/trial-3.md +0 -0
  81. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004/current/meta.json +115 -0
  82. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-004-executor-atomicity.yaml +64 -0
  83. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-1.md +59 -0
  84. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-2.md +204 -0
  85. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/claude-sonnet/trial-3.md +213 -0
  86. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/judge.json +163 -0
  87. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-1.md +0 -0
  88. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-2.md +57 -0
  89. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-deepseek/trial-3.md +54 -0
  90. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-1.md +147 -0
  91. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-2.md +165 -0
  92. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-glm/trial-3.md +133 -0
  93. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-1.md +81 -0
  94. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-2.md +108 -0
  95. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/kilo-minimax/trial-3.md +3 -0
  96. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005/current/meta.json +114 -0
  97. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-005-capabilities-registry.yaml +78 -0
  98. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-1.md +225 -0
  99. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-2.md +66 -0
  100. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/claude-sonnet/trial-3.md +36 -0
  101. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/judge.json +163 -0
  102. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-1.md +42 -0
  103. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-2.md +67 -0
  104. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-deepseek/trial-3.md +40 -0
  105. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-1.md +122 -0
  106. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-2.md +131 -0
  107. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-glm/trial-3.md +138 -0
  108. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-1.md +41 -0
  109. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-2.md +88 -0
  110. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/kilo-minimax/trial-3.md +0 -0
  111. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006/current/meta.json +115 -0
  112. package/src/skills/decompose-plan/tests/cases/TC-DECOMPOSE-PLAN-006-dod-threshold.yaml +72 -0
  113. package/src/skills/decompose-plan/tests/index.yaml +15 -0
  114. package/src/skills/decompose-plan/tests/rubrics/capabilities-registry.md +21 -0
  115. package/src/skills/decompose-plan/tests/rubrics/dod-threshold.md +21 -0
  116. package/src/skills/decompose-plan/tests/rubrics/executor-atomicity.md +21 -0
  117. package/src/skills/decompose-plan/workflows/decompose.md +38 -5
  118. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-001/current/meta.json +87 -88
  119. package/src/skills/execute-task/tests/cases/TC-EXECUTE-TASK-005/current/meta.json +87 -88
  120. package/src/skills/manual-testing/SKILL.md +6 -4
  121. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-1.md +29 -16
  122. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-2.md +21 -54
  123. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/claude-sonnet/trial-3.md +18 -23
  124. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/judge.json +17 -17
  125. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-001/current/meta.json +19 -19
  126. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-1.md +27 -30
  127. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-2.md +16 -23
  128. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/claude-sonnet/trial-3.md +35 -28
  129. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/judge.json +13 -13
  130. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-002/current/meta.json +15 -15
  131. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-1.md +76 -0
  132. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-2.md +71 -0
  133. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/claude-sonnet/trial-3.md +85 -0
  134. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/judge.json +46 -0
  135. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003/current/meta.json +36 -0
  136. package/src/skills/manual-testing/tests/cases/TC-MANUAL-TESTING-003-qa-non-ui-assertion.yaml +65 -0
  137. package/src/skills/manual-testing/tests/index.yaml +5 -0
  138. package/src/skills/manual-testing/tests/rubrics/qa-non-ui-assertion.md +31 -0
  139. package/src/skills/review-result/SKILL.md +1 -0
  140. package/src/skills/review-result/knowledge/test-hygiene.md +44 -0
  141. package/src/skills/review-result/scripts/verify-artifacts.js +157 -14
  142. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-1.md +7 -0
  143. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-2.md +7 -0
  144. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/claude-sonnet/trial-3.md +7 -0
  145. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/judge.json +163 -0
  146. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-1.md +5 -0
  147. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-2.md +5 -0
  148. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-deepseek/trial-3.md +11 -0
  149. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-1.md +16 -0
  150. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-2.md +18 -0
  151. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-glm/trial-3.md +17 -0
  152. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-1.md +17 -0
  153. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-2.md +31 -0
  154. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/kilo-minimax/trial-3.md +5 -0
  155. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003/current/meta.json +115 -0
  156. package/src/skills/review-result/tests/cases/TC-REVIEW-RESULT-003-test-isolation.yaml +50 -0
  157. package/src/skills/review-result/tests/fixtures/QA-904-test-isolation-violation/QA-904.md +51 -0
  158. package/src/skills/review-result/tests/fixtures/QA-904-test-isolation-violation/example-test.mjs +36 -0
  159. package/src/skills/review-result/tests/index.yaml +5 -0
  160. package/src/skills/review-result/tests/rubrics/test-isolation.md +20 -0
package/README.md CHANGED
@@ -1,277 +1,377 @@
1
- # workflow-ai
2
-
3
- AI Agent Workflow Coordinatorkanban-based pipeline for AI coding agents.
4
-
5
- Система координации AI-агентов через файловую канбан-доску. Автоматически оркестрирует выполнение задач: берёт тикеты из очереди, запускает нужного агента, проверяет результат и генерирует отчёты.
6
-
7
- ## Install
8
-
9
- ```bash
10
- npm install -g workflow-ai
11
- ```
12
-
13
- ## Quick Start
14
-
15
- ```bash
16
- # Initialize workflow in your project
17
- workflow init
18
-
19
- # Run the workflow pipeline
20
- workflow run
21
- ```
22
-
23
- ## Commands
24
-
25
- | Command | Description |
26
- |---------|-------------|
27
- | `workflow init [path] [--force]` | Initialize `.workflow/` directory with kanban board structure |
28
- | `workflow run [options]` | Execute the AI pipeline |
29
- | `workflow update [path]` | Update global dir and recreate junctions |
30
- | `workflow eject <skill> [path]` | Eject a skill (copy from global to project) |
31
- | `workflow eject-scripts [path]` | Eject scripts (copy from global to project) |
32
- | `workflow eject-configs [path]` | Eject configs (copy from global to project) |
33
- | `workflow list [path]` | List skills with status (shared/ejected/project-only) |
34
- | `workflow help` | Show help |
35
- | `workflow version` | Show version |
36
-
37
- ### Run Options
38
-
39
- | Option | Description |
40
- |--------|-------------|
41
- | `--plan <plan>` | Plan ID to execute |
42
- | `--config <path>` | Config file path |
43
- | `--project <path>` | Project root (default: auto-detect) |
44
-
45
- ## Init
46
-
47
- The `workflow init` command creates the `.workflow/` directory structure:
48
-
49
- ```
50
- .workflow/
51
- ├── config/ # → junction to ~/.workflow/configs/ (eject to customize)
52
- ├── plans/
53
- │ ├── current/ # Current development plans
54
- │ ├── templates/ # Plan templates with triggers (recurring plans)
55
- │ └── archive/ # Archived plans
56
- ├── tickets/
57
- │ ├── backlog/ # Awaiting conditions
58
- ├── ready/ # Ready to execute
59
- ├── in-progress/ # Currently active
60
- │ ├── blocked/ # Blocked by dependencies
61
- │ ├── review/ # Awaiting review
62
- │ └── done/ # Completed
63
- ├── reports/ # Generated reports
64
- ├── logs/ # Pipeline execution logs
65
- ├── metrics/ # Performance metrics
66
- ├── templates/ # Ticket/plan/report templates
67
- └── src/
68
- ├── skills/ # Skill instructions (junctions to global, per-skill)
69
- └── scripts/ # Automation scripts (junction to global)
70
- ```
71
-
72
- ## Pipeline
73
-
74
- The `workflow run` command executes a multi-stage pipeline:
75
-
76
- 1. **pick-first-task** select ticket from ready queue
77
- 2. **check-plan-templates** — evaluate plan template triggers, create plans if fired
78
- 3. **check-plan-decomposition** — verify plan is decomposed into tickets
79
- 4. **decompose-plan** — break down plan into tickets (if needed)
80
- 5. **check-conditions** — validate ticket readiness conditions
81
- 6. **move-to-ready** move tickets from backlog to ready
82
- 7. **pick-next-task** — select next ticket for execution
83
- 8. **move-to-in-progress** — start execution
84
- 9. **check-relevance** — verify ticket is still relevant (script-based, no LLM)
85
- 10. **execute-task** — perform the work via AI agent
86
- 11. **move-to-review** — submit for review
87
- 12. **review-result** — validate results against Definition of Done
88
- 13. **increment-task-attempts** — track retry attempts
89
- 14. **move-ticket** — move to done/blocked based on review
90
- 15. **create-report** — generate execution report
91
- 16. **analyze-report / decompose-gaps** — analyze results and iterate
92
-
93
- ### Supported Agents
94
-
95
- | Agent | Description |
96
- |-------|-------------|
97
- | `claude-sonnet` | Claude Sonnet fast model for simple tasks |
98
- | `claude-opus` | Claude Opus powerful model for complex tasks |
99
- | `qwen-code` | Qwen Code alternative agent |
100
- | `kilo-code` | Kilo Code multi-mode agent |
101
-
102
- Agents are configured in `configs/pipeline.yaml`.
103
-
104
- ## Skills
105
-
106
- Built-in skills for different task types:
107
-
108
- | Skill | Description |
109
- |-------|-------------|
110
- | `analyze-report` | Report analysis |
111
- | `coach` | Skill management and improvement |
112
- | `create-plan` | Plan creation |
113
- | `create-report` | Report generation |
114
- | `decompose-gaps` | Gap decomposition |
115
- | `decompose-plan` | Plan decomposition into tickets |
116
- | `deep-research` | Deep research |
117
- | `execute-task` | Task execution |
118
- | `review-result` | Result review against DoD |
119
-
120
- Skills are stored globally in `~/.workflow/skills/` and linked into projects via junctions.
121
-
122
- Use `workflow eject <skill>` to copy a skill into the project for customization.
123
-
124
- ## Skill regression tests
125
-
126
- Трёхуровневая система тестирования скилов для проверки качества AI-агентов.
127
-
128
- ### Три слоя тестирования
129
-
130
- | Level | Name | Description |
131
- |-------|------|-------------|
132
- | L0 | Static | Базовая проверка синтаксиса и структуры: YAML-валидация, проверка обязательных полей, линтер |
133
- | L1 | Deterministic | Детерминированные тесты: эталонные входные данные → ожидаемый результат (strict match) |
134
- | L2 | Rubric | Гибкая оценка по критериям: scorer выставляет баллы на основе качества результата |
135
-
136
- ### Структура директорий
137
-
138
- ```
139
- src/skills/<name>/tests/
140
- ├── index.yaml # Метаданные тестов, список test cases
141
- ├── cases/ # Входные данные для тестов
142
- │ └── <case-id>/
143
- │ └── input.yaml
144
- ├── fixtures/ # Ожидаемые выходные данные (для L1)
145
- │ └── <case-id>/
146
- │ └── expected.yaml
147
- └── rubrics/ # Критерии оценки (для L2)
148
- └── <case-id>/
149
- └── rubric.yaml
150
- ```
151
-
152
- ### Запуск тестов
153
-
154
- ```bash
155
- npm run test:skills
156
- ```
157
-
158
- ### CLI-флаги
159
-
160
- | Flag | Description |
161
- |------|-------------|
162
- | `--skill <name>` | Запустить тесты только для указанного скила |
163
- | `--relevant` | Запустить только тесты, соответствующие изменённым файлам |
164
- | `--establish-baseline` | Запустить тесты и сохранить результаты как baseline |
165
- | `--baseline-ref <ref>` | Использовать конкретный baseline (коммит, тег) |
166
- | `--yes` | Автоматически подтверждать все действия |
167
-
168
- ### Verdict-режимы
169
-
170
- | Mode | Description |
171
- |------|-------------|
172
- | `no-baseline` | Первый запуск — результаты сохраняются как baseline без сравнения |
173
- | `no-regression` | Сравнение с baseline — тест считается пройденным, если результат не хуже baseline |
174
-
175
- ### Принцип git write
176
-
177
- Runner и коуч **не выполняют git write-операций**. Все изменения в кодовой базе делает исключительно пользователь. Runner только анализирует и рекомендует, но не коммитит.
178
-
179
- ### First run on a new project
180
-
181
- 1. Запустить тесты с флагом `--establish-baseline`
182
- 2. Проверить результаты: красные тесты — ожидаемы для нового проекта
183
- 3. Зафиксировать baseline: `git commit current/` как baseline-коммит
184
-
185
- ## Scripts
186
-
187
- Scripts are stored globally in `~/.workflow/scripts/` and linked as a single junction into `.workflow/src/scripts/`.
188
-
189
- Use `workflow eject-scripts` to copy scripts into the project for customization.
190
-
191
- ## Configs
192
-
193
- Configs are stored globally in `~/.workflow/configs/` and linked as a single junction into `.workflow/config/`.
194
-
195
- Use `workflow eject-configs` to copy configs into the project for customization.
196
-
197
- ## Plan Templates
198
-
199
- Plan templates allow recurring plans to be created automatically. Templates live in `.workflow/plans/templates/` and contain trigger conditions in their frontmatter.
200
-
201
- ### Template Format
202
-
203
- ```yaml
204
- id: "TMPL-001"
205
- title: "Daily manual testing"
206
- type: template
207
- trigger:
208
- type: daily # daily | weekly | date_after | interval_days
209
- params: {} # type-specific params
210
- last_triggered: "" # auto-updated on trigger
211
- enabled: true
212
- ```
213
-
214
- ### Trigger Types
215
-
216
- | Type | Params | Description |
217
- |------|--------|-------------|
218
- | `daily` | | Once per day |
219
- | `weekly` | `days_of_week: [1,3,5]` (0=Sun) | On specific weekdays |
220
- | `date_after` | `date: "2026-04-01"` | Once after a specific date |
221
- | `interval_days` | `days: 3` | Every N days |
222
-
223
- When a trigger fires, the pipeline creates a plan in `plans/current/` with status `approved`, then the normal decomposition flow proceeds.
224
-
225
- ## Task Types
226
-
227
- | Type | Prefix | Description |
228
- |------|--------|-------------|
229
- | `arch` | ARCH | Architecture & planning |
230
- | `impl` | IMPL | Code implementation |
231
- | `fix` | FIX | Bug fixes |
232
- | `review` | REVIEW | Code/documentation review |
233
- | `docs` | DOCS | Documentation |
234
- | `admin` | ADMIN | Administrative tasks |
235
-
236
- ## Configuration
237
-
238
- ### `configs/config.yaml`
239
-
240
- Main workflow configuration: project info, task types, priorities, statuses, condition types, paths, reporting settings.
241
-
242
- ### `configs/pipeline.yaml`
243
-
244
- Pipeline definition: agents, stages, flow control, goto-logic, retry strategies.
245
-
246
- ### `configs/ticket-movement-rules.yaml`
247
-
248
- Rules for automated ticket movement based on review status.
249
-
250
- ## Project Structure
251
-
252
- ```
253
- workflow-ai/
254
- ├── bin/ # CLI entry point
255
- ├── src/
256
- │ ├── cli.mjs # Command parsing
257
- │ ├── runner.mjs # Core pipeline orchestrator
258
- │ ├── init.mjs # Project initialization
259
- │ ├── global-dir.mjs # Global ~/.workflow/ management
260
- │ ├── junction-manager.mjs # Junction/symlink management
261
- │ ├── wf-loader.mjs # Config loader
262
- │ ├── lib/ # Utility libraries
263
- │ └── tests/ # Test suite
264
- ├── configs/ # Configuration files (source)
265
- ├── templates/ # Workflow templates (source)
266
- ├── agent-templates/ # AI agent instruction templates
267
- └── package.json
268
- ```
269
-
270
- ## Requirements
271
-
272
- - Node.js >= 18.0.0
273
- - npm
274
-
275
- ## License
276
-
277
- MIT
1
+ # workflow-ai
2
+
3
+ Координатор воркфлоу для AI-агентовконвейер на основе канбан-доски для AI-агентов, пишущих код.
4
+
5
+ Система координации AI-агентов через файловую канбан-доску. Автоматически оркестрирует выполнение задач: берёт тикеты из очереди, запускает нужного агента, проверяет результат и генерирует отчёты.
6
+
7
+ ## Установка
8
+
9
+ ```bash
10
+ npm install -g workflow-ai
11
+ ```
12
+
13
+ ## Быстрый старт
14
+
15
+ ```bash
16
+ # 1. Инициализировать воркфлоу в вашем проекте
17
+ workflow init
18
+ ```
19
+
20
+ ```text
21
+ # 2. Открыть проект в AI-агенте (Claude Code, Kilo, и т.д.) и попросить создать план через скил:
22
+ Создай план <описание задачи> используя скил .workflow/src/skills/create-plan/SKILL.md
23
+ ```
24
+
25
+ ```bash
26
+ # 3. Запустить конвейер — он декомпозирует план на тикеты и начнёт исполнение
27
+ workflow run
28
+ ```
29
+
30
+ ## Команды
31
+
32
+ | Команда | Описание |
33
+ |---------|----------|
34
+ | `workflow init [path] [--force]` | Инициализировать директорию `.workflow/` со структурой канбан-доски |
35
+ | `workflow run [options]` | Запустить AI-конвейер |
36
+ | `workflow update [path]` | Обновить глобальную директорию и пересоздать junctions |
37
+ | `workflow eject <skill> [path]` | Извлечь скил (скопировать из глобальной директории в проект) |
38
+ | `workflow eject-scripts [path]` | Извлечь скрипты (скопировать из глобальной директории в проект) |
39
+ | `workflow eject-configs [path]` | Извлечь конфиги (скопировать из глобальной директории в проект) |
40
+ | `workflow list [path]` | Вывести список скилов со статусом (shared/ejected/project-only) |
41
+ | `workflow help` | Показать справку |
42
+ | `workflow version` | Показать версию |
43
+
44
+ ### Опции команды `run`
45
+
46
+ | Опция | Описание |
47
+ |-------|----------|
48
+ | `--plan <plan>` | ID плана для выполнения |
49
+ | `--config <path>` | Путь к конфиг-файлу |
50
+ | `--project <path>` | Корень проекта (по умолчанию: автоопределение) |
51
+
52
+ ## Инициализация
53
+
54
+ Команда `workflow init` создаёт структуру директории `.workflow/`:
55
+
56
+ ```
57
+ .workflow/
58
+ ├── config/ # junction на ~/.workflow/configs/ (eject для кастомизации)
59
+ ├── plans/
60
+ │ ├── current/ # Текущие планы разработки
61
+ │ ├── templates/ # Шаблоны планов с триггерами (повторяющиеся планы)
62
+ │ └── archive/ # Архивные планы
63
+ ├── tickets/
64
+ ├── backlog/ # Ожидают условий
65
+ ├── ready/ # Готовы к выполнению
66
+ ├── in-progress/ # В работе
67
+ │ ├── blocked/ # Заблокированы зависимостями
68
+ ├── review/ # Ожидают ревью
69
+ └── done/ # Завершены
70
+ ├── reports/ # Сгенерированные отчёты
71
+ ├── logs/ # Логи выполнения конвейера
72
+ ├── metrics/ # Метрики производительности
73
+ ├── templates/ # Шаблоны тикетов/планов/отчётов
74
+ └── src/
75
+ ├── skills/ # Инструкции скилов (junctions на глобальные, по каждому скилу)
76
+ └── scripts/ # Скрипты автоматизации (junction на глобальные)
77
+ ```
78
+
79
+ ## Конвейер
80
+
81
+ Команда `workflow run` исполняет многоэтапный конвейер:
82
+
83
+ 1. **pick-first-task** — выбрать тикет из очереди ready
84
+ 2. **check-plan-templates** — проверить триггеры шаблонов планов, создать планы при срабатывании
85
+ 3. **check-plan-decomposition** — проверить состояние декомпозиции/активации планов
86
+ 4. **allocate-ticket-ids** — выделить стартовые ID для префиксов до декомпозиции
87
+ 5. **decompose-plan** — разбить план на тикеты (при необходимости)
88
+ 6. **check-atomicity-limit / verify-atomicity / increment-atomicity-counter** — проверить атомарность тикетов плана
89
+ 7. **check-conditions** — проверить условия готовности тикета
90
+ 8. **move-to-ready** — переместить тикеты из backlog в ready
91
+ 9. **pick-next-task** — выбрать следующий тикет для выполнения
92
+ 10. **move-to-in-progress** — начать выполнение
93
+ 11. **check-relevance** — проверить, что тикет всё ещё актуален (на скриптах, без LLM)
94
+ 12. **check-mcp** — проверить доступность MCP-зависимостей тикета
95
+ 13. **execute-task** выполнить работу через AI-агента
96
+ 14. **move-to-review** — отправить на ревью
97
+ 15. **verify-artifacts**детерминированная проверка артефактов тикета
98
+ 16. **review-result**проверить результаты по Definition of Done
99
+ 17. **increment-task-attempts**учесть попытки повторов
100
+ 18. **move-ticket** переместить в done/blocked по результатам ревью
101
+ 19. **create-report** — сгенерировать отчёт о выполнении
102
+ 20. **analyze-report / decompose-gaps** — проанализировать результаты и итерировать
103
+ 21. **complete-plan / increment-plan-iterations** — закрыть план или запустить следующую итерацию
104
+
105
+ ### Поддерживаемые агенты
106
+
107
+ | Агент | Описание |
108
+ |-------|----------|
109
+ | `claude-code` | Claude Opus — мощная модель для сложных задач |
110
+ | `qwen-code` | Qwen Code — альтернативный агент |
111
+ | `kilo-code` | Kilo Code мультирежимный агент |
112
+ ...
113
+
114
+ Агенты настраиваются в `configs/pipeline.yaml`.
115
+
116
+ ## Скилы
117
+
118
+ Встроенные скилы для разных типов задач:
119
+
120
+ | Скил | Описание |
121
+ |------|----------|
122
+ | `analyze-report` | Анализ отчёта |
123
+ | `coach` | Управление и улучшение скилов |
124
+ | `create-plan` | Создание плана |
125
+ | `create-report` | Генерация отчёта |
126
+ | `decompose-gaps` | Декомпозиция пробелов |
127
+ | `decompose-plan` | Декомпозиция плана на тикеты |
128
+ | `deep-research` | Глубокий ресерч |
129
+ | `execute-task` | Выполнение задачи |
130
+ | `manual-testing` | UI-observability: ручное тестирование сценариев |
131
+ | `review-result` | Ревью результата по DoD |
132
+
133
+ Скилы хранятся глобально в `~/.workflow/skills/` и подключаются в проекты через junctions.
134
+
135
+ Используйте `workflow eject <skill>` для копирования скила в проект для кастомизации.
136
+
137
+ ### Как работать с коучем
138
+
139
+ Коуч — мета-скил для создания и улучшения остальных скилов. Правки в `.workflow/src/skills/` делаются **только** через него.
140
+
141
+ ```text
142
+ # Запрос к AI-агенту:
143
+ Загрузи коуча из .workflow/src/skills/coach/SKILL.md и <действие>
144
+ ```
145
+
146
+ Варианты `<действия>`:
147
+
148
+ | Тип задачи | Пример запроса |
149
+ |------------|----------------|
150
+ | Создать новый скил | `создай скил <имя> для <назначение>` |
151
+ | Аудит существующего | `сделай аудит скила <имя>` |
152
+ | Анализ эффективности | `проанализируй результаты скила <имя> по завершённым тикетам` |
153
+ | Точечное улучшение | `улучши скил <имя>: <что именно>` |
154
+ | Ресерч практик | `найди лучшие практики для <тема> и обогати скил <имя>` |
155
+ | Ревью скила | `сделай ревью скила <имя>` |
156
+
157
+ Коуч сам определит тип задачи, загрузит нужный воркфлоу, внесёт правку, прогонит тест скила и запишет результат в `.workflow/coach-backlog.yaml`. Коммит делает пользователь.
158
+
159
+ ## Регрессионные тесты скилов
160
+
161
+ Трёхуровневая система тестирования скилов для проверки качества AI-агентов.
162
+
163
+ ### Три слоя тестирования
164
+
165
+ | Уровень | Название | Описание |
166
+ |---------|----------|----------|
167
+ | L0 | Static | Базовая проверка синтаксиса и структуры: YAML-валидация, проверка обязательных полей, линтер |
168
+ | L1 | Deterministic | Детерминированные тесты: эталонные входные данные → ожидаемый результат (strict match) |
169
+ | L2 | Rubric | Гибкая оценка по критериям: scorer выставляет баллы на основе качества результата |
170
+
171
+ ### Структура директорий
172
+
173
+ ```
174
+ src/skills/<name>/tests/
175
+ ├── index.yaml # Метаданные тестов, список test cases
176
+ ├── cases/ # Входные данные для тестов
177
+ │ └── <case-id>/
178
+ │ └── input.yaml
179
+ ├── fixtures/ # Ожидаемые выходные данные (для L1)
180
+ │ └── <case-id>/
181
+ │ └── expected.yaml
182
+ └── rubrics/ # Критерии оценки (для L2)
183
+ └── <case-id>/
184
+ └── rubric.yaml
185
+ ```
186
+
187
+ ### Запуск тестов
188
+
189
+ ```bash
190
+ npm run test:skills
191
+ ```
192
+
193
+ ### CLI-флаги
194
+
195
+ | Флаг | Описание |
196
+ |------|----------|
197
+ | `--skill <name>` | Запустить тесты только для указанного скила |
198
+ | `--relevant` | Запустить только тесты, соответствующие изменённым файлам |
199
+ | `--establish-baseline` | Запустить тесты и сохранить результаты как baseline |
200
+ | `--baseline-ref <ref>` | Использовать конкретный baseline (коммит, тег) |
201
+ | `--yes` | Автоматически подтверждать все действия |
202
+
203
+ ### Режимы вердикта
204
+
205
+ | Режим | Описание |
206
+ |-------|----------|
207
+ | `no-baseline` | Первый запуск — результаты сохраняются как baseline без сравнения |
208
+ | `no-regression` | Сравнение с baseline — тест считается пройденным, если результат не хуже baseline |
209
+
210
+ ### Принцип git write
211
+
212
+ Runner и коуч **не выполняют git write-операций**. Все изменения в кодовой базе делает исключительно пользователь. Runner только анализирует и рекомендует, но не коммитит.
213
+
214
+ ### Первый запуск на новом проекте
215
+
216
+ 1. Запустить тесты с флагом `--establish-baseline`
217
+ 2. Проверить результаты: красные тесты — ожидаемы для нового проекта
218
+ 3. Зафиксировать baseline: `git commit current/` как baseline-коммит
219
+
220
+ ## Скрипты
221
+
222
+ Скрипты хранятся глобально в `~/.workflow/scripts/` и подключаются одним junction в `.workflow/src/scripts/`.
223
+
224
+ Используйте `workflow eject-scripts` для копирования скриптов в проект для кастомизации.
225
+
226
+ ## Конфиги
227
+
228
+ Конфиги хранятся глобально в `~/.workflow/configs/` и подключаются одним junction в `.workflow/config/`.
229
+
230
+ Используйте `workflow eject-configs` для копирования конфигов в проект для кастомизации.
231
+
232
+ ## Шаблоны планов
233
+
234
+ Шаблоны планов позволяют автоматически создавать повторяющиеся планы. Шаблоны лежат в `.workflow/plans/templates/` и содержат условия триггеров во frontmatter.
235
+
236
+ ### Формат шаблона
237
+
238
+ ```yaml
239
+ id: "TMPL-001"
240
+ title: "Daily manual testing"
241
+ type: template
242
+ trigger:
243
+ type: daily # daily | weekly | date_after | interval_days
244
+ params: {} # параметры, зависящие от типа
245
+ last_triggered: "" # обновляется автоматически при срабатывании
246
+ enabled: true
247
+ ```
248
+
249
+ ### Типы триггеров
250
+
251
+ | Тип | Параметры | Описание |
252
+ |-----|-----------|----------|
253
+ | `daily` | — | Раз в день |
254
+ | `weekly` | `days_of_week: [1,3,5]` (0=вс) | В указанные дни недели |
255
+ | `date_after` | `date: "2026-04-01"` | Один раз после указанной даты |
256
+ | `interval_days` | `days: 3` | Каждые N дней |
257
+
258
+ При срабатывании триггера конвейер создаёт план в `plans/current/` со статусом `approved`, далее идёт обычный поток декомпозиции.
259
+
260
+ ## Типы задач
261
+
262
+ | Тип | Префикс | Описание |
263
+ |-----|---------|----------|
264
+ | `arch` | ARCH | Архитектура и планирование |
265
+ | `impl` | IMPL | Реализация кода |
266
+ | `fix` | FIX | Исправления ошибок |
267
+ | `review` | REVIEW | Ревью кода/документации |
268
+ | `docs` | DOCS | Документация |
269
+ | `admin` | ADMIN | Административные задачи |
270
+
271
+ ## Fallback агентов и правила здоровья
272
+
273
+ Система включает механизм in-stage fallback и health-мониторинг агентов.
274
+
275
+ ### Механика fallback
276
+
277
+ Когда агент падает во время выполнения задачи, система использует **artifact-snapshot** для принятия решения:
278
+ - Если snapshot пустой (нет записанных файлов) → выполняется fallback на следующего агента
279
+ - Если snapshot непустой (есть изменения) → задача переходит в состояние `goto.error`
280
+
281
+ **Пример сценария:** Qwen превысил quota и упал без записи файлов → Kilo вызван в той же попытке, task_attempts не инкрементирован.
282
+
283
+ Конфигурация snapshot:
284
+ ```yaml
285
+ execution:
286
+ artifact_snapshot_enabled: false # по умолчанию выключено
287
+ snapshot_paths: ["src/", "configs/"] # что мониторить
288
+ snapshot_max_file_size: 524288 # файлы >512KB — только mtime+size
289
+ ```
290
+
291
+ **Baseline производительности:** `p50=169ms p95=299ms files=598` (из QA-20 benchmark).
292
+
293
+ ### Классификатор ошибок и health-реестр
294
+
295
+ Ошибки классифицируются по классам:
296
+ - `unavailable` — агент временно недоступен (quota, rate limit)
297
+ - `transient` — временная ошибка сети (timeout, 5xx)
298
+ - `misconfigured` — ошибка конфигурации (401, 403, отсутствует API key)
299
+ - `unmatched` — ошибка не распознана
300
+
301
+ **Семантика TTL:**
302
+ - `5m` — 5 минут
303
+ - `1h` — 1 час
304
+ - `until_utc_midnight` — до полуночи UTC (минимум 30 минут)
305
+ - `infinite` — навсегда
306
+
307
+ Файл конфигурации: `configs/agent-health-rules.yaml`. Файл состояния: `.workflow/state/agent-health.json`.
308
+
309
+ ### Команда сброса
310
+
311
+ ```bash
312
+ # показать текущее состояние
313
+ node .workflow/src/scripts/reset-agent-health.js
314
+
315
+ # сбросить конкретного агента
316
+ node .workflow/src/scripts/reset-agent-health.js --agent qwen-code
317
+
318
+ # сбросить всех агентов
319
+ node .workflow/src/scripts/reset-agent-health.js --all
320
+ ```
321
+
322
+ ### Пример добавления правила
323
+
324
+ ```yaml
325
+ # В configs/agent-health-rules.yaml:
326
+ agents:
327
+ my-new-agent:
328
+ rules:
329
+ - id: "my-agent-quota"
330
+ class: "unavailable"
331
+ ttl: "until_utc_midnight"
332
+ pattern: "quota exceeded|daily limit reached"
333
+ exit_codes: "any"
334
+ ```
335
+
336
+ ## Конфигурация
337
+
338
+ ### `configs/config.yaml`
339
+
340
+ Основная конфигурация воркфлоу: информация о проекте, типы задач, приоритеты, статусы, типы условий, пути, настройки отчётности.
341
+
342
+ ### `configs/pipeline.yaml`
343
+
344
+ Определение конвейера: агенты, стадии, управление потоком, goto-логика, стратегии повторов.
345
+
346
+ ### `configs/ticket-movement-rules.yaml`
347
+
348
+ Правила автоматического перемещения тикетов на основе статуса ревью.
349
+
350
+ ## Структура проекта
351
+
352
+ ```
353
+ workflow-ai/
354
+ ├── bin/ # Точка входа CLI
355
+ ├── src/
356
+ │ ├── cli.mjs # Парсинг команд
357
+ │ ├── runner.mjs # Оркестратор конвейера
358
+ │ ├── init.mjs # Инициализация проекта
359
+ │ ├── global-dir.mjs # Управление глобальной ~/.workflow/
360
+ │ ├── junction-manager.mjs # Управление junction/symlink
361
+ │ ├── wf-loader.mjs # Загрузчик конфигов
362
+ │ ├── lib/ # Библиотеки утилит
363
+ │ └── tests/ # Набор тестов
364
+ ├── configs/ # Файлы конфигурации (источник)
365
+ ├── templates/ # Шаблоны воркфлоу (источник)
366
+ ├── agent-templates/ # Шаблоны инструкций для AI-агентов
367
+ └── package.json
368
+ ```
369
+
370
+ ## Требования
371
+
372
+ - Node.js >= 18.0.0
373
+ - npm
374
+
375
+ ## Лицензия
376
+
377
+ MIT