workflow-ai 1.0.43 → 1.0.45
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.
- package/README.md +124 -24
- package/package.json +7 -1
- package/src/init.mjs +15 -5
- package/src/junction-manager.mjs +3 -0
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
AI Agent Workflow Coordinator — kanban-based pipeline for AI coding agents.
|
|
4
4
|
|
|
5
|
+
Система координации AI-агентов через файловую канбан-доску. Автоматически оркестрирует выполнение задач: берёт тикеты из очереди, запускает нужного агента, проверяет результат и генерирует отчёты.
|
|
6
|
+
|
|
5
7
|
## Install
|
|
6
8
|
|
|
7
9
|
```bash
|
|
@@ -22,8 +24,21 @@ workflow run
|
|
|
22
24
|
|
|
23
25
|
| Command | Description |
|
|
24
26
|
|---------|-------------|
|
|
25
|
-
| `workflow init` | Initialize `.workflow/` directory with kanban board structure |
|
|
26
|
-
| `workflow run` | Execute the
|
|
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/hardlinks |
|
|
30
|
+
| `workflow eject <skill> [path]` | Eject a skill (copy from global to project) |
|
|
31
|
+
| `workflow list [path]` | List skills with status (shared/ejected/project-only) |
|
|
32
|
+
| `workflow help` | Show help |
|
|
33
|
+
| `workflow version` | Show version |
|
|
34
|
+
|
|
35
|
+
### Run Options
|
|
36
|
+
|
|
37
|
+
| Option | Description |
|
|
38
|
+
|--------|-------------|
|
|
39
|
+
| `--plan <plan>` | Plan ID to execute |
|
|
40
|
+
| `--config <path>` | Config file path |
|
|
41
|
+
| `--project <path>` | Project root (default: auto-detect) |
|
|
27
42
|
|
|
28
43
|
## Init
|
|
29
44
|
|
|
@@ -32,38 +47,123 @@ The `workflow init` command creates the `.workflow/` directory structure:
|
|
|
32
47
|
```
|
|
33
48
|
.workflow/
|
|
34
49
|
├── config/
|
|
35
|
-
│
|
|
50
|
+
│ ├── config.yaml # Workflow configuration
|
|
51
|
+
│ ├── pipeline.yaml # Pipeline stages and agents
|
|
52
|
+
│ └── ticket-movement-rules.yaml
|
|
36
53
|
├── plans/
|
|
37
|
-
│
|
|
54
|
+
│ ├── current/ # Current development plans
|
|
55
|
+
│ └── archive/ # Archived plans
|
|
38
56
|
├── tickets/
|
|
39
|
-
│ ├── backlog/
|
|
40
|
-
│ ├──
|
|
41
|
-
│
|
|
42
|
-
├──
|
|
43
|
-
|
|
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 (symlinks to global)
|
|
69
|
+
└── scripts/ # Automation scripts (hardlinks to global)
|
|
44
70
|
```
|
|
45
71
|
|
|
46
|
-
##
|
|
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-decomposition** — verify plan is decomposed into tickets
|
|
78
|
+
3. **decompose-plan** — break down plan into tickets (if needed)
|
|
79
|
+
4. **check-conditions** — validate ticket readiness conditions
|
|
80
|
+
5. **move-to-ready** — move tickets from backlog to ready
|
|
81
|
+
6. **pick-next-task** — select next ticket for execution
|
|
82
|
+
7. **move-to-in-progress** — start execution
|
|
83
|
+
8. **check-relevance** — verify ticket is still relevant
|
|
84
|
+
9. **execute-task** — perform the work via AI agent
|
|
85
|
+
10. **move-to-review** — submit for review
|
|
86
|
+
11. **review-result** — validate results against Definition of Done
|
|
87
|
+
12. **increment-task-attempts** — track retry attempts
|
|
88
|
+
13. **move-ticket** — move to done/blocked based on review
|
|
89
|
+
14. **create-report** — generate execution report
|
|
90
|
+
15. **analyze-report / decompose-gaps** — analyze results and iterate
|
|
91
|
+
|
|
92
|
+
### Supported Agents
|
|
93
|
+
|
|
94
|
+
| Agent | Description |
|
|
95
|
+
|-------|-------------|
|
|
96
|
+
| `claude-sonnet` | Claude Sonnet — fast model for simple tasks |
|
|
97
|
+
| `claude-opus` | Claude Opus — powerful model for complex tasks |
|
|
98
|
+
| `qwen-code` | Qwen Code — alternative agent |
|
|
99
|
+
| `kilo-code` | Kilo Code — multi-mode agent |
|
|
100
|
+
|
|
101
|
+
Agents are configured in `configs/pipeline.yaml`.
|
|
102
|
+
|
|
103
|
+
## Skills
|
|
104
|
+
|
|
105
|
+
Built-in skills for different task types:
|
|
106
|
+
|
|
107
|
+
| Skill | Description |
|
|
108
|
+
|-------|-------------|
|
|
109
|
+
| `analyze-report` | Report analysis |
|
|
110
|
+
| `check-relevance` | Ticket relevance verification |
|
|
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 symlinked into projects.
|
|
121
|
+
|
|
122
|
+
Use `workflow eject <skill>` to copy a skill into the project for customization.
|
|
123
|
+
|
|
124
|
+
## Task Types
|
|
125
|
+
|
|
126
|
+
| Type | Prefix | Description |
|
|
127
|
+
|------|--------|-------------|
|
|
128
|
+
| `arch` | ARCH | Architecture & planning |
|
|
129
|
+
| `impl` | IMPL | Code implementation |
|
|
130
|
+
| `fix` | FIX | Bug fixes |
|
|
131
|
+
| `review` | REVIEW | Code/documentation review |
|
|
132
|
+
| `docs` | DOCS | Documentation |
|
|
133
|
+
| `admin` | ADMIN | Administrative tasks |
|
|
134
|
+
|
|
135
|
+
## Configuration
|
|
47
136
|
|
|
48
|
-
|
|
137
|
+
### `configs/config.yaml`
|
|
49
138
|
|
|
50
|
-
|
|
51
|
-
2. Executes each task based on its type (IMPL, FIX, DOCS, REVIEW, etc.)
|
|
52
|
-
3. Moves completed tickets to `done/`
|
|
53
|
-
4. Generates reports in `reports/`
|
|
139
|
+
Main workflow configuration: project info, task types, priorities, statuses, condition types, paths, reporting settings.
|
|
54
140
|
|
|
55
|
-
|
|
141
|
+
### `configs/pipeline.yaml`
|
|
56
142
|
|
|
57
|
-
|
|
143
|
+
Pipeline definition: agents, stages, flow control, goto-logic, retry strategies.
|
|
58
144
|
|
|
59
|
-
|
|
145
|
+
### `configs/ticket-movement-rules.yaml`
|
|
60
146
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
147
|
+
Rules for automated ticket movement based on review status.
|
|
148
|
+
|
|
149
|
+
## Project Structure
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
workflow-ai/
|
|
153
|
+
├── bin/ # CLI entry point
|
|
154
|
+
├── src/
|
|
155
|
+
│ ├── cli.mjs # Command parsing
|
|
156
|
+
│ ├── runner.mjs # Core pipeline orchestrator
|
|
157
|
+
│ ├── init.mjs # Project initialization
|
|
158
|
+
│ ├── global-dir.mjs # Global ~/.workflow/ management
|
|
159
|
+
│ ├── junction-manager.mjs # Symlink/hardlink management
|
|
160
|
+
│ ├── wf-loader.mjs # Config loader
|
|
161
|
+
│ ├── lib/ # Utility libraries
|
|
162
|
+
│ └── tests/ # Test suite
|
|
163
|
+
├── configs/ # Configuration files (source)
|
|
164
|
+
├── templates/ # Workflow templates (source)
|
|
165
|
+
├── agent-templates/ # AI agent instruction templates
|
|
166
|
+
└── package.json
|
|
67
167
|
```
|
|
68
168
|
|
|
69
169
|
## Requirements
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "workflow-ai",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.45",
|
|
4
4
|
"description": "AI Agent Workflow Coordinator — kanban-based pipeline for AI coding agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -21,6 +21,12 @@
|
|
|
21
21
|
"configs/",
|
|
22
22
|
"agent-templates/"
|
|
23
23
|
],
|
|
24
|
+
"exports": {
|
|
25
|
+
"./lib/find-root.mjs": "./src/lib/find-root.mjs",
|
|
26
|
+
"./lib/utils.mjs": "./src/lib/utils.mjs",
|
|
27
|
+
"./lib/logger.mjs": "./src/lib/logger.mjs",
|
|
28
|
+
"./lib/js-yaml.mjs": "./src/lib/js-yaml.mjs"
|
|
29
|
+
},
|
|
24
30
|
"engines": {
|
|
25
31
|
"node": ">=18.0.0"
|
|
26
32
|
},
|
package/src/init.mjs
CHANGED
|
@@ -237,7 +237,18 @@ function generateQwenMd(workflowRoot, projectRoot, packageRoot) {
|
|
|
237
237
|
*/
|
|
238
238
|
function updateGitignore(projectRoot) {
|
|
239
239
|
const gitignorePath = join(projectRoot, '.gitignore');
|
|
240
|
-
const linesToAdd = [
|
|
240
|
+
const linesToAdd = [
|
|
241
|
+
'',
|
|
242
|
+
'# Workflow AI specific',
|
|
243
|
+
'.workflow-state/',
|
|
244
|
+
'.cache/',
|
|
245
|
+
'.workflow/',
|
|
246
|
+
'',
|
|
247
|
+
'# AI',
|
|
248
|
+
'QWEN.md',
|
|
249
|
+
'CLAUDE.md',
|
|
250
|
+
'.kilocode/',
|
|
251
|
+
];
|
|
241
252
|
|
|
242
253
|
let currentContent = '';
|
|
243
254
|
if (existsSync(gitignorePath)) {
|
|
@@ -246,10 +257,9 @@ function updateGitignore(projectRoot) {
|
|
|
246
257
|
|
|
247
258
|
const existingLines = currentContent.split('\n').map(line => line.trim());
|
|
248
259
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
}
|
|
260
|
+
const newLines = linesToAdd.filter(line => line === '' || !existingLines.includes(line));
|
|
261
|
+
if (newLines.some(line => line !== '')) {
|
|
262
|
+
appendFileSync(gitignorePath, newLines.join('\n') + '\n');
|
|
253
263
|
}
|
|
254
264
|
}
|
|
255
265
|
|
package/src/junction-manager.mjs
CHANGED
|
@@ -101,6 +101,9 @@ export function createSkillJunctions(globalDir, projectSkillsDir) {
|
|
|
101
101
|
const skillName = skill.name;
|
|
102
102
|
const targetPath = join(globalSkillsDir, skillName);
|
|
103
103
|
const linkPath = join(projectSkillsDir, skillName);
|
|
104
|
+
if (existsSync(linkPath) && !isJunction(linkPath)) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
104
107
|
createJunction(targetPath, linkPath);
|
|
105
108
|
}
|
|
106
109
|
}
|