owflow 0.5.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.
Files changed (195) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +448 -261
  3. package/dist/agents/bottleneck-analyzer.md +332 -329
  4. package/dist/agents/code-quality-pragmatist.md +353 -354
  5. package/dist/agents/code-reviewer.md +238 -239
  6. package/dist/agents/codebase-analysis-reporter.md +245 -246
  7. package/dist/agents/docs-operator.md +22 -23
  8. package/dist/agents/e2e-test-verifier.md +447 -448
  9. package/dist/agents/gap-analyzer.md +501 -502
  10. package/dist/agents/implementation-completeness-checker.md +219 -220
  11. package/dist/agents/implementation-planner.md +308 -309
  12. package/dist/agents/information-gatherer.md +690 -691
  13. package/dist/agents/production-readiness-checker.md +278 -279
  14. package/dist/agents/project-analyzer.md +403 -403
  15. package/dist/agents/reality-assessor.md +365 -366
  16. package/dist/agents/research-planner.md +449 -450
  17. package/dist/agents/research-synthesizer.md +402 -403
  18. package/dist/agents/solution-brainstormer.md +256 -257
  19. package/dist/agents/solution-designer.md +371 -372
  20. package/dist/agents/spec-auditor.md +297 -298
  21. package/dist/agents/specification-creator.md +333 -334
  22. package/dist/agents/task-classifier.md +449 -450
  23. package/dist/agents/task-group-implementer.md +283 -284
  24. package/dist/agents/test-suite-runner.md +194 -195
  25. package/dist/agents/user-docs-generator.md +508 -509
  26. package/dist/commands/reviews-code.md +90 -90
  27. package/dist/commands/reviews-pragmatic.md +99 -99
  28. package/dist/commands/reviews-production-readiness.md +113 -113
  29. package/dist/commands/reviews-reality-check.md +110 -110
  30. package/dist/commands/reviews-spec-audit.md +114 -114
  31. package/dist/commands/work.md +280 -280
  32. package/dist/configuration/agents-config.d.ts +2 -0
  33. package/dist/configuration/agents-config.js +8 -44
  34. package/dist/configuration/commands-config.d.ts +23 -0
  35. package/dist/configuration/commands-config.js +17 -17
  36. package/dist/configuration/skills-config.d.ts +2 -0
  37. package/dist/configuration/skills-config.js +3 -3
  38. package/dist/hooks/hooks-diagnostics.d.ts +3 -0
  39. package/dist/hooks/hooks-diagnostics.js +21 -0
  40. package/dist/hooks/hooks-persistence.d.ts +17 -0
  41. package/dist/hooks/hooks-persistence.js +207 -0
  42. package/dist/hooks/hooks-registry.d.ts +6 -0
  43. package/dist/hooks/hooks-registry.js +104 -0
  44. package/dist/hooks/hooks-wrapper.d.ts +25 -0
  45. package/dist/hooks/hooks-wrapper.js +318 -0
  46. package/dist/hooks/internal/before-tool.d.ts +6 -0
  47. package/dist/hooks/internal/before-tool.js +13 -0
  48. package/dist/hooks/internal/session-compaction.d.ts +9 -0
  49. package/dist/hooks/{session-compaction.js → internal/session-compaction.js} +9 -7
  50. package/dist/hooks/runtime/circuit-breaker.d.ts +23 -0
  51. package/dist/hooks/runtime/circuit-breaker.js +39 -0
  52. package/dist/hooks/runtime/failure-policy.d.ts +15 -0
  53. package/dist/hooks/runtime/failure-policy.js +49 -0
  54. package/dist/hooks/runtime/process-executor.d.ts +33 -0
  55. package/dist/hooks/runtime/process-executor.js +147 -0
  56. package/dist/hooks/runtime/status-recorder.d.ts +27 -0
  57. package/dist/hooks/runtime/status-recorder.js +111 -0
  58. package/dist/index.d.ts +7 -0
  59. package/dist/index.js +111 -40
  60. package/dist/skills/agents-md-generator/SKILL.md +223 -223
  61. package/dist/skills/codebase-analyzer/SKILL.md +162 -162
  62. package/dist/skills/codebase-analyzer/references/code-analysis.md +63 -63
  63. package/dist/skills/codebase-analyzer/references/combined.md +31 -31
  64. package/dist/skills/codebase-analyzer/references/context-discovery.md +63 -63
  65. package/dist/skills/codebase-analyzer/references/file-discovery.md +51 -51
  66. package/dist/skills/codebase-analyzer/references/migration-target.md +23 -23
  67. package/dist/skills/codebase-analyzer/references/pattern-mining.md +22 -22
  68. package/dist/skills/dev-analyze/SKILL.md +115 -115
  69. package/dist/skills/dev-bugfix/SKILL.md +452 -452
  70. package/dist/skills/dev-finalize/SKILL.md +118 -118
  71. package/dist/skills/dev-implement/SKILL.md +167 -167
  72. package/dist/skills/dev-plan/SKILL.md +147 -147
  73. package/dist/skills/dev-spec/SKILL.md +182 -182
  74. package/dist/skills/dev-tdd-red/SKILL.md +94 -94
  75. package/dist/skills/dev-verify/SKILL.md +153 -153
  76. package/dist/skills/development/SKILL.md +260 -260
  77. package/dist/skills/diagrams-mermaid/SKILL.md +183 -159
  78. package/dist/skills/diagrams-mermaid/references/reference.md +220 -148
  79. package/dist/skills/docs-manager/SKILL.md +379 -379
  80. package/dist/skills/docs-manager/docs/INDEX.md +199 -199
  81. package/dist/skills/docs-manager/docs/standards/backend/api.md +25 -25
  82. package/dist/skills/docs-manager/docs/standards/backend/migrations.md +22 -22
  83. package/dist/skills/docs-manager/docs/standards/backend/models.md +25 -25
  84. package/dist/skills/docs-manager/docs/standards/backend/queries.md +22 -22
  85. package/dist/skills/docs-manager/docs/standards/frontend/accessibility.md +25 -25
  86. package/dist/skills/docs-manager/docs/standards/frontend/components.md +28 -28
  87. package/dist/skills/docs-manager/docs/standards/frontend/css.md +16 -16
  88. package/dist/skills/docs-manager/docs/standards/frontend/responsive.md +28 -28
  89. package/dist/skills/docs-manager/docs/standards/global/coding-style.md +25 -25
  90. package/dist/skills/docs-manager/docs/standards/global/commenting.md +10 -10
  91. package/dist/skills/docs-manager/docs/standards/global/conventions.md +31 -31
  92. package/dist/skills/docs-manager/docs/standards/global/error-handling.md +22 -22
  93. package/dist/skills/docs-manager/docs/standards/global/minimal-implementation.md +22 -22
  94. package/dist/skills/docs-manager/docs/standards/global/validation.md +28 -28
  95. package/dist/skills/docs-manager/docs/standards/testing/test-writing.md +25 -25
  96. package/dist/skills/docs-manager/references/agents-md-template.md +29 -29
  97. package/dist/skills/docs-manager/references/index-md-template.md +73 -73
  98. package/dist/skills/flow-init/SKILL.md +234 -234
  99. package/dist/skills/flow-init/references/architecture-template.md +45 -45
  100. package/dist/skills/flow-init/references/roadmap-templates.md +93 -93
  101. package/dist/skills/flow-init/references/tech-stack-template.md +70 -70
  102. package/dist/skills/flow-init/references/vision-templates.md +75 -75
  103. package/dist/skills/goal-development/SKILL.md +96 -96
  104. package/dist/skills/goal-migration/SKILL.md +114 -114
  105. package/dist/skills/goal-performance/SKILL.md +126 -0
  106. package/dist/skills/goal-research/SKILL.md +118 -118
  107. package/dist/skills/html-renderer/SKILL.md +173 -173
  108. package/dist/skills/html-renderer/references/index.html +318 -318
  109. package/dist/skills/html-renderer/references/styles.css +388 -388
  110. package/dist/skills/html-renderer/references/tokens.json +104 -104
  111. package/dist/skills/implementation-plan-executor/SKILL.md +378 -378
  112. package/dist/skills/implementation-verifier/SKILL.md +307 -307
  113. package/dist/skills/migration/SKILL.md +268 -268
  114. package/dist/skills/migration-analyze/SKILL.md +126 -126
  115. package/dist/skills/migration-finalize/SKILL.md +161 -161
  116. package/dist/skills/migration-fix/SKILL.md +155 -155
  117. package/dist/skills/migration-implement/SKILL.md +131 -131
  118. package/dist/skills/migration-plan/SKILL.md +131 -131
  119. package/dist/skills/migration-spec/SKILL.md +135 -135
  120. package/dist/skills/migration-spec/references/migration-strategies.md +430 -430
  121. package/dist/skills/migration-target/SKILL.md +134 -134
  122. package/dist/skills/migration-target/references/migration-types.md +489 -489
  123. package/dist/skills/migration-verify/SKILL.md +184 -184
  124. package/dist/skills/orchestrator-framework/SKILL.md +65 -65
  125. package/dist/skills/orchestrator-framework/references/command-namespacing.md +7 -7
  126. package/dist/skills/orchestrator-framework/references/confirm-or-revise-exception.md +20 -20
  127. package/dist/skills/orchestrator-framework/references/delegation-rules.md +54 -54
  128. package/dist/skills/orchestrator-framework/references/dispatcher-handoff.md +27 -27
  129. package/dist/skills/orchestrator-framework/references/fix-loop-contract.md +65 -65
  130. package/dist/skills/orchestrator-framework/references/gate-contract.md +122 -117
  131. package/dist/skills/orchestrator-framework/references/orchestrator-creation-checklist.md +51 -51
  132. package/dist/skills/orchestrator-framework/references/orchestrator-patterns.md +235 -235
  133. package/dist/skills/performance/SKILL.md +267 -437
  134. package/dist/skills/performance-analyze/SKILL.md +129 -0
  135. package/dist/skills/{performance → performance-analyze}/references/performance-optimization-guide.md +271 -365
  136. package/dist/skills/performance-finalize/SKILL.md +117 -0
  137. package/dist/skills/performance-implement/SKILL.md +114 -0
  138. package/dist/skills/performance-plan/SKILL.md +112 -0
  139. package/dist/skills/performance-spec/SKILL.md +145 -0
  140. package/dist/skills/performance-verify/SKILL.md +164 -0
  141. package/dist/skills/research/SKILL.md +249 -249
  142. package/dist/skills/research-brainstorm/SKILL.md +120 -120
  143. package/dist/skills/research-brainstorm/references/brainstorming-techniques.md +84 -84
  144. package/dist/skills/research-converge/SKILL.md +130 -130
  145. package/dist/skills/research-design/SKILL.md +146 -146
  146. package/dist/skills/research-design/references/design-techniques.md +40 -40
  147. package/dist/skills/research-finalize/SKILL.md +125 -125
  148. package/dist/skills/research-fork/SKILL.md +190 -190
  149. package/dist/skills/research-gather/SKILL.md +133 -133
  150. package/dist/skills/research-plan/SKILL.md +141 -141
  151. package/dist/skills/research-plan/references/research-methodologies.md +710 -710
  152. package/dist/skills/research-quick/SKILL.md +139 -139
  153. package/dist/skills/research-synthesize/SKILL.md +127 -127
  154. package/dist/skills/rule-reviewer/SKILL.md +334 -334
  155. package/dist/skills/standards-discover/SKILL.md +260 -260
  156. package/dist/skills/standards-discover/references/aggregation-strategy.md +76 -76
  157. package/dist/skills/standards-discover/references/code-pattern-prompt.md +68 -68
  158. package/dist/skills/standards-discover/references/config-analyzer-prompt.md +67 -67
  159. package/dist/skills/standards-discover/references/docs-extractor-prompt.md +65 -65
  160. package/dist/skills/standards-discover/references/external-analyzer-prompt.md +75 -75
  161. package/dist/skills/standards-update/SKILL.md +207 -207
  162. package/dist/templates/orchestrator-state-base.yml +17 -17
  163. package/dist/templates/orchestrator-state-development.yml +95 -95
  164. package/dist/templates/orchestrator-state-migration.yml +95 -95
  165. package/dist/templates/orchestrator-state-performance.yml +64 -53
  166. package/dist/templates/orchestrator-state-research.yml +67 -67
  167. package/dist/tools/fork_task.d.ts +17 -0
  168. package/dist/tools/fork_task.js +21 -11
  169. package/dist/tools/verify_template.d.ts +11 -0
  170. package/dist/tools/verify_template.js +32 -17
  171. package/dist/tui/hooks-dialogs.d.ts +20 -0
  172. package/dist/tui/hooks-dialogs.js +181 -0
  173. package/dist/tui/hooks-presenter.d.ts +15 -0
  174. package/dist/tui/hooks-presenter.js +70 -0
  175. package/dist/tui/hooks-sidebar.d.ts +10 -0
  176. package/dist/tui/hooks-sidebar.js +104 -0
  177. package/dist/tui/primitives.d.ts +21 -0
  178. package/dist/tui/primitives.js +47 -0
  179. package/dist/tui.d.ts +12 -0
  180. package/dist/tui.js +129 -0
  181. package/dist/types/hook-types.d.ts +125 -0
  182. package/dist/types/hook-types.js +76 -0
  183. package/dist/types/opencode-types.d.ts +13 -0
  184. package/dist/utils/file-util.d.ts +2 -0
  185. package/dist/utils/file-util.js +6 -6
  186. package/dist/utils/fork-task.d.ts +27 -0
  187. package/dist/utils/fork-task.js +18 -23
  188. package/dist/utils/plugin-info.d.ts +3 -0
  189. package/dist/utils/plugin-info.js +8 -10
  190. package/dist/utils/workflow-paths.d.ts +17 -0
  191. package/dist/utils/workflow-paths.js +18 -0
  192. package/dist/utils/yaml-structure.d.ts +7 -0
  193. package/dist/utils/yaml-structure.js +7 -11
  194. package/package.json +68 -48
  195. package/dist/hooks/before-tool.js +0 -19
@@ -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, and migration tasks use descriptive step slugs in `completed_phases`; performance is the remaining `phase-N` holdout)
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=PHASE]` |
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
@@ -0,0 +1,2 @@
1
+ import type { OpenCodeConfig } from '../types/opencode-types.js';
2
+ export declare const configureAgents: (config: OpenCodeConfig) => void;
@@ -1,55 +1,19 @@
1
- import { loadMarkdownDir } from "../utils/file-util.js";
2
- import matter from "gray-matter";
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
- // Resolve model aliases (haiku, gpt-4o-mini, etc.) to small_model
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 === "true" && { hidden: true }),
11
+ ...(data.hidden === 'true' && { hidden: true }),
48
12
  };
49
13
  };
50
- export const configureAgents = (config, smallModel) => {
14
+ export const configureAgents = (config) => {
51
15
  config.agent = config.agent || {};
52
- for (const markdown of loadMarkdownDir("agents")) {
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, smallModel);
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 {};