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.
Files changed (33) hide show
  1. package/README.md +34 -21
  2. package/dist/__tests__/verify_template.test.js +102 -0
  3. package/dist/agents/task-classifier.md +7 -19
  4. package/dist/commands/quick-dev.md +48 -6
  5. package/dist/commands/quick-plan.md +39 -4
  6. package/dist/commands/work.md +13 -17
  7. package/dist/index.js +4 -0
  8. package/dist/skills/development/SKILL.md +83 -115
  9. package/dist/skills/migration/SKILL.md +2 -33
  10. package/dist/skills/orchestrator-framework/references/orchestrator-creation-checklist.md +1 -0
  11. package/dist/skills/orchestrator-framework/references/orchestrator-patterns.md +4 -59
  12. package/dist/skills/performance/SKILL.md +2 -30
  13. package/dist/skills/quick-bugfix/SKILL.md +96 -26
  14. package/dist/skills/research/SKILL.md +3 -42
  15. package/dist/templates/orchestrator-state-base.yml +17 -0
  16. package/dist/templates/orchestrator-state-development.yml +94 -0
  17. package/dist/templates/orchestrator-state-migration.yml +55 -0
  18. package/dist/templates/orchestrator-state-performance.yml +53 -0
  19. package/dist/templates/orchestrator-state-research.yml +61 -0
  20. package/dist/templates/quick-bugfix-task.yml +10 -0
  21. package/dist/templates/quick-dev-task.yml +10 -0
  22. package/dist/templates/quick-plan-task.yml +11 -0
  23. package/dist/tools/verify_template.js +61 -0
  24. package/package.json +4 -3
  25. package/dist/agents/ui-mockup-generator.md +0 -369
  26. package/dist/commands/product-design.md +0 -37
  27. package/dist/skills/product-design/SKILL.md +0 -843
  28. package/dist/skills/product-design/references/characteristic-detection.md +0 -92
  29. package/dist/skills/product-design/references/interaction-patterns.md +0 -206
  30. package/dist/skills/product-design/references/visual-companion.md +0 -190
  31. package/dist/skills/product-design/server/index.js +0 -302
  32. package/dist/skills/product-design/server/index.ts +0 -359
  33. package/dist/skills/product-design/server/template.html +0 -256
