@polymorphism-tech/morph-spec 2.2.0 → 2.4.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.
- package/CLAUDE.md +314 -1673
- package/LICENSE +72 -72
- package/README.md +515 -516
- package/bin/detect-agents.js +225 -225
- package/bin/morph-spec.js +358 -173
- package/bin/render-template.js +302 -302
- package/bin/semantic-detect-agents.js +246 -246
- package/bin/task-manager.js +429 -0
- package/bin/validate-agents-skills.js +251 -251
- package/bin/validate-agents.js +69 -69
- package/bin/validate-phase.js +263 -263
- package/bin/validate.js +369 -0
- package/content/.azure/README.md +293 -293
- package/content/.azure/docs/azure-devops-setup.md +454 -454
- package/content/.azure/docs/branch-strategy.md +398 -398
- package/content/.azure/docs/local-development.md +515 -515
- package/content/.azure/pipelines/pipeline-variables.yml +34 -34
- package/content/.azure/pipelines/prod-pipeline.yml +319 -319
- package/content/.azure/pipelines/staging-pipeline.yml +234 -234
- package/content/.azure/pipelines/templates/build-dotnet.yml +75 -75
- package/content/.azure/pipelines/templates/deploy-app-service.yml +94 -94
- package/content/.azure/pipelines/templates/deploy-container-app.yml +120 -120
- package/content/.azure/pipelines/templates/infra-deploy.yml +90 -90
- package/content/.claude/commands/morph-apply.md +221 -158
- package/content/.claude/commands/morph-archive.md +79 -79
- package/content/.claude/commands/morph-infra.md +209 -209
- package/content/.claude/commands/morph-preflight.md +227 -0
- package/content/.claude/commands/morph-proposal.md +122 -101
- package/content/.claude/commands/morph-status.md +86 -86
- package/content/.claude/commands/morph-troubleshoot.md +122 -0
- package/content/.claude/settings.local.json +15 -15
- package/content/.claude/skills/checklists/code-review.md +226 -0
- package/content/.claude/skills/checklists/morph-checklist.md +117 -0
- package/content/.claude/skills/checklists/simulation-checklist.md +77 -0
- package/content/.claude/skills/infra/bicep-architect.md +126 -419
- package/content/.claude/skills/infra/container-specialist.md +131 -437
- package/content/.claude/skills/infra/devops-engineer.md +119 -405
- package/content/.claude/skills/integrations/asaas-financial.md +130 -333
- package/content/.claude/skills/integrations/azure-identity.md +142 -309
- package/content/.claude/skills/integrations/clerk-auth.md +108 -290
- package/content/.claude/skills/integrations/resend-email.md +119 -0
- package/content/.claude/skills/specialists/ai-system-architect.md +192 -604
- package/content/.claude/skills/specialists/azure-architect.md +142 -142
- package/content/.claude/skills/specialists/code-analyzer.md +235 -0
- package/content/.claude/skills/specialists/dotnet-senior.md +287 -0
- package/content/.claude/skills/specialists/ef-modeler.md +113 -200
- package/content/.claude/skills/specialists/hangfire-orchestrator.md +126 -245
- package/content/.claude/skills/specialists/ms-agent-expert.md +109 -263
- package/content/.claude/skills/specialists/po-pm-advisor.md +197 -197
- package/content/.claude/skills/specialists/standards-architect.md +156 -78
- package/content/.claude/skills/specialists/testing-specialist.md +126 -0
- package/content/.claude/skills/specialists/ui-ux-designer.md +191 -1060
- package/content/.claude/skills/stacks/dotnet-blazor.md +210 -588
- package/content/.claude/skills/stacks/dotnet-nextjs.md +154 -402
- package/content/.claude/skills/workflows/morph-replicate.md +213 -0
- package/content/.claude/{commands/morph-clarify.md → skills/workflows/phase-clarify.md} +5 -58
- package/content/.claude/{commands/morph-design.md → skills/workflows/phase-design.md} +16 -86
- package/content/.claude/{commands/morph-setup.md → skills/workflows/phase-setup.md} +9 -17
- package/content/.claude/skills/workflows/phase-tasks.md +164 -0
- package/content/.claude/{commands/morph-uiux.md → skills/workflows/phase-uiux.md} +15 -88
- package/content/.morph/.morphversion +5 -5
- package/content/.morph/archive/.gitkeep +25 -25
- package/content/.morph/config/agents.json +378 -242
- package/content/.morph/config/config.template.json +89 -108
- package/content/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +392 -392
- package/content/.morph/docs/workflows/design-impl.md +37 -0
- package/content/.morph/docs/workflows/fast-track.md +29 -0
- package/content/.morph/docs/workflows/full-morph.md +76 -0
- package/content/.morph/docs/workflows/standard.md +44 -0
- package/content/.morph/docs/workflows/ui-refresh.md +39 -0
- package/content/.morph/examples/api-nextjs/README.md +241 -241
- package/content/.morph/examples/api-nextjs/contracts.ts +307 -307
- package/content/.morph/examples/api-nextjs/spec.md +399 -399
- package/content/.morph/examples/api-nextjs/tasks.md +168 -168
- package/content/.morph/examples/micro-saas/README.md +125 -125
- package/content/.morph/examples/micro-saas/contracts.cs +358 -358
- package/content/.morph/examples/micro-saas/decisions.md +246 -246
- package/content/.morph/examples/micro-saas/spec.md +236 -236
- package/content/.morph/examples/micro-saas/tasks.md +150 -150
- package/content/.morph/examples/multi-agent/README.md +309 -309
- package/content/.morph/examples/multi-agent/contracts.cs +433 -433
- package/content/.morph/examples/multi-agent/spec.md +479 -479
- package/content/.morph/examples/multi-agent/tasks.md +185 -185
- package/content/.morph/examples/scheduled-reports/decisions.md +158 -0
- package/content/.morph/examples/scheduled-reports/proposal.md +95 -0
- package/content/.morph/examples/scheduled-reports/spec.md +267 -0
- package/content/.morph/examples/state-v3.json +188 -0
- package/content/.morph/features/.gitkeep +25 -25
- package/content/.morph/hooks/README.md +190 -239
- package/content/.morph/hooks/pre-commit-agents.sh +24 -24
- package/content/.morph/hooks/pre-commit-all.sh +48 -48
- package/content/.morph/hooks/pre-commit-specs.sh +49 -49
- package/content/.morph/hooks/pre-commit-tests.sh +60 -60
- package/content/.morph/project.md +160 -160
- package/content/.morph/schemas/agent.schema.json +296 -296
- package/content/.morph/schemas/tasks.schema.json +220 -0
- package/content/.morph/specs/.gitkeep +20 -20
- package/content/.morph/standards/agent-framework-blazor-ui.md +359 -0
- package/content/.morph/standards/agent-framework-production.md +410 -0
- package/content/.morph/standards/agent-framework-setup.md +413 -453
- package/content/.morph/standards/agent-framework-workflows.md +349 -0
- package/content/.morph/standards/architecture.md +325 -325
- package/content/.morph/standards/azure.md +605 -379
- package/content/.morph/standards/coding.md +377 -377
- package/content/.morph/standards/dotnet10-migration.md +520 -494
- package/content/.morph/standards/fluent-ui-setup.md +590 -590
- package/content/.morph/standards/migration-guide.md +514 -514
- package/content/.morph/standards/passkeys-auth.md +423 -423
- package/content/.morph/standards/vector-search-rag.md +536 -536
- package/content/.morph/state.json +17 -17
- package/content/.morph/templates/FluentDesignTheme.cs +149 -149
- package/content/.morph/templates/MudTheme.cs +281 -281
- package/content/.morph/templates/agent.cs +163 -172
- package/content/.morph/templates/clarify-questions.md +159 -0
- package/content/.morph/templates/component.razor +239 -239
- package/content/.morph/templates/contracts/Commands.cs +74 -0
- package/content/.morph/templates/contracts/Entities.cs +25 -0
- package/content/.morph/templates/contracts/Queries.cs +74 -0
- package/content/.morph/templates/contracts/README.md +74 -0
- package/content/.morph/templates/contracts.cs +217 -217
- package/content/.morph/templates/decisions.md +123 -106
- package/content/.morph/templates/design-system.css +226 -226
- package/content/.morph/templates/infra/.dockerignore.example +89 -89
- package/content/.morph/templates/infra/Dockerfile.example +82 -82
- package/content/.morph/templates/infra/README.md +286 -286
- package/content/.morph/templates/infra/app-insights.bicep +63 -63
- package/content/.morph/templates/infra/app-service.bicep +164 -164
- package/content/.morph/templates/infra/container-app-env.bicep +49 -49
- package/content/.morph/templates/infra/container-app.bicep +156 -156
- package/content/.morph/templates/infra/deploy-checklist.md +426 -0
- package/content/.morph/templates/infra/deploy.ps1 +229 -229
- package/content/.morph/templates/infra/deploy.sh +208 -208
- package/content/.morph/templates/infra/key-vault.bicep +91 -91
- package/content/.morph/templates/infra/main.bicep +189 -189
- package/content/.morph/templates/infra/parameters.dev.json +29 -29
- package/content/.morph/templates/infra/parameters.prod.json +29 -29
- package/content/.morph/templates/infra/parameters.staging.json +29 -29
- package/content/.morph/templates/infra/sql-database.bicep +103 -103
- package/content/.morph/templates/infra/storage.bicep +106 -106
- package/content/.morph/templates/integrations/asaas-client.cs +387 -387
- package/content/.morph/templates/integrations/asaas-webhook.cs +351 -351
- package/content/.morph/templates/integrations/azure-identity-config.cs +288 -288
- package/content/.morph/templates/integrations/clerk-config.cs +258 -258
- package/content/.morph/templates/job.cs +171 -171
- package/content/.morph/templates/migration.cs +83 -83
- package/content/.morph/templates/proposal.md +141 -155
- package/content/.morph/templates/recap.md +94 -105
- package/content/.morph/templates/repository.cs +141 -141
- package/content/.morph/templates/saas/subscription.cs +347 -347
- package/content/.morph/templates/saas/tenant.cs +338 -338
- package/content/.morph/templates/service.cs +139 -139
- package/content/.morph/templates/simulation.md +353 -0
- package/content/.morph/templates/spec.md +149 -148
- package/content/.morph/templates/sprint-status.yaml +68 -68
- package/content/.morph/templates/state.template.json +222 -222
- package/content/.morph/templates/story.md +143 -143
- package/content/.morph/templates/tasks.md +257 -235
- package/content/.morph/templates/test.cs +239 -239
- package/content/.morph/templates/ui-components.md +362 -276
- package/content/.morph/templates/ui-design-system.md +286 -286
- package/content/.morph/templates/ui-flows.md +336 -336
- package/content/.morph/templates/ui-mockups.md +133 -133
- package/content/.morph/test-infra/example.bicep +59 -59
- package/content/CLAUDE.md +150 -442
- package/content/README.md +79 -79
- package/detectors/config-detector.js +223 -223
- package/detectors/conversation-analyzer.js +163 -163
- package/detectors/index.js +84 -84
- package/detectors/standards-generator.js +275 -275
- package/detectors/structure-detector.js +245 -250
- package/docs/README.md +144 -149
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +977 -977
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1048 -1048
- package/docs/api/scripts/collapse.js +38 -38
- package/docs/api/scripts/commonNav.js +28 -28
- package/docs/api/scripts/linenumber.js +25 -25
- package/docs/api/scripts/nav.js +12 -12
- package/docs/api/scripts/polyfill.js +3 -3
- package/docs/api/scripts/prettify/Apache-License-2.0.txt +202 -202
- package/docs/api/scripts/prettify/lang-css.js +2 -2
- package/docs/api/scripts/prettify/prettify.js +28 -28
- package/docs/api/scripts/search.js +98 -98
- package/docs/api/styles/jsdoc.css +776 -776
- package/docs/api/styles/prettify.css +80 -80
- package/docs/examples.md +328 -328
- package/docs/getting-started.md +301 -302
- package/docs/installation.md +361 -361
- package/docs/templates.md +418 -418
- package/docs/validation-checklist.md +265 -266
- package/package.json +80 -80
- package/scripts/postinstall.js +132 -132
- package/src/commands/advance-phase.js +183 -0
- package/src/commands/analyze-blazor-concurrency.js +193 -0
- package/src/commands/create-story.js +351 -351
- package/src/commands/detect-agents.js +139 -0
- package/src/commands/detect.js +104 -104
- package/src/commands/doctor.js +356 -280
- package/src/commands/generate.js +149 -149
- package/src/commands/init.js +258 -245
- package/src/commands/lint-fluent.js +352 -0
- package/src/commands/rollback-phase.js +185 -0
- package/src/commands/session-summary.js +291 -0
- package/src/commands/shard-spec.js +224 -224
- package/src/commands/sprint-status.js +250 -250
- package/src/commands/state.js +333 -333
- package/src/commands/sync.js +167 -167
- package/src/commands/task.js +78 -0
- package/src/commands/troubleshoot.js +222 -0
- package/src/commands/update.js +192 -159
- package/src/commands/validate-blazor-state.js +210 -0
- package/src/commands/validate-blazor.js +156 -0
- package/src/commands/validate-css.js +84 -0
- package/src/commands/validate-phase.js +221 -0
- package/src/lib/blazor-concurrency-analyzer.js +288 -0
- package/src/lib/blazor-state-validator.js +291 -0
- package/src/lib/blazor-validator.js +374 -0
- package/src/lib/complexity-analyzer.js +441 -292
- package/src/lib/continuous-validator.js +421 -0
- package/src/lib/css-validator.js +352 -0
- package/src/lib/decision-constraint-loader.js +109 -0
- package/src/lib/design-system-generator.js +298 -298
- package/src/lib/learning-system.js +520 -0
- package/src/lib/mockup-generator.js +366 -0
- package/src/lib/recap-generator.js +205 -0
- package/src/lib/state-manager.js +397 -340
- package/src/lib/troubleshoot-grep.js +194 -0
- package/src/lib/troubleshoot-index.js +144 -0
- package/src/lib/ui-detector.js +350 -0
- package/src/lib/validation-runner.js +231 -0
- package/src/lib/validators/architecture-validator.js +387 -0
- package/src/lib/validators/contract-compliance-validator.js +273 -0
- package/src/lib/validators/package-validator.js +360 -0
- package/src/lib/validators/ui-contrast-validator.js +422 -0
- package/src/utils/file-copier.js +179 -139
- package/src/utils/logger.js +32 -32
- package/src/utils/version-checker.js +175 -175
- package/content/.claude/commands/morph-costs.md +0 -206
- package/content/.claude/commands/morph-tasks.md +0 -319
- package/content/.claude/skills/specialists/cost-guardian.md +0 -110
- package/content/.claude/skills/stacks/shopify.md +0 -445
- package/content/.morph/config/azure-pricing.json +0 -70
- package/content/.morph/config/azure-pricing.schema.json +0 -50
- package/content/.morph/hooks/pre-commit-costs.sh +0 -91
- package/docs/api/cost-calculator.js.html +0 -513
- package/docs/api/design-system-generator.js.html +0 -382
- package/docs/api/global.html +0 -5263
- package/docs/api/index.html +0 -96
- package/docs/api/state-manager.js.html +0 -423
- package/src/commands/cost.js +0 -181
- package/src/commands/update-pricing.js +0 -206
- package/src/lib/cost-calculator.js +0 -429
|
@@ -1,172 +1,163 @@
|
|
|
1
|
-
// ============================================================
|
|
2
|
-
//
|
|
3
|
-
// Generated by MORPH Framework
|
|
4
|
-
// ============================================================
|
|
5
|
-
|
|
6
|
-
using
|
|
7
|
-
using
|
|
8
|
-
using
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
///
|
|
15
|
-
///
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
var
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
{
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
//
|
|
143
|
-
//
|
|
144
|
-
//
|
|
145
|
-
//
|
|
146
|
-
//
|
|
147
|
-
//
|
|
148
|
-
//
|
|
149
|
-
//
|
|
150
|
-
//
|
|
151
|
-
//
|
|
152
|
-
//
|
|
153
|
-
//
|
|
154
|
-
//
|
|
155
|
-
//
|
|
156
|
-
//
|
|
157
|
-
//
|
|
158
|
-
//
|
|
159
|
-
//
|
|
160
|
-
//
|
|
161
|
-
//
|
|
162
|
-
//
|
|
163
|
-
//
|
|
164
|
-
// // credentials: new DefaultAzureCredential());
|
|
165
|
-
//
|
|
166
|
-
// services.AddSingleton(builder.Build());
|
|
167
|
-
// services.AddScoped<I{Feature}AnalyzerAgent, {Feature}AnalyzerAgent>();
|
|
168
|
-
//
|
|
169
|
-
// return services;
|
|
170
|
-
// }
|
|
171
|
-
//
|
|
172
|
-
// ============================================================
|
|
1
|
+
// ============================================================
|
|
2
|
+
// MICROSOFT AGENT FRAMEWORK TEMPLATE
|
|
3
|
+
// Generated by MORPH Framework
|
|
4
|
+
// ============================================================
|
|
5
|
+
|
|
6
|
+
using System.ComponentModel;
|
|
7
|
+
using System.Text.Json;
|
|
8
|
+
using Microsoft.Agents.AI;
|
|
9
|
+
using Microsoft.Extensions.AI;
|
|
10
|
+
using Microsoft.Extensions.Logging;
|
|
11
|
+
|
|
12
|
+
namespace MyProject.Agents.{Feature};
|
|
13
|
+
|
|
14
|
+
/// <summary>
|
|
15
|
+
/// AI Agent for analyzing {Feature} data.
|
|
16
|
+
/// Uses Microsoft Agent Framework with IChatClient (gpt-4o-mini by default).
|
|
17
|
+
/// </summary>
|
|
18
|
+
public class {Feature}AnalyzerAgent(
|
|
19
|
+
IChatClient chatClient,
|
|
20
|
+
ILogger<{Feature}AnalyzerAgent> logger) : I{Feature}AnalyzerAgent
|
|
21
|
+
{
|
|
22
|
+
/// <inheritdoc />
|
|
23
|
+
public async Task<{Feature}AnalysisResult> AnalyzeAsync(
|
|
24
|
+
{Feature}Data data,
|
|
25
|
+
CancellationToken cancellationToken = default)
|
|
26
|
+
{
|
|
27
|
+
logger.LogInformation("Starting {Feature} analysis for: {Content}",
|
|
28
|
+
data.Content.Length > 100 ? data.Content[..100] + "..." : data.Content);
|
|
29
|
+
|
|
30
|
+
var agent = new ChatClientAgent(
|
|
31
|
+
chatClient,
|
|
32
|
+
new ChatClientAgentOptions
|
|
33
|
+
{
|
|
34
|
+
Name = "{Feature}Analyzer",
|
|
35
|
+
Instructions = """
|
|
36
|
+
You are an expert analyst for {Feature} data.
|
|
37
|
+
|
|
38
|
+
Analyze the provided data and return a JSON object with:
|
|
39
|
+
- summary: Brief summary (1-2 sentences)
|
|
40
|
+
- insights: Array of at least 2 insights
|
|
41
|
+
- recommendations: Array of at least 1 recommendation
|
|
42
|
+
- confidenceScore: Number between 0 and 1
|
|
43
|
+
|
|
44
|
+
Respond ONLY with valid JSON, no additional text.
|
|
45
|
+
""",
|
|
46
|
+
ChatOptions = new ChatOptions
|
|
47
|
+
{
|
|
48
|
+
Tools =
|
|
49
|
+
[
|
|
50
|
+
AIFunctionFactory.Create(GetContextAsync),
|
|
51
|
+
AIFunctionFactory.Create(GetMetricsAsync)
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
var response = await agent.RunAsync(
|
|
57
|
+
$"Analyze this data:\n{data.Content}",
|
|
58
|
+
cancellationToken: cancellationToken);
|
|
59
|
+
|
|
60
|
+
var result = ParseResponse(response.Text);
|
|
61
|
+
|
|
62
|
+
logger.LogInformation(
|
|
63
|
+
"Analysis completed. Confidence: {Confidence:P0}",
|
|
64
|
+
result.ConfidenceScore);
|
|
65
|
+
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
#region Tools
|
|
70
|
+
|
|
71
|
+
[Description("Gets additional context for the analysis")]
|
|
72
|
+
private async Task<string> GetContextAsync(
|
|
73
|
+
[Description("What context is needed")] string query,
|
|
74
|
+
CancellationToken ct = default)
|
|
75
|
+
{
|
|
76
|
+
// TODO: Implement context retrieval (e.g., from database or search)
|
|
77
|
+
await Task.CompletedTask;
|
|
78
|
+
return $"Context for: {query}";
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
[Description("Gets relevant metrics for the analysis")]
|
|
82
|
+
private async Task<string> GetMetricsAsync(
|
|
83
|
+
[Description("Metric type to retrieve")] string metricType,
|
|
84
|
+
CancellationToken ct = default)
|
|
85
|
+
{
|
|
86
|
+
// TODO: Implement metrics retrieval
|
|
87
|
+
await Task.CompletedTask;
|
|
88
|
+
return $"Metrics for: {metricType}";
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
#endregion
|
|
92
|
+
|
|
93
|
+
#region Response Parsing
|
|
94
|
+
|
|
95
|
+
private {Feature}AnalysisResult ParseResponse(string response)
|
|
96
|
+
{
|
|
97
|
+
try
|
|
98
|
+
{
|
|
99
|
+
var json = response
|
|
100
|
+
.Replace("```json", "")
|
|
101
|
+
.Replace("```", "")
|
|
102
|
+
.Trim();
|
|
103
|
+
|
|
104
|
+
var parsed = JsonSerializer.Deserialize<AnalysisResponse>(json,
|
|
105
|
+
new JsonSerializerOptions { PropertyNameCaseInsensitive = true });
|
|
106
|
+
|
|
107
|
+
if (parsed is null)
|
|
108
|
+
throw new {Feature}ProcessingException("Failed to parse analysis response");
|
|
109
|
+
|
|
110
|
+
return new {Feature}AnalysisResult(
|
|
111
|
+
parsed.Summary ?? "Analysis completed",
|
|
112
|
+
parsed.Insights ?? [],
|
|
113
|
+
parsed.Recommendations ?? [],
|
|
114
|
+
parsed.ConfidenceScore);
|
|
115
|
+
}
|
|
116
|
+
catch (JsonException ex)
|
|
117
|
+
{
|
|
118
|
+
logger.LogError(ex, "Failed to parse AI response: {Response}", response);
|
|
119
|
+
throw new {Feature}ProcessingException("Failed to parse analysis response", ex);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
private class AnalysisResponse
|
|
124
|
+
{
|
|
125
|
+
public string? Summary { get; set; }
|
|
126
|
+
public List<string>? Insights { get; set; }
|
|
127
|
+
public List<string>? Recommendations { get; set; }
|
|
128
|
+
public double ConfidenceScore { get; set; }
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
#endregion
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// ============================================================
|
|
135
|
+
// DEPENDENCY INJECTION SETUP
|
|
136
|
+
// ============================================================
|
|
137
|
+
//
|
|
138
|
+
// In Program.cs:
|
|
139
|
+
//
|
|
140
|
+
// // Register IChatClient (Azure OpenAI with Managed Identity)
|
|
141
|
+
// builder.Services.AddSingleton<IChatClient>(sp =>
|
|
142
|
+
// {
|
|
143
|
+
// var cfg = sp.GetRequiredService<IConfiguration>();
|
|
144
|
+
// return new AzureOpenAIClient(
|
|
145
|
+
// new Uri(cfg["AzureOpenAI:Endpoint"]!),
|
|
146
|
+
// new DefaultAzureCredential())
|
|
147
|
+
// .GetChatClient(cfg["AzureOpenAI:DeploymentName"] ?? "gpt-4o-mini")
|
|
148
|
+
// .AsIChatClient();
|
|
149
|
+
// });
|
|
150
|
+
//
|
|
151
|
+
// // Option A: Register as scoped service
|
|
152
|
+
// builder.Services.AddScoped<I{Feature}AnalyzerAgent, {Feature}AnalyzerAgent>();
|
|
153
|
+
//
|
|
154
|
+
// // Option B: Register as keyed agent (recommended for multiple agents)
|
|
155
|
+
// builder.AddAIAgent("{Feature}Analyzer", (sp, key) =>
|
|
156
|
+
// {
|
|
157
|
+
// var chatClient = sp.GetRequiredService<IChatClient>();
|
|
158
|
+
// return new ChatClientAgent(chatClient,
|
|
159
|
+
// name: key,
|
|
160
|
+
// instructions: "You are an expert {Feature} analyst.");
|
|
161
|
+
// });
|
|
162
|
+
//
|
|
163
|
+
// ============================================================
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Checklist de Clarificação - {{FEATURE_NAME_TITLE}}
|
|
2
|
+
|
|
3
|
+
> Template para FASE 3: CLARIFY
|
|
4
|
+
> Use este checklist para identificar ambiguidades e fazer perguntas estruturadas
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 🎯 Contexto da Feature
|
|
9
|
+
|
|
10
|
+
**Feature:** {{FEATURE_NAME}}
|
|
11
|
+
**Fase atual:** CLARIFY
|
|
12
|
+
**Data:** {{DATE}}
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 📋 Checklist de Clarificação Padrão
|
|
17
|
+
|
|
18
|
+
### 1. Fluxo de Usuário
|
|
19
|
+
|
|
20
|
+
- [ ] Existe fluxo gratuito vs pago?
|
|
21
|
+
- [ ] O que acontece em edge cases (erro, timeout, dados inválidos)?
|
|
22
|
+
- [ ] Qual o fluxo de primeiro acesso (onboarding)?
|
|
23
|
+
- [ ] Existem diferentes tipos de usuário com permissões diferentes?
|
|
24
|
+
- [ ] O que acontece se o usuário cancelar no meio do processo?
|
|
25
|
+
|
|
26
|
+
**Perguntas específicas:**
|
|
27
|
+
1. _[Adicionar pergunta específica da feature]_
|
|
28
|
+
2. _[Adicionar pergunta específica da feature]_
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
### 2. Integrações Externas
|
|
33
|
+
|
|
34
|
+
- [ ] Quais campos são obrigatórios para cada API externa?
|
|
35
|
+
- [ ] Há fallbacks se a API externa falhar?
|
|
36
|
+
- [ ] Qual o timeout aceitável para chamadas externas?
|
|
37
|
+
- [ ] Como tratar rate limiting?
|
|
38
|
+
- [ ] Precisa de webhook para eventos da API?
|
|
39
|
+
|
|
40
|
+
**Perguntas específicas:**
|
|
41
|
+
1. _[Adicionar pergunta sobre integração]_
|
|
42
|
+
2. _[Adicionar pergunta sobre integração]_
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
### 3. Dados e Persistência
|
|
47
|
+
|
|
48
|
+
- [ ] Qual a política de retenção de dados?
|
|
49
|
+
- [ ] Precisa de soft delete ou hard delete?
|
|
50
|
+
- [ ] Quais dados são sensíveis e precisam de criptografia?
|
|
51
|
+
- [ ] Precisa de histórico/auditoria de alterações?
|
|
52
|
+
- [ ] Qual o volume esperado de dados?
|
|
53
|
+
|
|
54
|
+
**Perguntas específicas:**
|
|
55
|
+
1. _[Adicionar pergunta sobre dados]_
|
|
56
|
+
2. _[Adicionar pergunta sobre dados]_
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
### 4. Performance e Escalabilidade
|
|
61
|
+
|
|
62
|
+
- [ ] Qual o SLA esperado (tempo de resposta)?
|
|
63
|
+
- [ ] Precisa de cache? Se sim, qual estratégia?
|
|
64
|
+
- [ ] Quantos usuários simultâneos são esperados?
|
|
65
|
+
- [ ] Existem operações que podem ser assíncronas?
|
|
66
|
+
- [ ] Precisa de paginação para listas grandes?
|
|
67
|
+
|
|
68
|
+
**Perguntas específicas:**
|
|
69
|
+
1. _[Adicionar pergunta sobre performance]_
|
|
70
|
+
2. _[Adicionar pergunta sobre performance]_
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
### 5. Segurança e Autorização
|
|
75
|
+
|
|
76
|
+
- [ ] Quem pode acessar esta funcionalidade?
|
|
77
|
+
- [ ] Existem diferentes níveis de permissão?
|
|
78
|
+
- [ ] Precisa de validação de ownership (usuário só vê seus dados)?
|
|
79
|
+
- [ ] Existem dados que não devem ser expostos em logs?
|
|
80
|
+
- [ ] Precisa de CAPTCHA ou proteção contra bots?
|
|
81
|
+
|
|
82
|
+
**Perguntas específicas:**
|
|
83
|
+
1. _[Adicionar pergunta sobre segurança]_
|
|
84
|
+
2. _[Adicionar pergunta sobre segurança]_
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
### 6. UI/UX (se aplicável)
|
|
89
|
+
|
|
90
|
+
- [ ] Qual o estado inicial da tela (vazia, loading, dados)?
|
|
91
|
+
- [ ] O que mostrar quando não há dados?
|
|
92
|
+
- [ ] Quais mensagens de erro/sucesso exibir?
|
|
93
|
+
- [ ] Precisa de confirmação antes de ações destrutivas?
|
|
94
|
+
- [ ] Como tratar formulários muito longos (wizard, seções)?
|
|
95
|
+
|
|
96
|
+
**Perguntas específicas:**
|
|
97
|
+
1. _[Adicionar pergunta sobre UI]_
|
|
98
|
+
2. _[Adicionar pergunta sobre UI]_
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
### 7. Notificações e Comunicação
|
|
103
|
+
|
|
104
|
+
- [ ] Precisa enviar email/SMS/push em algum momento?
|
|
105
|
+
- [ ] Quais eventos disparam notificações?
|
|
106
|
+
- [ ] O usuário pode configurar preferências de notificação?
|
|
107
|
+
- [ ] Precisa de notificações em tempo real (SignalR)?
|
|
108
|
+
|
|
109
|
+
**Perguntas específicas:**
|
|
110
|
+
1. _[Adicionar pergunta sobre notificações]_
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
### 8. Regras de Negócio
|
|
115
|
+
|
|
116
|
+
- [ ] Existem validações específicas do domínio?
|
|
117
|
+
- [ ] Existem limites (máximo de itens, tamanho de arquivo, etc)?
|
|
118
|
+
- [ ] Existem estados/transições de status?
|
|
119
|
+
- [ ] Existem cálculos ou fórmulas específicas?
|
|
120
|
+
- [ ] Existem regras de agendamento (cron, jobs)?
|
|
121
|
+
|
|
122
|
+
**Perguntas específicas:**
|
|
123
|
+
1. _[Adicionar pergunta sobre regras de negócio]_
|
|
124
|
+
2. _[Adicionar pergunta sobre regras de negócio]_
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## 📝 Respostas Coletadas
|
|
129
|
+
|
|
130
|
+
> Preencher com as respostas do usuário
|
|
131
|
+
|
|
132
|
+
| # | Pergunta | Resposta | Impacto no Spec |
|
|
133
|
+
|---|----------|----------|-----------------|
|
|
134
|
+
| 1 | | | |
|
|
135
|
+
| 2 | | | |
|
|
136
|
+
| 3 | | | |
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## ✅ Ações Resultantes
|
|
141
|
+
|
|
142
|
+
- [ ] Atualizar spec.md com clarificações
|
|
143
|
+
- [ ] Adicionar edge cases identificados
|
|
144
|
+
- [ ] Atualizar contracts.cs se necessário
|
|
145
|
+
- [ ] Documentar decisões em decisions.md
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 🎯 Status
|
|
150
|
+
|
|
151
|
+
- **Total de perguntas:** _X_
|
|
152
|
+
- **Perguntas respondidas:** _Y_
|
|
153
|
+
- **Pendentes:** _Z_
|
|
154
|
+
|
|
155
|
+
**Pronto para avançar para FASE 4: TASKS?** [ ] Sim [ ] Não
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
_Gerado por MORPH-SPEC Framework_
|