@polymorphism-tech/morph-spec 1.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 (83) hide show
  1. package/README.md +279 -0
  2. package/bin/morph-spec.js +53 -0
  3. package/content/.claude/commands/morph-apply.md +66 -0
  4. package/content/.claude/commands/morph-archive.md +79 -0
  5. package/content/.claude/commands/morph-costs.md +206 -0
  6. package/content/.claude/commands/morph-infra.md +209 -0
  7. package/content/.claude/commands/morph-proposal.md +60 -0
  8. package/content/.claude/commands/morph-status.md +71 -0
  9. package/content/.claude/settings.local.json +15 -0
  10. package/content/.claude/skills/infra/bicep-architect.md +419 -0
  11. package/content/.claude/skills/infra/container-specialist.md +437 -0
  12. package/content/.claude/skills/infra/devops-engineer.md +405 -0
  13. package/content/.claude/skills/integrations/asaas-financial.md +333 -0
  14. package/content/.claude/skills/integrations/azure-identity.md +309 -0
  15. package/content/.claude/skills/integrations/clerk-auth.md +290 -0
  16. package/content/.claude/skills/specialists/azure-architect.md +142 -0
  17. package/content/.claude/skills/specialists/cost-guardian.md +110 -0
  18. package/content/.claude/skills/specialists/ef-modeler.md +200 -0
  19. package/content/.claude/skills/specialists/hangfire-orchestrator.md +245 -0
  20. package/content/.claude/skills/specialists/ms-agent-expert.md +209 -0
  21. package/content/.claude/skills/specialists/po-pm-advisor.md +197 -0
  22. package/content/.claude/skills/specialists/standards-architect.md +78 -0
  23. package/content/.claude/skills/specialists/ui-ux-designer.md +325 -0
  24. package/content/.claude/skills/stacks/dotnet-blazor.md +352 -0
  25. package/content/.claude/skills/stacks/dotnet-nextjs.md +402 -0
  26. package/content/.claude/skills/stacks/shopify.md +445 -0
  27. package/content/.morph/archive/.gitkeep +25 -0
  28. package/content/.morph/config/agents.json +149 -0
  29. package/content/.morph/config/config.template.json +96 -0
  30. package/content/.morph/examples/api-nextjs/README.md +241 -0
  31. package/content/.morph/examples/api-nextjs/contracts.ts +307 -0
  32. package/content/.morph/examples/api-nextjs/spec.md +399 -0
  33. package/content/.morph/examples/api-nextjs/tasks.md +168 -0
  34. package/content/.morph/examples/micro-saas/README.md +125 -0
  35. package/content/.morph/examples/micro-saas/contracts.cs +358 -0
  36. package/content/.morph/examples/micro-saas/decisions.md +246 -0
  37. package/content/.morph/examples/micro-saas/spec.md +236 -0
  38. package/content/.morph/examples/micro-saas/tasks.md +150 -0
  39. package/content/.morph/examples/multi-agent/README.md +309 -0
  40. package/content/.morph/examples/multi-agent/contracts.cs +433 -0
  41. package/content/.morph/examples/multi-agent/spec.md +479 -0
  42. package/content/.morph/examples/multi-agent/tasks.md +185 -0
  43. package/content/.morph/features/.gitkeep +25 -0
  44. package/content/.morph/project.md +159 -0
  45. package/content/.morph/specs/.gitkeep +20 -0
  46. package/content/.morph/standards/architecture.md +190 -0
  47. package/content/.morph/standards/azure.md +184 -0
  48. package/content/.morph/standards/coding.md +342 -0
  49. package/content/.morph/templates/agent.cs +172 -0
  50. package/content/.morph/templates/component.razor +239 -0
  51. package/content/.morph/templates/contracts.cs +217 -0
  52. package/content/.morph/templates/decisions.md +106 -0
  53. package/content/.morph/templates/infra/app-insights.bicep +63 -0
  54. package/content/.morph/templates/infra/container-app-env.bicep +49 -0
  55. package/content/.morph/templates/infra/container-app.bicep +156 -0
  56. package/content/.morph/templates/infra/key-vault.bicep +91 -0
  57. package/content/.morph/templates/infra/main.bicep +155 -0
  58. package/content/.morph/templates/infra/parameters.dev.json +23 -0
  59. package/content/.morph/templates/infra/parameters.prod.json +23 -0
  60. package/content/.morph/templates/infra/sql-database.bicep +103 -0
  61. package/content/.morph/templates/infra/storage.bicep +106 -0
  62. package/content/.morph/templates/integrations/asaas-client.cs +387 -0
  63. package/content/.morph/templates/integrations/asaas-webhook.cs +351 -0
  64. package/content/.morph/templates/integrations/azure-identity-config.cs +288 -0
  65. package/content/.morph/templates/integrations/clerk-config.cs +258 -0
  66. package/content/.morph/templates/job.cs +171 -0
  67. package/content/.morph/templates/migration.cs +83 -0
  68. package/content/.morph/templates/proposal.md +155 -0
  69. package/content/.morph/templates/recap.md +105 -0
  70. package/content/.morph/templates/repository.cs +141 -0
  71. package/content/.morph/templates/saas/subscription.cs +347 -0
  72. package/content/.morph/templates/saas/tenant.cs +338 -0
  73. package/content/.morph/templates/service.cs +139 -0
  74. package/content/.morph/templates/spec.md +147 -0
  75. package/content/.morph/templates/tasks.md +235 -0
  76. package/content/.morph/templates/test.cs +239 -0
  77. package/content/CLAUDE.md +318 -0
  78. package/package.json +50 -0
  79. package/src/commands/doctor.js +132 -0
  80. package/src/commands/init.js +121 -0
  81. package/src/commands/update.js +84 -0
  82. package/src/utils/file-copier.js +50 -0
  83. package/src/utils/logger.js +32 -0
