owflow 0.1.5 → 0.1.6
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 +34 -21
- package/dist/__tests__/verify_template.test.js +102 -0
- package/dist/agents/task-classifier.md +7 -19
- package/dist/commands/quick-dev.md +48 -6
- package/dist/commands/quick-plan.md +39 -4
- package/dist/commands/work.md +13 -17
- package/dist/index.js +4 -0
- package/dist/skills/development/SKILL.md +83 -115
- package/dist/skills/migration/SKILL.md +2 -33
- package/dist/skills/orchestrator-framework/references/orchestrator-creation-checklist.md +1 -0
- package/dist/skills/orchestrator-framework/references/orchestrator-patterns.md +4 -59
- package/dist/skills/performance/SKILL.md +2 -30
- package/dist/skills/quick-bugfix/SKILL.md +96 -26
- package/dist/skills/research/SKILL.md +3 -42
- package/dist/templates/orchestrator-state-base.yml +17 -0
- package/dist/templates/orchestrator-state-development.yml +94 -0
- package/dist/templates/orchestrator-state-migration.yml +55 -0
- package/dist/templates/orchestrator-state-performance.yml +53 -0
- package/dist/templates/orchestrator-state-research.yml +61 -0
- package/dist/templates/quick-bugfix-task.yml +10 -0
- package/dist/templates/quick-dev-task.yml +10 -0
- package/dist/templates/quick-plan-task.yml +11 -0
- package/dist/tools/verify_template.js +61 -0
- package/package.json +4 -3
- package/dist/agents/ui-mockup-generator.md +0 -369
- package/dist/commands/product-design.md +0 -37
- package/dist/skills/product-design/SKILL.md +0 -843
- package/dist/skills/product-design/references/characteristic-detection.md +0 -92
- package/dist/skills/product-design/references/interaction-patterns.md +0 -206
- package/dist/skills/product-design/references/visual-companion.md +0 -190
- package/dist/skills/product-design/server/index.js +0 -302
- package/dist/skills/product-design/server/index.ts +0 -359
- package/dist/skills/product-design/server/template.html +0 -256
|
@@ -7,7 +7,7 @@ user-invocable: true
|
|
|
7
7
|
|
|
8
8
|
# Quick Bug Fix
|
|
9
9
|
|
|
10
|
-
Lightweight TDD-driven bug fix workflow with planning mode. Analyze the bug, present a fix plan for approval, then reproduce with a failing test, fix, and verify. No orchestrator state, no task directory
|
|
10
|
+
Lightweight TDD-driven bug fix workflow with planning mode. Analyze the bug, present a fix plan for approval, then reproduce with a failing test, fix, and verify. No orchestrator state, no subagents. Creates lightweight task directory for artifact anchoring.
|
|
11
11
|
|
|
12
12
|
For complex bugs that grow beyond a quick fix, suggests escalating to the full development workflow (`/development`).
|
|
13
13
|
|
|
@@ -48,7 +48,20 @@ For complex bugs that grow beyond a quick fix, suggests escalating to the full d
|
|
|
48
48
|
"Describe the bug — what's the expected behavior vs actual behavior?"
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
### Step 2:
|
|
51
|
+
### Step 2: Create Task Directory
|
|
52
|
+
|
|
53
|
+
**Create a lightweight task directory for artifact anchoring.**
|
|
54
|
+
|
|
55
|
+
1. Generate a task name from the bug description:
|
|
56
|
+
- Extract 3–5 key words, convert to lowercase kebab-case
|
|
57
|
+
- Prepend today's date: `YYYY-MM-DD-kebab-name`
|
|
58
|
+
- Examples: "Fix login timeout bug" → `2026-05-28-fix-login-timeout`, "Login form submits twice on slow connections" → `2026-05-28-login-double-submit`
|
|
59
|
+
2. Create directory: `.owflow/tasks/quick-bugfix/YYYY-MM-DD-task-name/`
|
|
60
|
+
3. Create `analysis/` subdirectory inside it
|
|
61
|
+
4. Write `task.yml` with initial state using the template [src/templates/quick-bugfix-task.yml](../../templates/quick-bugfix-task.yml).
|
|
62
|
+
5. **CRITICAL**: Use the `verify_template` tool immediately after creation to check YAML validity against `quick-bugfix-task.yml`.
|
|
63
|
+
|
|
64
|
+
### Step 3: Discover Standards
|
|
52
65
|
|
|
53
66
|
**CRITICAL: This step MUST complete before entering plan mode.**
|
|
54
67
|
|
|
@@ -62,6 +75,7 @@ For complex bugs that grow beyond a quick fix, suggests escalating to the full d
|
|
|
62
75
|
- The area of the bug (e.g., API, frontend, database)
|
|
63
76
|
- Keywords in the bug description
|
|
64
77
|
3. **READ the applicable standard files** (see Standards Reading Enforcement below)
|
|
78
|
+
4. **Update `task.yml`**: Add paths of standards read to `standards_applied` list
|
|
65
79
|
|
|
66
80
|
**If not exists:**
|
|
67
81
|
|
|
@@ -86,7 +100,7 @@ For complex bugs that grow beyond a quick fix, suggests escalating to the full d
|
|
|
86
100
|
- Bug in form validation → Read validation and frontend standards
|
|
87
101
|
- Bug in database query → Read database and backend standards
|
|
88
102
|
|
|
89
|
-
### Step
|
|
103
|
+
### Step 4: Analyze & Assess Complexity
|
|
90
104
|
|
|
91
105
|
**Explore the codebase to understand the bug:**
|
|
92
106
|
|
|
@@ -109,20 +123,57 @@ Assess whether this bug exceeds quick-fix scope. If **2 or more** of these signa
|
|
|
109
123
|
|
|
110
124
|
**If escalation triggered:**
|
|
111
125
|
|
|
126
|
+
**Write `analysis/findings.md`** in the task directory with the analysis captured so far:
|
|
127
|
+
|
|
128
|
+
```markdown
|
|
129
|
+
# Bug Analysis
|
|
130
|
+
|
|
131
|
+
## Root Cause
|
|
132
|
+
[Root cause hypothesis with evidence — file paths, code references]
|
|
133
|
+
|
|
134
|
+
## Affected Files
|
|
135
|
+
- `path/to/file` — reason
|
|
136
|
+
|
|
137
|
+
## Complexity Assessment
|
|
138
|
+
- [ ] Changes span 5+ files across multiple modules
|
|
139
|
+
- [ ] Requires database schema changes
|
|
140
|
+
- [ ] Multiple valid fix approaches with architectural trade-offs
|
|
141
|
+
- [ ] Security-sensitive code
|
|
142
|
+
- [ ] Root cause unclear after initial analysis
|
|
143
|
+
|
|
144
|
+
Signals detected: X of 5
|
|
145
|
+
|
|
146
|
+
## Test Strategy
|
|
147
|
+
[How the bug will be reproduced with a failing test]
|
|
148
|
+
|
|
149
|
+
## Standards Referenced
|
|
150
|
+
- [standard file]: [key guideline applied]
|
|
151
|
+
```
|
|
152
|
+
|
|
112
153
|
Use question:
|
|
113
154
|
|
|
114
155
|
- Question: "This bug appears more complex than a quick fix — [describe why]. How would you like to proceed?"
|
|
115
156
|
- Options:
|
|
116
157
|
1. "Continue with quick fix" — proceed, accepting the complexity
|
|
117
|
-
2. "Switch to full development workflow" —
|
|
158
|
+
2. "Switch to full development workflow" — escalate (see below)
|
|
159
|
+
|
|
160
|
+
**If user chooses to escalate:**
|
|
161
|
+
|
|
162
|
+
1. Ensure `analysis/findings.md` is written (above)
|
|
163
|
+
2. Update `task.yml`: set `status: escalated`, `escalation_reason: "[signals detected]"`, `updated: [now]`
|
|
164
|
+
3. Tell the user: "Run `/development .owflow/tasks/quick-bugfix/YYYY-MM-DD-task-name` to continue with full workflow."
|
|
165
|
+
4. Do NOT set `escalated_to` — the development orchestrator will set it
|
|
166
|
+
5. `summary.md` is NOT written on escalation
|
|
167
|
+
|
|
168
|
+
**If no escalation needed or user chooses to continue:**
|
|
118
169
|
|
|
119
|
-
|
|
170
|
+
Write `analysis/findings.md` (same template above — captures analysis for auditability), then proceed to Step 5.
|
|
120
171
|
|
|
121
|
-
### Step
|
|
172
|
+
### Step 5: Enter Planning Mode
|
|
122
173
|
|
|
123
174
|
**Use the `Plan Agent` to present the fix plan for user approval.**
|
|
124
175
|
|
|
125
|
-
Standards context from Step
|
|
176
|
+
Standards context from Step 3 and analysis from Step 4 MUST inform the plan.
|
|
126
177
|
|
|
127
178
|
**Plan file content:**
|
|
128
179
|
|
|
@@ -163,7 +214,7 @@ If no standards exist: "No AI SDLC standards found. Consider running `/flow-init
|
|
|
163
214
|
|
|
164
215
|
If any section is missing, add it before asking for user approval.
|
|
165
216
|
|
|
166
|
-
### Step
|
|
217
|
+
### Step 6: TDD Red Gate
|
|
167
218
|
|
|
168
219
|
**Write a failing test that reproduces the bug.**
|
|
169
220
|
|
|
@@ -182,12 +233,12 @@ If any section is missing, add it before asking for user approval.
|
|
|
182
233
|
- Investigate further — re-read the bug description, check if conditions are correct
|
|
183
234
|
- Use question: "The reproduction test passes — the expected behavior already works under these conditions. Is the bug description accurate, or are there additional conditions?"
|
|
184
235
|
|
|
185
|
-
### Step
|
|
236
|
+
### Step 7: Fix & Verify (TDD Green)
|
|
186
237
|
|
|
187
238
|
**Implement the fix:**
|
|
188
239
|
|
|
189
|
-
1. Apply the fix based on the approved plan from Step
|
|
190
|
-
2. **Apply discovered standards** from Step
|
|
240
|
+
1. Apply the fix based on the approved plan from Step 5
|
|
241
|
+
2. **Apply discovered standards** from Step 3
|
|
191
242
|
3. Run the failing test — it MUST now pass
|
|
192
243
|
4. Run the full test file and related test files to check for regressions
|
|
193
244
|
|
|
@@ -203,16 +254,34 @@ If any section is missing, add it before asking for user approval.
|
|
|
203
254
|
- Stop and present findings to the user
|
|
204
255
|
- Suggest escalating to `/development` for a more thorough approach
|
|
205
256
|
|
|
206
|
-
### Step
|
|
257
|
+
### Step 8: Summary
|
|
258
|
+
|
|
259
|
+
**Write `summary.md`** in the task directory:
|
|
260
|
+
|
|
261
|
+
```markdown
|
|
262
|
+
# Task Summary
|
|
207
263
|
|
|
208
|
-
**
|
|
264
|
+
**Command**: quick-bugfix
|
|
265
|
+
**Date**: YYYY-MM-DD
|
|
266
|
+
**Status**: completed
|
|
267
|
+
|
|
268
|
+
## What Was Done
|
|
269
|
+
[Root cause and fix description]
|
|
270
|
+
|
|
271
|
+
## Files Modified
|
|
272
|
+
- `path/to/file`
|
|
273
|
+
|
|
274
|
+
## Standards Applied
|
|
275
|
+
- [standard]: [guideline]
|
|
276
|
+
|
|
277
|
+
## Tests
|
|
278
|
+
- [test file] — [result]
|
|
279
|
+
|
|
280
|
+
## Commit Suggestion
|
|
281
|
+
[conventional commit message]
|
|
282
|
+
```
|
|
209
283
|
|
|
210
|
-
|
|
211
|
-
- **Fix**: What was changed and why
|
|
212
|
-
- **Files modified**: List of changed files
|
|
213
|
-
- **Standards applied**: Which standards from INDEX.md were followed
|
|
214
|
-
- **Tests**: Which tests were run and their results (including the TDD red→green transition)
|
|
215
|
-
- **Commit suggestion**: Propose a commit message
|
|
284
|
+
**Update `task.yml`**: set `status: completed`, `updated: [now]`.
|
|
216
285
|
|
|
217
286
|
**Post-implementation: verify standards compliance using the checklist from the plan file.**
|
|
218
287
|
|
|
@@ -221,13 +290,14 @@ If any section is missing, add it before asking for user approval.
|
|
|
221
290
|
## What This Does
|
|
222
291
|
|
|
223
292
|
1. **Parses** bug description from user input
|
|
224
|
-
2. **
|
|
225
|
-
3. **
|
|
226
|
-
4. **
|
|
227
|
-
5. **
|
|
228
|
-
6. **
|
|
229
|
-
7. **
|
|
230
|
-
8. **
|
|
293
|
+
2. **Creates** lightweight task directory with `task.yml` for artifact anchoring
|
|
294
|
+
3. **Discovers** applicable standards from `.owflow/docs/INDEX.md`
|
|
295
|
+
4. **Analyzes** codebase to find root cause, writes `analysis/findings.md`, and assesses complexity
|
|
296
|
+
5. **Escalates** to full development workflow if bug is too complex (updates `task.yml` status to `escalated`)
|
|
297
|
+
6. **Plans** the fix and presents for user approval via planning mode
|
|
298
|
+
7. **Reproduces** bug with a failing test (TDD Red)
|
|
299
|
+
8. **Fixes** the bug and verifies test passes (TDD Green)
|
|
300
|
+
9. **Summarizes** in `summary.md`, updates `task.yml` status to `completed`
|
|
231
301
|
|
|
232
302
|
## Graceful Fallback
|
|
233
303
|
|
|
@@ -23,6 +23,7 @@ Systematic research workflow from question definition to evidence-based document
|
|
|
23
23
|
1. **Create Task Items**: Use `TaskCreate` for all phases (see Phase Configuration), then set dependencies with `TaskUpdate addBlockedBy`
|
|
24
24
|
2. **Create Task Directory**: `.owflow/tasks/research/YYYY-MM-DD-task-name/`
|
|
25
25
|
3. **Initialize State**: Create `orchestrator-state.yml` with research context
|
|
26
|
+
- **CRITICAL**: Use the `verify_template` tool immediately after creation to check YAML validity against `orchestrator-state-research.yml`.
|
|
26
27
|
|
|
27
28
|
**Output**:
|
|
28
29
|
|
|
@@ -369,40 +370,7 @@ question - "Design complete. Continue to output generation?"
|
|
|
369
370
|
|
|
370
371
|
Research-specific fields in `orchestrator-state.yml`:
|
|
371
372
|
|
|
372
|
-
|
|
373
|
-
research_context:
|
|
374
|
-
research_type: "technical" | "requirements" | "literature" | "mixed"
|
|
375
|
-
research_question: "[user's question]"
|
|
376
|
-
scope:
|
|
377
|
-
included: []
|
|
378
|
-
excluded: []
|
|
379
|
-
constraints: []
|
|
380
|
-
methodology: []
|
|
381
|
-
sources: []
|
|
382
|
-
confidence_level: "high" | "medium" | "low"
|
|
383
|
-
gathering_strategy:
|
|
384
|
-
categories: [] # e.g., ["codebase", "documentation", "external-apis"]
|
|
385
|
-
count: 4 # number of gatherer instances
|
|
386
|
-
source: "planner" | "default" # where strategy came from
|
|
387
|
-
phase_summaries:
|
|
388
|
-
phase-1:
|
|
389
|
-
summary: "..."
|
|
390
|
-
steps_completed: [] # track which steps completed for resume
|
|
391
|
-
phase-3:
|
|
392
|
-
summary: "..."
|
|
393
|
-
phase-4:
|
|
394
|
-
summary: "..."
|
|
395
|
-
decision_areas: [] # list of {area, alternatives_count, chosen_approach}
|
|
396
|
-
deferred_ideas: []
|
|
397
|
-
phase-5:
|
|
398
|
-
summary: "..."
|
|
399
|
-
architecture_style: null
|
|
400
|
-
decisions_count: 0
|
|
401
|
-
|
|
402
|
-
options:
|
|
403
|
-
brainstorming_enabled: null # null=not yet decided, set by Phase 2 or --brainstorm/--no-brainstorm flag
|
|
404
|
-
design_enabled: null # independent, set by Phase 2 or --design/--no-design flag
|
|
405
|
-
```
|
|
373
|
+
Refer to the template [src/templates/orchestrator-state-research.yml](../../templates/orchestrator-state-research.yml).
|
|
406
374
|
|
|
407
375
|
---
|
|
408
376
|
|
|
@@ -468,14 +436,7 @@ options:
|
|
|
468
436
|
|
|
469
437
|
**Handoff**:
|
|
470
438
|
|
|
471
|
-
|
|
472
|
-
research_outputs:
|
|
473
|
-
research_report: "[path to outputs/research-report.md]"
|
|
474
|
-
findings_directory: "[path to analysis/findings/]"
|
|
475
|
-
solution_exploration: "[path to outputs/solution-exploration.md]"
|
|
476
|
-
high_level_design: "[path to outputs/high-level-design.md]"
|
|
477
|
-
decision_log: "[path to outputs/decision-log.md]"
|
|
478
|
-
```
|
|
439
|
+
Refer to `research_outputs` in the template [src/templates/orchestrator-state-research.yml](../../templates/orchestrator-state-research.yml).
|
|
479
440
|
|
|
480
441
|
---
|
|
481
442
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
orchestrator:
|
|
2
|
+
started_phase: null
|
|
3
|
+
completed_phases: []
|
|
4
|
+
failed_phases: []
|
|
5
|
+
auto_fix_attempts: {}
|
|
6
|
+
options: {}
|
|
7
|
+
created: "YYYY-MM-DDTHH:MM:SSZ"
|
|
8
|
+
updated: "YYYY-MM-DDTHH:MM:SSZ"
|
|
9
|
+
task_path: null
|
|
10
|
+
task_ids: {}
|
|
11
|
+
|
|
12
|
+
task:
|
|
13
|
+
title: null
|
|
14
|
+
description: null
|
|
15
|
+
status: pending
|
|
16
|
+
tags: []
|
|
17
|
+
priority: null
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
orchestrator:
|
|
2
|
+
started_phase: null
|
|
3
|
+
completed_phases: []
|
|
4
|
+
failed_phases: []
|
|
5
|
+
auto_fix_attempts:
|
|
6
|
+
phase-1: 0
|
|
7
|
+
phase-2: 0
|
|
8
|
+
phase-3: 0
|
|
9
|
+
phase-4: 0
|
|
10
|
+
phase-5: 0
|
|
11
|
+
phase-6: 0
|
|
12
|
+
phase-7: 0
|
|
13
|
+
phase-8: 0
|
|
14
|
+
phase-9: 0
|
|
15
|
+
phase-10: 0
|
|
16
|
+
phase-11: 0
|
|
17
|
+
phase-12: 0
|
|
18
|
+
phase-13: 0
|
|
19
|
+
options:
|
|
20
|
+
spec_audit_enabled: true
|
|
21
|
+
skip_test_suite: true
|
|
22
|
+
e2e_enabled: null
|
|
23
|
+
user_docs_enabled: null
|
|
24
|
+
code_review_enabled: true
|
|
25
|
+
pragmatic_review_enabled: true
|
|
26
|
+
reality_check_enabled: true
|
|
27
|
+
production_check_enabled: true
|
|
28
|
+
created: "YYYY-MM-DDTHH:MM:SSZ"
|
|
29
|
+
updated: "YYYY-MM-DDTHH:MM:SSZ"
|
|
30
|
+
task_path: null
|
|
31
|
+
task_ids: {}
|
|
32
|
+
|
|
33
|
+
task:
|
|
34
|
+
title: null
|
|
35
|
+
description: null
|
|
36
|
+
status: pending
|
|
37
|
+
tags: []
|
|
38
|
+
priority: null
|
|
39
|
+
|
|
40
|
+
task_context:
|
|
41
|
+
risk_level: null
|
|
42
|
+
clarifications_resolved: null
|
|
43
|
+
scope_expanded: null
|
|
44
|
+
architecture_decision: null
|
|
45
|
+
task_characteristics:
|
|
46
|
+
has_reproducible_defect: false
|
|
47
|
+
modifies_existing_code: false
|
|
48
|
+
creates_new_entities: false
|
|
49
|
+
involves_data_operations: false
|
|
50
|
+
ui_heavy: false
|
|
51
|
+
user_journey:
|
|
52
|
+
reachability: null
|
|
53
|
+
persona_impact: null
|
|
54
|
+
flow_integration: null
|
|
55
|
+
navigation_consistency: null
|
|
56
|
+
discoverability_before: null
|
|
57
|
+
discoverability_after: null
|
|
58
|
+
data_lifecycle:
|
|
59
|
+
three_layer_framework: null
|
|
60
|
+
backend_user_operability: null
|
|
61
|
+
orphaned_display_detected: null
|
|
62
|
+
orphaned_input_detected: null
|
|
63
|
+
layer_3_critical_checks: null
|
|
64
|
+
multi_touchpoint_discovery: null
|
|
65
|
+
crud_completeness: null
|
|
66
|
+
scope_expansion_recommended: null
|
|
67
|
+
safety_critical_awareness: null
|
|
68
|
+
gaps: []
|
|
69
|
+
research_reference:
|
|
70
|
+
path: null
|
|
71
|
+
research_question: null
|
|
72
|
+
research_type: null
|
|
73
|
+
confidence_level: null
|
|
74
|
+
quick_reference:
|
|
75
|
+
path: null
|
|
76
|
+
command: null
|
|
77
|
+
escalation_reason: null
|
|
78
|
+
phase_summaries:
|
|
79
|
+
research: { summary: null, key_findings: [], recommended_approach: null }
|
|
80
|
+
quick_analysis: { summary: null, affected_files: [], root_cause: null }
|
|
81
|
+
codebase_analysis: { key_files: [], primary_language: null, summary: null }
|
|
82
|
+
clarifications: []
|
|
83
|
+
gap_analysis: { integration_points: [], summary: null }
|
|
84
|
+
scope_clarifications: { scope_expanded: null, summary: null }
|
|
85
|
+
ui_mockups: { components_designed: [], summary: null }
|
|
86
|
+
specification: { summary: null }
|
|
87
|
+
architecture_decision: { decision: null, summary: null }
|
|
88
|
+
|
|
89
|
+
verification_context:
|
|
90
|
+
last_status: null
|
|
91
|
+
issues_found: []
|
|
92
|
+
fixes_applied: []
|
|
93
|
+
decisions_made: []
|
|
94
|
+
reverify_count: 0
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
orchestrator:
|
|
2
|
+
started_phase: null
|
|
3
|
+
completed_phases: []
|
|
4
|
+
failed_phases: []
|
|
5
|
+
auto_fix_attempts:
|
|
6
|
+
phase-1: 0
|
|
7
|
+
phase-2: 0
|
|
8
|
+
phase-3: 0
|
|
9
|
+
phase-4: 0
|
|
10
|
+
phase-5: 0
|
|
11
|
+
phase-6: 0
|
|
12
|
+
phase-7: 0
|
|
13
|
+
phase-8: 0
|
|
14
|
+
options:
|
|
15
|
+
docs_enabled: false
|
|
16
|
+
created: "YYYY-MM-DDTHH:MM:SSZ"
|
|
17
|
+
updated: "YYYY-MM-DDTHH:MM:SSZ"
|
|
18
|
+
task_path: null
|
|
19
|
+
task_ids: {}
|
|
20
|
+
|
|
21
|
+
task:
|
|
22
|
+
title: null
|
|
23
|
+
description: null
|
|
24
|
+
status: pending
|
|
25
|
+
tags: []
|
|
26
|
+
priority: null
|
|
27
|
+
|
|
28
|
+
migration_context:
|
|
29
|
+
migration_type: "code | data | architecture | general"
|
|
30
|
+
current_system:
|
|
31
|
+
description: null
|
|
32
|
+
technologies: []
|
|
33
|
+
target_system:
|
|
34
|
+
description: null
|
|
35
|
+
technologies: []
|
|
36
|
+
migration_strategy:
|
|
37
|
+
approach: "incremental | big-bang | dual-run | phased"
|
|
38
|
+
phases: []
|
|
39
|
+
risk_level: null
|
|
40
|
+
breaking_changes: []
|
|
41
|
+
rollback_plan_created: false
|
|
42
|
+
dual_run_configured: false
|
|
43
|
+
|
|
44
|
+
external_research:
|
|
45
|
+
performed: false
|
|
46
|
+
category: null
|
|
47
|
+
breaking_changes: []
|
|
48
|
+
migration_guide_url: null
|
|
49
|
+
|
|
50
|
+
verification_context:
|
|
51
|
+
last_status: null
|
|
52
|
+
issues_found: null
|
|
53
|
+
fixes_applied: []
|
|
54
|
+
decisions_made: []
|
|
55
|
+
reverify_count: 0
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
orchestrator:
|
|
2
|
+
started_phase: null
|
|
3
|
+
completed_phases: []
|
|
4
|
+
failed_phases: []
|
|
5
|
+
auto_fix_attempts:
|
|
6
|
+
phase-1: 0
|
|
7
|
+
phase-2: 0
|
|
8
|
+
phase-3: 0
|
|
9
|
+
phase-4: 0
|
|
10
|
+
phase-5: 0
|
|
11
|
+
phase-6: 0
|
|
12
|
+
phase-7: 0
|
|
13
|
+
phase-8: 0
|
|
14
|
+
phase-9: 0
|
|
15
|
+
options:
|
|
16
|
+
spec_audit_enabled: null
|
|
17
|
+
skip_test_suite: true
|
|
18
|
+
code_review_enabled: true
|
|
19
|
+
pragmatic_review_enabled: true
|
|
20
|
+
reality_check_enabled: true
|
|
21
|
+
production_check_enabled: null
|
|
22
|
+
created: "YYYY-MM-DDTHH:MM:SSZ"
|
|
23
|
+
updated: "YYYY-MM-DDTHH:MM:SSZ"
|
|
24
|
+
task_path: null
|
|
25
|
+
task_ids: {}
|
|
26
|
+
|
|
27
|
+
task:
|
|
28
|
+
title: null
|
|
29
|
+
description: null
|
|
30
|
+
status: pending
|
|
31
|
+
tags: []
|
|
32
|
+
priority: null
|
|
33
|
+
|
|
34
|
+
performance_context:
|
|
35
|
+
bottlenecks_identified: null
|
|
36
|
+
user_data_available: false
|
|
37
|
+
bottleneck_priorities:
|
|
38
|
+
p0: 0
|
|
39
|
+
p1: 0
|
|
40
|
+
p2: 0
|
|
41
|
+
p3: 0
|
|
42
|
+
phase_summaries:
|
|
43
|
+
codebase_analysis: { key_files: [], summary: null }
|
|
44
|
+
bottleneck_analysis:
|
|
45
|
+
{ bottlenecks: [], summary: null, user_data_incorporated: false }
|
|
46
|
+
specification: { summary: null }
|
|
47
|
+
|
|
48
|
+
verification_context:
|
|
49
|
+
last_status: null
|
|
50
|
+
issues_found: null
|
|
51
|
+
fixes_applied: []
|
|
52
|
+
decisions_made: []
|
|
53
|
+
reverify_count: 0
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
orchestrator:
|
|
2
|
+
started_phase: null
|
|
3
|
+
completed_phases: []
|
|
4
|
+
failed_phases: []
|
|
5
|
+
auto_fix_attempts:
|
|
6
|
+
phase-1: 0
|
|
7
|
+
phase-2: 0
|
|
8
|
+
phase-3: 0
|
|
9
|
+
phase-4: 0
|
|
10
|
+
phase-5: 0
|
|
11
|
+
phase-6: 0
|
|
12
|
+
options:
|
|
13
|
+
brainstorming_enabled: null
|
|
14
|
+
design_enabled: null
|
|
15
|
+
created: "YYYY-MM-DDTHH:MM:SSZ"
|
|
16
|
+
updated: "YYYY-MM-DDTHH:MM:SSZ"
|
|
17
|
+
task_path: null
|
|
18
|
+
task_ids: {}
|
|
19
|
+
|
|
20
|
+
task:
|
|
21
|
+
title: null
|
|
22
|
+
description: null
|
|
23
|
+
status: pending
|
|
24
|
+
tags: []
|
|
25
|
+
priority: null
|
|
26
|
+
|
|
27
|
+
research_context:
|
|
28
|
+
research_type: "technical | requirements | literature | mixed"
|
|
29
|
+
research_question: null
|
|
30
|
+
scope:
|
|
31
|
+
included: []
|
|
32
|
+
excluded: []
|
|
33
|
+
constraints: []
|
|
34
|
+
methodology: []
|
|
35
|
+
sources: []
|
|
36
|
+
confidence_level: "high | medium | low"
|
|
37
|
+
gathering_strategy:
|
|
38
|
+
categories: []
|
|
39
|
+
count: 0
|
|
40
|
+
source: "planner | default"
|
|
41
|
+
phase_summaries:
|
|
42
|
+
phase-1:
|
|
43
|
+
summary: null
|
|
44
|
+
steps_completed: []
|
|
45
|
+
phase-3:
|
|
46
|
+
summary: null
|
|
47
|
+
phase-4:
|
|
48
|
+
summary: null
|
|
49
|
+
decision_areas: []
|
|
50
|
+
deferred_ideas: []
|
|
51
|
+
phase-5:
|
|
52
|
+
summary: null
|
|
53
|
+
architecture_style: null
|
|
54
|
+
decisions_count: 0
|
|
55
|
+
|
|
56
|
+
research_outputs:
|
|
57
|
+
research_report: null
|
|
58
|
+
findings_directory: null
|
|
59
|
+
solution_exploration: null
|
|
60
|
+
high_level_design: null
|
|
61
|
+
decision_log: null
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
command: quick-bugfix
|
|
2
|
+
title: "Short title from bug description"
|
|
3
|
+
description: "Full bug description as provided by user"
|
|
4
|
+
status: in_progress
|
|
5
|
+
created: "YYYY-MM-DDTHH:MM:SSZ"
|
|
6
|
+
updated: "YYYY-MM-DDTHH:MM:SSZ"
|
|
7
|
+
task_path: .owflow/tasks/quick-bugfix/YYYY-MM-DD-task-name
|
|
8
|
+
escalated_to: null
|
|
9
|
+
escalation_reason: null
|
|
10
|
+
standards_applied: []
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
command: quick-dev
|
|
2
|
+
title: "Short title from task description"
|
|
3
|
+
description: "Full task description as provided by user"
|
|
4
|
+
status: in_progress
|
|
5
|
+
created: "YYYY-MM-DDTHH:MM:SSZ"
|
|
6
|
+
updated: "YYYY-MM-DDTHH:MM:SSZ"
|
|
7
|
+
task_path: .owflow/tasks/quick-dev/YYYY-MM-DD-task-name
|
|
8
|
+
escalated_to: null
|
|
9
|
+
escalation_reason: null
|
|
10
|
+
standards_applied: []
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
command: quick-plan
|
|
2
|
+
title: "Short title from task description"
|
|
3
|
+
description: "Full task description as provided by user"
|
|
4
|
+
status: in_progress
|
|
5
|
+
created: "YYYY-MM-DDTHH:MM:SSZ"
|
|
6
|
+
updated: "YYYY-MM-DDTHH:MM:SSZ"
|
|
7
|
+
task_path: .owflow/tasks/quick-plan/YYYY-MM-DD-task-name
|
|
8
|
+
escalated_to: null
|
|
9
|
+
escalation_reason: null
|
|
10
|
+
standards_applied: []
|
|
11
|
+
plan_path: null
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { tool } from "@opencode-ai/plugin";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import yaml from "yaml";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
export const verify_template = tool({
|
|
8
|
+
description: "Check if file in the given path exists and follows correct YAML structure by checking against the template file from /templates.",
|
|
9
|
+
args: {
|
|
10
|
+
filePath: tool.schema.string().describe("Path to the file to check"),
|
|
11
|
+
templateName: tool.schema.string().describe("Name of the template from /templates (e.g. orchestrator-state-development.yml)"),
|
|
12
|
+
},
|
|
13
|
+
async execute({ filePath, templateName }, context) {
|
|
14
|
+
const absolutePath = path.resolve(context.directory, filePath);
|
|
15
|
+
if (!fs.existsSync(absolutePath)) {
|
|
16
|
+
return { output: `File not found at ${filePath}. Hint: Double-check the path, create the file if it's missing, or verify you are in the correct directory.` };
|
|
17
|
+
}
|
|
18
|
+
const templatePath = path.join(__dirname, "../templates", templateName);
|
|
19
|
+
if (!fs.existsSync(templatePath)) {
|
|
20
|
+
return { output: `Template '${templateName}' not found. Hint: Verify the template name is correct and exists in the /templates folder (e.g., 'orchestrator-state-development.yml').` };
|
|
21
|
+
}
|
|
22
|
+
let targetYaml;
|
|
23
|
+
try {
|
|
24
|
+
const fileContent = fs.readFileSync(absolutePath, "utf8");
|
|
25
|
+
targetYaml = yaml.parse(fileContent);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
return { output: `YAML Syntax Error in ${filePath}: ${error.message}. Hint: Check the file content for invalid YAML formatting, such as incorrect indentation or unescaped strings, and fix them.` };
|
|
29
|
+
}
|
|
30
|
+
let templateYaml;
|
|
31
|
+
try {
|
|
32
|
+
const templateContent = fs.readFileSync(templatePath, "utf8");
|
|
33
|
+
templateYaml = yaml.parse(templateContent);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
return { output: `Internal Error: Failed to parse reference template YAML '${templateName}': ${error.message}. Hint: The template file itself contains invalid YAML syntax.` };
|
|
37
|
+
}
|
|
38
|
+
function checkStructure(templateObj, targetObj, currentPath = "") {
|
|
39
|
+
let errors = [];
|
|
40
|
+
if (typeof templateObj !== 'object' || templateObj === null) {
|
|
41
|
+
return errors;
|
|
42
|
+
}
|
|
43
|
+
for (const key of Object.keys(templateObj)) {
|
|
44
|
+
const newPath = currentPath ? `${currentPath}.${key}` : key;
|
|
45
|
+
if (typeof targetObj !== 'object' || targetObj === null || !(key in targetObj)) {
|
|
46
|
+
errors.push(`Missing key: ${newPath}`);
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (typeof templateObj[key] === 'object' && templateObj[key] !== null && !Array.isArray(templateObj[key])) {
|
|
50
|
+
errors.push(...checkStructure(templateObj[key], targetObj[key], newPath));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return errors;
|
|
54
|
+
}
|
|
55
|
+
const errors = checkStructure(templateYaml, targetYaml);
|
|
56
|
+
if (errors.length > 0) {
|
|
57
|
+
return { output: `YAML Structure Validation Failed. Your file is missing the following required keys:\n- ${errors.join("\n- ")}\n\nHint: Update the file at ${filePath} to include these missing keys so it matches the structure of '${templateName}'.` };
|
|
58
|
+
}
|
|
59
|
+
return { output: "File exists and follows the correct YAML structure." };
|
|
60
|
+
}
|
|
61
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "owflow",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "Spec-driven development AI workflow for OpenCode",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "index.ts",
|
|
@@ -12,9 +12,10 @@
|
|
|
12
12
|
"LICENSE"
|
|
13
13
|
],
|
|
14
14
|
"scripts": {
|
|
15
|
-
"build": "rm -rf dist && tsc &&
|
|
15
|
+
"build": "rm -rf dist && tsc && bun run copy-markdowns",
|
|
16
16
|
"copy-markdowns": "node ./scripts/copy-markdowns.js",
|
|
17
|
-
"prepack": "
|
|
17
|
+
"prepack": "bun run build",
|
|
18
|
+
"test": "bun test"
|
|
18
19
|
},
|
|
19
20
|
"keywords": [
|
|
20
21
|
"opencode",
|