@polymorphism-tech/morph-spec 2.3.0 → 3.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 (166) hide show
  1. package/CLAUDE.md +446 -1730
  2. package/README.md +515 -516
  3. package/bin/morph-spec.js +366 -294
  4. package/bin/task-manager.js +429 -368
  5. package/bin/validate.js +369 -268
  6. package/content/.claude/commands/morph-apply.md +221 -158
  7. package/content/.claude/commands/morph-deploy.md +529 -0
  8. package/content/.claude/commands/morph-preflight.md +227 -0
  9. package/content/.claude/commands/morph-proposal.md +122 -101
  10. package/content/.claude/commands/morph-status.md +86 -86
  11. package/content/.claude/commands/morph-troubleshoot.md +122 -0
  12. package/content/.claude/skills/infra/azure-deploy-specialist.md +699 -0
  13. package/content/.claude/skills/level-0-meta/README.md +7 -0
  14. package/content/.claude/skills/level-0-meta/code-review.md +226 -0
  15. package/content/.claude/skills/level-0-meta/morph-checklist.md +117 -0
  16. package/content/.claude/skills/level-0-meta/simulation-checklist.md +77 -0
  17. package/content/.claude/skills/level-1-workflows/README.md +7 -0
  18. package/content/.claude/skills/level-1-workflows/morph-replicate.md +213 -0
  19. package/content/.claude/{commands/morph-clarify.md → skills/level-1-workflows/phase-clarify.md} +131 -184
  20. package/content/.claude/{commands/morph-design.md → skills/level-1-workflows/phase-design.md} +213 -275
  21. package/content/.claude/skills/level-1-workflows/phase-setup.md +106 -0
  22. package/content/.claude/skills/level-1-workflows/phase-tasks.md +164 -0
  23. package/content/.claude/{commands/morph-uiux.md → skills/level-1-workflows/phase-uiux.md} +169 -211
  24. package/content/.claude/skills/level-2-domains/README.md +14 -0
  25. package/content/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +192 -0
  26. package/content/.claude/skills/{specialists → level-2-domains/architecture}/po-pm-advisor.md +197 -197
  27. package/content/.claude/skills/level-2-domains/architecture/standards-architect.md +156 -0
  28. package/content/.claude/skills/level-2-domains/backend/dotnet-senior.md +287 -0
  29. package/content/.claude/skills/level-2-domains/backend/ef-modeler.md +113 -0
  30. package/content/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +126 -0
  31. package/content/.claude/skills/level-2-domains/backend/ms-agent-expert.md +109 -0
  32. package/content/.claude/skills/level-2-domains/frontend/blazor-builder.md +210 -0
  33. package/content/.claude/skills/level-2-domains/frontend/nextjs-expert.md +154 -0
  34. package/content/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +191 -0
  35. package/content/.claude/skills/{specialists → level-2-domains/infrastructure}/azure-architect.md +142 -142
  36. package/content/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +126 -0
  37. package/content/.claude/skills/level-2-domains/infrastructure/container-specialist.md +131 -0
  38. package/content/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +119 -0
  39. package/content/.claude/skills/level-2-domains/integrations/asaas-financial.md +130 -0
  40. package/content/.claude/skills/level-2-domains/integrations/azure-identity.md +142 -0
  41. package/content/.claude/skills/level-2-domains/integrations/clerk-auth.md +108 -0
  42. package/content/.claude/skills/level-2-domains/integrations/resend-email.md +119 -0
  43. package/content/.claude/skills/level-2-domains/quality/code-analyzer.md +235 -0
  44. package/content/.claude/skills/level-2-domains/quality/testing-specialist.md +126 -0
  45. package/content/.claude/skills/level-3-technologies/README.md +7 -0
  46. package/content/.claude/skills/level-4-patterns/README.md +7 -0
  47. package/content/.claude/skills/specialists/prompt-engineer.md +189 -0
  48. package/content/.claude/skills/specialists/seo-growth-hacker.md +320 -0
  49. package/content/.morph/config/agents.json +762 -242
  50. package/content/.morph/config/config.template.json +122 -108
  51. package/content/.morph/docs/workflows/design-impl.md +37 -0
  52. package/content/.morph/docs/workflows/enforcement-pipeline.md +668 -0
  53. package/content/.morph/docs/workflows/fast-track.md +29 -0
  54. package/content/.morph/docs/workflows/full-morph.md +76 -0
  55. package/content/.morph/docs/workflows/standard.md +44 -0
  56. package/content/.morph/docs/workflows/ui-refresh.md +39 -0
  57. package/content/.morph/examples/scheduled-reports/decisions.md +158 -0
  58. package/content/.morph/examples/scheduled-reports/proposal.md +95 -0
  59. package/content/.morph/examples/scheduled-reports/spec.md +267 -0
  60. package/content/.morph/hooks/README.md +348 -239
  61. package/content/.morph/hooks/pre-commit-agents.sh +24 -24
  62. package/content/.morph/hooks/task-completed.js +73 -0
  63. package/content/.morph/hooks/teammate-idle.js +68 -0
  64. package/content/.morph/schemas/tasks.schema.json +220 -0
  65. package/content/.morph/standards/agent-framework-blazor-ui.md +359 -0
  66. package/content/.morph/standards/agent-framework-production.md +410 -0
  67. package/content/.morph/standards/agent-framework-setup.md +413 -453
  68. package/content/.morph/standards/agent-framework-workflows.md +349 -0
  69. package/content/.morph/standards/agent-teams-workflow.md +474 -0
  70. package/content/.morph/standards/architecture.md +325 -325
  71. package/content/.morph/standards/azure.md +605 -379
  72. package/content/.morph/standards/dotnet10-migration.md +520 -494
  73. package/content/.morph/templates/CONTEXT-FEATURE.md +276 -0
  74. package/content/.morph/templates/CONTEXT.md +170 -0
  75. package/content/.morph/templates/agent.cs +163 -172
  76. package/content/.morph/templates/clarify-questions.md +159 -0
  77. package/content/.morph/templates/contracts/Commands.cs +74 -0
  78. package/content/.morph/templates/contracts/Entities.cs +25 -0
  79. package/content/.morph/templates/contracts/Queries.cs +74 -0
  80. package/content/.morph/templates/contracts/README.md +74 -0
  81. package/content/.morph/templates/decisions.md +123 -106
  82. package/content/.morph/templates/infra/azure-pipelines-deploy.yml +480 -0
  83. package/content/.morph/templates/infra/deploy-checklist.md +426 -0
  84. package/content/.morph/templates/proposal.md +141 -155
  85. package/content/.morph/templates/recap.md +94 -105
  86. package/content/.morph/templates/simulation.md +353 -0
  87. package/content/.morph/templates/spec.md +149 -148
  88. package/content/.morph/templates/state.template.json +222 -222
  89. package/content/.morph/templates/tasks.md +257 -235
  90. package/content/.morph/templates/ui-components.md +362 -276
  91. package/content/CLAUDE.md +150 -442
  92. package/detectors/structure-detector.js +245 -250
  93. package/docs/README.md +144 -149
  94. package/docs/getting-started.md +301 -302
  95. package/docs/installation.md +361 -361
  96. package/docs/validation-checklist.md +265 -266
  97. package/package.json +80 -80
  98. package/src/commands/advance-phase.js +266 -0
  99. package/src/commands/analyze-blazor-concurrency.js +193 -0
  100. package/src/commands/deploy.js +780 -0
  101. package/src/commands/detect-agents.js +167 -0
  102. package/src/commands/doctor.js +356 -280
  103. package/src/commands/generate-context.js +40 -0
  104. package/src/commands/init.js +258 -245
  105. package/src/commands/lint-fluent.js +352 -0
  106. package/src/commands/rollback-phase.js +185 -0
  107. package/src/commands/session-summary.js +291 -0
  108. package/src/commands/task.js +78 -75
  109. package/src/commands/troubleshoot.js +222 -0
  110. package/src/commands/update.js +192 -159
  111. package/src/commands/validate-blazor-state.js +210 -0
  112. package/src/commands/validate-blazor.js +156 -0
  113. package/src/commands/validate-css.js +84 -0
  114. package/src/commands/validate-phase.js +221 -0
  115. package/src/lib/blazor-concurrency-analyzer.js +288 -0
  116. package/src/lib/blazor-state-validator.js +291 -0
  117. package/src/lib/blazor-validator.js +374 -0
  118. package/src/lib/complexity-analyzer.js +441 -292
  119. package/src/lib/context-generator.js +513 -0
  120. package/src/lib/continuous-validator.js +421 -440
  121. package/src/lib/css-validator.js +352 -0
  122. package/src/lib/decision-constraint-loader.js +109 -0
  123. package/src/lib/design-system-detector.js +187 -0
  124. package/src/lib/design-system-scaffolder.js +299 -0
  125. package/src/lib/hook-executor.js +256 -0
  126. package/src/lib/recap-generator.js +205 -0
  127. package/src/lib/spec-validator.js +258 -0
  128. package/src/lib/standards-context-injector.js +287 -0
  129. package/src/lib/state-manager.js +397 -340
  130. package/src/lib/team-orchestrator.js +322 -0
  131. package/src/lib/troubleshoot-grep.js +194 -0
  132. package/src/lib/troubleshoot-index.js +144 -0
  133. package/src/lib/validation-runner.js +283 -0
  134. package/src/lib/validators/contract-compliance-validator.js +273 -0
  135. package/src/lib/validators/design-system-validator.js +231 -0
  136. package/src/utils/file-copier.js +187 -139
  137. package/content/.claude/commands/morph-costs.md +0 -206
  138. package/content/.claude/commands/morph-setup.md +0 -100
  139. package/content/.claude/commands/morph-tasks.md +0 -319
  140. package/content/.claude/skills/infra/bicep-architect.md +0 -419
  141. package/content/.claude/skills/infra/container-specialist.md +0 -437
  142. package/content/.claude/skills/infra/devops-engineer.md +0 -405
  143. package/content/.claude/skills/integrations/asaas-financial.md +0 -333
  144. package/content/.claude/skills/integrations/azure-identity.md +0 -309
  145. package/content/.claude/skills/integrations/clerk-auth.md +0 -290
  146. package/content/.claude/skills/specialists/ai-system-architect.md +0 -604
  147. package/content/.claude/skills/specialists/cost-guardian.md +0 -110
  148. package/content/.claude/skills/specialists/ef-modeler.md +0 -211
  149. package/content/.claude/skills/specialists/hangfire-orchestrator.md +0 -255
  150. package/content/.claude/skills/specialists/ms-agent-expert.md +0 -263
  151. package/content/.claude/skills/specialists/standards-architect.md +0 -78
  152. package/content/.claude/skills/specialists/ui-ux-designer.md +0 -1100
  153. package/content/.claude/skills/stacks/dotnet-blazor.md +0 -606
  154. package/content/.claude/skills/stacks/dotnet-nextjs.md +0 -402
  155. package/content/.claude/skills/stacks/shopify.md +0 -445
  156. package/content/.morph/config/azure-pricing.json +0 -70
  157. package/content/.morph/config/azure-pricing.schema.json +0 -50
  158. package/content/.morph/hooks/pre-commit-costs.sh +0 -91
  159. package/docs/api/cost-calculator.js.html +0 -513
  160. package/docs/api/design-system-generator.js.html +0 -382
  161. package/docs/api/global.html +0 -5263
  162. package/docs/api/index.html +0 -96
  163. package/docs/api/state-manager.js.html +0 -423
  164. package/src/commands/cost.js +0 -181
  165. package/src/commands/update-pricing.js +0 -206
  166. package/src/lib/cost-calculator.js +0 -429