@@ -0,0 +1,445 @@
1
+ # Shopify Stack
2
+
3
+ Stack para desenvolvimento de apps e storefronts Shopify com Hydrogen e Liquid.
4
+
5
+ ## Visão Geral
6
+
7
+ | Aspecto | Tecnologia |
8
+ |---------|------------|
9
+ | **Storefront** | Hydrogen / Liquid |
10
+ | **Apps** | Shopify App Bridge + Remix |
11
+ | **API** | GraphQL Storefront/Admin API |
12
+ | **CLI** | Shopify CLI |
13
+ | **Hosting** | Shopify hosting / Vercel |
14
+
15
+ ## Triggers
16
+
17
+ Keywords: `shopify`, `hydrogen`, `liquid`, `ecommerce`, `storefront`, `shopify app`, `graphql`
18
+
19
+ ## Tipos de Projetos Shopify
20
+
21
+ ### 1. Theme Development (Liquid)
22
+
23
+ Customização de temas existentes ou criação de novos.
24
+
25
+ ```
26
+ theme/
27
+ ├── assets/
28
+ ├── config/
29
+ ├── layout/
30
+ │ └── theme.liquid
31
+ ├── locales/
32
+ ├── sections/
33
+ │ └── hero.liquid
34
+ ├── snippets/
35
+ └── templates/
36
+ └── product.liquid
37
+ ```
38
+
39
+ ### 2. Custom Storefront (Hydrogen)
40
+
41
+ Storefront headless com React e Remix.
42
+
43
+ ```
44
+ hydrogen-app/
45
+ ├── app/
46
+ │ ├── components/
47
+ │ ├── routes/
48
+ │ └── styles/
49
+ ├── public/
50
+ ├── remix.config.js
51
+ └── package.json
52
+ ```
53
+
54
+ ### 3. Shopify App
55
+
56
+ App que estende funcionalidades do Shopify Admin.
57
+
58
+ ```
59
+ shopify-app/
60
+ ├── app/
61
+ │ ├── routes/
62
+ │ │ └── app._index.tsx
63
+ │ └── shopify.server.ts
64
+ ├── extensions/
65
+ └── shopify.app.toml
66
+ ```
67
+
68
+ ## Shopify CLI
69
+
70
+ ```bash
71
+ # Instalar
72
+ npm install -g @shopify/cli
73
+
74
+ # Criar app
75
+ shopify app init
76
+
77
+ # Criar tema
78
+ shopify theme init
79
+
80
+ # Criar storefront Hydrogen
81
+ npm create @shopify/hydrogen
82
+
83
+ # Dev server
84
+ shopify app dev
85
+ shopify theme dev
86
+ npm run dev # Hydrogen
87
+ ```
88
+
89
+ ## Hydrogen (Storefront)
90
+
91
+ ### Setup
92
+
93
+ ```bash
94
+ npm create @shopify/hydrogen@latest -- --template demo-store
95
+ cd my-store
96
+ npm run dev
97
+ ```
98
+
99
+ ### Configuração
100
+
101
+ ```typescript
102
+ // hydrogen.config.ts
103
+ import { defineConfig } from '@shopify/hydrogen/config';
104
+
105
+ export default defineConfig({
106
+ shopify: {
107
+ defaultCountryCode: 'BR',
108
+ defaultLanguageCode: 'PT',
109
+ storeDomain: 'your-store.myshopify.com',
110
+ storefrontToken: process.env.PUBLIC_STOREFRONT_API_TOKEN,
111
+ storefrontApiVersion: '2024-01',
112
+ },
113
+ });
114
+ ```
115
+
116
+ ### Fetch de Produtos
117
+
118
+ ```tsx
119
+ // app/routes/products._index.tsx
120
+ import { json } from '@shopify/remix-oxygen';
121
+ import { useLoaderData } from '@remix-run/react';
122
+ import { ProductGrid } from '~/components/ProductGrid';
123
+
124
+ const PRODUCTS_QUERY = `#graphql
125
+ query Products($first: Int!) {
126
+ products(first: $first) {
127
+ nodes {
128
+ id
129
+ title
130
+ handle
131
+ priceRange {
132
+ minVariantPrice {
133
+ amount
134
+ currencyCode
135
+ }
136
+ }
137
+ featuredImage {
138
+ url
139
+ altText
140
+ }
141
+ }
142
+ }
143
+ }
144
+ `;
145
+
146
+ export async function loader({ context }: { context: HydrogenContext }) {
147
+ const { products } = await context.storefront.query(PRODUCTS_QUERY, {
148
+ variables: { first: 12 },
149
+ });
150
+
151
+ return json({ products: products.nodes });
152
+ }
153
+
154
+ export default function ProductsIndex() {
155
+ const { products } = useLoaderData<typeof loader>();
156
+
157
+ return (
158
+ <div className="container mx-auto p-4">
159
+ <h1 className="text-2xl font-bold mb-6">Produtos</h1>
160
+ <ProductGrid products={products} />
161
+ </div>
162
+ );
163
+ }
164
+ ```
165
+
166
+ ### Componente de Produto
167
+
168
+ ```tsx
169
+ // app/components/ProductCard.tsx
170
+ import { Image, Money } from '@shopify/hydrogen';
171
+ import { Link } from '@remix-run/react';
172
+
173
+ interface Props {
174
+ product: {
175
+ id: string;
176
+ title: string;
177
+ handle: string;
178
+ priceRange: {
179
+ minVariantPrice: {
180
+ amount: string;
181
+ currencyCode: string;
182
+ };
183
+ };
184
+ featuredImage?: {
185
+ url: string;
186
+ altText?: string;
187
+ };
188
+ };
189
+ }
190
+
191
+ export function ProductCard({ product }: Props) {
192
+ return (
193
+ <Link to={`/products/${product.handle}`} className="group">
194
+ <div className="aspect-square overflow-hidden rounded-lg bg-gray-100">
195
+ {product.featuredImage && (
196
+ <Image
197
+ data={product.featuredImage}
198
+ className="h-full w-full object-cover group-hover:scale-105 transition"
199
+ />
200
+ )}
201
+ </div>
202
+ <h3 className="mt-4 text-sm text-gray-700">{product.title}</h3>
203
+ <Money
204
+ data={product.priceRange.minVariantPrice}
205
+ className="mt-1 text-lg font-medium text-gray-900"
206
+ />
207
+ </Link>
208
+ );
209
+ }
210
+ ```
211
+
212
+ ## Liquid (Theme Development)
213
+
214
+ ### Section Exemplo
215
+
216
+ ```liquid
217
+ {% comment %} sections/hero.liquid {% endcomment %}
218
+
219
+ <section class="hero" style="background-image: url('{{ section.settings.background_image | img_url: 'master' }}');">
220
+ <div class="hero__content">
221
+ <h1>{{ section.settings.heading }}</h1>
222
+ <p>{{ section.settings.subheading }}</p>
223
+
224
+ {% if section.settings.button_link != blank %}
225
+ <a href="{{ section.settings.button_link }}" class="btn">
226
+ {{ section.settings.button_text }}
227
+ </a>
228
+ {% endif %}
229
+ </div>
230
+ </section>
231
+
232
+ {% schema %}
233
+ {
234
+ "name": "Hero",
235
+ "settings": [
236
+ {
237
+ "type": "image_picker",
238
+ "id": "background_image",
239
+ "label": "Background Image"
240
+ },
241
+ {
242
+ "type": "text",
243
+ "id": "heading",
244
+ "label": "Heading",
245
+ "default": "Welcome to our store"
246
+ },
247
+ {
248
+ "type": "text",
249
+ "id": "subheading",
250
+ "label": "Subheading"
251
+ },
252
+ {
253
+ "type": "url",
254
+ "id": "button_link",
255
+ "label": "Button Link"
256
+ },
257
+ {
258
+ "type": "text",
259
+ "id": "button_text",
260
+ "label": "Button Text",
261
+ "default": "Shop Now"
262
+ }
263
+ ],
264
+ "presets": [
265
+ {
266
+ "name": "Hero"
267
+ }
268
+ ]
269
+ }
270
+ {% endschema %}
271
+ ```
272
+
273
+ ### Product Template
274
+
275
+ ```liquid
276
+ {% comment %} templates/product.liquid {% endcomment %}
277
+
278
+ <div class="product-page">
279
+ <div class="product-gallery">
280
+ {% for image in product.images %}
281
+ <img
282
+ src="{{ image | img_url: '600x600' }}"
283
+ alt="{{ image.alt | escape }}"
284
+ loading="lazy"
285
+ />
286
+ {% endfor %}
287
+ </div>
288
+
289
+ <div class="product-info">
290
+ <h1>{{ product.title }}</h1>
291
+ <p class="price">{{ product.price | money }}</p>
292
+
293
+ <div class="description">
294
+ {{ product.description }}
295
+ </div>
296
+
297
+ {% form 'product', product %}
298
+ <select name="id">
299
+ {% for variant in product.variants %}
300
+ <option value="{{ variant.id }}" {% unless variant.available %}disabled{% endunless %}>
301
+ {{ variant.title }} - {{ variant.price | money }}
302
+ </option>
303
+ {% endfor %}
304
+ </select>
305
+
306
+ <input type="number" name="quantity" value="1" min="1" />
307
+
308
+ <button type="submit" {% unless product.available %}disabled{% endunless %}>
309
+ {% if product.available %}
310
+ Add to Cart
311
+ {% else %}
312
+ Sold Out
313
+ {% endif %}
314
+ </button>
315
+ {% endform %}
316
+ </div>
317
+ </div>
318
+ ```
319
+
320
+ ## Shopify App
321
+
322
+ ### App Setup
323
+
324
+ ```bash
325
+ shopify app init --template=remix
326
+ cd my-app
327
+ shopify app dev
328
+ ```
329
+
330
+ ### App Bridge
331
+
332
+ ```tsx
333
+ // app/routes/app._index.tsx
334
+ import { json } from '@remix-run/node';
335
+ import { useLoaderData } from '@remix-run/react';
336
+ import { authenticate } from '../shopify.server';
337
+ import { Page, Layout, Card, Text } from '@shopify/polaris';
338
+
339
+ export async function loader({ request }) {
340
+ const { admin, session } = await authenticate.admin(request);
341
+
342
+ const response = await admin.graphql(`
343
+ query {
344
+ shop {
345
+ name
346
+ email
347
+ }
348
+ }
349
+ `);
350
+
351
+ const { data } = await response.json();
352
+
353
+ return json({ shop: data.shop });
354
+ }
355
+
356
+ export default function Index() {
357
+ const { shop } = useLoaderData<typeof loader>();
358
+
359
+ return (
360
+ <Page title="Dashboard">
361
+ <Layout>
362
+ <Layout.Section>
363
+ <Card>
364
+ <Text variant="headingMd" as="h2">
365
+ Welcome to {shop.name}
366
+ </Text>
367
+ <Text as="p">Store email: {shop.email}</Text>
368
+ </Card>
369
+ </Layout.Section>
370
+ </Layout>
371
+ </Page>
372
+ );
373
+ }
374
+ ```
375
+
376
+ ## GraphQL APIs
377
+
378
+ ### Storefront API
379
+
380
+ ```graphql
381
+ # Produtos
382
+ query {
383
+ products(first: 10) {
384
+ nodes {
385
+ id
386
+ title
387
+ handle
388
+ description
389
+ }
390
+ }
391
+ }
392
+
393
+ # Carrinho
394
+ mutation cartCreate($input: CartInput!) {
395
+ cartCreate(input: $input) {
396
+ cart {
397
+ id
398
+ checkoutUrl
399
+ }
400
+ }
401
+ }
402
+ ```
403
+
404
+ ### Admin API
405
+
406
+ ```graphql
407
+ # Pedidos
408
+ query {
409
+ orders(first: 10) {
410
+ nodes {
411
+ id
412
+ name
413
+ totalPriceSet {
414
+ shopMoney {
415
+ amount
416
+ }
417
+ }
418
+ }
419
+ }
420
+ }
421
+ ```
422
+
423
+ ## Documentação de Referência
424
+
425
+ - [Shopify CLI](https://shopify.dev/docs/apps/tools/cli)
426
+ - [Hydrogen](https://shopify.dev/docs/storefronts/hydrogen)
427
+ - [Liquid](https://shopify.dev/docs/themes/liquid)
428
+ - [Storefront API](https://shopify.dev/docs/api/storefront)
429
+ - [Admin API](https://shopify.dev/docs/api/admin)
430
+ - [Polaris](https://polaris.shopify.com/)
431
+
432
+ ## Checklist de Projeto
433
+
434
+ - [ ] Shopify CLI instalado
435
+ - [ ] Partner account configurado
436
+ - [ ] Development store criada
437
+ - [ ] API tokens configurados
438
+ - [ ] Theme/App estrutura criada
439
+ - [ ] GraphQL queries definidas
440
+ - [ ] Polaris para UI (apps)
441
+ - [ ] Testes com theme check
442
+
443
+ ---
444
+
445
+ *MORPH-SPEC by Polymorphism Tech*
@@ -0,0 +1,25 @@
1
+ # Features Arquivadas
2
+
3
+ Esta pasta contém o histórico de features CONCLUÍDAS.
4
+
5
+ ## Estrutura
6
+
7
+ ```
8
+ archive/
9
+ └── {feature-name}/
10
+ ├── proposal.md # Proposta original
11
+ ├── spec.md # Especificação final
12
+ ├── tasks.md # Tasks completadas
13
+ ├── contracts.cs # Contracts finais
14
+ ├── decisions.md # ADRs
15
+ └── recap.md # Resumo e métricas
16
+ ```
17
+
18
+ ## Por que arquivar?
19
+
20
+ 1. Manter histórico de decisões
21
+ 2. Referência para features similares
22
+ 3. Métricas de produtividade
23
+ 4. Lições aprendidas
24
+
25
+ *Gerado pelo MORPH Framework*
@@ -0,0 +1,149 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "agents": {
4
+ "core": [
5
+ {
6
+ "id": "standards-architect",
7
+ "name": "Standards Architect",
8
+ "emoji": "📐",
9
+ "type": "core",
10
+ "description": "Guardião dos padrões de código e arquitetura",
11
+ "responsibilities": [
12
+ "Validar aderência aos padrões em .morph/standards/",
13
+ "Revisar nomenclatura e estrutura de código",
14
+ "Garantir consistência entre features",
15
+ "Aprovar código antes de merge"
16
+ ],
17
+ "validatesPhases": ["design", "implement"]
18
+ },
19
+ {
20
+ "id": "azure-architect",
21
+ "name": "Azure Architect",
22
+ "emoji": "☁️",
23
+ "type": "core",
24
+ "description": "Especialista em infraestrutura Azure",
25
+ "responsibilities": [
26
+ "Desenhar infraestrutura cost-effective",
27
+ "Configurar Container Apps com scale-to-zero",
28
+ "Definir estratégias de deployment",
29
+ "Gerenciar recursos e networking"
30
+ ],
31
+ "expertise": ["Container Apps", "Azure SQL", "ACR", "App Insights", "Managed Identity"]
32
+ },
33
+ {
34
+ "id": "blazor-builder",
35
+ "name": "Blazor Builder",
36
+ "emoji": "🔥",
37
+ "type": "core",
38
+ "description": "Especialista em componentes Blazor Server",
39
+ "responsibilities": [
40
+ "Criar componentes reutilizáveis",
41
+ "Implementar UI seguindo padrões",
42
+ "Gerenciar estado e lifecycle",
43
+ "Integrar SignalR quando necessário"
44
+ ],
45
+ "patterns": ["Component-per-file", "@inject para DI", "Loading states", "Error boundaries"]
46
+ },
47
+ {
48
+ "id": "ef-modeler",
49
+ "name": "EF Modeler",
50
+ "emoji": "🗄️",
51
+ "type": "core",
52
+ "description": "Especialista em Entity Framework e modelagem de dados",
53
+ "responsibilities": [
54
+ "Modelar entidades e relacionamentos",
55
+ "Criar migrations seguras",
56
+ "Otimizar queries com EF Core",
57
+ "Configurar DbContext"
58
+ ],
59
+ "patterns": ["Fluent API always", "Private setters", "Value Objects", "Owned Types"]
60
+ },
61
+ {
62
+ "id": "cost-guardian",
63
+ "name": "Cost Guardian",
64
+ "emoji": "💰",
65
+ "type": "core",
66
+ "description": "Guardião dos custos e otimização financeira",
67
+ "responsibilities": [
68
+ "Validar custos de cada recurso proposto",
69
+ "Alertar sobre recursos caros",
70
+ "Propor alternativas free/cheap",
71
+ "Bloquear recursos acima do budget"
72
+ ],
73
+ "limits": {
74
+ "noApproval": "Free tier only",
75
+ "withApproval": "$10/month",
76
+ "requiresJustification": ">$10/month"
77
+ }
78
+ },
79
+ {
80
+ "id": "ms-agent-expert",
81
+ "name": "MS Agent Expert",
82
+ "emoji": "🤖",
83
+ "type": "core",
84
+ "description": "Especialista em Microsoft Agent Framework e AI",
85
+ "responsibilities": [
86
+ "Integrar Semantic Kernel",
87
+ "Configurar plugins e skills",
88
+ "Otimizar prompts e tokens",
89
+ "Implementar agents para funcionalidades AI"
90
+ ],
91
+ "defaultModel": "gpt-4o-mini",
92
+ "patterns": ["KernelFunction", "DI de Kernel", "Structured outputs", "Retry exponential"]
93
+ }
94
+ ],
95
+ "specialists": [
96
+ {
97
+ "id": "hangfire-orchestrator",
98
+ "name": "Hangfire Orchestrator",
99
+ "emoji": "⏰",
100
+ "type": "specialist",
101
+ "description": "Especialista em background jobs",
102
+ "autoActivation": {
103
+ "keywords": ["scheduled", "job", "background", "recurring", "batch", "cron", "queue"]
104
+ },
105
+ "responsibilities": [
106
+ "Configurar jobs Hangfire",
107
+ "Definir retry policies",
108
+ "Implementar job chaining",
109
+ "Monitorar via dashboard"
110
+ ],
111
+ "patterns": ["AutomaticRetry", "Queue attribute", "DisableConcurrentExecution"]
112
+ },
113
+ {
114
+ "id": "uiux-designer",
115
+ "name": "UI/UX Designer",
116
+ "emoji": "🎨",
117
+ "type": "specialist",
118
+ "description": "Especialista em interfaces complexas",
119
+ "autoActivation": {
120
+ "keywords": ["wizard", "dashboard", "complex", "drag", "drop", "multi-step", "chart"]
121
+ },
122
+ "responsibilities": [
123
+ "Desenhar fluxos de usuário",
124
+ "Definir componentes complexos",
125
+ "Garantir responsividade",
126
+ "Acessibilidade WCAG 2.1"
127
+ ],
128
+ "deliverables": ["Wireframes ASCII", "User flows", "Component specs"]
129
+ },
130
+ {
131
+ "id": "popm-advisor",
132
+ "name": "PO/PM Advisor",
133
+ "emoji": "📋",
134
+ "type": "specialist",
135
+ "description": "Consultor de produto e requisitos",
136
+ "autoActivation": {
137
+ "keywords": ["unclear", "requirements", "priority", "ROI", "business", "value", "scope"]
138
+ },
139
+ "responsibilities": [
140
+ "Clarificar requisitos vagos",
141
+ "Priorizar funcionalidades",
142
+ "Definir MVP vs Nice-to-have",
143
+ "Questionar valor de negócio"
144
+ ],
145
+ "techniques": ["5 Whys", "MoSCoW", "User story mapping"]
146
+ }
147
+ ]
148
+ }
149
+ }
@@ -0,0 +1,96 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "project": {
4
+ "name": "MyProject",
5
+ "description": "Descrição do projeto",
6
+ "type": "blazor-server",
7
+ "repository": "https://dev.azure.com/org/project/_git/repo"
8
+ },
9
+ "azure": {
10
+ "subscription": "subscription-id",
11
+ "resourceGroup": "rg-myproject-dev",
12
+ "location": "eastus2",
13
+ "resources": {
14
+ "containerApps": {
15
+ "enabled": true,
16
+ "environment": "cae-myproject-dev",
17
+ "minReplicas": 0,
18
+ "maxReplicas": 2
19
+ },
20
+ "sql": {
21
+ "enabled": true,
22
+ "server": "sql-myproject-dev",
23
+ "database": "sqldb-myproject-dev",
24
+ "tier": "Free",
25
+ "maxSizeGB": 32
26
+ },
27
+ "openai": {
28
+ "enabled": true,
29
+ "endpoint": "https://oai-myproject.openai.azure.com/",
30
+ "model": "gpt-4o-mini",
31
+ "maxTokensPerRequest": 4000
32
+ },
33
+ "monitoring": {
34
+ "enabled": true,
35
+ "appInsights": "appi-myproject-dev",
36
+ "logLevel": "Information"
37
+ }
38
+ }
39
+ },
40
+ "devops": {
41
+ "organization": "https://dev.azure.com/myorg",
42
+ "project": "MyProject",
43
+ "boards": {
44
+ "enabled": true,
45
+ "areaPath": "MyProject\\Features",
46
+ "iterationPath": "MyProject\\Sprint 1"
47
+ },
48
+ "repos": {
49
+ "defaultBranch": "main",
50
+ "featureBranchPrefix": "feature/"
51
+ },
52
+ "pipelines": {
53
+ "buildPipeline": "myproject-ci",
54
+ "releasePipeline": "myproject-cd"
55
+ },
56
+ "wiki": {
57
+ "enabled": true,
58
+ "wikiName": "MyProject.wiki"
59
+ }
60
+ },
61
+ "agents": {
62
+ "core": {
63
+ "standardsArchitect": { "enabled": true },
64
+ "azureArchitect": { "enabled": true },
65
+ "blazorBuilder": { "enabled": true },
66
+ "efModeler": { "enabled": true },
67
+ "costGuardian": { "enabled": true },
68
+ "msAgentExpert": { "enabled": true }
69
+ },
70
+ "specialists": {
71
+ "hangfireOrchestrator": {
72
+ "enabled": true,
73
+ "autoActivation": ["scheduled", "job", "background", "recurring", "batch", "cron"]
74
+ },
75
+ "uiuxDesigner": {
76
+ "enabled": true,
77
+ "autoActivation": ["wizard", "dashboard", "complex", "drag", "drop", "multi-step"]
78
+ },
79
+ "popmAdvisor": {
80
+ "enabled": true,
81
+ "autoActivation": ["unclear", "requirements", "priority", "ROI", "business", "value"]
82
+ }
83
+ }
84
+ },
85
+ "checkpoints": {
86
+ "afterDesign": true,
87
+ "afterTasks": true,
88
+ "everyNTasks": 3,
89
+ "beforeDeploy": true
90
+ },
91
+ "costs": {
92
+ "monthlyBudget": 15,
93
+ "alertThreshold": 10,
94
+ "requireApprovalAbove": 10
95
+ }
96
+ }