@polymorphism-tech/morph-spec 7.9.4 → 8.0.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 (211) hide show
  1. package/CLAUDE.md +2 -2
  2. package/README.md +31 -2
  3. package/bin/morph-spec.js +50 -2
  4. package/bin/validate.js +379 -379
  5. package/claude-plugin.json +1 -1
  6. package/docs/CHEATSHEET.md +38 -1
  7. package/docs/QUICKSTART.md +60 -1
  8. package/framework/CLAUDE.md +13 -2
  9. package/framework/MORPH.md +38 -2
  10. package/framework/agents.json +22 -3
  11. package/framework/commands/commit.md +166 -166
  12. package/framework/commands/morph-hotfix.md +39 -0
  13. package/framework/commands/morph-infra.md +215 -215
  14. package/framework/commands/morph-preflight.md +205 -205
  15. package/framework/commands/morph-troubleshoot.md +124 -124
  16. package/framework/hooks/README.md +25 -10
  17. package/framework/hooks/claude-code/core/gate-guard.js +4 -2
  18. package/framework/hooks/claude-code/core/loop-detect.js +2 -1
  19. package/framework/hooks/claude-code/core/post-edit-typecheck.js +14 -5
  20. package/framework/hooks/claude-code/core/tasks-json-guard.js +4 -2
  21. package/framework/hooks/claude-code/core/validate-completion.js +1 -1
  22. package/framework/hooks/claude-code/core/worktree-context.js +160 -0
  23. package/framework/hooks/claude-code/statusline.py +679 -679
  24. package/framework/hooks/claude-code/statusline.sh +11 -11
  25. package/framework/hooks/git/commit-msg/conventional-commits.sh +33 -33
  26. package/framework/hooks/git/pre-commit/agents.sh +25 -25
  27. package/framework/hooks/git/pre-commit/orchestrator.sh +64 -64
  28. package/framework/hooks/git/pre-commit/specs.sh +50 -50
  29. package/framework/hooks/git/pre-push/run-tests.sh +44 -44
  30. package/framework/hooks/shared/activity-logger.js +160 -160
  31. package/framework/hooks/shared/build-check.js +2 -2
  32. package/framework/hooks/shared/hook-response.js +17 -5
  33. package/framework/hooks/shared/payload-utils.js +42 -0
  34. package/framework/hooks/shared/state-reader.js +22 -2
  35. package/framework/hooks/shared/stdin-reader.js +26 -26
  36. package/framework/rubrics/backend.json +41 -41
  37. package/framework/rules/ai-agents-standards.md +45 -45
  38. package/framework/rules/dotnet-templates.md +86 -86
  39. package/framework/rules/frontend-standards.md +13 -13
  40. package/framework/rules/infrastructure-standards.md +27 -27
  41. package/framework/rules/neon-standards.md +25 -25
  42. package/framework/rules/nextjs-standards.md +20 -20
  43. package/framework/rules/nextjs-templates.md +40 -40
  44. package/framework/schemas/feature.schema.json +95 -1
  45. package/framework/skills/core/create-umbraco-lp/SKILL.md +1 -1
  46. package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +1 -1
  47. package/framework/skills/core/morph-apply/SKILL.md +39 -8
  48. package/framework/skills/core/morph-brainstorming/SKILL.md +9 -1
  49. package/framework/skills/core/morph-eval/SKILL.md +6 -1
  50. package/framework/skills/core/morph-hotfix/SKILL.md +136 -0
  51. package/framework/skills/core/morph-implement/SKILL.md +8 -4
  52. package/framework/skills/core/morph-plan/SKILL.md +5 -1
  53. package/framework/skills/core/morph-proposal/SKILL.md +24 -1
  54. package/framework/skills/core/morph-review/SKILL.md +3 -2
  55. package/framework/skills/core/morph-stack-scan/SKILL.md +1 -1
  56. package/framework/skills/core/morph-standards/SKILL.md +1 -1
  57. package/framework/standards/ai-agents/agent-session.md +160 -160
  58. package/framework/standards/ai-agents/batching.md +193 -193
  59. package/framework/standards/ai-agents/context-providers.md +188 -188
  60. package/framework/standards/ai-agents/mcp-server.md +250 -250
  61. package/framework/standards/ai-agents/mcp-tools.md +197 -197
  62. package/framework/standards/ai-agents/middleware-patterns.md +207 -207
  63. package/framework/standards/ai-agents/modalities-image-gen.md +173 -173
  64. package/framework/standards/ai-agents/modalities-speech-to-text.md +171 -171
  65. package/framework/standards/ai-agents/modalities-text-to-speech.md +181 -181
  66. package/framework/standards/ai-agents/modalities-vision.md +201 -201
  67. package/framework/standards/ai-agents/multi-agent-patterns.md +155 -155
  68. package/framework/standards/ai-agents/production.md +275 -275
  69. package/framework/standards/ai-agents/prompts-in-db.md +214 -214
  70. package/framework/standards/ai-agents/providers/model-registry.md +158 -158
  71. package/framework/standards/ai-agents/service-tier-flex.md +135 -135
  72. package/framework/standards/ai-agents/structured-output.md +249 -249
  73. package/framework/standards/ai-agents/sweet-spot.md +109 -109
  74. package/framework/templates/.idea/morph-templates.xml +92 -0
  75. package/framework/templates/.vscode/morph-templates.code-snippets +186 -0
  76. package/framework/templates/IDE-SNIPPETS.md +262 -262
  77. package/framework/templates/REGISTRY.json +0 -62
  78. package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -7
  79. package/framework/templates/code/dotnet/ai-agents/AgentBootstrap.cs.template +39 -39
  80. package/framework/templates/code/dotnet/ai-agents/EmbeddingService.cs.template +68 -68
  81. package/framework/templates/code/dotnet/ai-agents/ModelRegistry.cs.template +117 -117
  82. package/framework/templates/code/dotnet/ai-agents/PromptRepository.cs.template +95 -95
  83. package/framework/templates/code/dotnet/ai-agents/ResilientToolMiddleware.cs.template +61 -61
  84. package/framework/templates/code/dotnet/ai-agents/VectorSearchTool.cs.template +107 -107
  85. package/framework/templates/code/dotnet/ai-agents/model-registry.json.template +58 -58
  86. package/framework/templates/code/dotnet/contracts/contracts-vsa.cs +281 -281
  87. package/framework/templates/code/dotnet/database/migration.cs +83 -83
  88. package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -21
  89. package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -4
  90. package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -4
  91. package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -15
  92. package/framework/templates/code/sql/ai-agents/agent-prompts-migration.sql.template +58 -58
  93. package/framework/templates/code/sql/ai-agents/pgvector-embeddings-migration.sql.template +91 -91
  94. package/framework/templates/code/typescript/contracts.ts +167 -167
  95. package/framework/templates/docs/clarifications.md +253 -253
  96. package/framework/templates/docs/schema-analysis.md +119 -119
  97. package/framework/templates/docs/ui-components.md +52 -52
  98. package/framework/templates/docs/ui-design-system.md +76 -76
  99. package/framework/templates/docs/ui-flows.md +167 -167
  100. package/framework/templates/docs/ui-mockups.md +98 -98
  101. package/framework/templates/feature/decisions.md +122 -122
  102. package/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +43 -43
  103. package/framework/templates/frontend/nextjs/client-component.tsx.hbs +26 -26
  104. package/framework/templates/frontend/nextjs/env.mjs.hbs +32 -32
  105. package/framework/templates/frontend/nextjs/feature-form.tsx.hbs +56 -56
  106. package/framework/templates/frontend/nextjs/page.tsx.hbs +22 -22
  107. package/framework/templates/frontend/nextjs/tsconfig.json.hbs +26 -26
  108. package/framework/templates/frontend/nextjs/use-feature.ts.hbs +54 -54
  109. package/framework/templates/infrastructure/docker/Dockerfile.template +58 -58
  110. package/framework/templates/infrastructure/docker/docker-compose.template.yml +50 -50
  111. package/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -38
  112. package/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -48
  113. package/framework/templates/infrastructure/github/README.md +56 -56
  114. package/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +45 -45
  115. package/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +27 -27
  116. package/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +59 -59
  117. package/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +39 -39
  118. package/framework/templates/integrations/asaas-client.cs +387 -387
  119. package/framework/templates/integrations/asaas-webhook.cs +351 -351
  120. package/framework/templates/meta-prompts/fusion/fusion-agent.md +76 -76
  121. package/framework/templates/meta-prompts/fusion/fusion-aggregator.md +100 -100
  122. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +95 -95
  123. package/framework/templates/project/validate.js +120 -120
  124. package/framework/templates/state.template.json +17 -17
  125. package/framework/templates/ui/design-system.css +226 -226
  126. package/package.json +1 -1
  127. package/src/commands/dashboard/dashboard.js +53 -53
  128. package/src/commands/index.js +13 -13
  129. package/src/commands/mcp/mcp-setup.js +519 -519
  130. package/src/commands/project/checkpoint.js +209 -209
  131. package/src/commands/project/doctor.js +4 -2
  132. package/src/commands/project/init.js +46 -2
  133. package/src/commands/project/update.js +5 -3
  134. package/src/commands/project/worktree.js +1005 -46
  135. package/src/commands/state/advance.js +17 -2
  136. package/src/commands/state/approve.js +18 -1
  137. package/src/commands/state/create.js +158 -14
  138. package/src/commands/state/retype.js +126 -0
  139. package/src/commands/state/score.js +4 -0
  140. package/src/commands/tasks/dag.js +32 -0
  141. package/src/commands/validation/index.js +1 -0
  142. package/src/commands/validation/validate-feature.js +33 -5
  143. package/src/commands/validation/verify.js +190 -0
  144. package/src/core/state/phase-state-machine.js +197 -197
  145. package/src/core/state/state-manager.js +35 -10
  146. package/src/core/templates/template-renderer.js +477 -477
  147. package/src/core/work-types.js +79 -0
  148. package/src/dashboard/app/components/DetailPanel.jsx +11 -11
  149. package/src/dashboard/app/components/FlowGraph.jsx +17 -17
  150. package/src/dashboard/app/components/SearchFilter.jsx +22 -22
  151. package/src/dashboard/app/hooks/useDetailPanel.js +15 -15
  152. package/src/dashboard/app/main.jsx +13 -13
  153. package/src/dashboard/app/pages/AgentMap.jsx +370 -370
  154. package/src/dashboard/app/pages/HookInspector.jsx +418 -418
  155. package/src/dashboard/app/pages/LiveState.jsx +11 -1
  156. package/src/dashboard/app/pages/PhasePipeline.jsx +408 -408
  157. package/src/dashboard/app/pages/RulesMap.jsx +273 -273
  158. package/src/dashboard/app/pages/SkillsLibrary.jsx +366 -366
  159. package/src/dashboard/app/pages/Standards.jsx +332 -332
  160. package/src/dashboard/app/styles/index.css +47 -47
  161. package/src/dashboard/index.html +12 -12
  162. package/src/dashboard/package.json +24 -24
  163. package/src/dashboard/scanner/hooks-scanner.js +41 -41
  164. package/src/dashboard/scanner/phases-scanner.js +15 -15
  165. package/src/dashboard/scanner/rubrics-scanner.js +12 -12
  166. package/src/dashboard/scanner/rules-scanner.js +37 -37
  167. package/src/dashboard/scanner/skills-scanner.js +43 -43
  168. package/src/dashboard/scanner/squads-scanner.js +13 -13
  169. package/src/dashboard/scanner/standards-scanner.js +26 -26
  170. package/src/dashboard/scanner/state-scanner.js +42 -0
  171. package/src/dashboard/vite-plugin-morph-data.js +17 -17
  172. package/src/dashboard/vite.config.js +24 -24
  173. package/src/lib/agents/metrics-aggregator.js +56 -56
  174. package/src/lib/agents/metrics-calculator.js +125 -125
  175. package/src/lib/agents/output-collector.js +73 -73
  176. package/src/lib/detectors/claude-config-detector.js +152 -152
  177. package/src/lib/detectors/design-system-detector.js +231 -231
  178. package/src/lib/detectors/index.js +217 -217
  179. package/src/lib/generators/architecture-scanner.js +639 -639
  180. package/src/lib/generators/design-system-generator.js +508 -508
  181. package/src/lib/generators/index.js +13 -13
  182. package/src/lib/generators/settings-generator.js +209 -209
  183. package/src/lib/hooks/hook-executor.js +167 -167
  184. package/src/lib/installers/mcp-installer.js +719 -719
  185. package/src/lib/installers/memory-installer.js +1 -1
  186. package/src/lib/risk-detector.js +16 -0
  187. package/src/lib/tasks/dispatch-planner.js +122 -4
  188. package/src/lib/tasks/mermaid-renderer.js +132 -0
  189. package/src/lib/tasks/task-classifier.js +30 -30
  190. package/src/lib/tasks/task-parser.js +209 -209
  191. package/src/lib/tasks/test-runner.js +27 -6
  192. package/src/lib/validators/architecture/architecture-validator.js +259 -259
  193. package/src/lib/validators/checkpoint-persistence.js +39 -39
  194. package/src/lib/validators/contracts/contract-compliance-validator.js +274 -274
  195. package/src/lib/validators/css/css-validator.js +340 -340
  196. package/src/lib/validators/packages/package-validator.js +347 -347
  197. package/src/lib/validators/shared/emit-validator-dispatch.js +14 -14
  198. package/src/lib/validators/shared/issue-counter.js +14 -14
  199. package/src/lib/validators/validation-runner.js +349 -349
  200. package/src/lib/validators/verify-runner.js +322 -0
  201. package/src/lib/work-type-detector.js +143 -0
  202. package/src/scripts/setup-infra.js +32 -5
  203. package/src/utils/agent-id-mapper.js +11 -11
  204. package/src/utils/agents-installer.js +10 -6
  205. package/src/utils/claude-settings-manager.js +300 -300
  206. package/src/utils/file-copier.js +43 -0
  207. package/src/utils/hooks-installer.js +41 -11
  208. package/src/utils/skills-installer.js +174 -174
  209. package/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
  210. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
  211. package/src/lib/tasks/wave-resolver.js +0 -353
