owflow 0.6.0 → 0.7.0
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/LICENSE +21 -21
- package/README.md +448 -283
- package/dist/agents/bottleneck-analyzer.md +332 -333
- package/dist/agents/code-quality-pragmatist.md +353 -354
- package/dist/agents/code-reviewer.md +238 -239
- package/dist/agents/codebase-analysis-reporter.md +245 -246
- package/dist/agents/docs-operator.md +22 -23
- package/dist/agents/e2e-test-verifier.md +447 -448
- package/dist/agents/gap-analyzer.md +501 -502
- package/dist/agents/implementation-completeness-checker.md +219 -220
- package/dist/agents/implementation-planner.md +308 -309
- package/dist/agents/information-gatherer.md +690 -691
- package/dist/agents/production-readiness-checker.md +278 -279
- package/dist/agents/project-analyzer.md +403 -403
- package/dist/agents/reality-assessor.md +365 -366
- package/dist/agents/research-planner.md +449 -450
- package/dist/agents/research-synthesizer.md +402 -403
- package/dist/agents/solution-brainstormer.md +256 -257
- package/dist/agents/solution-designer.md +371 -372
- package/dist/agents/spec-auditor.md +297 -298
- package/dist/agents/specification-creator.md +333 -334
- package/dist/agents/task-classifier.md +449 -450
- package/dist/agents/task-group-implementer.md +283 -284
- package/dist/agents/test-suite-runner.md +194 -195
- package/dist/agents/user-docs-generator.md +508 -509
- package/dist/commands/reviews-code.md +90 -90
- package/dist/commands/reviews-pragmatic.md +99 -99
- package/dist/commands/reviews-production-readiness.md +113 -113
- package/dist/commands/reviews-reality-check.md +110 -110
- package/dist/commands/reviews-spec-audit.md +114 -114
- package/dist/commands/work.md +280 -280
- package/dist/configuration/agents-config.d.ts +2 -0
- package/dist/configuration/agents-config.js +8 -44
- package/dist/configuration/commands-config.d.ts +23 -0
- package/dist/configuration/commands-config.js +17 -17
- package/dist/configuration/skills-config.d.ts +2 -0
- package/dist/configuration/skills-config.js +3 -3
- package/dist/hooks/hooks-diagnostics.d.ts +3 -0
- package/dist/hooks/hooks-diagnostics.js +21 -0
- package/dist/hooks/hooks-persistence.d.ts +17 -0
- package/dist/hooks/hooks-persistence.js +207 -0
- package/dist/hooks/hooks-registry.d.ts +6 -0
- package/dist/hooks/hooks-registry.js +104 -0
- package/dist/hooks/hooks-wrapper.d.ts +25 -0
- package/dist/hooks/hooks-wrapper.js +318 -0
- package/dist/hooks/internal/before-tool.d.ts +6 -0
- package/dist/hooks/internal/before-tool.js +13 -0
- package/dist/hooks/internal/session-compaction.d.ts +9 -0
- package/dist/hooks/{session-compaction.js → internal/session-compaction.js} +9 -7
- package/dist/hooks/runtime/circuit-breaker.d.ts +23 -0
- package/dist/hooks/runtime/circuit-breaker.js +39 -0
- package/dist/hooks/runtime/failure-policy.d.ts +15 -0
- package/dist/hooks/runtime/failure-policy.js +49 -0
- package/dist/hooks/runtime/process-executor.d.ts +33 -0
- package/dist/hooks/runtime/process-executor.js +147 -0
- package/dist/hooks/runtime/status-recorder.d.ts +27 -0
- package/dist/hooks/runtime/status-recorder.js +111 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +111 -40
- package/dist/skills/agents-md-generator/SKILL.md +223 -223
- package/dist/skills/codebase-analyzer/SKILL.md +162 -162
- package/dist/skills/codebase-analyzer/references/code-analysis.md +63 -63
- package/dist/skills/codebase-analyzer/references/combined.md +31 -31
- package/dist/skills/codebase-analyzer/references/context-discovery.md +63 -63
- package/dist/skills/codebase-analyzer/references/file-discovery.md +51 -51
- package/dist/skills/codebase-analyzer/references/migration-target.md +23 -23
- package/dist/skills/codebase-analyzer/references/pattern-mining.md +22 -22
- package/dist/skills/dev-analyze/SKILL.md +115 -115
- package/dist/skills/dev-bugfix/SKILL.md +452 -452
- package/dist/skills/dev-finalize/SKILL.md +118 -118
- package/dist/skills/dev-implement/SKILL.md +167 -167
- package/dist/skills/dev-plan/SKILL.md +147 -147
- package/dist/skills/dev-spec/SKILL.md +182 -182
- package/dist/skills/dev-tdd-red/SKILL.md +94 -94
- package/dist/skills/dev-verify/SKILL.md +153 -153
- package/dist/skills/development/SKILL.md +260 -260
- package/dist/skills/diagrams-mermaid/SKILL.md +183 -159
- package/dist/skills/diagrams-mermaid/references/reference.md +220 -148
- package/dist/skills/docs-manager/SKILL.md +379 -379
- package/dist/skills/docs-manager/docs/INDEX.md +199 -199
- package/dist/skills/docs-manager/docs/standards/backend/api.md +25 -25
- package/dist/skills/docs-manager/docs/standards/backend/migrations.md +22 -22
- package/dist/skills/docs-manager/docs/standards/backend/models.md +25 -25
- package/dist/skills/docs-manager/docs/standards/backend/queries.md +22 -22
- package/dist/skills/docs-manager/docs/standards/frontend/accessibility.md +25 -25
- package/dist/skills/docs-manager/docs/standards/frontend/components.md +28 -28
- package/dist/skills/docs-manager/docs/standards/frontend/css.md +16 -16
- package/dist/skills/docs-manager/docs/standards/frontend/responsive.md +28 -28
- package/dist/skills/docs-manager/docs/standards/global/coding-style.md +25 -25
- package/dist/skills/docs-manager/docs/standards/global/commenting.md +10 -10
- package/dist/skills/docs-manager/docs/standards/global/conventions.md +31 -31
- package/dist/skills/docs-manager/docs/standards/global/error-handling.md +22 -22
- package/dist/skills/docs-manager/docs/standards/global/minimal-implementation.md +22 -22
- package/dist/skills/docs-manager/docs/standards/global/validation.md +28 -28
- package/dist/skills/docs-manager/docs/standards/testing/test-writing.md +25 -25
- package/dist/skills/docs-manager/references/agents-md-template.md +29 -29
- package/dist/skills/docs-manager/references/index-md-template.md +73 -73
- package/dist/skills/flow-init/SKILL.md +234 -234
- package/dist/skills/flow-init/references/architecture-template.md +45 -45
- package/dist/skills/flow-init/references/roadmap-templates.md +93 -93
- package/dist/skills/flow-init/references/tech-stack-template.md +70 -70
- package/dist/skills/flow-init/references/vision-templates.md +75 -75
- package/dist/skills/goal-development/SKILL.md +96 -96
- package/dist/skills/goal-migration/SKILL.md +114 -114
- package/dist/skills/goal-performance/SKILL.md +126 -126
- package/dist/skills/goal-research/SKILL.md +118 -118
- package/dist/skills/html-renderer/SKILL.md +173 -173
- package/dist/skills/html-renderer/references/index.html +318 -318
- package/dist/skills/html-renderer/references/styles.css +388 -388
- package/dist/skills/html-renderer/references/tokens.json +104 -104
- package/dist/skills/implementation-plan-executor/SKILL.md +378 -378
- package/dist/skills/implementation-verifier/SKILL.md +307 -307
- package/dist/skills/migration/SKILL.md +268 -268
- package/dist/skills/migration-analyze/SKILL.md +126 -126
- package/dist/skills/migration-finalize/SKILL.md +161 -161
- package/dist/skills/migration-fix/SKILL.md +155 -155
- package/dist/skills/migration-implement/SKILL.md +131 -131
- package/dist/skills/migration-plan/SKILL.md +131 -131
- package/dist/skills/migration-spec/SKILL.md +135 -135
- package/dist/skills/migration-spec/references/migration-strategies.md +430 -430
- package/dist/skills/migration-target/SKILL.md +134 -134
- package/dist/skills/migration-target/references/migration-types.md +489 -489
- package/dist/skills/migration-verify/SKILL.md +184 -184
- package/dist/skills/orchestrator-framework/SKILL.md +65 -65
- package/dist/skills/orchestrator-framework/references/command-namespacing.md +7 -7
- package/dist/skills/orchestrator-framework/references/confirm-or-revise-exception.md +20 -20
- package/dist/skills/orchestrator-framework/references/delegation-rules.md +54 -54
- package/dist/skills/orchestrator-framework/references/dispatcher-handoff.md +27 -27
- package/dist/skills/orchestrator-framework/references/fix-loop-contract.md +65 -65
- package/dist/skills/orchestrator-framework/references/gate-contract.md +122 -122
- package/dist/skills/orchestrator-framework/references/orchestrator-creation-checklist.md +51 -51
- package/dist/skills/orchestrator-framework/references/orchestrator-patterns.md +235 -235
- package/dist/skills/performance/SKILL.md +267 -267
- package/dist/skills/performance-analyze/SKILL.md +129 -129
- package/dist/skills/performance-analyze/references/performance-optimization-guide.md +271 -271
- package/dist/skills/performance-finalize/SKILL.md +117 -117
- package/dist/skills/performance-implement/SKILL.md +114 -114
- package/dist/skills/performance-plan/SKILL.md +112 -112
- package/dist/skills/performance-spec/SKILL.md +145 -145
- package/dist/skills/performance-verify/SKILL.md +164 -164
- package/dist/skills/research/SKILL.md +249 -249
- package/dist/skills/research-brainstorm/SKILL.md +120 -120
- package/dist/skills/research-brainstorm/references/brainstorming-techniques.md +84 -84
- package/dist/skills/research-converge/SKILL.md +130 -130
- package/dist/skills/research-design/SKILL.md +146 -146
- package/dist/skills/research-design/references/design-techniques.md +40 -40
- package/dist/skills/research-finalize/SKILL.md +125 -125
- package/dist/skills/research-fork/SKILL.md +190 -190
- package/dist/skills/research-gather/SKILL.md +133 -133
- package/dist/skills/research-plan/SKILL.md +141 -141
- package/dist/skills/research-plan/references/research-methodologies.md +710 -710
- package/dist/skills/research-quick/SKILL.md +139 -139
- package/dist/skills/research-synthesize/SKILL.md +127 -127
- package/dist/skills/rule-reviewer/SKILL.md +334 -334
- package/dist/skills/standards-discover/SKILL.md +260 -260
- package/dist/skills/standards-discover/references/aggregation-strategy.md +76 -76
- package/dist/skills/standards-discover/references/code-pattern-prompt.md +68 -68
- package/dist/skills/standards-discover/references/config-analyzer-prompt.md +67 -67
- package/dist/skills/standards-discover/references/docs-extractor-prompt.md +65 -65
- package/dist/skills/standards-discover/references/external-analyzer-prompt.md +75 -75
- package/dist/skills/standards-update/SKILL.md +207 -207
- package/dist/templates/orchestrator-state-base.yml +17 -17
- package/dist/templates/orchestrator-state-development.yml +95 -95
- package/dist/templates/orchestrator-state-migration.yml +95 -95
- package/dist/templates/orchestrator-state-performance.yml +64 -64
- package/dist/templates/orchestrator-state-research.yml +67 -67
- package/dist/tools/fork_task.d.ts +17 -0
- package/dist/tools/fork_task.js +21 -11
- package/dist/tools/verify_template.d.ts +11 -0
- package/dist/tools/verify_template.js +32 -17
- package/dist/tui/hooks-dialogs.d.ts +20 -0
- package/dist/tui/hooks-dialogs.js +181 -0
- package/dist/tui/hooks-presenter.d.ts +15 -0
- package/dist/tui/hooks-presenter.js +70 -0
- package/dist/tui/hooks-sidebar.d.ts +10 -0
- package/dist/tui/hooks-sidebar.js +104 -0
- package/dist/tui/primitives.d.ts +21 -0
- package/dist/tui/primitives.js +47 -0
- package/dist/tui.d.ts +12 -0
- package/dist/tui.js +129 -0
- package/dist/types/hook-types.d.ts +125 -0
- package/dist/types/hook-types.js +76 -0
- package/dist/types/opencode-types.d.ts +13 -0
- package/dist/utils/file-util.d.ts +2 -0
- package/dist/utils/file-util.js +6 -6
- package/dist/utils/fork-task.d.ts +27 -0
- package/dist/utils/fork-task.js +18 -23
- package/dist/utils/plugin-info.d.ts +3 -0
- package/dist/utils/plugin-info.js +8 -10
- package/dist/utils/workflow-paths.d.ts +17 -0
- package/dist/utils/workflow-paths.js +18 -0
- package/dist/utils/yaml-structure.d.ts +7 -0
- package/dist/utils/yaml-structure.js +7 -11
- package/package.json +68 -48
- package/dist/hooks/before-tool.js +0 -19
package/dist/commands/work.md
CHANGED
|
@@ -1,280 +1,280 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: owflow:work
|
|
3
|
-
description: Unified entry point — auto-classifies tasks and routes to appropriate workflow. ALWAYS execute when invoked via slash command.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
**NOTE**: This is a multi-step workflow that invokes the task-classifier subagent and orchestrator skills at specific steps. The `<command-name>` tag refers to THIS command only — you MUST still use the Skill tool to invoke those other skills when instructed below. Follow ALL steps in order.
|
|
7
|
-
|
|
8
|
-
# Unified Work Entry Point
|
|
9
|
-
|
|
10
|
-
Auto-classifies tasks and routes to the appropriate workflow orchestrator. Supports resuming existing tasks or starting new ones.
|
|
11
|
-
|
|
12
|
-
## Usage
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
/owflow:work [task description | task folder path | issue identifier]
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
### Input Types
|
|
19
|
-
|
|
20
|
-
| Input Type | Example |
|
|
21
|
-
| ---------------- | ----------------------------------------------------------------- |
|
|
22
|
-
| Task folder path | `.owflow/tasks/development/2025-10-23-login-timeout` |
|
|
23
|
-
| Folder name only | `2025-10-26-user-auth` (searches all task types) |
|
|
24
|
-
| Task description | `"Fix login timeout error on mobile"` |
|
|
25
|
-
| GitHub issue | `#456`, `GH-456`, `https://github.com/owner/repo/issues/456` |
|
|
26
|
-
| Jira ticket | `PROJ-456`, `https://company.atlassian.net/browse/PROJ-456` |
|
|
27
|
-
| Azure DevOps | `AB#123`, `https://dev.azure.com/org/project/_workitems/edit/123` |
|
|
28
|
-
| No argument | Prompts for input |
|
|
29
|
-
|
|
30
|
-
## Examples
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
# Resume existing task
|
|
34
|
-
/owflow:work ".owflow/tasks/development/2025-10-23-login-timeout"
|
|
35
|
-
/owflow:work "2025-10-26-user-auth"
|
|
36
|
-
|
|
37
|
-
# New task (auto-classifies)
|
|
38
|
-
/owflow:work "Fix login timeout error on mobile devices"
|
|
39
|
-
/owflow:work "Add user authentication with email/password"
|
|
40
|
-
/owflow:work "Improve dashboard loading performance"
|
|
41
|
-
|
|
42
|
-
# From issue tracker
|
|
43
|
-
/owflow:work "#456"
|
|
44
|
-
/owflow:work "PROJ-123"
|
|
45
|
-
/owflow:work "AB#789"
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## How It Works
|
|
49
|
-
|
|
50
|
-
1. **Detect existing task** - If input is a task folder path, route to resume
|
|
51
|
-
2. **Classify new task** - Invoke task-classifier subagent to determine workflow type
|
|
52
|
-
3. **Route to workflow** - Use Skill tool to invoke appropriate orchestrator skill
|
|
53
|
-
|
|
54
|
-
## Workflow Type Routing
|
|
55
|
-
|
|
56
|
-
| Classification | Routes To (Skill) |
|
|
57
|
-
| -------------- | --------------------- |
|
|
58
|
-
| development | `owflow:development` |
|
|
59
|
-
| performance | `owflow:performance` |
|
|
60
|
-
| migration | `owflow:migration` |
|
|
61
|
-
| research | `owflow:research` |
|
|
62
|
-
|
|
63
|
-
---
|
|
64
|
-
|
|
65
|
-
## Workflow
|
|
66
|
-
|
|
67
|
-
### Step 1: Parse Input and Detect Task Folder
|
|
68
|
-
|
|
69
|
-
**Check if input is an existing task folder:**
|
|
70
|
-
|
|
71
|
-
1. Try path as-is (absolute path)
|
|
72
|
-
2. Try prepending `.owflow/` (relative path)
|
|
73
|
-
3. Search `.owflow/tasks/*/` for folder name match
|
|
74
|
-
|
|
75
|
-
**If folder exists AND contains `orchestrator-state.yml`:**
|
|
76
|
-
|
|
77
|
-
- Go to **Step 2: Resume Existing Task**
|
|
78
|
-
|
|
79
|
-
**If NOT a task folder:**
|
|
80
|
-
|
|
81
|
-
- Go to **Step 3: Classify & Route New Task**
|
|
82
|
-
|
|
83
|
-
**If no argument provided:**
|
|
84
|
-
|
|
85
|
-
- Prompt user: "What would you like to work on?" with input examples
|
|
86
|
-
- Then check if input is task folder or description
|
|
87
|
-
|
|
88
|
-
### Step 2: Resume Existing Task
|
|
89
|
-
|
|
90
|
-
**When existing task detected:**
|
|
91
|
-
|
|
92
|
-
1. Read `orchestrator-state.yml` from task folder
|
|
93
|
-
2. Determine workflow type from folder path:
|
|
94
|
-
|
|
95
|
-
| Folder | Workflow Type |
|
|
96
|
-
| -------------- | ------------- |
|
|
97
|
-
| `development/` | development |
|
|
98
|
-
| `performance/` | performance |
|
|
99
|
-
| `migrations/` | migration |
|
|
100
|
-
| `research/` | research |
|
|
101
|
-
|
|
102
|
-
3. Extract status from state file:
|
|
103
|
-
- `completed`: null = in-progress, timestamp = finished
|
|
104
|
-
- `completed_phases`: derive active phase as first phase not in this list
|
|
105
|
-
- `failed_phases`: array of failed attempts
|
|
106
|
-
|
|
107
|
-
4. Present status to user with question:
|
|
108
|
-
|
|
109
|
-
**For In-Progress Tasks:**
|
|
110
|
-
|
|
111
|
-
```
|
|
112
|
-
Options:
|
|
113
|
-
1. Resume from next incomplete phase
|
|
114
|
-
2. Restart from specific phase
|
|
115
|
-
3. Cancel
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
**For Completed Tasks:**
|
|
119
|
-
|
|
120
|
-
```
|
|
121
|
-
Options:
|
|
122
|
-
1. View task details
|
|
123
|
-
2. Create follow-up development task
|
|
124
|
-
3. Re-run verification phase
|
|
125
|
-
4. Cancel
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
**For Failed Tasks:**
|
|
129
|
-
|
|
130
|
-
```
|
|
131
|
-
Options:
|
|
132
|
-
1. Resume with fresh attempts (--reset-attempts --clear-failures)
|
|
133
|
-
2. Retry failed phase
|
|
134
|
-
3. Restart from specific phase
|
|
135
|
-
4. Cancel
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
5. **Route using Skill tool:**
|
|
139
|
-
|
|
140
|
-
```
|
|
141
|
-
Use Skill tool:
|
|
142
|
-
skill: "[orchestrator-name]"
|
|
143
|
-
args: "--resume [task_path] [flags]"
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
Examples:
|
|
147
|
-
|
|
148
|
-
- Resume development: `skill: "owflow:development"` with `args: "--resume .owflow/tasks/development/2025-10-23-fix"`
|
|
149
|
-
- Restart from step: `skill: "owflow:development"` with `args: "--resume .owflow/tasks/development/2025-10-26-auth --from=verification-done"` (development, research, performance, and migration tasks use descriptive step slugs in `completed_phases`)
|
|
150
|
-
- Fresh attempts: `skill: "owflow:development"` with `args: "--resume .owflow/tasks/development/2025-10-23-fix --reset-attempts"`
|
|
151
|
-
|
|
152
|
-
### Step 3: Classify & Route New Task
|
|
153
|
-
|
|
154
|
-
**For new task descriptions:**
|
|
155
|
-
|
|
156
|
-
1. **Invoke task-classifier subagent** to determine workflow type:
|
|
157
|
-
|
|
158
|
-
```
|
|
159
|
-
Use Task tool:
|
|
160
|
-
subagent_type: "task-classifier"
|
|
161
|
-
description: "Classify task type"
|
|
162
|
-
prompt: "Classify this task into a workflow type: [task description].
|
|
163
|
-
Return structured YAML classification result."
|
|
164
|
-
|
|
165
|
-
The subagent will:
|
|
166
|
-
- Detect issue identifiers (GitHub, Jira)
|
|
167
|
-
- Fetch issue details if available
|
|
168
|
-
- Analyze codebase context
|
|
169
|
-
- Match keywords and calculate confidence
|
|
170
|
-
- Confirm with user if needed
|
|
171
|
-
- Return classification in YAML format
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
2. **Parse classification result:**
|
|
175
|
-
|
|
176
|
-
```yaml
|
|
177
|
-
classification:
|
|
178
|
-
task_type: [development|performance|migration|research]
|
|
179
|
-
confidence: [percentage]
|
|
180
|
-
reasoning: [explanation]
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
3. **Route to appropriate workflow using Skill tool:**
|
|
184
|
-
|
|
185
|
-
```
|
|
186
|
-
Display:
|
|
187
|
-
Task classified as: [task_type] ([confidence]% confidence)
|
|
188
|
-
Routing to [task_type] workflow...
|
|
189
|
-
|
|
190
|
-
Use Skill tool:
|
|
191
|
-
skill: "[orchestrator-name]"
|
|
192
|
-
args: "[description]"
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
**Routing examples:**
|
|
196
|
-
|
|
197
|
-
- development (92%): `skill: "owflow:development"` with `args: "Fix login timeout error"`
|
|
198
|
-
- development (88%): `skill: "owflow:development"` with `args: "Add filtering to user table"`
|
|
199
|
-
- performance (95%): `skill: "owflow:performance"` with `args: "Optimize slow dashboard queries"`
|
|
200
|
-
|
|
201
|
-
---
|
|
202
|
-
|
|
203
|
-
## Error Handling
|
|
204
|
-
|
|
205
|
-
### Classification Fails
|
|
206
|
-
|
|
207
|
-
If task-classifier returns error:
|
|
208
|
-
|
|
209
|
-
```
|
|
210
|
-
Display:
|
|
211
|
-
"Unable to automatically classify this task. Please select manually:"
|
|
212
|
-
|
|
213
|
-
Use question with options:
|
|
214
|
-
1. Development - Fix bugs, improve features, or add new capabilities
|
|
215
|
-
2. Performance - Optimize speed/efficiency
|
|
216
|
-
3. Migration - Move to new tech/pattern
|
|
217
|
-
4. Research - Investigate and document findings
|
|
218
|
-
|
|
219
|
-
Then route to selected workflow using Skill tool.
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
### User Cancels
|
|
223
|
-
|
|
224
|
-
```
|
|
225
|
-
Display:
|
|
226
|
-
"Task cancelled. You can:
|
|
227
|
-
- Run /owflow:work again when ready
|
|
228
|
-
- Use specific workflow commands directly:
|
|
229
|
-
/owflow:development, /owflow:performance, etc."
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## Resume Skill Reference
|
|
235
|
-
|
|
236
|
-
| Workflow Type | Skill | Args |
|
|
237
|
-
| ------------- | ------------- | --------------------------------------------------- |
|
|
238
|
-
| development | `development` | `--resume [path] [--from=<slug>] [--reset-attempts]` |
|
|
239
|
-
| performance | `performance` | `--resume [path] [--from=<slug>]` |
|
|
240
|
-
| migration | `migration` | `--resume [path] [--from=<slug>]` |
|
|
241
|
-
| research | `research` | `--resume [path] [--from=<slug>]` |
|
|
242
|
-
|
|
243
|
-
---
|
|
244
|
-
|
|
245
|
-
## Integration Notes
|
|
246
|
-
|
|
247
|
-
### With Task Classifier
|
|
248
|
-
|
|
249
|
-
The `/owflow:work` command delegates classification to the task-classifier subagent via Task tool, which:
|
|
250
|
-
|
|
251
|
-
- Fetches issue details from GitHub/Jira/Azure DevOps (via MCP, CLI tools, or WebFetch)
|
|
252
|
-
- Analyzes codebase context for better classification
|
|
253
|
-
- Uses confidence-based user confirmation
|
|
254
|
-
- Returns structured classification result
|
|
255
|
-
|
|
256
|
-
### With Orchestrators
|
|
257
|
-
|
|
258
|
-
After classification/detection, this command routes to the appropriate orchestrator via Skill tool:
|
|
259
|
-
|
|
260
|
-
- Each orchestrator handles its specific workflow (spec, plan, implement, verify, etc.)
|
|
261
|
-
- State is persisted in `orchestrator-state.yml` for pause/resume
|
|
262
|
-
- Auto-recovery handles common failures
|
|
263
|
-
|
|
264
|
-
### With Project Documentation
|
|
265
|
-
|
|
266
|
-
Uses project documentation for context:
|
|
267
|
-
|
|
268
|
-
- `.owflow/docs/INDEX.md` - Project overview and standards
|
|
269
|
-
- `.owflow/tasks/` - Existing task directories
|
|
270
|
-
|
|
271
|
-
---
|
|
272
|
-
|
|
273
|
-
## Key Behaviors
|
|
274
|
-
|
|
275
|
-
1. **Single entry point** - One command for all workflow types
|
|
276
|
-
2. **Auto-classification** - Intelligent routing based on task description
|
|
277
|
-
3. **Resume support** - Detects and resumes existing tasks
|
|
278
|
-
4. **Issue integration** - Fetches details from GitHub/Jira/Azure DevOps
|
|
279
|
-
5. **Direct skill invocation** - Uses Skill tool for immediate orchestrator loading
|
|
280
|
-
6. **Graceful fallback** - Manual selection if classification fails
|
|
1
|
+
---
|
|
2
|
+
name: owflow:work
|
|
3
|
+
description: Unified entry point — auto-classifies tasks and routes to appropriate workflow. ALWAYS execute when invoked via slash command.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
**NOTE**: This is a multi-step workflow that invokes the task-classifier subagent and orchestrator skills at specific steps. The `<command-name>` tag refers to THIS command only — you MUST still use the Skill tool to invoke those other skills when instructed below. Follow ALL steps in order.
|
|
7
|
+
|
|
8
|
+
# Unified Work Entry Point
|
|
9
|
+
|
|
10
|
+
Auto-classifies tasks and routes to the appropriate workflow orchestrator. Supports resuming existing tasks or starting new ones.
|
|
11
|
+
|
|
12
|
+
## Usage
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
/owflow:work [task description | task folder path | issue identifier]
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Input Types
|
|
19
|
+
|
|
20
|
+
| Input Type | Example |
|
|
21
|
+
| ---------------- | ----------------------------------------------------------------- |
|
|
22
|
+
| Task folder path | `.owflow/tasks/development/2025-10-23-login-timeout` |
|
|
23
|
+
| Folder name only | `2025-10-26-user-auth` (searches all task types) |
|
|
24
|
+
| Task description | `"Fix login timeout error on mobile"` |
|
|
25
|
+
| GitHub issue | `#456`, `GH-456`, `https://github.com/owner/repo/issues/456` |
|
|
26
|
+
| Jira ticket | `PROJ-456`, `https://company.atlassian.net/browse/PROJ-456` |
|
|
27
|
+
| Azure DevOps | `AB#123`, `https://dev.azure.com/org/project/_workitems/edit/123` |
|
|
28
|
+
| No argument | Prompts for input |
|
|
29
|
+
|
|
30
|
+
## Examples
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Resume existing task
|
|
34
|
+
/owflow:work ".owflow/tasks/development/2025-10-23-login-timeout"
|
|
35
|
+
/owflow:work "2025-10-26-user-auth"
|
|
36
|
+
|
|
37
|
+
# New task (auto-classifies)
|
|
38
|
+
/owflow:work "Fix login timeout error on mobile devices"
|
|
39
|
+
/owflow:work "Add user authentication with email/password"
|
|
40
|
+
/owflow:work "Improve dashboard loading performance"
|
|
41
|
+
|
|
42
|
+
# From issue tracker
|
|
43
|
+
/owflow:work "#456"
|
|
44
|
+
/owflow:work "PROJ-123"
|
|
45
|
+
/owflow:work "AB#789"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## How It Works
|
|
49
|
+
|
|
50
|
+
1. **Detect existing task** - If input is a task folder path, route to resume
|
|
51
|
+
2. **Classify new task** - Invoke task-classifier subagent to determine workflow type
|
|
52
|
+
3. **Route to workflow** - Use Skill tool to invoke appropriate orchestrator skill
|
|
53
|
+
|
|
54
|
+
## Workflow Type Routing
|
|
55
|
+
|
|
56
|
+
| Classification | Routes To (Skill) |
|
|
57
|
+
| -------------- | --------------------- |
|
|
58
|
+
| development | `owflow:development` |
|
|
59
|
+
| performance | `owflow:performance` |
|
|
60
|
+
| migration | `owflow:migration` |
|
|
61
|
+
| research | `owflow:research` |
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Workflow
|
|
66
|
+
|
|
67
|
+
### Step 1: Parse Input and Detect Task Folder
|
|
68
|
+
|
|
69
|
+
**Check if input is an existing task folder:**
|
|
70
|
+
|
|
71
|
+
1. Try path as-is (absolute path)
|
|
72
|
+
2. Try prepending `.owflow/` (relative path)
|
|
73
|
+
3. Search `.owflow/tasks/*/` for folder name match
|
|
74
|
+
|
|
75
|
+
**If folder exists AND contains `orchestrator-state.yml`:**
|
|
76
|
+
|
|
77
|
+
- Go to **Step 2: Resume Existing Task**
|
|
78
|
+
|
|
79
|
+
**If NOT a task folder:**
|
|
80
|
+
|
|
81
|
+
- Go to **Step 3: Classify & Route New Task**
|
|
82
|
+
|
|
83
|
+
**If no argument provided:**
|
|
84
|
+
|
|
85
|
+
- Prompt user: "What would you like to work on?" with input examples
|
|
86
|
+
- Then check if input is task folder or description
|
|
87
|
+
|
|
88
|
+
### Step 2: Resume Existing Task
|
|
89
|
+
|
|
90
|
+
**When existing task detected:**
|
|
91
|
+
|
|
92
|
+
1. Read `orchestrator-state.yml` from task folder
|
|
93
|
+
2. Determine workflow type from folder path:
|
|
94
|
+
|
|
95
|
+
| Folder | Workflow Type |
|
|
96
|
+
| -------------- | ------------- |
|
|
97
|
+
| `development/` | development |
|
|
98
|
+
| `performance/` | performance |
|
|
99
|
+
| `migrations/` | migration |
|
|
100
|
+
| `research/` | research |
|
|
101
|
+
|
|
102
|
+
3. Extract status from state file:
|
|
103
|
+
- `completed`: null = in-progress, timestamp = finished
|
|
104
|
+
- `completed_phases`: derive active phase as first phase not in this list
|
|
105
|
+
- `failed_phases`: array of failed attempts
|
|
106
|
+
|
|
107
|
+
4. Present status to user with question:
|
|
108
|
+
|
|
109
|
+
**For In-Progress Tasks:**
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
Options:
|
|
113
|
+
1. Resume from next incomplete phase
|
|
114
|
+
2. Restart from specific phase
|
|
115
|
+
3. Cancel
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**For Completed Tasks:**
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
Options:
|
|
122
|
+
1. View task details
|
|
123
|
+
2. Create follow-up development task
|
|
124
|
+
3. Re-run verification phase
|
|
125
|
+
4. Cancel
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**For Failed Tasks:**
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
Options:
|
|
132
|
+
1. Resume with fresh attempts (--reset-attempts --clear-failures)
|
|
133
|
+
2. Retry failed phase
|
|
134
|
+
3. Restart from specific phase
|
|
135
|
+
4. Cancel
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
5. **Route using Skill tool:**
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
Use Skill tool:
|
|
142
|
+
skill: "[orchestrator-name]"
|
|
143
|
+
args: "--resume [task_path] [flags]"
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Examples:
|
|
147
|
+
|
|
148
|
+
- Resume development: `skill: "owflow:development"` with `args: "--resume .owflow/tasks/development/2025-10-23-fix"`
|
|
149
|
+
- Restart from step: `skill: "owflow:development"` with `args: "--resume .owflow/tasks/development/2025-10-26-auth --from=verification-done"` (development, research, performance, and migration tasks use descriptive step slugs in `completed_phases`)
|
|
150
|
+
- Fresh attempts: `skill: "owflow:development"` with `args: "--resume .owflow/tasks/development/2025-10-23-fix --reset-attempts"`
|
|
151
|
+
|
|
152
|
+
### Step 3: Classify & Route New Task
|
|
153
|
+
|
|
154
|
+
**For new task descriptions:**
|
|
155
|
+
|
|
156
|
+
1. **Invoke task-classifier subagent** to determine workflow type:
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
Use Task tool:
|
|
160
|
+
subagent_type: "task-classifier"
|
|
161
|
+
description: "Classify task type"
|
|
162
|
+
prompt: "Classify this task into a workflow type: [task description].
|
|
163
|
+
Return structured YAML classification result."
|
|
164
|
+
|
|
165
|
+
The subagent will:
|
|
166
|
+
- Detect issue identifiers (GitHub, Jira)
|
|
167
|
+
- Fetch issue details if available
|
|
168
|
+
- Analyze codebase context
|
|
169
|
+
- Match keywords and calculate confidence
|
|
170
|
+
- Confirm with user if needed
|
|
171
|
+
- Return classification in YAML format
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
2. **Parse classification result:**
|
|
175
|
+
|
|
176
|
+
```yaml
|
|
177
|
+
classification:
|
|
178
|
+
task_type: [development|performance|migration|research]
|
|
179
|
+
confidence: [percentage]
|
|
180
|
+
reasoning: [explanation]
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
3. **Route to appropriate workflow using Skill tool:**
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
Display:
|
|
187
|
+
Task classified as: [task_type] ([confidence]% confidence)
|
|
188
|
+
Routing to [task_type] workflow...
|
|
189
|
+
|
|
190
|
+
Use Skill tool:
|
|
191
|
+
skill: "[orchestrator-name]"
|
|
192
|
+
args: "[description]"
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Routing examples:**
|
|
196
|
+
|
|
197
|
+
- development (92%): `skill: "owflow:development"` with `args: "Fix login timeout error"`
|
|
198
|
+
- development (88%): `skill: "owflow:development"` with `args: "Add filtering to user table"`
|
|
199
|
+
- performance (95%): `skill: "owflow:performance"` with `args: "Optimize slow dashboard queries"`
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## Error Handling
|
|
204
|
+
|
|
205
|
+
### Classification Fails
|
|
206
|
+
|
|
207
|
+
If task-classifier returns error:
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
Display:
|
|
211
|
+
"Unable to automatically classify this task. Please select manually:"
|
|
212
|
+
|
|
213
|
+
Use question with options:
|
|
214
|
+
1. Development - Fix bugs, improve features, or add new capabilities
|
|
215
|
+
2. Performance - Optimize speed/efficiency
|
|
216
|
+
3. Migration - Move to new tech/pattern
|
|
217
|
+
4. Research - Investigate and document findings
|
|
218
|
+
|
|
219
|
+
Then route to selected workflow using Skill tool.
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### User Cancels
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
Display:
|
|
226
|
+
"Task cancelled. You can:
|
|
227
|
+
- Run /owflow:work again when ready
|
|
228
|
+
- Use specific workflow commands directly:
|
|
229
|
+
/owflow:development, /owflow:performance, etc."
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Resume Skill Reference
|
|
235
|
+
|
|
236
|
+
| Workflow Type | Skill | Args |
|
|
237
|
+
| ------------- | ------------- | --------------------------------------------------- |
|
|
238
|
+
| development | `development` | `--resume [path] [--from=<slug>] [--reset-attempts]` |
|
|
239
|
+
| performance | `performance` | `--resume [path] [--from=<slug>]` |
|
|
240
|
+
| migration | `migration` | `--resume [path] [--from=<slug>]` |
|
|
241
|
+
| research | `research` | `--resume [path] [--from=<slug>]` |
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## Integration Notes
|
|
246
|
+
|
|
247
|
+
### With Task Classifier
|
|
248
|
+
|
|
249
|
+
The `/owflow:work` command delegates classification to the task-classifier subagent via Task tool, which:
|
|
250
|
+
|
|
251
|
+
- Fetches issue details from GitHub/Jira/Azure DevOps (via MCP, CLI tools, or WebFetch)
|
|
252
|
+
- Analyzes codebase context for better classification
|
|
253
|
+
- Uses confidence-based user confirmation
|
|
254
|
+
- Returns structured classification result
|
|
255
|
+
|
|
256
|
+
### With Orchestrators
|
|
257
|
+
|
|
258
|
+
After classification/detection, this command routes to the appropriate orchestrator via Skill tool:
|
|
259
|
+
|
|
260
|
+
- Each orchestrator handles its specific workflow (spec, plan, implement, verify, etc.)
|
|
261
|
+
- State is persisted in `orchestrator-state.yml` for pause/resume
|
|
262
|
+
- Auto-recovery handles common failures
|
|
263
|
+
|
|
264
|
+
### With Project Documentation
|
|
265
|
+
|
|
266
|
+
Uses project documentation for context:
|
|
267
|
+
|
|
268
|
+
- `.owflow/docs/INDEX.md` - Project overview and standards
|
|
269
|
+
- `.owflow/tasks/` - Existing task directories
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## Key Behaviors
|
|
274
|
+
|
|
275
|
+
1. **Single entry point** - One command for all workflow types
|
|
276
|
+
2. **Auto-classification** - Intelligent routing based on task description
|
|
277
|
+
3. **Resume support** - Detects and resumes existing tasks
|
|
278
|
+
4. **Issue integration** - Fetches details from GitHub/Jira/Azure DevOps
|
|
279
|
+
5. **Direct skill invocation** - Uses Skill tool for immediate orchestrator loading
|
|
280
|
+
6. **Graceful fallback** - Manual selection if classification fails
|
|
@@ -1,55 +1,19 @@
|
|
|
1
|
-
import { loadMarkdownDir } from
|
|
2
|
-
import matter from
|
|
3
|
-
|
|
4
|
-
* Resolves model aliases to the configured small_model value.
|
|
5
|
-
* Maps common small/fast model aliases to OpenCode's small_model config.
|
|
6
|
-
*
|
|
7
|
-
* @param {string} modelValue - The model value from agent frontmatter
|
|
8
|
-
* @param {string} smallModel - The small_model from OpenCode config
|
|
9
|
-
* @returns {string|undefined} - Resolved model value or undefined
|
|
10
|
-
*/
|
|
11
|
-
const resolveModelAlias = (modelValue, smallModel) => {
|
|
12
|
-
// Aliases that should map to small_model
|
|
13
|
-
const SMALL_MODEL_ALIASES = [
|
|
14
|
-
"haiku", // Claude Code alias
|
|
15
|
-
"gpt-4o-mini", // OpenAI small model
|
|
16
|
-
"small", // Generic alias
|
|
17
|
-
"fast", // Generic alias
|
|
18
|
-
];
|
|
19
|
-
// If no model specified or it's 'inherit', return undefined (let OpenCode decide)
|
|
20
|
-
if (!modelValue || modelValue === "inherit") {
|
|
21
|
-
return undefined;
|
|
22
|
-
}
|
|
23
|
-
// If it's a small model alias and we have a configured small_model, use it
|
|
24
|
-
if (SMALL_MODEL_ALIASES.includes(modelValue.toLowerCase())) {
|
|
25
|
-
if (smallModel) {
|
|
26
|
-
return smallModel;
|
|
27
|
-
}
|
|
28
|
-
// If no small_model configured, return undefined (inherit)
|
|
29
|
-
console.warn(`[owflow] Agent uses '${modelValue}' but no small_model configured in opencode.json - falling back to inherit`);
|
|
30
|
-
return undefined;
|
|
31
|
-
}
|
|
32
|
-
// Otherwise, pass through the original value
|
|
33
|
-
return modelValue;
|
|
34
|
-
};
|
|
35
|
-
const prepareAgent = ({ data, content }, smallModel) => {
|
|
1
|
+
import { loadMarkdownDir } from '../utils/file-util.js';
|
|
2
|
+
import matter from 'gray-matter';
|
|
3
|
+
const prepareAgent = ({ data, content }) => {
|
|
36
4
|
return {
|
|
37
5
|
prompt: content,
|
|
38
6
|
...(data.description && { description: data.description }),
|
|
39
|
-
|
|
40
|
-
...(() => {
|
|
41
|
-
const resolvedModel = resolveModelAlias(data.model, smallModel);
|
|
42
|
-
return resolvedModel ? { model: resolvedModel } : {};
|
|
43
|
-
})(),
|
|
7
|
+
...(data.model && { model: data.model }),
|
|
44
8
|
...(data.mode && { mode: data.mode }),
|
|
45
9
|
// Add skills array if present
|
|
46
10
|
...(data.skills && Array.isArray(data.skills) && { skills: data.skills }),
|
|
47
|
-
...(data.hidden ===
|
|
11
|
+
...(data.hidden === 'true' && { hidden: true }),
|
|
48
12
|
};
|
|
49
13
|
};
|
|
50
|
-
export const configureAgents = (config
|
|
14
|
+
export const configureAgents = (config) => {
|
|
51
15
|
config.agent = config.agent || {};
|
|
52
|
-
for (const markdown of loadMarkdownDir(
|
|
16
|
+
for (const markdown of loadMarkdownDir('agents')) {
|
|
53
17
|
const name = markdown.data.name;
|
|
54
18
|
if (!name)
|
|
55
19
|
continue;
|
|
@@ -57,7 +21,7 @@ export const configureAgents = (config, smallModel) => {
|
|
|
57
21
|
if (config.agent[name])
|
|
58
22
|
continue;
|
|
59
23
|
try {
|
|
60
|
-
config.agent[name] = prepareAgent(markdown
|
|
24
|
+
config.agent[name] = prepareAgent(markdown);
|
|
61
25
|
}
|
|
62
26
|
catch (error) {
|
|
63
27
|
console.warn(`[owflow] Failed to register agent '${name}': ${error.message}`);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { OpenCodeConfig } from '../types/opencode-types.js';
|
|
2
|
+
interface SkillFrontmatter extends Record<string, any> {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
'user-invocable': boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Renders the command body for one skill from its frontmatter.
|
|
9
|
+
* Pure: one frontmatter object in, one string out.
|
|
10
|
+
*/
|
|
11
|
+
export declare const renderCommandTemplate: (data: SkillFrontmatter) => string;
|
|
12
|
+
/**
|
|
13
|
+
* Reads the frontmatter of every `skills/<slug>/SKILL.md`, one level deep.
|
|
14
|
+
* I/O and parsing only — the invocable gate and the key contract live in the
|
|
15
|
+
* registration loop. Failures are never swallowed: our own source data must not
|
|
16
|
+
* register silently incomplete.
|
|
17
|
+
*/
|
|
18
|
+
export declare const readSkillFrontmatter: () => readonly {
|
|
19
|
+
slug: string;
|
|
20
|
+
data: SkillFrontmatter;
|
|
21
|
+
}[];
|
|
22
|
+
export declare const configureCommands: (config: OpenCodeConfig) => void;
|
|
23
|
+
export {};
|