package/README.md CHANGED
@@ -10,7 +10,7 @@ Started as a simple OpenCode fork of [Maister Claude Code plugin](https://github
10
10
 
11
11
  ## What You Get
12
12
 
13
- - **Guided workflows** for features, bug fixes, enhancements, performance, migrations, research, and product design
13
+ - **Guided workflows** for features, bug fixes, enhancements, performance, migrations and research
14
14
  - **Auto-discovered standards** from your codebase - config files, source patterns, and documentation are analyzed and enforced throughout every workflow
15
15
  - **Test-driven implementation** with automated planning, incremental verification, and full test suite runs before completion
16
16
  - **Pause and resume** any workflow - state is preserved across sessions
@@ -25,17 +25,29 @@ Started as a simple OpenCode fork of [Maister Claude Code plugin](https://github
25
25
 
26
26
  ### Installation
27
27
 
28
- #### Install the plugin
28
+ #### Add owflow to the `plugin` array in your `opencode.json` ([global or project-level](https://opencode.ai/docs/plugins/#load-order)):
29
29
 
30
- ```bash
31
- npm install owflow
30
+ To use it across multiple repos it is advised to use the global level:
31
+
32
+ Linux/MacOS:
33
+
34
+ ```sh
35
+ ~/.config/opencode/opencode.json
32
36
  ```
33
37
 
34
- #### Add owflow to the `plugin` array in your `opencode.json` ([global or project-level](https://opencode.ai/docs/plugins/#load-order)):
38
+ Windows:
39
+
40
+ ```powershell
41
+ \Users\YourUsername\.config\opencode\opencode.json
42
+ ```
43
+
44
+ In `opencode.json`:
35
45
 
36
46
  ```json
37
47
  {
38
- "plugin": ["owflow"]
48
+ ...
49
+ "plugin": ["owflow@latest"]
50
+ ...
39
51
  }
40
52
  ```
41
53
 
@@ -98,13 +110,12 @@ You can always be explicit when you prefer - arguments and flags simply override
98
110
 
99
111
  ## Supported Workflows
100
112
 
101
- | Command | Use When |
102
- | ----------------- | ------------------------------------------- |
103
- | `/development` | Features, bug fixes, enhancements |
104
- | `/research` | Research with synthesis and solution design |
105
- | `/performance` | Optimizing speed or resource usage |
106
- | `/migration` | Changing technologies or patterns |
107
- | `/product-design` | Product and feature design |
113
+ | Command | Use When |
114
+ | -------------- | ------------------------------------------- |
115
+ | `/development` | Features, bug fixes, enhancements |
116
+ | `/research` | Research with synthesis and solution design |
117
+ | `/performance` | Optimizing speed or resource usage |
118
+ | `/migration` | Changing technologies or patterns |
108
119
 
109
120
  Task type (feature/bug/enhancement) is auto-detected from context. Override with `--type=feature|bug|enhancement` if needed. Or use `/work` as a single entry point that routes to the right workflow.
110
121
 
@@ -112,11 +123,13 @@ Task type (feature/bug/enhancement) is auto-detected from context. Override with
112
123
 
113
124
  For smaller tasks that don't need a full workflow:
114
125
 
115
- | Command | Use When |
116
- | --------------- | ----------------------------------------------------------- |
117
- | `/quick-plan` | You want a plan with standards awareness before coding |
118
- | `/quick-dev` | You know what to do - just implement with standards applied |
119
- | `/quick-bugfix` | Quick TDD-driven bug fix — write failing test, fix, verify |
126
+ | Command | Use When | Artifacts |
127
+ | --------------- | ----------------------------------------------------------- | --------------------------------------- |
128
+ | `/quick-plan` | You want a plan with standards awareness before coding | `task.yml`, `findings.md` |
129
+ | `/quick-dev` | You know what to do - just implement with standards applied | `task.yml`, `summary.md` |
130
+ | `/quick-bugfix` | Quick TDD-driven bug fix — write failing test, fix, verify | `task.yml`, `findings.md`, `summary.md` |
131
+
132
+ All quick commands create lightweight task directories under `.owflow/tasks/quick-{type}/` with a `task.yml` for traceability.
120
133
 
121
134
  ## Standards-Aware Development
122
135
 
@@ -141,9 +154,9 @@ TBD
141
154
 
142
155
  **Don't use plan mode when starting a workflow.** Planning is a built-in part of every workflow — the orchestrator creates specs, plans, and other files as it goes. OpenCode's plan mode restricts file creation, which conflicts with this. Let the workflow handle planning on its own.
143
156
 
144
- **Start workflows in a fresh session.** This is especially useful when chaining workflows (e.g., research → development). Research and product-design artifacts already contain all the context needed, so a clean session avoids noise from prior conversation.
157
+ **Start workflows in a fresh session.** This is especially useful when chaining workflows (e.g., research → development). Research artifacts already contain all the context needed, so a clean session avoids noise from prior conversation.
145
158
 
146
- **Chain workflows by passing a task folder.** If you've completed a research or product-design workflow and want to build on those results, pass the task folder directly:
159
+ **Chain workflows by passing a task folder.** If you've completed a research workflow and want to build on those results, pass the task folder directly:
147
160
 
148
161
  ```bash
149
162
  /development .owflow/tasks/research/2026-01-12-oauth-research
@@ -152,7 +165,7 @@ TBD
152
165
  You can also append additional instructions to narrow scope or guide the workflow:
153
166
 
154
167
  ```bash
155
- /development .owflow/tasks/product-design/2026-03-10-dashboard-redesign Implement only phase 1
168
+ /development .owflow/tasks/research/2026-01-12-oauth-research Implement only phase 1
156
169
  ```
157
170
 
158
171
  ## Known Issues
@@ -0,0 +1,102 @@
1
+ import { expect, test, describe, beforeAll, afterAll } from "bun:test";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { verify_template } from "../tools/verify_template";
6
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
+ describe("verify_template tool", () => {
8
+ const templatesDir = path.join(__dirname, "../templates");
9
+ const testDir = path.join(__dirname, "test_tmp_dir");
10
+ const testTemplateName = "test-template.yml";
11
+ const testTemplatePath = path.join(templatesDir, testTemplateName);
12
+ beforeAll(() => {
13
+ // Ensure templates dir exists
14
+ if (!fs.existsSync(templatesDir)) {
15
+ fs.mkdirSync(templatesDir, { recursive: true });
16
+ }
17
+ // Create a dummy template
18
+ fs.writeFileSync(testTemplatePath, `
19
+ key1: value1
20
+ key2:
21
+ subKey1: subValue1
22
+ `);
23
+ // Ensure test dir exists
24
+ if (!fs.existsSync(testDir)) {
25
+ fs.mkdirSync(testDir, { recursive: true });
26
+ }
27
+ });
28
+ afterAll(() => {
29
+ // Cleanup
30
+ if (fs.existsSync(testTemplatePath)) {
31
+ fs.rmSync(testTemplatePath);
32
+ }
33
+ if (fs.existsSync(testDir)) {
34
+ fs.rmSync(testDir, { recursive: true, force: true });
35
+ }
36
+ });
37
+ test("should return error if file not found", async () => {
38
+ const result = await verify_template.execute({ filePath: "nonexistent.yml", templateName: testTemplateName }, { directory: testDir });
39
+ expect(result.output).toContain("File not found at nonexistent.yml");
40
+ });
41
+ test("should return error if template not found", async () => {
42
+ const filePath = "target.yml";
43
+ fs.writeFileSync(path.join(testDir, filePath), "key1: value");
44
+ const result = await verify_template.execute({ filePath, templateName: "nonexistent-template.yml" }, { directory: testDir });
45
+ expect(result.output).toContain("Template 'nonexistent-template.yml' not found");
46
+ });
47
+ test("should return error if target file has invalid YAML syntax", async () => {
48
+ const filePath = "invalid.yml";
49
+ fs.writeFileSync(path.join(testDir, filePath), "key1: : value\n invalid");
50
+ const result = await verify_template.execute({ filePath, templateName: testTemplateName }, { directory: testDir });
51
+ expect(result.output).toContain("YAML Syntax Error in invalid.yml");
52
+ });
53
+ test("should return error if target file is missing keys from template", async () => {
54
+ const filePath = "missing-keys.yml";
55
+ // Missing key2
56
+ fs.writeFileSync(path.join(testDir, filePath), "key1: some-value");
57
+ const result = await verify_template.execute({ filePath, templateName: testTemplateName }, { directory: testDir });
58
+ expect(result.output).toContain("YAML Structure Validation Failed");
59
+ expect(result.output).toContain("- Missing key: key2");
60
+ });
61
+ test("should pass if target file matches template structure", async () => {
62
+ const filePath = "valid.yml";
63
+ fs.writeFileSync(path.join(testDir, filePath), `
64
+ key1: different_value
65
+ key2:
66
+ subKey1: different_sub_value
67
+ extraKey: this is fine
68
+ `);
69
+ const result = await verify_template.execute({ filePath, templateName: testTemplateName }, { directory: testDir });
70
+ expect(result.output).toBe("File exists and follows the correct YAML structure.");
71
+ });
72
+ test("should pass if template has null or non-object values and target has them too", async () => {
73
+ const nullTemplateName = "null-template.yml";
74
+ const nullTemplatePath = path.join(templatesDir, nullTemplateName);
75
+ fs.writeFileSync(nullTemplatePath, "key: null\nother: 123");
76
+ const filePath = "valid-null.yml";
77
+ fs.writeFileSync(path.join(testDir, filePath), "key: something\nother: 456");
78
+ const result = await verify_template.execute({ filePath, templateName: nullTemplateName }, { directory: testDir });
79
+ expect(result.output).toBe("File exists and follows the correct YAML structure.");
80
+ fs.rmSync(nullTemplatePath);
81
+ });
82
+ describe("real templates validation", () => {
83
+ let templateFiles = [];
84
+ try {
85
+ const files = fs.readdirSync(templatesDir);
86
+ templateFiles = files.filter(f => f.endsWith('.yml') || f.endsWith('.yaml') || f.endsWith('.md'));
87
+ // Filter out our dummy test template
88
+ templateFiles = templateFiles.filter(f => f !== "test-template.yml" && f !== "null-template.yml");
89
+ }
90
+ catch (e) {
91
+ // templates dir might not exist or be readable in some contexts, though beforeAll ensures it exists
92
+ }
93
+ for (const templateName of templateFiles) {
94
+ test(`should successfully validate a valid instance of ${templateName}`, async () => {
95
+ // We use the templates directory as the working directory
96
+ // and the template name as the filePath, effectively comparing the template to itself to ensure it's structurally valid.
97
+ const result = await verify_template.execute({ filePath: templateName, templateName }, { directory: templatesDir });
98
+ expect(result.output).toBe("File exists and follows the correct YAML structure.");
99
+ });
100
+ }
101
+ });
102
+ });
@@ -44,18 +44,15 @@ You are a specialized task classification agent that analyzes task descriptions
44
44
 
45
45
  ## Supported Workflow Types
46
46
 
47
- | Type | Purpose | Primary Keywords |
48
- | ------------------ | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
49
- | **development** | Any code change: bug fixes, enhancements, new features, refactoring, security fixes | fix, bug, error, improve, enhance, add, new, create, refactor, vulnerability |
50
- | **performance** | Optimize speed/efficiency | slow, optimize, faster, bottleneck, latency |
51
- | **migration** | Change tech/patterns/versions | migrate, move from X to Y, upgrade to, transition |
52
- | **research** | Investigate, document, explore options | research, investigate, explore, document, spike, compare |
53
- | **product-design** | Design features/products before building | design, product design, feature design, wireframe, prototype, mockup, user journey, persona |
47
+ | Type | Purpose | Primary Keywords |
48
+ | --------------- | ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
49
+ | **development** | Any code change: bug fixes, enhancements, new features, refactoring, security fixes | fix, bug, error, improve, enhance, add, new, create, refactor, vulnerability |
50
+ | **performance** | Optimize speed/efficiency | slow, optimize, faster, bottleneck, latency |
51
+ | **migration** | Change tech/patterns/versions | migrate, move from X to Y, upgrade to, transition |
52
+ | **research** | Investigate, document, explore options | research, investigate, explore, document, spike, compare |
54
53
 
55
54
  **Note**: Security fixes, refactoring, and documentation of code are all routed through `development` or `research` — they are characteristics of the work, not separate workflow types.
56
55
 
57
- **Key distinction**: `product-design` is for defining WHAT to build before any code is written. If the user already knows what to build and wants to implement it, that's `development`.
58
-
59
56
  ---
60
57
 
61
58
  ## Classification Workflow
@@ -159,13 +156,6 @@ If description contains error messages or stack traces:
159
156
  - Discovery: spike, proof of concept, prototype, feasibility
160
157
  - Documentation: document findings, write guide, create documentation
161
158
 
162
- **Product Design**:
163
-
164
- - Primary: design, product design, feature design, wireframe, prototype, mockup
165
- - Exploration: user journey, persona, user story, product brief, user flow
166
- - Planning: scope definition, requirements gathering, feature spec (before code)
167
- - **Key distinction**: Designing what to build before building it — if implementation is implied, route to development instead
168
-
169
159
  **Calculate Confidence Score**:
170
160
 
171
161
  ```
@@ -236,7 +226,6 @@ Please choose the workflow type that best fits:
236
226
  2. Performance - Optimize speed/efficiency
237
227
  3. Migration - Move to new tech/pattern
238
228
  4. Research - Investigate, document, explore options
239
- 5. Product Design - Design features or products before building them
240
229
 
241
230
  Which type best describes your task?
242
231
  ```
@@ -260,7 +249,7 @@ Return structured YAML format:
260
249
 
261
250
  ```yaml
262
251
  classification:
263
- task_type: [development|performance|migration|research|product-design]
252
+ task_type: [development|performance|migration|research]
264
253
  confidence: [percentage as integer]
265
254
  keywords_matched: [list of matched keywords]
266
255
 
@@ -394,7 +383,6 @@ Use question with relevant options
394
383
  - **performance** → performance orchestrator
395
384
  - **migration** → migration orchestrator
396
385
  - **research** → research orchestrator
397
- - **product-design** → product-design orchestrator
398
386
 
399
387
  **External Systems** (tries MCP → CLI → WebFetch → prompt user):
400
388
 
@@ -53,6 +53,18 @@ Implement a task directly without entering planning mode, while still applying p
53
53
  "What would you like to implement? Please describe the task."
54
54
  ```
55
55
 
56
+ ### Step 1b: Create Task Directory
57
+
58
+ **Create a lightweight task directory for artifact anchoring.**
59
+
60
+ 1. Generate a task name from the task description:
61
+ - Extract 3–5 key words, convert to lowercase kebab-case
62
+ - Prepend today's date: `YYYY-MM-DD-kebab-name`
63
+ - Examples: "Add a logout button to the navbar" → `2026-05-28-add-navbar-logout-button`, "Update the API endpoint to accept JSON" → `2026-05-28-update-api-accept-json`
64
+ 2. Create directory: `.owflow/tasks/quick-dev/YYYY-MM-DD-task-name/`
65
+ 3. Write `task.yml` with initial state using the template [src/templates/quick-dev-task.yml](../templates/quick-dev-task.yml).
66
+ 4. **CRITICAL**: Use the `verify_template` tool immediately after creation to check YAML validity against `quick-dev-task.yml`.
67
+
56
68
  ### Step 2: Discover Standards
57
69
 
58
70
  **Check if `.owflow/docs/INDEX.md` exists:**
@@ -65,6 +77,7 @@ Implement a task directly without entering planning mode, while still applying p
65
77
  - The nature of the task
66
78
  - Keywords in the task description
67
79
  3. **READ the applicable standard files** (see Standards Reading Enforcement below)
80
+ 4. **Update `task.yml`**: Add paths of standards read to `standards_applied` list
68
81
 
69
82
  **If not exists:**
70
83
 
@@ -110,7 +123,34 @@ Implement a task directly without entering planning mode, while still applying p
110
123
 
111
124
  ### Step 5: Summary
112
125
 
113
- **Provide completion summary:**
126
+ **Write `summary.md`** in the task directory:
127
+
128
+ ```markdown
129
+ # Task Summary
130
+
131
+ **Command**: quick-dev
132
+ **Date**: YYYY-MM-DD
133
+ **Status**: completed
134
+
135
+ ## What Was Done
136
+ [What was implemented]
137
+
138
+ ## Files Modified
139
+ - `path/to/file`
140
+
141
+ ## Standards Applied
142
+ - [standard]: [guideline]
143
+
144
+ ## Tests
145
+ - [test file] — [result]
146
+
147
+ ## Commit Suggestion
148
+ [conventional commit message]
149
+ ```
150
+
151
+ **Update `task.yml`**: set `status: completed`, `updated: [now]`.
152
+
153
+ **Provide completion summary to user:**
114
154
 
115
155
  - What was implemented
116
156
  - Which standards from INDEX.md were applied
@@ -122,11 +162,13 @@ Implement a task directly without entering planning mode, while still applying p
122
162
  ## What This Does
123
163
 
124
164
  1. **Parses** task description from user input
125
- 2. **Discovers** applicable standards from `.owflow/docs/INDEX.md`
126
- 3. **READS** actual standard files (MANDATORY - not just INDEX.md)
127
- 4. **Implements** directly without planning mode approval
128
- 5. **Verifies** standards were followed
129
- 6. **Summarizes** what was done and which standards were read and applied
165
+ 2. **Creates** lightweight task directory with `task.yml` for artifact anchoring
166
+ 3. **Discovers** applicable standards from `.owflow/docs/INDEX.md`
167
+ 4. **READS** actual standard files (MANDATORY - not just INDEX.md)
168
+ 5. **Implements** directly without planning mode approval
169
+ 6. **Verifies** standards were followed
170
+ 7. **Writes** `summary.md` in task directory and updates `task.yml` to `completed`
171
+ 8. **Summarizes** what was done and which standards were read and applied
130
172
 
131
173
  ## Graceful Fallback
132
174
 
@@ -35,6 +35,19 @@ Enter OpenCode's planning mode for a task, with automatic discovery of project s
35
35
  "What would you like to plan? Please describe the task or feature."
36
36
  ```
37
37
 
38
+ ### Step 1b: Create Task Directory
39
+
40
+ **Create a lightweight task directory for artifact anchoring.**
41
+
42
+ 1. Generate a task name from the task description:
43
+ - Extract 3–5 key words, convert to lowercase kebab-case
44
+ - Prepend today's date: `YYYY-MM-DD-kebab-name`
45
+ - Examples: "Add retry logic to API client" → `2026-05-28-add-api-retry-logic`, "Refactor the payment processing module" → `2026-05-28-refactor-payment-module`
46
+ 2. Create directory: `.owflow/tasks/quick-plan/YYYY-MM-DD-task-name/`
47
+ 3. Create `analysis/` subdirectory inside it
48
+ 4. Write `task.yml` with initial state using the template [src/templates/quick-plan-task.yml](../templates/quick-plan-task.yml).
49
+ 5. **CRITICAL**: Use the `verify_template` tool immediately after creation to check YAML validity against `quick-plan-task.yml`.
50
+
38
51
  ### Step 2: Discover and Read Standards (BEFORE Plan Mode)
39
52
 
40
53
  **CRITICAL: This step MUST complete before calling Plan Agent.**
@@ -53,6 +66,24 @@ Enter OpenCode's planning mode for a task, with automatic discovery of project s
53
66
  4. **READ the actual standard files** using the Read tool — reading INDEX.md alone is NOT sufficient
54
67
 
55
68
  5. **Summarize key guidelines** from each standard file read — these will carry into plan mode as context
69
+ 6. **Update `task.yml`**: Add paths of standards read to `standards_applied` list
70
+
71
+ ### Step 2b: Write Findings
72
+
73
+ **After standards discovery, write `analysis/findings.md`** in the task directory:
74
+
75
+ ```markdown
76
+ # Task Analysis
77
+
78
+ ## Context
79
+ [What was analyzed to inform the plan — codebase areas explored, existing patterns found]
80
+
81
+ ## Key Decisions
82
+ [Architectural or implementation decisions made during planning]
83
+
84
+ ## Standards Referenced
85
+ - [standard file]: [key guideline applied]
86
+ ```
56
87
 
57
88
  ### Step 3: Enter Planning Mode
58
89
 
@@ -101,10 +132,13 @@ project documentation and coding standards for better consistency.
101
132
  ## What This Does
102
133
 
103
134
  1. **Parses** task description from user input
104
- 2. **Discovers and READS** applicable standard files from `.owflow/docs/` (BEFORE plan mode)
105
- 3. **Enters** OpenCode's builtin planning mode via delegating to `Plan Agent` with standards already loaded
106
- 4. **Produces** a plan file with implementation approach, applicable standards, and compliance checklist
107
- 5. **Gates** Approval question on mandatory standards sections in the plan file
135
+ 2. **Creates** lightweight task directory with `task.yml` for artifact anchoring
136
+ 3. **Discovers and READS** applicable standard files from `.owflow/docs/` (BEFORE plan mode)
137
+ 4. **Writes** `analysis/findings.md` with task context and key decisions
138
+ 5. **Enters** OpenCode's builtin planning mode via delegating to `Plan Agent` with standards already loaded
139
+ 6. **Produces** a plan file with implementation approach, applicable standards, and compliance checklist
140
+ 7. **Gates** Approval question on mandatory standards sections in the plan file
141
+ 8. **Updates** `task.yml` with `status: completed` and `plan_path` after plan approval
108
142
 
109
143
  ## Benefits Over Manual Planning
110
144
 
@@ -117,6 +151,7 @@ project documentation and coding standards for better consistency.
117
151
 
118
152
  Once the plan is approved:
119
153
 
154
+ - **Update `task.yml`**: set `status: completed`, `plan_path: [path to plan file]`, `updated: [now]`
120
155
  - Implementation begins based on the plan
121
156
  - Standards are applied during coding
122
157
 
@@ -59,7 +59,6 @@ Auto-classifies tasks and routes to the appropriate workflow orchestrator. Suppo
59
59
  | performance | `performance` |
60
60
  | migration | `migration` |
61
61
  | research | `research` |
62
- | product-design | `product-design` |
63
62
 
64
63
  ---
65
64
 
@@ -93,13 +92,12 @@ Auto-classifies tasks and routes to the appropriate workflow orchestrator. Suppo
93
92
  1. Read `orchestrator-state.yml` from task folder
94
93
  2. Determine workflow type from folder path:
95
94
 
96
- | Folder | Workflow Type |
97
- | ----------------- | -------------- |
98
- | `development/` | development |
99
- | `performance/` | performance |
100
- | `migrations/` | migration |
101
- | `research/` | research |
102
- | `product-design/` | product-design |
95
+ | Folder | Workflow Type |
96
+ | -------------- | ------------- |
97
+ | `development/` | development |
98
+ | `performance/` | performance |
99
+ | `migrations/` | migration |
100
+ | `research/` | research |
103
101
 
104
102
  3. Extract status from state file:
105
103
  - `completed`: null = in-progress, timestamp = finished
@@ -177,7 +175,7 @@ The subagent will:
177
175
 
178
176
  ```yaml
179
177
  classification:
180
- task_type: [development|performance|migration|research|product-design]
178
+ task_type: [development|performance|migration|research]
181
179
  confidence: [percentage]
182
180
  reasoning: [explanation]
183
181
  ```
@@ -217,7 +215,6 @@ Use question with options:
217
215
  2. Performance - Optimize speed/efficiency
218
216
  3. Migration - Move to new tech/pattern
219
217
  4. Research - Investigate and document findings
220
- 5. Product Design - Design features or products before building them
221
218
 
222
219
  Then route to selected workflow using Skill tool.
223
220
  ```
@@ -236,13 +233,12 @@ Display:
236
233
 
237
234
  ## Resume Skill Reference
238
235
 
239
- | Workflow Type | Skill | Args |
240
- | -------------- | ---------------- | --------------------------------------------------- |
241
- | development | `development` | `--resume [path] [--from=PHASE] [--reset-attempts]` |
242
- | performance | `performance` | `--resume [path] [--from=PHASE]` |
243
- | migration | `migration` | `--resume [path] [--from=PHASE]` |
244
- | research | `research` | `--resume [path] [--from=PHASE]` |
245
- | product-design | `product-design` | `--resume [path] [--from=PHASE]` |
236
+ | Workflow Type | Skill | Args |
237
+ | ------------- | ------------- | --------------------------------------------------- |
238
+ | development | `development` | `--resume [path] [--from=PHASE] [--reset-attempts]` |
239
+ | performance | `performance` | `--resume [path] [--from=PHASE]` |
240
+ | migration | `migration` | `--resume [path] [--from=PHASE]` |
241
+ | research | `research` | `--resume [path] [--from=PHASE]` |
246
242
 
247
243
  ---
248
244
 
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ import path from "node:path";
6
6
  import fs from "node:fs";
7
7
  import { fileURLToPath } from "url";
8
8
  import matter from "gray-matter";
9
+ import { verify_template } from "./tools/verify_template";
9
10
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
10
11
  const PLUGIN_ROOT = __dirname; // Points to dist/ where skills/commands/agents are copied
11
12
  /**
@@ -72,6 +73,9 @@ const prepareAgent = ({ data, content }, smallModel) => {
72
73
  const OwflowPlugin = async ({ $, directory }) => {
73
74
  const agentBySession = new Map();
74
75
  return {
76
+ tool: {
77
+ verify_template,
78
+ },
75
79
  /**
76
80
  * Register owflow's skills, commands, and agents so OpenCode discovers
77
81
  * them without requiring manual config file edits.