@@ -1,262 +1,262 @@
1
- # IDE Snippets for MORPH Templates
2
-
3
- > Boost your productivity with IDE snippets for Handlebars template syntax
4
-
5
- ---
6
-
7
- ## 📦 Installation
8
-
9
- ### VS Code
10
-
11
- **Option 1: Project Snippets (Recommended)**
12
-
13
- Snippets are already configured in `framework/templates/.vscode/morph-templates.code-snippets`.
14
-
15
- To use them:
16
- 1. Open your project in VS Code
17
- 2. Snippets auto-activate when editing template files
18
- 3. Type a prefix (e.g., `morph-pascal`) and press `Tab`
19
-
20
- **Option 2: Global Snippets**
21
-
22
- To use snippets across all projects:
23
- 1. Open VS Code
24
- 2. Go to `File > Preferences > Configure User Snippets`
25
- 3. Select `New Global Snippets file...`
26
- 4. Name it `morph-templates.code-snippets`
27
- 5. Copy content from `framework/templates/.vscode/morph-templates.code-snippets`
28
-
29
- ---
30
-
31
- ### JetBrains IDEs (Rider, WebStorm, IntelliJ IDEA)
32
-
33
- **Installation:**
34
-
35
- 1. Open your IDE
36
- 2. Go to `File > Settings > Editor > Live Templates`
37
- 3. Click the `⚙️` gear icon → `Import Settings...`
38
- 4. Select `framework/templates/.idea/morph-templates.xml`
39
- 5. Click `OK` to import
40
-
41
- **Activation:**
42
-
43
- Snippets will be available in the "MORPH Templates" group. Type the prefix and press `Tab`.
44
-
45
- ---
46
-
47
- ## 🎯 Available Snippets
48
-
49
- ### Handlebars Helpers (Case Transformations)
50
-
51
- | Prefix | Output | Example Result |
52
- |--------|--------|----------------|
53
- | `morph-pascal` | `{{pascalCase FEATURE_NAME}}` | `UserAuthentication` |
54
- | `morph-camel` | `{{camelCase FEATURE_NAME}}` | `userAuthentication` |
55
- | `morph-snake` | `{{snakeCase FEATURE_NAME}}` | `user_authentication` |
56
- | `morph-title` | `{{titleCase FEATURE_NAME}}` | `User Authentication` |
57
- | `morph-kebab` | `{{kebabCase FEATURE_NAME}}` | `user-authentication` |
58
- | `morph-upper-snake` | `{{upperSnakeCase FEATURE_NAME}}` | `USER_AUTHENTICATION` |
59
-
60
- ### Handlebars Control Flow
61
-
62
- | Prefix | Description | Example |
63
- |--------|-------------|---------|
64
- | `morph-if` | If block | `{{#if condition}}...{{/if}}` |
65
- | `morph-if-else` | If-else block | `{{#if condition}}...{{else}}...{{/if}}` |
66
- | `morph-each` | Loop over array | `{{#each items}}{{this.name}}{{/each}}` |
67
- | `morph-unless` | Unless block | `{{#unless condition}}...{{/unless}}` |
68
-
69
- ### .NET Templates
70
-
71
- | Prefix | Template | File Extension |
72
- |--------|----------|----------------|
73
- | `morph-service` | Service class (business logic) | `.cs` |
74
- | `morph-repository` | Repository class (data access) | `.cs` |
75
- | `morph-migration` | EF Core migration | `.cs` |
76
- | `morph-job` | Hangfire background job | `.cs` |
77
-
78
- ### TypeScript Templates
79
-
80
- | Prefix | Template | File Extension |
81
- |--------|----------|----------------|
82
- | `morph-ts-contract` | TypeScript interfaces (DTOs) | `.ts` |
83
-
84
- ---
85
-
86
- ## 🚀 Usage Examples
87
-
88
- ### Example 1: Creating a Service Template
89
-
90
- **Steps:**
91
- 1. Create new file: `UserService.cs`
92
- 2. Type `morph-service` → Press `Tab`
93
- 3. Result:
94
- ```csharp
95
- namespace {{NAMESPACE}}.Application.Features.{{pascalCase FEATURE_NAME}}.Services;
96
-
97
- public class {{pascalCase FEATURE_NAME}}Service(
98
- I{{pascalCase FEATURE_NAME}}Repository repository,
99
- ILogger<{{pascalCase FEATURE_NAME}}Service> logger) : I{{pascalCase FEATURE_NAME}}Service
100
- {
101
- public async Task<{{pascalCase FEATURE_NAME}}Dto?> GetByIdAsync(int id, CancellationToken cancellationToken = default)
102
- {
103
- // Cursor here
104
- }
105
- }
106
- ```
107
-
108
- ### Example 2: Using Case Helpers
109
-
110
- **Scenario:** Convert `user-authentication` to different cases
111
-
112
- ```handlebars
113
- // Type: morph-pascal → Tab
114
- {{pascalCase FEATURE_NAME}} // Output: UserAuthentication
115
-
116
- // Type: morph-camel → Tab
117
- {{camelCase FEATURE_NAME}} // Output: userAuthentication
118
-
119
- // Type: morph-snake → Tab
120
- {{snakeCase FEATURE_NAME}} // Output: user_authentication
121
- ```
122
-
123
- ### Example 3: Conditional Rendering
124
-
125
- **Scenario:** Show different content based on stack
126
-
127
- ```handlebars
128
- // Type: morph-if-else → Tab
129
- {{#if (eq STACK "Nextjs")}}
130
- // Next.js-specific code
131
- {{else}}
132
- // Generic code
133
- {{/if}}
134
- ```
135
-
136
- ### Example 4: Looping Over Items
137
-
138
- **Scenario:** Generate multiple DTOs
139
-
140
- ```handlebars
141
- // Type: morph-each → Tab
142
- {{#each entities}}
143
- public class {{pascalCase this.name}}Dto
144
- {
145
- // Properties
146
- }
147
- {{/each}}
148
- ```
149
-
150
- ---
151
-
152
- ## 📝 Customizing Snippets
153
-
154
- ### VS Code
155
-
156
- Edit `framework/templates/.vscode/morph-templates.code-snippets`:
157
-
158
- ```json
159
- {
160
- "MORPH Template - Custom": {
161
- "prefix": "morph-custom",
162
- "body": [
163
- "// Your custom template",
164
- "$1"
165
- ],
166
- "description": "Your description"
167
- }
168
- }
169
- ```
170
-
171
- ### JetBrains IDEs
172
-
173
- 1. Go to `File > Settings > Editor > Live Templates`
174
- 2. Select "MORPH Templates" group
175
- 3. Click `+` → `Live Template`
176
- 4. Set abbreviation (prefix), description, and template text
177
-
178
- ---
179
-
180
- ## 🎨 Snippet Scopes
181
-
182
- | Snippet | VS Code Scope | JetBrains Scope |
183
- |---------|---------------|-----------------|
184
- | Handlebars helpers | All files | All files |
185
- | .NET templates | `.cs`, `.razor` | C#, HTML |
186
- | TypeScript templates | `.ts`, `.tsx` | TypeScript |
187
-
188
- ---
189
-
190
- ## 💡 Best Practices
191
-
192
- **1. Use Helpers Over Pre-computed Variables**
193
-
194
- ```handlebars
195
- ✅ GOOD: {{pascalCase FEATURE_NAME}}Service
196
- ❌ BAD: {{FEATURE_NAME_PASCAL}}Service // Deprecated
197
- ```
198
-
199
- **2. Chain Helpers for Complex Transformations**
200
-
201
- ```handlebars
202
- // Pluralize a PascalCase name
203
- {{pascalCase (pluralize FEATURE_NAME)}} // Users, Orders, etc.
204
- ```
205
-
206
- **3. Use Conditional Blocks for Stack-Specific Code**
207
-
208
- ```handlebars
209
- {{#if (eq STACK "Nextjs")}}
210
- import { useRouter } from 'next/navigation';
211
- {{/if}}
212
- ```
213
-
214
- **4. Extract Common Patterns to Snippets**
215
-
216
- If you find yourself typing the same template code repeatedly, create a custom snippet!
217
-
218
- ---
219
-
220
- ## 🔧 Troubleshooting
221
-
222
- ### Snippets Not Showing Up (VS Code)
223
-
224
- **Solution:**
225
- 1. Check file extension matches snippet scope (e.g., `.cs` for C# snippets)
226
- 2. Reload VS Code: `Ctrl+Shift+P` → `Developer: Reload Window`
227
- 3. Verify snippet file location: `framework/templates/.vscode/morph-templates.code-snippets`
228
-
229
- ### Snippets Not Showing Up (JetBrains)
230
-
231
- **Solution:**
232
- 1. Verify import: `File > Settings > Editor > Live Templates` → Check "MORPH Templates" group exists
233
- 2. Check snippet scope: Click snippet → Verify "Applicable in" contexts
234
- 3. Restart IDE
235
-
236
- ### Tab Not Expanding Snippet
237
-
238
- **Solution:**
239
- - **VS Code:** Ensure `editor.tabCompletion` is enabled in settings
240
- - **JetBrains:** Ensure `Tab` is set as expansion key in `Settings > Editor > Live Templates`
241
-
242
- ---
243
-
244
- ## 📚 Related Documentation
245
-
246
- - [Template System README](framework/templates/README.md) - Complete template system documentation
247
- - [Handlebars Helpers](framework/templates/README.md#handlebars-helpers) - Full list of available helpers
248
- - [CLI Template Commands](CLAUDE.md#templates) - Command-line template management
249
-
250
- ---
251
-
252
- ## 🎁 Contributing Custom Snippets
253
-
254
- Have a useful snippet? Share it!
255
-
256
- 1. Add snippet to appropriate file (`.vscode/` or `.idea/`)
257
- 2. Document it in this README (add row to tables)
258
- 3. Submit PR with description of use case
259
-
260
- ---
261
-
262
- *MORPH-SPEC Template Snippets by Polymorphism Tech*
1
+ # IDE Snippets for MORPH Templates
2
+
3
+ > Boost your productivity with IDE snippets for Handlebars template syntax
4
+
5
+ ---
6
+
7
+ ## 📦 Installation
8
+
9
+ ### VS Code
10
+
11
+ **Option 1: Project Snippets (Recommended)**
12
+
13
+ Snippets are already configured in `framework/templates/.vscode/morph-templates.code-snippets`.
14
+
15
+ To use them:
16
+ 1. Open your project in VS Code
17
+ 2. Snippets auto-activate when editing template files
18
+ 3. Type a prefix (e.g., `morph-pascal`) and press `Tab`
19
+
20
+ **Option 2: Global Snippets**
21
+
22
+ To use snippets across all projects:
23
+ 1. Open VS Code
24
+ 2. Go to `File > Preferences > Configure User Snippets`
25
+ 3. Select `New Global Snippets file...`
26
+ 4. Name it `morph-templates.code-snippets`
27
+ 5. Copy content from `framework/templates/.vscode/morph-templates.code-snippets`
28
+
29
+ ---
30
+
31
+ ### JetBrains IDEs (Rider, WebStorm, IntelliJ IDEA)
32
+
33
+ **Installation:**
34
+
35
+ 1. Open your IDE
36
+ 2. Go to `File > Settings > Editor > Live Templates`
37
+ 3. Click the `⚙️` gear icon → `Import Settings...`
38
+ 4. Select `framework/templates/.idea/morph-templates.xml`
39
+ 5. Click `OK` to import
40
+
41
+ **Activation:**
42
+
43
+ Snippets will be available in the "MORPH Templates" group. Type the prefix and press `Tab`.
44
+
45
+ ---
46
+
47
+ ## 🎯 Available Snippets
48
+
49
+ ### Handlebars Helpers (Case Transformations)
50
+
51
+ | Prefix | Output | Example Result |
52
+ |--------|--------|----------------|
53
+ | `morph-pascal` | `{{pascalCase FEATURE_NAME}}` | `UserAuthentication` |
54
+ | `morph-camel` | `{{camelCase FEATURE_NAME}}` | `userAuthentication` |
55
+ | `morph-snake` | `{{snakeCase FEATURE_NAME}}` | `user_authentication` |
56
+ | `morph-title` | `{{titleCase FEATURE_NAME}}` | `User Authentication` |
57
+ | `morph-kebab` | `{{kebabCase FEATURE_NAME}}` | `user-authentication` |
58
+ | `morph-upper-snake` | `{{upperSnakeCase FEATURE_NAME}}` | `USER_AUTHENTICATION` |
59
+
60
+ ### Handlebars Control Flow
61
+
62
+ | Prefix | Description | Example |
63
+ |--------|-------------|---------|
64
+ | `morph-if` | If block | `{{#if condition}}...{{/if}}` |
65
+ | `morph-if-else` | If-else block | `{{#if condition}}...{{else}}...{{/if}}` |
66
+ | `morph-each` | Loop over array | `{{#each items}}{{this.name}}{{/each}}` |
67
+ | `morph-unless` | Unless block | `{{#unless condition}}...{{/unless}}` |
68
+
69
+ ### .NET Templates
70
+
71
+ | Prefix | Template | File Extension |
72
+ |--------|----------|----------------|
73
+ | `morph-service` | Service class (business logic) | `.cs` |
74
+ | `morph-repository` | Repository class (data access) | `.cs` |
75
+ | `morph-migration` | EF Core migration | `.cs` |
76
+ | `morph-job` | Hangfire background job | `.cs` |
77
+
78
+ ### TypeScript Templates
79
+
80
+ | Prefix | Template | File Extension |
81
+ |--------|----------|----------------|
82
+ | `morph-ts-contract` | TypeScript interfaces (DTOs) | `.ts` |
83
+
84
+ ---
85
+
86
+ ## 🚀 Usage Examples
87
+
88
+ ### Example 1: Creating a Service Template
89
+
90
+ **Steps:**
91
+ 1. Create new file: `UserService.cs`
92
+ 2. Type `morph-service` → Press `Tab`
93
+ 3. Result:
94
+ ```csharp
95
+ namespace {{NAMESPACE}}.Application.Features.{{pascalCase FEATURE_NAME}}.Services;
96
+
97
+ public class {{pascalCase FEATURE_NAME}}Service(
98
+ I{{pascalCase FEATURE_NAME}}Repository repository,
99
+ ILogger<{{pascalCase FEATURE_NAME}}Service> logger) : I{{pascalCase FEATURE_NAME}}Service
100
+ {
101
+ public async Task<{{pascalCase FEATURE_NAME}}Dto?> GetByIdAsync(int id, CancellationToken cancellationToken = default)
102
+ {
103
+ // Cursor here
104
+ }
105
+ }
106
+ ```
107
+
108
+ ### Example 2: Using Case Helpers
109
+
110
+ **Scenario:** Convert `user-authentication` to different cases
111
+
112
+ ```handlebars
113
+ // Type: morph-pascal → Tab
114
+ {{pascalCase FEATURE_NAME}} // Output: UserAuthentication
115
+
116
+ // Type: morph-camel → Tab
117
+ {{camelCase FEATURE_NAME}} // Output: userAuthentication
118
+
119
+ // Type: morph-snake → Tab
120
+ {{snakeCase FEATURE_NAME}} // Output: user_authentication
121
+ ```
122
+
123
+ ### Example 3: Conditional Rendering
124
+
125
+ **Scenario:** Show different content based on stack
126
+
127
+ ```handlebars
128
+ // Type: morph-if-else → Tab
129
+ {{#if (eq STACK "Nextjs")}}
130
+ // Next.js-specific code
131
+ {{else}}
132
+ // Generic code
133
+ {{/if}}
134
+ ```
135
+
136
+ ### Example 4: Looping Over Items
137
+
138
+ **Scenario:** Generate multiple DTOs
139
+
140
+ ```handlebars
141
+ // Type: morph-each → Tab
142
+ {{#each entities}}
143
+ public class {{pascalCase this.name}}Dto
144
+ {
145
+ // Properties
146
+ }
147
+ {{/each}}
148
+ ```
149
+
150
+ ---
151
+
152
+ ## 📝 Customizing Snippets
153
+
154
+ ### VS Code
155
+
156
+ Edit `framework/templates/.vscode/morph-templates.code-snippets`:
157
+
158
+ ```json
159
+ {
160
+ "MORPH Template - Custom": {
161
+ "prefix": "morph-custom",
162
+ "body": [
163
+ "// Your custom template",
164
+ "$1"
165
+ ],
166
+ "description": "Your description"
167
+ }
168
+ }
169
+ ```
170
+
171
+ ### JetBrains IDEs
172
+
173
+ 1. Go to `File > Settings > Editor > Live Templates`
174
+ 2. Select "MORPH Templates" group
175
+ 3. Click `+` → `Live Template`
176
+ 4. Set abbreviation (prefix), description, and template text
177
+
178
+ ---
179
+
180
+ ## 🎨 Snippet Scopes
181
+
182
+ | Snippet | VS Code Scope | JetBrains Scope |
183
+ |---------|---------------|-----------------|
184
+ | Handlebars helpers | All files | All files |
185
+ | .NET templates | `.cs`, `.razor` | C#, HTML |
186
+ | TypeScript templates | `.ts`, `.tsx` | TypeScript |
187
+
188
+ ---
189
+
190
+ ## 💡 Best Practices
191
+
192
+ **1. Use Helpers Over Pre-computed Variables**
193
+
194
+ ```handlebars
195
+ ✅ GOOD: {{pascalCase FEATURE_NAME}}Service
196
+ ❌ BAD: {{FEATURE_NAME_PASCAL}}Service // Deprecated
197
+ ```
198
+
199
+ **2. Chain Helpers for Complex Transformations**
200
+
201
+ ```handlebars
202
+ // Pluralize a PascalCase name
203
+ {{pascalCase (pluralize FEATURE_NAME)}} // Users, Orders, etc.
204
+ ```
205
+
206
+ **3. Use Conditional Blocks for Stack-Specific Code**
207
+
208
+ ```handlebars
209
+ {{#if (eq STACK "Nextjs")}}
210
+ import { useRouter } from 'next/navigation';
211
+ {{/if}}
212
+ ```
213
+
214
+ **4. Extract Common Patterns to Snippets**
215
+
216
+ If you find yourself typing the same template code repeatedly, create a custom snippet!
217
+
218
+ ---
219
+
220
+ ## 🔧 Troubleshooting
221
+
222
+ ### Snippets Not Showing Up (VS Code)
223
+
224
+ **Solution:**
225
+ 1. Check file extension matches snippet scope (e.g., `.cs` for C# snippets)
226
+ 2. Reload VS Code: `Ctrl+Shift+P` → `Developer: Reload Window`
227
+ 3. Verify snippet file location: `framework/templates/.vscode/morph-templates.code-snippets`
228
+
229
+ ### Snippets Not Showing Up (JetBrains)
230
+
231
+ **Solution:**
232
+ 1. Verify import: `File > Settings > Editor > Live Templates` → Check "MORPH Templates" group exists
233
+ 2. Check snippet scope: Click snippet → Verify "Applicable in" contexts
234
+ 3. Restart IDE
235
+
236
+ ### Tab Not Expanding Snippet
237
+
238
+ **Solution:**
239
+ - **VS Code:** Ensure `editor.tabCompletion` is enabled in settings
240
+ - **JetBrains:** Ensure `Tab` is set as expansion key in `Settings > Editor > Live Templates`
241
+
242
+ ---
243
+
244
+ ## 📚 Related Documentation
245
+
246
+ - [Template System README](framework/templates/README.md) - Complete template system documentation
247
+ - [Handlebars Helpers](framework/templates/README.md#handlebars-helpers) - Full list of available helpers
248
+ - [CLI Template Commands](CLAUDE.md#templates) - Command-line template management
249
+
250
+ ---
251
+
252
+ ## 🎁 Contributing Custom Snippets
253
+
254
+ Have a useful snippet? Share it!
255
+
256
+ 1. Add snippet to appropriate file (`.vscode/` or `.idea/`)
257
+ 2. Document it in this README (add row to tables)
258
+ 3. Submit PR with description of use case
259
+
260
+ ---
261
+
262
+ *MORPH-SPEC Template Snippets by Polymorphism Tech*
@@ -972,68 +972,6 @@
972
972
  ],
973
973
  "validatePlaceholders": true
974
974
  },
975
- {
976
- "id": "hop-parallel-worker",
977
- "kind": "template",
978
- "name": "Parallel Worker HOP",
979
- "path": "meta-prompts/parallel-workers/parallel-worker.md",
980
- "location": "framework",
981
- "category": "meta-prompts",
982
- "technology": "handlebars",
983
- "phase": "implement",
984
- "required": false,
985
- "description": "P-Thread parallel worker HOP with isolation rules, assigned file scope, and structured completion report",
986
- "outputName": "parallel-worker-prompt.md",
987
- "placeholders": [
988
- "AGENT_ID",
989
- "DELIVERABLES",
990
- "FEATURE_NAME",
991
- "MISSION",
992
- "SCOPE",
993
- "SPEC_SUMMARY",
994
- "STANDARDS",
995
- "TASKS",
996
- "THREAD_ID"
997
- ],
998
- "stackSpecific": false,
999
- "engine": "handlebars",
1000
- "deprecated": false,
1001
- "hopType": "parallel-worker",
1002
- "validatePlaceholders": true
1003
- },
1004
- {
1005
- "id": "hop-parallel-coordinator",
1006
- "kind": "template",
1007
- "name": "Parallel Coordinator HOP",
1008
- "path": "meta-prompts/parallel-workers/parallel-coordinator.md",
1009
- "location": "framework",
1010
- "category": "meta-prompts",
1011
- "technology": "handlebars",
1012
- "phase": "implement",
1013
- "required": false,
1014
- "description": "P-Thread coordinator HOP for spawning, monitoring and merging parallel worker results",
1015
- "outputName": "parallel-coordinator-prompt.md",
1016
- "placeholders": [
1017
- "AGENT_ID",
1018
- "CONSTRAINTS",
1019
- "FEATURE_NAME",
1020
- "MAX_CONCURRENT",
1021
- "MERGE_STRATEGY",
1022
- "PARALLEL_STRATEGY",
1023
- "POST_MERGE_TASKS",
1024
- "PRE_SPAWN_TASKS",
1025
- "SESSION_ID",
1026
- "SPEC_SUMMARY",
1027
- "TIMEOUT_MINUTES",
1028
- "WORKERS",
1029
- "WORKER_COUNT"
1030
- ],
1031
- "stackSpecific": false,
1032
- "engine": "handlebars",
1033
- "deprecated": false,
1034
- "hopType": "parallel-coordinator",
1035
- "validatePlaceholders": true
1036
- },
1037
975
  {
1038
976
  "id": "hop-checkpoint-validator",
1039
977
  "kind": "template",
@@ -1,7 +1,7 @@
1
- namespace {{pascalCase PROJECT_NAME}}.Abstractions
2
- {
3
- public interface IApiEndpoint
4
- {
5
- void MapEndpoint(IEndpointRouteBuilder app);
6
- }
7
- }
1
+ namespace {{pascalCase PROJECT_NAME}}.Abstractions
2
+ {
3
+ public interface IApiEndpoint
4
+ {
5
+ void MapEndpoint(IEndpointRouteBuilder app);
6
+ }
7
+ }