@@ -0,0 +1,287 @@
1
+ /**
2
+ * @fileoverview Standards Context Injector
3
+ *
4
+ * Automatically loads and surfaces relevant standards content for agents.
5
+ * Resolution order: project overrides → framework standards → content standards
6
+ *
7
+ * @module standards-context-injector
8
+ */
9
+
10
+ import { readFileSync, existsSync } from 'fs';
11
+ import { join } from 'path';
12
+
13
+ /**
14
+ * Agent → Standards mapping
15
+ * Maps each agent ID to relevant standard files (without .md extension)
16
+ */
17
+ const AGENT_STANDARDS_MAP = {
18
+ // Tier 1: Orchestrators
19
+ 'standards-architect': [
20
+ 'architecture',
21
+ 'coding',
22
+ 'azure',
23
+ 'dotnet10-compatibility',
24
+ 'program-cs-checklist'
25
+ ],
26
+ 'ai-system-architect': [
27
+ 'agent-framework-setup',
28
+ 'agent-framework-workflows',
29
+ 'agent-framework-production',
30
+ 'agent-framework-blazor-ui',
31
+ 'architecture',
32
+ 'coding'
33
+ ],
34
+ 'popm-advisor': [], // No technical standards
35
+
36
+ // Tier 2: Domain Leaders
37
+ 'dotnet-senior': [
38
+ 'coding',
39
+ 'architecture',
40
+ 'dotnet10-compatibility',
41
+ 'program-cs-checklist'
42
+ ],
43
+ 'azure-architect': [
44
+ 'azure',
45
+ 'architecture',
46
+ 'dotnet10-compatibility'
47
+ ],
48
+ 'ui-designer': [
49
+ 'css-naming',
50
+ 'css-animations',
51
+ 'fluent-ui-setup',
52
+ 'fluent-ui-blazor'
53
+ ],
54
+
55
+ // Tier 3: Specialists - Backend Squad
56
+ 'ef-modeler': [
57
+ 'blazor-efcore',
58
+ 'architecture',
59
+ 'coding',
60
+ 'dotnet10-compatibility'
61
+ ],
62
+ 'event-architect': [
63
+ 'architecture',
64
+ 'coding',
65
+ 'dotnet10-compatibility'
66
+ ],
67
+ 'api-designer': [
68
+ 'architecture',
69
+ 'coding',
70
+ 'dotnet10-compatibility'
71
+ ],
72
+ 'nosql-cache-expert': [
73
+ 'architecture',
74
+ 'coding'
75
+ ],
76
+ 'ddd-expert': [
77
+ 'architecture',
78
+ 'coding'
79
+ ],
80
+ 'hangfire-orchestrator': [
81
+ 'architecture',
82
+ 'coding',
83
+ 'blazor-lifecycle', // Background jobs + Blazor lifecycle
84
+ 'dotnet10-compatibility'
85
+ ],
86
+ 'ms-agent-expert': [
87
+ 'agent-framework-setup',
88
+ 'agent-framework-workflows',
89
+ 'agent-framework-production',
90
+ 'agent-framework-blazor-ui',
91
+ 'coding',
92
+ 'architecture'
93
+ ],
94
+ 'asaas-financial': [
95
+ 'coding',
96
+ 'architecture'
97
+ ],
98
+ 'clerk-auth': [
99
+ 'coding',
100
+ 'architecture',
101
+ 'passkeys-auth'
102
+ ],
103
+ 'resend-email': [
104
+ 'coding',
105
+ 'architecture'
106
+ ],
107
+
108
+ // Tier 3: Specialists - Frontend Squad
109
+ 'blazor-builder': [
110
+ 'blazor-lifecycle',
111
+ 'blazor-state',
112
+ 'blazor-efcore',
113
+ 'blazor-pitfalls',
114
+ 'html-to-blazor',
115
+ 'fluent-ui-blazor',
116
+ 'css-naming',
117
+ 'css-animations',
118
+ 'coding',
119
+ 'architecture'
120
+ ],
121
+ 'nextjs-expert': [
122
+ 'coding'
123
+ ],
124
+ 'css-specialist': [
125
+ 'css-naming',
126
+ 'css-animations',
127
+ 'fluent-ui-blazor'
128
+ ],
129
+
130
+ // Tier 3: Specialists - Infrastructure Squad
131
+ 'bicep-architect': [
132
+ 'azure',
133
+ 'architecture'
134
+ ],
135
+ 'devops-engineer': [
136
+ 'azure',
137
+ 'dotnet10-compatibility'
138
+ ],
139
+ 'container-specialist': [
140
+ 'azure',
141
+ 'dotnet10-compatibility'
142
+ ],
143
+ 'observability-expert': [
144
+ 'azure',
145
+ 'architecture'
146
+ ],
147
+ 'azure-identity': [
148
+ 'azure',
149
+ 'architecture',
150
+ 'passkeys-auth'
151
+ ],
152
+
153
+ // Tier 3: Specialists - Quality Squad
154
+ 'testing-specialist': [
155
+ 'coding',
156
+ 'architecture',
157
+ 'dotnet10-compatibility'
158
+ ],
159
+ 'code-analyzer': [
160
+ 'coding',
161
+ 'architecture',
162
+ 'dotnet10-compatibility',
163
+ 'program-cs-checklist'
164
+ ],
165
+ 'troubleshooting-expert': [
166
+ 'architecture',
167
+ 'blazor-pitfalls',
168
+ 'dotnet10-compatibility'
169
+ ],
170
+ 'load-testing-expert': [
171
+ 'architecture',
172
+ 'azure'
173
+ ],
174
+ 'documentation-specialist': [], // No technical standards
175
+
176
+ // Tier 4: Validators
177
+ 'security-expert': [
178
+ 'coding',
179
+ 'architecture',
180
+ 'passkeys-auth'
181
+ ]
182
+ };
183
+
184
+ /**
185
+ * Load a single standard file with project override support
186
+ * @param {string} standardName - Standard filename without .md extension
187
+ * @param {string} projectPath - Root path of the project
188
+ * @returns {string|null} Standard content or null if not found
189
+ */
190
+ function loadStandard(standardName, projectPath) {
191
+ const locations = [
192
+ // 1. Project override
193
+ join(projectPath, '.morph/project/standards', `${standardName}.md`),
194
+ // 2. Content standards (AI/Agent Framework, Azure, etc.)
195
+ join(projectPath, 'content/.morph/standards', `${standardName}.md`),
196
+ // 3. Framework standards (Blazor, CSS, .NET)
197
+ join(projectPath, 'framework/standards', `${standardName}.md`)
198
+ ];
199
+
200
+ for (const path of locations) {
201
+ if (existsSync(path)) {
202
+ try {
203
+ return readFileSync(path, 'utf8');
204
+ } catch (err) {
205
+ // Continue to next location
206
+ }
207
+ }
208
+ }
209
+
210
+ return null;
211
+ }
212
+
213
+ /**
214
+ * Load all relevant standards for a given agent
215
+ * @param {string} agentId - Agent ID (e.g., 'blazor-builder')
216
+ * @param {string} projectPath - Root path of the project
217
+ * @returns {Object} { sections: [{standard, content}], fullContent: string }
218
+ */
219
+ export function loadStandardsForAgent(agentId, projectPath = '.') {
220
+ const standardNames = AGENT_STANDARDS_MAP[agentId] || [];
221
+ const sections = [];
222
+ const contentParts = [];
223
+
224
+ // Load inferred standards if exists (project-specific learnings)
225
+ const inferredPath = join(projectPath, '.morph/project/standards/inferred.md');
226
+ if (existsSync(inferredPath)) {
227
+ try {
228
+ const inferredContent = readFileSync(inferredPath, 'utf8');
229
+ sections.push({
230
+ standard: 'inferred',
231
+ content: inferredContent
232
+ });
233
+ contentParts.push(`# Project-Specific Standards (Inferred)\n\n${inferredContent}`);
234
+ } catch (err) {
235
+ // Ignore if can't read
236
+ }
237
+ }
238
+
239
+ // Load each standard
240
+ for (const standardName of standardNames) {
241
+ const content = loadStandard(standardName, projectPath);
242
+ if (content) {
243
+ sections.push({
244
+ standard: standardName,
245
+ content
246
+ });
247
+ contentParts.push(`# ${standardName}\n\n${content}`);
248
+ }
249
+ }
250
+
251
+ return {
252
+ sections,
253
+ fullContent: contentParts.join('\n\n---\n\n'),
254
+ standardNames // For debugging/introspection
255
+ };
256
+ }
257
+
258
+ /**
259
+ * Get list of standards for an agent (without loading content)
260
+ * @param {string} agentId - Agent ID
261
+ * @returns {string[]} Array of standard names
262
+ */
263
+ export function getStandardsListForAgent(agentId) {
264
+ return AGENT_STANDARDS_MAP[agentId] || [];
265
+ }
266
+
267
+ /**
268
+ * Check if a standard exists in any location
269
+ * @param {string} standardName - Standard filename without .md extension
270
+ * @param {string} projectPath - Root path of the project
271
+ * @returns {Object} { exists: boolean, location: string|null }
272
+ */
273
+ export function checkStandardExists(standardName, projectPath = '.') {
274
+ const locations = [
275
+ { type: 'project', path: join(projectPath, '.morph/project/standards', `${standardName}.md`) },
276
+ { type: 'content', path: join(projectPath, 'content/.morph/standards', `${standardName}.md`) },
277
+ { type: 'framework', path: join(projectPath, 'framework/standards', `${standardName}.md`) }
278
+ ];
279
+
280
+ for (const loc of locations) {
281
+ if (existsSync(loc.path)) {
282
+ return { exists: true, location: loc.type, path: loc.path };
283
+ }
284
+ }
285
+
286
+ return { exists: false, location: null, path: null };
287
+ }