@codemcp/workflows 6.18.4 → 6.19.2
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/package.json +2 -2
- package/packages/cli/package.json +1 -1
- package/packages/cli/resources/workflows/qrspi.yaml +247 -0
- package/packages/core/package.json +1 -1
- package/packages/core/resources/workflows/qrspi.yaml +247 -0
- package/packages/docs/.vitepress/dist/404.html +2 -2
- package/packages/docs/.vitepress/dist/assets/{app.CAEWYLPb.js → app.CMJFkZ5d.js} +1 -1
- package/packages/docs/.vitepress/dist/assets/chunks/{theme.CshoOl3e.js → theme.BarNEZau.js} +1 -1
- package/packages/docs/.vitepress/dist/assets/workflows_qrspi.md.CPYiTyJ8.js +1 -0
- package/packages/docs/.vitepress/dist/assets/workflows_qrspi.md.CPYiTyJ8.lean.js +1 -0
- package/packages/docs/.vitepress/dist/dev/ARCHITECTURE.html +3 -3
- package/packages/docs/.vitepress/dist/dev/DEVELOPMENT.html +3 -3
- package/packages/docs/.vitepress/dist/dev/LOGGING.html +3 -3
- package/packages/docs/.vitepress/dist/dev/PUBLISHING.html +3 -3
- package/packages/docs/.vitepress/dist/hashmap.json +1 -1
- package/packages/docs/.vitepress/dist/index.html +3 -3
- package/packages/docs/.vitepress/dist/user/advanced-engineering.html +3 -3
- package/packages/docs/.vitepress/dist/user/agent-setup.html +3 -3
- package/packages/docs/.vitepress/dist/user/beads-integration.html +3 -3
- package/packages/docs/.vitepress/dist/user/crowd-mcp-integration.html +3 -3
- package/packages/docs/.vitepress/dist/user/custom-workflows.html +3 -3
- package/packages/docs/.vitepress/dist/user/git-commit-feature.html +3 -3
- package/packages/docs/.vitepress/dist/user/how-it-works.html +3 -3
- package/packages/docs/.vitepress/dist/user/long-term-memory.html +3 -3
- package/packages/docs/.vitepress/dist/user/packaged-workflows.html +3 -3
- package/packages/docs/.vitepress/dist/user/tutorial.html +3 -3
- package/packages/docs/.vitepress/dist/user/workflow-selection.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/adr.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/big-bang-conversion.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/boundary-testing.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/bugfix.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/business-analysis.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/c4-analysis.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/epcc.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/game-beginner.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/greenfield.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/minor.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/posts.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/pr-review.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/qrspi.html +26 -0
- package/packages/docs/.vitepress/dist/workflows/qrspi.yaml +247 -0
- package/packages/docs/.vitepress/dist/workflows/sdd-bugfix-crowd.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/sdd-bugfix.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/sdd-feature-crowd.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/sdd-feature.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/sdd-greenfield-crowd.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/sdd-greenfield.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/skilled-bugfix.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/skilled-epcc.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/skilled-greenfield.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/slides.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/tdd.html +3 -3
- package/packages/docs/.vitepress/dist/workflows/waterfall.html +3 -3
- package/packages/docs/.vitepress/dist/workflows.html +3 -3
- package/packages/docs/package.json +1 -1
- package/packages/mcp-server/package.json +1 -1
- package/packages/mcp-server/resources/workflows/qrspi.yaml +247 -0
- package/packages/opencode-plugin/package.json +1 -1
- package/packages/opencode-plugin/resources/workflows/qrspi.yaml +247 -0
- package/packages/opencode-tui-plugin/package.json +1 -1
- package/packages/visualizer/dist/services/workflow-list.ts +1 -0
- package/packages/visualizer/package.json +1 -1
- package/resources/state-machine-schema.json +29 -0
- package/resources/workflows/qrspi.yaml +247 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codemcp/workflows",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.19.2",
|
|
4
4
|
"description": "A Model Context Protocol server that acts as an intelligent conversation state manager and development guide for LLMs, featuring comprehensive long-term memory with persistent project artifacts",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "packages/cli/dist/index.js",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"typescript": "^5.9.3",
|
|
52
52
|
"vitepress": "^1.6.4",
|
|
53
53
|
"vitest": "4.0.18",
|
|
54
|
-
"@codemcp/workflows-core": "6.
|
|
54
|
+
"@codemcp/workflows-core": "6.19.2"
|
|
55
55
|
},
|
|
56
56
|
"lint-staged": {
|
|
57
57
|
"*.{ts,js,mts,cts,tsx,jsx}": [
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
# yaml-language-server: $schema=../state-machine-schema.json
|
|
2
|
+
---
|
|
3
|
+
name: 'qrspi'
|
|
4
|
+
description: 'Questions, Research, Design, Structure, Plan, Implement — for creative, complex challenges requiring deep alignment before execution'
|
|
5
|
+
initial_state: 'questions'
|
|
6
|
+
|
|
7
|
+
metadata:
|
|
8
|
+
domain: 'code'
|
|
9
|
+
complexity: 'high'
|
|
10
|
+
bestFor:
|
|
11
|
+
- 'Creative and complex challenges'
|
|
12
|
+
- 'Deep alignment before execution'
|
|
13
|
+
- 'Unconventional problems'
|
|
14
|
+
- 'Architecture-heavy features'
|
|
15
|
+
- 'High-stakes changes'
|
|
16
|
+
useCases:
|
|
17
|
+
- 'Designing a novel system architecture'
|
|
18
|
+
- 'Implementing complex multi-domain features'
|
|
19
|
+
- 'Solving problems with unclear requirements'
|
|
20
|
+
- 'Building features requiring extensive stakeholder alignment'
|
|
21
|
+
- 'Refactoring core infrastructure'
|
|
22
|
+
examples:
|
|
23
|
+
- 'Design and implement a new plugin architecture'
|
|
24
|
+
- 'Create a custom workflow engine with validation'
|
|
25
|
+
- 'Refactor monolith to modular services'
|
|
26
|
+
- 'Build a creative AI-powered feature with novel UX'
|
|
27
|
+
|
|
28
|
+
states:
|
|
29
|
+
questions:
|
|
30
|
+
description: 'Clarify intent, scope, and success criteria before any exploration'
|
|
31
|
+
allowed_file_patterns:
|
|
32
|
+
- '**/*.md'
|
|
33
|
+
- '**/*.txt'
|
|
34
|
+
- '**/*.adoc'
|
|
35
|
+
default_instructions: |
|
|
36
|
+
**Principle**: Clarify intent before exploring solutions.
|
|
37
|
+
|
|
38
|
+
Document in the development plan: the problem being solved, success criteria, constraints, and any clarifying questions asked. Use `$REQUIREMENTS_DOC` as context only — do not modify it.
|
|
39
|
+
|
|
40
|
+
Do not research, design, plan, or write code.
|
|
41
|
+
transitions:
|
|
42
|
+
- trigger: 'questions_answered'
|
|
43
|
+
to: 'research'
|
|
44
|
+
transition_reason: 'Intent clarified, ready to gather facts'
|
|
45
|
+
|
|
46
|
+
- trigger: 'abandon_feature'
|
|
47
|
+
to: 'questions'
|
|
48
|
+
instructions: 'Feature abandoned. Reset for new tasks.'
|
|
49
|
+
transition_reason: 'User abandoned feature during questions'
|
|
50
|
+
|
|
51
|
+
research:
|
|
52
|
+
description: 'Gather facts without forming conclusions or proposing solutions'
|
|
53
|
+
allowed_file_patterns:
|
|
54
|
+
- '**/*.md'
|
|
55
|
+
- '**/*.txt'
|
|
56
|
+
- '**/*.adoc'
|
|
57
|
+
default_instructions: |
|
|
58
|
+
**Principle**: Gather facts before forming opinions.
|
|
59
|
+
|
|
60
|
+
Explore the codebase, patterns, and relevant documentation. Document findings as facts (not opinions) in the development plan. Highlight what requires design decisions. Use `$REQUIREMENTS_DOC` as context only — do not modify it.
|
|
61
|
+
|
|
62
|
+
Do not propose solutions, make design decisions, or write code.
|
|
63
|
+
transitions:
|
|
64
|
+
- trigger: 'research_complete'
|
|
65
|
+
to: 'design'
|
|
66
|
+
transition_reason: 'Facts gathered, ready for design discussion'
|
|
67
|
+
|
|
68
|
+
- trigger: 'need_more_questions'
|
|
69
|
+
to: 'questions'
|
|
70
|
+
additional_instructions: 'Focus on the specific areas where intent is still unclear.'
|
|
71
|
+
transition_reason: 'Research revealed gaps in understanding'
|
|
72
|
+
|
|
73
|
+
- trigger: 'abandon_feature'
|
|
74
|
+
to: 'questions'
|
|
75
|
+
instructions: 'Feature abandoned. Reset for new tasks.'
|
|
76
|
+
transition_reason: 'User abandoned feature during research'
|
|
77
|
+
|
|
78
|
+
design:
|
|
79
|
+
description: 'Explore options and reach consensus on WHAT and high-level HOW'
|
|
80
|
+
allowed_file_patterns:
|
|
81
|
+
- '**/*.md'
|
|
82
|
+
- '**/*.txt'
|
|
83
|
+
- '**/*.adoc'
|
|
84
|
+
default_instructions: |
|
|
85
|
+
**Principle**: Align on WHAT and WHY before deciding detailed HOW.
|
|
86
|
+
|
|
87
|
+
Propose 2-3 viable high-level approaches with trade-offs. Reference `$DESIGN_DOC` and `$ARCHITECTURE_DOC` if they exist. Reach consensus with the user on the direction. On loop-back from `need_design_changes`, update those docs if they exist.
|
|
88
|
+
|
|
89
|
+
Document the agreed direction in the development plan.
|
|
90
|
+
|
|
91
|
+
Do not plan detailed implementation or write code.
|
|
92
|
+
transitions:
|
|
93
|
+
- trigger: 'design_approved'
|
|
94
|
+
to: 'structure'
|
|
95
|
+
transition_reason: 'Design direction approved, ready to decompose'
|
|
96
|
+
review_perspectives:
|
|
97
|
+
- perspective: 'product_owner'
|
|
98
|
+
prompt: 'Review whether the proposed design aligns with user goals, business value, and intended outcomes. Ensure the solution direction serves the actual need.'
|
|
99
|
+
|
|
100
|
+
- trigger: 'need_research'
|
|
101
|
+
to: 'research'
|
|
102
|
+
additional_instructions: 'Focus on the specific gaps that block design consensus.'
|
|
103
|
+
transition_reason: 'Design discussion revealed need for more research'
|
|
104
|
+
|
|
105
|
+
- trigger: 'abandon_feature'
|
|
106
|
+
to: 'questions'
|
|
107
|
+
instructions: 'Feature abandoned. Reset for new tasks.'
|
|
108
|
+
transition_reason: 'User abandoned feature during design'
|
|
109
|
+
|
|
110
|
+
structure:
|
|
111
|
+
description: 'Decompose the approved design into end-to-end vertical slices'
|
|
112
|
+
allowed_file_patterns:
|
|
113
|
+
- '**/*.md'
|
|
114
|
+
- '**/*.txt'
|
|
115
|
+
- '**/*.adoc'
|
|
116
|
+
default_instructions: |
|
|
117
|
+
**Principle**: Decompose into end-to-end, testable units before planning implementation details.
|
|
118
|
+
|
|
119
|
+
Define 1-5 vertical slices that each deliver user-visible behavior independently. Describe what each slice delivers, which components it touches, and how it will be tested end-to-end. Reference `$ARCHITECTURE_DOC` if it exists.
|
|
120
|
+
|
|
121
|
+
Document slice definitions in the development plan.
|
|
122
|
+
|
|
123
|
+
Do not plan implementation tasks or write code.
|
|
124
|
+
transitions:
|
|
125
|
+
- trigger: 'structure_defined'
|
|
126
|
+
to: 'plan'
|
|
127
|
+
transition_reason: 'Slices defined, ready for detailed planning'
|
|
128
|
+
|
|
129
|
+
- trigger: 'need_design_changes'
|
|
130
|
+
to: 'design'
|
|
131
|
+
additional_instructions: 'The design approach makes slicing difficult. Revisit the high-level approach with the user.'
|
|
132
|
+
transition_reason: 'Structure work revealed design gaps'
|
|
133
|
+
|
|
134
|
+
- trigger: 'abandon_feature'
|
|
135
|
+
to: 'questions'
|
|
136
|
+
instructions: 'Feature abandoned. Reset for new tasks.'
|
|
137
|
+
transition_reason: 'User abandoned feature during structure'
|
|
138
|
+
|
|
139
|
+
plan:
|
|
140
|
+
description: 'Create a detailed implementation plan per vertical slice'
|
|
141
|
+
allowed_file_patterns:
|
|
142
|
+
- '**/*.md'
|
|
143
|
+
- '**/*.txt'
|
|
144
|
+
- '**/*.adoc'
|
|
145
|
+
default_instructions: |
|
|
146
|
+
**Principle**: Define detailed HOW per slice without changing the design direction.
|
|
147
|
+
|
|
148
|
+
For each vertical slice, define actionable tasks, dependencies, and risks. If any existing document contradicts what is needed, document the contradiction in the development plan and use `need_design_changes`.
|
|
149
|
+
|
|
150
|
+
Document the plan in the development plan.
|
|
151
|
+
|
|
152
|
+
Do not change the design direction or write code.
|
|
153
|
+
transitions:
|
|
154
|
+
- trigger: 'plan_complete'
|
|
155
|
+
to: 'implement'
|
|
156
|
+
transition_reason: 'Plan complete, ready for coding'
|
|
157
|
+
review_perspectives:
|
|
158
|
+
- perspective: 'architect'
|
|
159
|
+
prompt: 'Review implementation strategy, design decisions, and integration approach for soundness and maintainability. Ensure the plan aligns with existing system architecture and follows best practices.'
|
|
160
|
+
- perspective: 'security_expert'
|
|
161
|
+
prompt: 'Assess security considerations and potential risks in the planned implementation approach. Review data handling, authentication, and potential vulnerabilities.'
|
|
162
|
+
|
|
163
|
+
- trigger: 'need_design_changes'
|
|
164
|
+
to: 'design'
|
|
165
|
+
additional_instructions: 'The approved design direction is unworkable for the planned slices. Revisit the high-level approach with the user.'
|
|
166
|
+
transition_reason: 'Planning revealed fundamental flaws in design direction'
|
|
167
|
+
|
|
168
|
+
- trigger: 'need_restructuring'
|
|
169
|
+
to: 'structure'
|
|
170
|
+
additional_instructions: 'The slice boundaries are wrong. Redefine the vertical slices.'
|
|
171
|
+
transition_reason: 'Planning revealed flaws in slice boundaries'
|
|
172
|
+
|
|
173
|
+
- trigger: 'abandon_feature'
|
|
174
|
+
to: 'questions'
|
|
175
|
+
instructions: 'Feature abandoned. Reset for new tasks.'
|
|
176
|
+
transition_reason: 'User abandoned feature during planning'
|
|
177
|
+
|
|
178
|
+
implement:
|
|
179
|
+
description: 'Build the solution slice by slice'
|
|
180
|
+
allowed_file_patterns:
|
|
181
|
+
- '**/*'
|
|
182
|
+
default_instructions: |
|
|
183
|
+
**Principle**: Execute the plan one slice at a time; delegate each slice to a fresh context.
|
|
184
|
+
|
|
185
|
+
Build each vertical slice end-to-end before moving to the next. Delegate each slice to a fresh agent session with focused context. Reference `$DESIGN_DOC`, `$ARCHITECTURE_DOC`, and `$REQUIREMENTS_DOC` if they exist. Prevent regressions via build, lint, and tests.
|
|
186
|
+
|
|
187
|
+
Adapt tactics within slices. Loop back via `need_design_changes` only if the high-level approach is fundamentally flawed.
|
|
188
|
+
|
|
189
|
+
Document progress in the development plan.
|
|
190
|
+
transitions:
|
|
191
|
+
- trigger: 'implementation_complete'
|
|
192
|
+
to: 'commit'
|
|
193
|
+
transition_reason: 'Implementation complete, ready for finalization'
|
|
194
|
+
review_perspectives:
|
|
195
|
+
- perspective: 'senior_software_developer'
|
|
196
|
+
prompt: 'Review code quality, best practices, testing coverage, and readiness for production deployment. Ensure the implementation follows coding standards and is maintainable.'
|
|
197
|
+
- perspective: 'performance_engineer'
|
|
198
|
+
prompt: 'Evaluate performance impact, resource efficiency, and scalability of the implemented solution. Check for potential bottlenecks or optimization opportunities.'
|
|
199
|
+
|
|
200
|
+
- trigger: 'need_replanning'
|
|
201
|
+
to: 'plan'
|
|
202
|
+
additional_instructions: 'Adjust the plan based on what you learned during coding. Document changes and reasons.'
|
|
203
|
+
transition_reason: 'Implementation revealed need to revise the plan'
|
|
204
|
+
|
|
205
|
+
- trigger: 'need_design_changes'
|
|
206
|
+
to: 'design'
|
|
207
|
+
additional_instructions: 'The high-level design approach is fundamentally flawed. Revisit design decisions with the user.'
|
|
208
|
+
transition_reason: 'Implementation revealed the approved design is unworkable'
|
|
209
|
+
|
|
210
|
+
- trigger: 'need_more_research'
|
|
211
|
+
to: 'research'
|
|
212
|
+
additional_instructions: 'Focus on the specific areas blocking implementation progress.'
|
|
213
|
+
transition_reason: 'Implementation revealed need for more research'
|
|
214
|
+
|
|
215
|
+
- trigger: 'abandon_feature'
|
|
216
|
+
to: 'questions'
|
|
217
|
+
instructions: 'Feature abandoned. Clean up incomplete code and reset for new tasks.'
|
|
218
|
+
transition_reason: 'User abandoned feature during implementation'
|
|
219
|
+
|
|
220
|
+
commit:
|
|
221
|
+
description: 'Cleanup, documentation finalization, and delivery'
|
|
222
|
+
allowed_file_patterns:
|
|
223
|
+
- '**/*'
|
|
224
|
+
default_instructions: |
|
|
225
|
+
**Principle**: Leave the codebase cleaner than you found it.
|
|
226
|
+
|
|
227
|
+
**Cleanup**: Remove debug output, temporary code, test code blocks, and completed TODOs. Address or document any remaining FIXMEs.
|
|
228
|
+
|
|
229
|
+
**Documentation**: Update `$REQUIREMENTS_DOC`, `$ARCHITECTURE_DOC`, and `$DESIGN_DOC` if they exist and changed during implementation. Otherwise, document changes in the development plan. Ensure docs reflect the final implemented state, not the development process.
|
|
230
|
+
|
|
231
|
+
**Validation**: Run tests to ensure no regressions. Verify the development plan is accurate.
|
|
232
|
+
|
|
233
|
+
Do not add new features.
|
|
234
|
+
transitions:
|
|
235
|
+
- trigger: 'commit_complete'
|
|
236
|
+
to: 'questions'
|
|
237
|
+
transition_reason: 'Feature delivered, ready for next task'
|
|
238
|
+
|
|
239
|
+
- trigger: 'need_code_changes'
|
|
240
|
+
to: 'implement'
|
|
241
|
+
additional_instructions: 'Fix the problems identified during final review.'
|
|
242
|
+
transition_reason: 'Final review found issues requiring code changes'
|
|
243
|
+
|
|
244
|
+
- trigger: 'abandon_feature'
|
|
245
|
+
to: 'questions'
|
|
246
|
+
instructions: 'Feature abandoned. Clean up artifacts and reset for new tasks.'
|
|
247
|
+
transition_reason: 'User abandoned feature during finalization'
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
# yaml-language-server: $schema=../state-machine-schema.json
|
|
2
|
+
---
|
|
3
|
+
name: 'qrspi'
|
|
4
|
+
description: 'Questions, Research, Design, Structure, Plan, Implement — for creative, complex challenges requiring deep alignment before execution'
|
|
5
|
+
initial_state: 'questions'
|
|
6
|
+
|
|
7
|
+
metadata:
|
|
8
|
+
domain: 'code'
|
|
9
|
+
complexity: 'high'
|
|
10
|
+
bestFor:
|
|
11
|
+
- 'Creative and complex challenges'
|
|
12
|
+
- 'Deep alignment before execution'
|
|
13
|
+
- 'Unconventional problems'
|
|
14
|
+
- 'Architecture-heavy features'
|
|
15
|
+
- 'High-stakes changes'
|
|
16
|
+
useCases:
|
|
17
|
+
- 'Designing a novel system architecture'
|
|
18
|
+
- 'Implementing complex multi-domain features'
|
|
19
|
+
- 'Solving problems with unclear requirements'
|
|
20
|
+
- 'Building features requiring extensive stakeholder alignment'
|
|
21
|
+
- 'Refactoring core infrastructure'
|
|
22
|
+
examples:
|
|
23
|
+
- 'Design and implement a new plugin architecture'
|
|
24
|
+
- 'Create a custom workflow engine with validation'
|
|
25
|
+
- 'Refactor monolith to modular services'
|
|
26
|
+
- 'Build a creative AI-powered feature with novel UX'
|
|
27
|
+
|
|
28
|
+
states:
|
|
29
|
+
questions:
|
|
30
|
+
description: 'Clarify intent, scope, and success criteria before any exploration'
|
|
31
|
+
allowed_file_patterns:
|
|
32
|
+
- '**/*.md'
|
|
33
|
+
- '**/*.txt'
|
|
34
|
+
- '**/*.adoc'
|
|
35
|
+
default_instructions: |
|
|
36
|
+
**Principle**: Clarify intent before exploring solutions.
|
|
37
|
+
|
|
38
|
+
Document in the development plan: the problem being solved, success criteria, constraints, and any clarifying questions asked. Use `$REQUIREMENTS_DOC` as context only — do not modify it.
|
|
39
|
+
|
|
40
|
+
Do not research, design, plan, or write code.
|
|
41
|
+
transitions:
|
|
42
|
+
- trigger: 'questions_answered'
|
|
43
|
+
to: 'research'
|
|
44
|
+
transition_reason: 'Intent clarified, ready to gather facts'
|
|
45
|
+
|
|
46
|
+
- trigger: 'abandon_feature'
|
|
47
|
+
to: 'questions'
|
|
48
|
+
instructions: 'Feature abandoned. Reset for new tasks.'
|
|
49
|
+
transition_reason: 'User abandoned feature during questions'
|
|
50
|
+
|
|
51
|
+
research:
|
|
52
|
+
description: 'Gather facts without forming conclusions or proposing solutions'
|
|
53
|
+
allowed_file_patterns:
|
|
54
|
+
- '**/*.md'
|
|
55
|
+
- '**/*.txt'
|
|
56
|
+
- '**/*.adoc'
|
|
57
|
+
default_instructions: |
|
|
58
|
+
**Principle**: Gather facts before forming opinions.
|
|
59
|
+
|
|
60
|
+
Explore the codebase, patterns, and relevant documentation. Document findings as facts (not opinions) in the development plan. Highlight what requires design decisions. Use `$REQUIREMENTS_DOC` as context only — do not modify it.
|
|
61
|
+
|
|
62
|
+
Do not propose solutions, make design decisions, or write code.
|
|
63
|
+
transitions:
|
|
64
|
+
- trigger: 'research_complete'
|
|
65
|
+
to: 'design'
|
|
66
|
+
transition_reason: 'Facts gathered, ready for design discussion'
|
|
67
|
+
|
|
68
|
+
- trigger: 'need_more_questions'
|
|
69
|
+
to: 'questions'
|
|
70
|
+
additional_instructions: 'Focus on the specific areas where intent is still unclear.'
|
|
71
|
+
transition_reason: 'Research revealed gaps in understanding'
|
|
72
|
+
|
|
73
|
+
- trigger: 'abandon_feature'
|
|
74
|
+
to: 'questions'
|
|
75
|
+
instructions: 'Feature abandoned. Reset for new tasks.'
|
|
76
|
+
transition_reason: 'User abandoned feature during research'
|
|
77
|
+
|
|
78
|
+
design:
|
|
79
|
+
description: 'Explore options and reach consensus on WHAT and high-level HOW'
|
|
80
|
+
allowed_file_patterns:
|
|
81
|
+
- '**/*.md'
|
|
82
|
+
- '**/*.txt'
|
|
83
|
+
- '**/*.adoc'
|
|
84
|
+
default_instructions: |
|
|
85
|
+
**Principle**: Align on WHAT and WHY before deciding detailed HOW.
|
|
86
|
+
|
|
87
|
+
Propose 2-3 viable high-level approaches with trade-offs. Reference `$DESIGN_DOC` and `$ARCHITECTURE_DOC` if they exist. Reach consensus with the user on the direction. On loop-back from `need_design_changes`, update those docs if they exist.
|
|
88
|
+
|
|
89
|
+
Document the agreed direction in the development plan.
|
|
90
|
+
|
|
91
|
+
Do not plan detailed implementation or write code.
|
|
92
|
+
transitions:
|
|
93
|
+
- trigger: 'design_approved'
|
|
94
|
+
to: 'structure'
|
|
95
|
+
transition_reason: 'Design direction approved, ready to decompose'
|
|
96
|
+
review_perspectives:
|
|
97
|
+
- perspective: 'product_owner'
|
|
98
|
+
prompt: 'Review whether the proposed design aligns with user goals, business value, and intended outcomes. Ensure the solution direction serves the actual need.'
|
|
99
|
+
|
|
100
|
+
- trigger: 'need_research'
|
|
101
|
+
to: 'research'
|
|
102
|
+
additional_instructions: 'Focus on the specific gaps that block design consensus.'
|
|
103
|
+
transition_reason: 'Design discussion revealed need for more research'
|
|
104
|
+
|
|
105
|
+
- trigger: 'abandon_feature'
|
|
106
|
+
to: 'questions'
|
|
107
|
+
instructions: 'Feature abandoned. Reset for new tasks.'
|
|
108
|
+
transition_reason: 'User abandoned feature during design'
|
|
109
|
+
|
|
110
|
+
structure:
|
|
111
|
+
description: 'Decompose the approved design into end-to-end vertical slices'
|
|
112
|
+
allowed_file_patterns:
|
|
113
|
+
- '**/*.md'
|
|
114
|
+
- '**/*.txt'
|
|
115
|
+
- '**/*.adoc'
|
|
116
|
+
default_instructions: |
|
|
117
|
+
**Principle**: Decompose into end-to-end, testable units before planning implementation details.
|
|
118
|
+
|
|
119
|
+
Define 1-5 vertical slices that each deliver user-visible behavior independently. Describe what each slice delivers, which components it touches, and how it will be tested end-to-end. Reference `$ARCHITECTURE_DOC` if it exists.
|
|
120
|
+
|
|
121
|
+
Document slice definitions in the development plan.
|
|
122
|
+
|
|
123
|
+
Do not plan implementation tasks or write code.
|
|
124
|
+
transitions:
|
|
125
|
+
- trigger: 'structure_defined'
|
|
126
|
+
to: 'plan'
|
|
127
|
+
transition_reason: 'Slices defined, ready for detailed planning'
|
|
128
|
+
|
|
129
|
+
- trigger: 'need_design_changes'
|
|
130
|
+
to: 'design'
|
|
131
|
+
additional_instructions: 'The design approach makes slicing difficult. Revisit the high-level approach with the user.'
|
|
132
|
+
transition_reason: 'Structure work revealed design gaps'
|
|
133
|
+
|
|
134
|
+
- trigger: 'abandon_feature'
|
|
135
|
+
to: 'questions'
|
|
136
|
+
instructions: 'Feature abandoned. Reset for new tasks.'
|
|
137
|
+
transition_reason: 'User abandoned feature during structure'
|
|
138
|
+
|
|
139
|
+
plan:
|
|
140
|
+
description: 'Create a detailed implementation plan per vertical slice'
|
|
141
|
+
allowed_file_patterns:
|
|
142
|
+
- '**/*.md'
|
|
143
|
+
- '**/*.txt'
|
|
144
|
+
- '**/*.adoc'
|
|
145
|
+
default_instructions: |
|
|
146
|
+
**Principle**: Define detailed HOW per slice without changing the design direction.
|
|
147
|
+
|
|
148
|
+
For each vertical slice, define actionable tasks, dependencies, and risks. If any existing document contradicts what is needed, document the contradiction in the development plan and use `need_design_changes`.
|
|
149
|
+
|
|
150
|
+
Document the plan in the development plan.
|
|
151
|
+
|
|
152
|
+
Do not change the design direction or write code.
|
|
153
|
+
transitions:
|
|
154
|
+
- trigger: 'plan_complete'
|
|
155
|
+
to: 'implement'
|
|
156
|
+
transition_reason: 'Plan complete, ready for coding'
|
|
157
|
+
review_perspectives:
|
|
158
|
+
- perspective: 'architect'
|
|
159
|
+
prompt: 'Review implementation strategy, design decisions, and integration approach for soundness and maintainability. Ensure the plan aligns with existing system architecture and follows best practices.'
|
|
160
|
+
- perspective: 'security_expert'
|
|
161
|
+
prompt: 'Assess security considerations and potential risks in the planned implementation approach. Review data handling, authentication, and potential vulnerabilities.'
|
|
162
|
+
|
|
163
|
+
- trigger: 'need_design_changes'
|
|
164
|
+
to: 'design'
|
|
165
|
+
additional_instructions: 'The approved design direction is unworkable for the planned slices. Revisit the high-level approach with the user.'
|
|
166
|
+
transition_reason: 'Planning revealed fundamental flaws in design direction'
|
|
167
|
+
|
|
168
|
+
- trigger: 'need_restructuring'
|
|
169
|
+
to: 'structure'
|
|
170
|
+
additional_instructions: 'The slice boundaries are wrong. Redefine the vertical slices.'
|
|
171
|
+
transition_reason: 'Planning revealed flaws in slice boundaries'
|
|
172
|
+
|
|
173
|
+
- trigger: 'abandon_feature'
|
|
174
|
+
to: 'questions'
|
|
175
|
+
instructions: 'Feature abandoned. Reset for new tasks.'
|
|
176
|
+
transition_reason: 'User abandoned feature during planning'
|
|
177
|
+
|
|
178
|
+
implement:
|
|
179
|
+
description: 'Build the solution slice by slice'
|
|
180
|
+
allowed_file_patterns:
|
|
181
|
+
- '**/*'
|
|
182
|
+
default_instructions: |
|
|
183
|
+
**Principle**: Execute the plan one slice at a time; delegate each slice to a fresh context.
|
|
184
|
+
|
|
185
|
+
Build each vertical slice end-to-end before moving to the next. Delegate each slice to a fresh agent session with focused context. Reference `$DESIGN_DOC`, `$ARCHITECTURE_DOC`, and `$REQUIREMENTS_DOC` if they exist. Prevent regressions via build, lint, and tests.
|
|
186
|
+
|
|
187
|
+
Adapt tactics within slices. Loop back via `need_design_changes` only if the high-level approach is fundamentally flawed.
|
|
188
|
+
|
|
189
|
+
Document progress in the development plan.
|
|
190
|
+
transitions:
|
|
191
|
+
- trigger: 'implementation_complete'
|
|
192
|
+
to: 'commit'
|
|
193
|
+
transition_reason: 'Implementation complete, ready for finalization'
|
|
194
|
+
review_perspectives:
|
|
195
|
+
- perspective: 'senior_software_developer'
|
|
196
|
+
prompt: 'Review code quality, best practices, testing coverage, and readiness for production deployment. Ensure the implementation follows coding standards and is maintainable.'
|
|
197
|
+
- perspective: 'performance_engineer'
|
|
198
|
+
prompt: 'Evaluate performance impact, resource efficiency, and scalability of the implemented solution. Check for potential bottlenecks or optimization opportunities.'
|
|
199
|
+
|
|
200
|
+
- trigger: 'need_replanning'
|
|
201
|
+
to: 'plan'
|
|
202
|
+
additional_instructions: 'Adjust the plan based on what you learned during coding. Document changes and reasons.'
|
|
203
|
+
transition_reason: 'Implementation revealed need to revise the plan'
|
|
204
|
+
|
|
205
|
+
- trigger: 'need_design_changes'
|
|
206
|
+
to: 'design'
|
|
207
|
+
additional_instructions: 'The high-level design approach is fundamentally flawed. Revisit design decisions with the user.'
|
|
208
|
+
transition_reason: 'Implementation revealed the approved design is unworkable'
|
|
209
|
+
|
|
210
|
+
- trigger: 'need_more_research'
|
|
211
|
+
to: 'research'
|
|
212
|
+
additional_instructions: 'Focus on the specific areas blocking implementation progress.'
|
|
213
|
+
transition_reason: 'Implementation revealed need for more research'
|
|
214
|
+
|
|
215
|
+
- trigger: 'abandon_feature'
|
|
216
|
+
to: 'questions'
|
|
217
|
+
instructions: 'Feature abandoned. Clean up incomplete code and reset for new tasks.'
|
|
218
|
+
transition_reason: 'User abandoned feature during implementation'
|
|
219
|
+
|
|
220
|
+
commit:
|
|
221
|
+
description: 'Cleanup, documentation finalization, and delivery'
|
|
222
|
+
allowed_file_patterns:
|
|
223
|
+
- '**/*'
|
|
224
|
+
default_instructions: |
|
|
225
|
+
**Principle**: Leave the codebase cleaner than you found it.
|
|
226
|
+
|
|
227
|
+
**Cleanup**: Remove debug output, temporary code, test code blocks, and completed TODOs. Address or document any remaining FIXMEs.
|
|
228
|
+
|
|
229
|
+
**Documentation**: Update `$REQUIREMENTS_DOC`, `$ARCHITECTURE_DOC`, and `$DESIGN_DOC` if they exist and changed during implementation. Otherwise, document changes in the development plan. Ensure docs reflect the final implemented state, not the development process.
|
|
230
|
+
|
|
231
|
+
**Validation**: Run tests to ensure no regressions. Verify the development plan is accurate.
|
|
232
|
+
|
|
233
|
+
Do not add new features.
|
|
234
|
+
transitions:
|
|
235
|
+
- trigger: 'commit_complete'
|
|
236
|
+
to: 'questions'
|
|
237
|
+
transition_reason: 'Feature delivered, ready for next task'
|
|
238
|
+
|
|
239
|
+
- trigger: 'need_code_changes'
|
|
240
|
+
to: 'implement'
|
|
241
|
+
additional_instructions: 'Fix the problems identified during final review.'
|
|
242
|
+
transition_reason: 'Final review found issues requiring code changes'
|
|
243
|
+
|
|
244
|
+
- trigger: 'abandon_feature'
|
|
245
|
+
to: 'questions'
|
|
246
|
+
instructions: 'Feature abandoned. Clean up artifacts and reset for new tasks.'
|
|
247
|
+
transition_reason: 'User abandoned feature during finalization'
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<link rel="preload stylesheet" href="/workflows/assets/style.DfNfC54K.css" as="style">
|
|
10
10
|
<link rel="preload stylesheet" href="/workflows/vp-icons.css" as="style">
|
|
11
11
|
|
|
12
|
-
<script type="module" src="/workflows/assets/app.
|
|
12
|
+
<script type="module" src="/workflows/assets/app.CMJFkZ5d.js"></script>
|
|
13
13
|
<link rel="preload" href="/workflows/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
|
14
14
|
<link rel="icon" href="/workflows/favicon.ico">
|
|
15
15
|
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
</head>
|
|
18
18
|
<body>
|
|
19
19
|
<div id="app"></div>
|
|
20
|
-
<script>window.__VP_HASH_MAP__=JSON.parse("{\"dev_architecture.md\":\"CvNKCNdN\",\"dev_development.md\":\"D_3UnLYh\",\"dev_logging.md\":\"ChgMzoxk\",\"dev_publishing.md\":\"9HHCKtL4\",\"index.md\":\"BqtGZhQl\",\"user_advanced-engineering.md\":\"DSy0uwWe\",\"user_agent-setup.md\":\"Cgzr8dYa\",\"user_beads-integration.md\":\"CB1VJJCp\",\"user_crowd-mcp-integration.md\":\"DPSO9u7p\",\"user_custom-workflows.md\":\"CtvQt5R0\",\"user_git-commit-feature.md\":\"IwIx6MMR\",\"user_how-it-works.md\":\"08ZFhWmJ\",\"user_long-term-memory.md\":\"Tss4q2DM\",\"user_packaged-workflows.md\":\"D8DLEuhH\",\"user_tutorial.md\":\"BTP4OqKB\",\"user_workflow-selection.md\":\"G8vSc8iy\",\"workflows.md\":\"B6jknRdS\",\"workflows_adr.md\":\"DQ73iGUh\",\"workflows_big-bang-conversion.md\":\"BgV6R1KI\",\"workflows_boundary-testing.md\":\"RwhcIDcf\",\"workflows_bugfix.md\":\"sZNWPjvx\",\"workflows_business-analysis.md\":\"C3FBbsiu\",\"workflows_c4-analysis.md\":\"MVyWuWSL\",\"workflows_epcc.md\":\"1mWsuIIR\",\"workflows_game-beginner.md\":\"J4UOyAAT\",\"workflows_greenfield.md\":\"DzJ6V7lb\",\"workflows_minor.md\":\"dYZlfSHT\",\"workflows_posts.md\":\"BrkDZjGs\",\"workflows_pr-review.md\":\"CdYxJ5Yu\",\"workflows_sdd-bugfix-crowd.md\":\"BQH-LJXS\",\"workflows_sdd-bugfix.md\":\"CoPY5TS6\",\"workflows_sdd-feature-crowd.md\":\"CCj9xqan\",\"workflows_sdd-feature.md\":\"Dy8SNaX8\",\"workflows_sdd-greenfield-crowd.md\":\"_lPEQnGj\",\"workflows_sdd-greenfield.md\":\"KStU-OJS\",\"workflows_skilled-bugfix.md\":\"CvCekIa2\",\"workflows_skilled-epcc.md\":\"D7Kg_U7p\",\"workflows_skilled-greenfield.md\":\"C_R8GafG\",\"workflows_slides.md\":\"CScRnwcC\",\"workflows_tdd.md\":\"C_hC07yu\",\"workflows_waterfall.md\":\"nMkWHPRt\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Responsible Vibe MCP\",\"description\":\"Model Context Protocol server for intelligent conversation state management and development guidance\",\"base\":\"/workflows/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"Documentation\",\"link\":\"/\"},{\"text\":\"Workflows\",\"link\":\"/workflows\"},{\"text\":\"Github\",\"link\":\"https://github.com/codemcp/workflows\"}],\"sidebar\":[{\"text\":\"User Guide\",\"items\":[{\"text\":\"Overview\",\"link\":\"/\"},{\"text\":\"How It Works\",\"link\":\"/user/how-it-works\"},{\"text\":\"Agent Setup\",\"link\":\"/user/agent-setup\"},{\"text\":\"Vibe Engineering\",\"link\":\"/user/advanced-engineering\"},{\"text\":\"Long-Term Memory\",\"link\":\"/user/long-term-memory\"},{\"text\":\"Beads-Integration\",\"link\":\"/user/beads-integration\"},{\"text\":\"Tutorial\",\"link\":\"/user/tutorial\"}]},{\"text\":\"Workflows\",\"items\":[{\"text\":\"Workflow-Selection\",\"link\":\"/user/workflow-selection\"},{\"text\":\"Packaged Workflows\",\"link\":\"/user/packaged-workflows\"},{\"text\":\"Custom Workflows\",\"link\":\"/user/custom-workflows\"},{\"text\":\"Explore All Workflows\",\"link\":\"/workflows\"},{\"text\":\"Crowd MCP Integration\",\"link\":\"/user/crowd-mcp-integration\"}]}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
|
20
|
+
<script>window.__VP_HASH_MAP__=JSON.parse("{\"dev_architecture.md\":\"CvNKCNdN\",\"dev_development.md\":\"D_3UnLYh\",\"dev_logging.md\":\"ChgMzoxk\",\"dev_publishing.md\":\"9HHCKtL4\",\"index.md\":\"BqtGZhQl\",\"user_advanced-engineering.md\":\"DSy0uwWe\",\"user_agent-setup.md\":\"Cgzr8dYa\",\"user_beads-integration.md\":\"CB1VJJCp\",\"user_crowd-mcp-integration.md\":\"DPSO9u7p\",\"user_custom-workflows.md\":\"CtvQt5R0\",\"user_git-commit-feature.md\":\"IwIx6MMR\",\"user_how-it-works.md\":\"08ZFhWmJ\",\"user_long-term-memory.md\":\"Tss4q2DM\",\"user_packaged-workflows.md\":\"D8DLEuhH\",\"user_tutorial.md\":\"BTP4OqKB\",\"user_workflow-selection.md\":\"G8vSc8iy\",\"workflows.md\":\"B6jknRdS\",\"workflows_adr.md\":\"DQ73iGUh\",\"workflows_big-bang-conversion.md\":\"BgV6R1KI\",\"workflows_boundary-testing.md\":\"RwhcIDcf\",\"workflows_bugfix.md\":\"sZNWPjvx\",\"workflows_business-analysis.md\":\"C3FBbsiu\",\"workflows_c4-analysis.md\":\"MVyWuWSL\",\"workflows_epcc.md\":\"1mWsuIIR\",\"workflows_game-beginner.md\":\"J4UOyAAT\",\"workflows_greenfield.md\":\"DzJ6V7lb\",\"workflows_minor.md\":\"dYZlfSHT\",\"workflows_posts.md\":\"BrkDZjGs\",\"workflows_pr-review.md\":\"CdYxJ5Yu\",\"workflows_qrspi.md\":\"CPYiTyJ8\",\"workflows_sdd-bugfix-crowd.md\":\"BQH-LJXS\",\"workflows_sdd-bugfix.md\":\"CoPY5TS6\",\"workflows_sdd-feature-crowd.md\":\"CCj9xqan\",\"workflows_sdd-feature.md\":\"Dy8SNaX8\",\"workflows_sdd-greenfield-crowd.md\":\"_lPEQnGj\",\"workflows_sdd-greenfield.md\":\"KStU-OJS\",\"workflows_skilled-bugfix.md\":\"CvCekIa2\",\"workflows_skilled-epcc.md\":\"D7Kg_U7p\",\"workflows_skilled-greenfield.md\":\"C_R8GafG\",\"workflows_slides.md\":\"CScRnwcC\",\"workflows_tdd.md\":\"C_hC07yu\",\"workflows_waterfall.md\":\"nMkWHPRt\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Responsible Vibe MCP\",\"description\":\"Model Context Protocol server for intelligent conversation state management and development guidance\",\"base\":\"/workflows/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"Documentation\",\"link\":\"/\"},{\"text\":\"Workflows\",\"link\":\"/workflows\"},{\"text\":\"Github\",\"link\":\"https://github.com/codemcp/workflows\"}],\"sidebar\":[{\"text\":\"User Guide\",\"items\":[{\"text\":\"Overview\",\"link\":\"/\"},{\"text\":\"How It Works\",\"link\":\"/user/how-it-works\"},{\"text\":\"Agent Setup\",\"link\":\"/user/agent-setup\"},{\"text\":\"Vibe Engineering\",\"link\":\"/user/advanced-engineering\"},{\"text\":\"Long-Term Memory\",\"link\":\"/user/long-term-memory\"},{\"text\":\"Beads-Integration\",\"link\":\"/user/beads-integration\"},{\"text\":\"Tutorial\",\"link\":\"/user/tutorial\"}]},{\"text\":\"Workflows\",\"items\":[{\"text\":\"Workflow-Selection\",\"link\":\"/user/workflow-selection\"},{\"text\":\"Packaged Workflows\",\"link\":\"/user/packaged-workflows\"},{\"text\":\"Custom Workflows\",\"link\":\"/user/custom-workflows\"},{\"text\":\"Explore All Workflows\",\"link\":\"/workflows\"},{\"text\":\"Crowd MCP Integration\",\"link\":\"/user/crowd-mcp-integration\"}]}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
|
21
21
|
|
|
22
22
|
</body>
|
|
23
23
|
</html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{R as p}from"./chunks/theme.
|
|
1
|
+
import{R as p}from"./chunks/theme.BarNEZau.js";import{R as s,a2 as i,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,d as v,u as R,v as w,s as y,ac as C,ad as P,ae as b,a1 as E}from"./chunks/framework.FdfEk_gD.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=R();return w(()=>{y(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),P(),b(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};
|
|
@@ -203,4 +203,4 @@ Please report this to https://github.com/markedjs/marked.`,e){let i="<p>An error
|
|
|
203
203
|
`).join("")}
|
|
204
204
|
</div>
|
|
205
205
|
`:""}
|
|
206
|
-
`)}function y(){r.parentState?(r.selectedElement={type:"state",id:r.parentState.id,data:r.parentState.data},r.parentState=null,f()):C()}function C(){if(r.selectedElement=null,r.parentState=null,typeof document>"u")return;const w=document.querySelector(".side-panel-header");w&&(w.innerHTML="<h2>Details</h2>"),f()}return ue(async()=>{try{const w=new fu,k=document.querySelector("#workflow-selector"),I=document.querySelector("#file-upload"),N=gu("#diagram-canvas"),z=document.querySelector(".side-panel-content"),Y=document.querySelector(".side-panel-header"),q=new mu(N);q.setClickHandler((U,te,W)=>{U==="state"?s({elementType:"node",elementId:te,data:W}):U==="transition"?s({elementType:"transition",elementId:te,data:W}):U==="clear-selection"&&c()});const Ve=async U=>{const te=n.workflows.find(ye=>ye.name===U);if(!te)throw new Error(`Workflow '${U}' not found`);const W=await fetch(te.path);if(!W.ok)throw new Error(`Failed to load workflow: ${W.statusText}`);const Z=await W.text();return en(Z)};let J=null;if(I&&(J={setupEventListeners:()=>{I.addEventListener("change",async U=>{const te=U.target,W=te.files;if(!W||W.length===0)return;const Z=W[0];try{const ie=[".yaml",".yml"],ye=Z.name.toLowerCase();if(!ie.some(rt=>ye.endsWith(rt)))throw new Error("Invalid file type. Please select a .yaml or .yml file.");const Ht=1024*1024;if(Z.size>Ht)throw new Error(`File too large. Maximum size is ${Ht/1024/1024}MB.`);if(Z.size===0)throw new Error("File is empty.");const zt=await new Promise((rt,Dt)=>{const it=new FileReader;it.onload=qt=>{var jt;(jt=qt.target)!=null&&jt.result?rt(qt.target.result):Dt(new Error("Failed to read file content"))},it.onerror=()=>Dt(new Error("Error reading file")),it.readAsText(Z)});if(!zt.trim())throw new Error("Uploaded file is empty");N.innerHTML='<div class="loading-message">Loading uploaded workflow...</div>';const nt=en(zt);r.currentWorkflow=nt,r.selectedElement=null,r.highlightedPath=null,await q.renderWorkflow(nt),k&&(k.value=""),f(),console.log(`Successfully loaded uploaded workflow: ${nt.name||"Unnamed"}`)}catch(ie){console.error("Failed to load uploaded workflow:",ie),N.innerHTML=`<div class="loading-message">Failed to load workflow: ${ie.message}</div>`}finally{te.value=""}})}},J.setupEventListeners()),k&&(console.log("Setting up workflow selector, workflows:",n.workflows),o(),k.addEventListener("change",async U=>{const W=U.target.value;if(!W){N.innerHTML='<div class="loading-message">Select a workflow to visualize</div>';return}try{N.innerHTML='<div class="loading-message">Loading workflow...</div>';const Z=await Ve(W);r.currentWorkflow=Z,r.selectedElement=null,r.highlightedPath=null,await q.renderWorkflow(Z),f()}catch(Z){console.error("Failed to load workflow:",Z),N.innerHTML='<div class="loading-message">Failed to load workflow</div>'}})),n.initialWorkflow)try{const U=await Ve(n.initialWorkflow);r.currentWorkflow=U,r.selectedElement=null,r.highlightedPath=null,await q.renderWorkflow(U),k&&(k.value=n.initialWorkflow),f()}catch(U){console.error("Failed to load initial workflow:",U),N.innerHTML='<div class="loading-message">Failed to load workflow</div>'}i={plantUMLRenderer:q,fileUploadHandler:J,errorHandler:w}}catch(w){console.error("Failed to load WorkflowVisualizerApp:",w);const k=document.getElementById("error-container"),I=document.querySelector(".error-text");k&&I&&(I.textContent="Failed to load workflow visualizer",k.classList.remove("hidden"))}}),Ge(()=>{i=null}),(w,k)=>(u(),g("div",{id:"workflow-visualizer-app",class:O({fullscreen:!e.showSidebar})},[e.hideHeader?$("",!0):(u(),g("header",vu,[...k[0]||(k[0]=[sr('<h1>Workflow Visualizer</h1><div class="workflow-controls"><select id="workflow-selector" class="workflow-selector"><option value="">Select a workflow...</option></select><input type="file" id="file-upload" accept=".yaml,.yml" class="file-upload"><label for="file-upload" class="file-upload-label">Upload YAML</label></div>',2)])])),v("main",{class:O(["app-main",{"no-sidebar":!e.showSidebar}])},[v("div",ku,[v("div",bu,[v("div",xu,H(e.initialWorkflow?"Loading workflow...":"Select a workflow to visualize"),1)])]),e.showSidebar?(u(),g("aside",wu,[...k[1]||(k[1]=[v("div",{class:"side-panel-header"},[v("h2",null,"Details")],-1),v("div",{class:"side-panel-content"},[v("div",{class:"empty-state"}," Click on a state or transition to see details ")],-1)])])):$("",!0)],2),k[2]||(k[2]=v("div",{id:"error-container",class:"error-container hidden"},[v("div",{class:"error-message"},[v("span",{class:"error-text"}),v("button",{class:"error-close"},"×")])],-1))],2))}}),an=["adr","big-bang-conversion","boundary-testing","bugfix","business-analysis","c4-analysis","epcc","game-beginner","greenfield","minor","posts","pr-review","sdd-bugfix-crowd","sdd-bugfix","sdd-feature-crowd","sdd-feature","sdd-greenfield-crowd","sdd-greenfield","skilled-bugfix","skilled-epcc","skilled-greenfield","slides","tdd","waterfall"],_u={key:1,class:"loading-message"},$u=S({__name:"WorkflowVisualizerWithData",props:{showSidebar:{type:Boolean,default:!0},hideHeader:{type:Boolean,default:!1},initialWorkflow:{default:""}},setup(e){const t=B(an.map(n=>({name:n,displayName:n.charAt(0).toUpperCase()+n.slice(1).replace(/-/g," "),path:`/workflows/workflows/${n}.yaml`})));return ue(()=>{console.log("WorkflowVisualizerWithData mounted"),console.log("AVAILABLE_WORKFLOWS:",an),console.log("workflows.value:",t.value),console.log("workflows.value length:",t.value.length),console.log("First workflow:",t.value[0]),window.debugWorkflows=t.value}),(n,i)=>t.value.length>0?(u(),T(h(yu),{key:0,workflows:t.value,"show-sidebar":e.showSidebar,"hide-header":e.hideHeader,"initial-workflow":e.initialWorkflow},null,8,["workflows","show-sidebar","hide-header","initial-workflow"])):(u(),g("div",_u,"Loading workflows..."))}}),Su=P($u,[["__scopeId","data-v-7fa343e6"]]),Pu={extends:Ut,Layout:()=>lr(Ut.Layout,null,{}),enhanceApp({app:e,router:t,siteData:n}){e.component("WorkflowVisualizer",Su)}};export{Pu as R};
|
|
206
|
+
`)}function y(){r.parentState?(r.selectedElement={type:"state",id:r.parentState.id,data:r.parentState.data},r.parentState=null,f()):C()}function C(){if(r.selectedElement=null,r.parentState=null,typeof document>"u")return;const w=document.querySelector(".side-panel-header");w&&(w.innerHTML="<h2>Details</h2>"),f()}return ue(async()=>{try{const w=new fu,k=document.querySelector("#workflow-selector"),I=document.querySelector("#file-upload"),N=gu("#diagram-canvas"),z=document.querySelector(".side-panel-content"),Y=document.querySelector(".side-panel-header"),q=new mu(N);q.setClickHandler((U,te,W)=>{U==="state"?s({elementType:"node",elementId:te,data:W}):U==="transition"?s({elementType:"transition",elementId:te,data:W}):U==="clear-selection"&&c()});const Ve=async U=>{const te=n.workflows.find(ye=>ye.name===U);if(!te)throw new Error(`Workflow '${U}' not found`);const W=await fetch(te.path);if(!W.ok)throw new Error(`Failed to load workflow: ${W.statusText}`);const Z=await W.text();return en(Z)};let J=null;if(I&&(J={setupEventListeners:()=>{I.addEventListener("change",async U=>{const te=U.target,W=te.files;if(!W||W.length===0)return;const Z=W[0];try{const ie=[".yaml",".yml"],ye=Z.name.toLowerCase();if(!ie.some(rt=>ye.endsWith(rt)))throw new Error("Invalid file type. Please select a .yaml or .yml file.");const Ht=1024*1024;if(Z.size>Ht)throw new Error(`File too large. Maximum size is ${Ht/1024/1024}MB.`);if(Z.size===0)throw new Error("File is empty.");const zt=await new Promise((rt,Dt)=>{const it=new FileReader;it.onload=qt=>{var jt;(jt=qt.target)!=null&&jt.result?rt(qt.target.result):Dt(new Error("Failed to read file content"))},it.onerror=()=>Dt(new Error("Error reading file")),it.readAsText(Z)});if(!zt.trim())throw new Error("Uploaded file is empty");N.innerHTML='<div class="loading-message">Loading uploaded workflow...</div>';const nt=en(zt);r.currentWorkflow=nt,r.selectedElement=null,r.highlightedPath=null,await q.renderWorkflow(nt),k&&(k.value=""),f(),console.log(`Successfully loaded uploaded workflow: ${nt.name||"Unnamed"}`)}catch(ie){console.error("Failed to load uploaded workflow:",ie),N.innerHTML=`<div class="loading-message">Failed to load workflow: ${ie.message}</div>`}finally{te.value=""}})}},J.setupEventListeners()),k&&(console.log("Setting up workflow selector, workflows:",n.workflows),o(),k.addEventListener("change",async U=>{const W=U.target.value;if(!W){N.innerHTML='<div class="loading-message">Select a workflow to visualize</div>';return}try{N.innerHTML='<div class="loading-message">Loading workflow...</div>';const Z=await Ve(W);r.currentWorkflow=Z,r.selectedElement=null,r.highlightedPath=null,await q.renderWorkflow(Z),f()}catch(Z){console.error("Failed to load workflow:",Z),N.innerHTML='<div class="loading-message">Failed to load workflow</div>'}})),n.initialWorkflow)try{const U=await Ve(n.initialWorkflow);r.currentWorkflow=U,r.selectedElement=null,r.highlightedPath=null,await q.renderWorkflow(U),k&&(k.value=n.initialWorkflow),f()}catch(U){console.error("Failed to load initial workflow:",U),N.innerHTML='<div class="loading-message">Failed to load workflow</div>'}i={plantUMLRenderer:q,fileUploadHandler:J,errorHandler:w}}catch(w){console.error("Failed to load WorkflowVisualizerApp:",w);const k=document.getElementById("error-container"),I=document.querySelector(".error-text");k&&I&&(I.textContent="Failed to load workflow visualizer",k.classList.remove("hidden"))}}),Ge(()=>{i=null}),(w,k)=>(u(),g("div",{id:"workflow-visualizer-app",class:O({fullscreen:!e.showSidebar})},[e.hideHeader?$("",!0):(u(),g("header",vu,[...k[0]||(k[0]=[sr('<h1>Workflow Visualizer</h1><div class="workflow-controls"><select id="workflow-selector" class="workflow-selector"><option value="">Select a workflow...</option></select><input type="file" id="file-upload" accept=".yaml,.yml" class="file-upload"><label for="file-upload" class="file-upload-label">Upload YAML</label></div>',2)])])),v("main",{class:O(["app-main",{"no-sidebar":!e.showSidebar}])},[v("div",ku,[v("div",bu,[v("div",xu,H(e.initialWorkflow?"Loading workflow...":"Select a workflow to visualize"),1)])]),e.showSidebar?(u(),g("aside",wu,[...k[1]||(k[1]=[v("div",{class:"side-panel-header"},[v("h2",null,"Details")],-1),v("div",{class:"side-panel-content"},[v("div",{class:"empty-state"}," Click on a state or transition to see details ")],-1)])])):$("",!0)],2),k[2]||(k[2]=v("div",{id:"error-container",class:"error-container hidden"},[v("div",{class:"error-message"},[v("span",{class:"error-text"}),v("button",{class:"error-close"},"×")])],-1))],2))}}),an=["adr","big-bang-conversion","boundary-testing","bugfix","business-analysis","c4-analysis","epcc","game-beginner","greenfield","minor","posts","pr-review","qrspi","sdd-bugfix-crowd","sdd-bugfix","sdd-feature-crowd","sdd-feature","sdd-greenfield-crowd","sdd-greenfield","skilled-bugfix","skilled-epcc","skilled-greenfield","slides","tdd","waterfall"],_u={key:1,class:"loading-message"},$u=S({__name:"WorkflowVisualizerWithData",props:{showSidebar:{type:Boolean,default:!0},hideHeader:{type:Boolean,default:!1},initialWorkflow:{default:""}},setup(e){const t=B(an.map(n=>({name:n,displayName:n.charAt(0).toUpperCase()+n.slice(1).replace(/-/g," "),path:`/workflows/workflows/${n}.yaml`})));return ue(()=>{console.log("WorkflowVisualizerWithData mounted"),console.log("AVAILABLE_WORKFLOWS:",an),console.log("workflows.value:",t.value),console.log("workflows.value length:",t.value.length),console.log("First workflow:",t.value[0]),window.debugWorkflows=t.value}),(n,i)=>t.value.length>0?(u(),T(h(yu),{key:0,workflows:t.value,"show-sidebar":e.showSidebar,"hide-header":e.hideHeader,"initial-workflow":e.initialWorkflow},null,8,["workflows","show-sidebar","hide-header","initial-workflow"])):(u(),g("div",_u,"Loading workflows..."))}}),Su=P($u,[["__scopeId","data-v-7fa343e6"]]),Pu={extends:Ut,Layout:()=>lr(Ut.Layout,null,{}),enhanceApp({app:e,router:t,siteData:n}){e.component("WorkflowVisualizer",Su)}};export{Pu as R};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as r,C as a,c as t,o as s,G as l,k as i}from"./chunks/framework.FdfEk_gD.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"layout":false},"headers":[],"params":{"workflow":"qrspi"},"relativePath":"workflows/qrspi.md","filePath":"workflows/[workflow].md"}'),n={name:"workflows/qrspi.md"},_=Object.assign(n,{setup(f){const{params:o}=r();return(c,w)=>{const e=a("WorkflowVisualizer");return s(),t("div",null,[l(e,{showSidebar:!0,hideHeader:!0,initialWorkflow:i(o).workflow},null,8,["initialWorkflow"])])}}});export{u as __pageData,_ as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as r,C as a,c as t,o as s,G as l,k as i}from"./chunks/framework.FdfEk_gD.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{"layout":false},"headers":[],"params":{"workflow":"qrspi"},"relativePath":"workflows/qrspi.md","filePath":"workflows/[workflow].md"}'),n={name:"workflows/qrspi.md"},_=Object.assign(n,{setup(f){const{params:o}=r();return(c,w)=>{const e=a("WorkflowVisualizer");return s(),t("div",null,[l(e,{showSidebar:!0,hideHeader:!0,initialWorkflow:i(o).workflow},null,8,["initialWorkflow"])])}}});export{u as __pageData,_ as default};
|