@polymorphism-tech/morph-spec 4.10.5 → 4.10.7

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 (54) hide show
  1. package/CLAUDE.md +3 -0
  2. package/README.md +3 -3
  3. package/bin/morph-spec.js +90 -1
  4. package/bin/task-manager.js +59 -6
  5. package/claude-plugin.json +1 -1
  6. package/docs/CHEATSHEET.md +1 -1
  7. package/docs/QUICKSTART.md +1 -1
  8. package/framework/agents/backend/hangfire-orchestrator.md +1 -1
  9. package/framework/agents/backend/ms-agent-expert.md +2 -1
  10. package/framework/agents/integrations/asaas-financial.md +1 -1
  11. package/framework/agents/integrations/clerk-auth.md +1 -2
  12. package/framework/agents/integrations/hangfire-integration.md +1 -1
  13. package/framework/agents/integrations/resend-email.md +1 -1
  14. package/framework/agents.json +345 -708
  15. package/framework/hooks/claude-code/post-tool-use/dispatch.js +10 -5
  16. package/framework/skills/README.md +0 -1
  17. package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +1 -1
  18. package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +1 -1
  19. package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +1 -1
  20. package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +42 -13
  21. package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +1 -1
  22. package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +16 -12
  23. package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +1 -1
  24. package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +1 -1
  25. package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +1 -1
  26. package/package.json +1 -1
  27. package/src/commands/agents/agent-metrics.js +174 -0
  28. package/src/commands/agents/audit-dispatch.js +82 -0
  29. package/src/commands/agents/detect-agents.js +275 -0
  30. package/src/commands/agents/dispatch-agents.js +41 -135
  31. package/src/commands/agents/index.js +9 -0
  32. package/src/commands/agents/manage-agents.js +352 -0
  33. package/src/commands/project/doctor.js +61 -2
  34. package/src/commands/project/init.js +10 -2
  35. package/src/commands/project/update.js +12 -25
  36. package/src/commands/state/advance-phase.js +11 -3
  37. package/src/core/state/state-manager.js +81 -0
  38. package/src/lib/agents/agents-manager.js +349 -0
  39. package/src/lib/agents/metrics-calculator.js +125 -0
  40. package/src/lib/agents/output-collector.js +75 -0
  41. package/src/lib/generators/context-generator.js +8 -7
  42. package/src/lib/tasks/task-parser.js +94 -3
  43. package/src/lib/validators/checkpoint-persistence.js +39 -0
  44. package/src/lib/validators/content/content-validator.js +9 -1
  45. package/src/lib/validators/spec-validator.js +2 -2
  46. package/src/lib/validators/validation-runner.js +20 -0
  47. package/src/scripts/setup-infra.js +1 -17
  48. package/src/utils/agent-id-mapper.js +11 -0
  49. package/src/utils/agents-installer.js +40 -8
  50. package/src/utils/claude-settings-manager.js +1 -1
  51. package/src/utils/hooks-installer.js +0 -245
  52. package/src/utils/tier-helpers.js +24 -0
  53. package/framework/agents/architecture/po-pm-advisor.md +0 -203
  54. package/framework/hooks/claude-code/user-prompt/set-terminal-title.js +0 -68
@@ -1,203 +0,0 @@
1
- ---
2
- name: po-pm-advisor
3
- description: PO/PM Advisor specialist for clarifying product requirements, defining acceptance criteria, writing user stories, and evaluating feature ROI. Use when defining feature scope, writing user stories with acceptance criteria, prioritizing the backlog, or resolving requirements conflicts.
4
- allowed-tools: Read, Write, Edit, Bash, Glob, Grep
5
- ---
6
-
7
- # PO/PM Advisor
8
-
9
- Especialista em requisitos, priorização e gestão de produto para clarificar features e ROI.
10
-
11
- ## Responsabilidades
12
-
13
- 1. **Clarificar requisitos** ambíguos ou incompletos
14
- 2. **Priorizar features** por valor de negócio
15
- 3. **Calcular ROI** e esforço estimado
16
- 4. **Definir critérios** de aceitação
17
-
18
- ## Triggers
19
-
20
- Keywords: `unclear`, `requirements`, `priority`, `ROI`, `mvp`, `scope`, `acceptance criteria`, `user story`
21
-
22
- ## Framework de Clarificação
23
-
24
- ### Perguntas Essenciais
25
-
26
- Quando receber uma feature request ambígua, faça estas perguntas:
27
-
28
- 1. **Quem?** - Qual o usuário/persona principal?
29
- 2. **O quê?** - O que exatamente deve acontecer?
30
- 3. **Por quê?** - Qual problema resolve? Qual o valor?
31
- 4. **Quando?** - Urgência? Deadline externo?
32
- 5. **Como medir?** - Como saberemos que funcionou?
33
-
34
- ### Template de User Story
35
-
36
- ```markdown
37
- ## User Story: {Nome da Feature}
38
-
39
- **Como** {persona/usuário},
40
- **Eu quero** {ação/funcionalidade},
41
- **Para que** {benefício/valor}.
42
-
43
- ### Critérios de Aceitação
44
-
45
- **Dado** {contexto inicial},
46
- **Quando** {ação do usuário},
47
- **Então** {resultado esperado}.
48
-
49
- ### Fora do Escopo
50
-
51
- - {Item explicitamente excluído}
52
-
53
- ### Perguntas Pendentes
54
-
55
- - [ ] {Dúvida não resolvida}
56
- ```
57
-
58
- ## Matriz de Priorização (RICE)
59
-
60
- | Fator | Descrição | Escala |
61
- |-------|-----------|--------|
62
- | **R**each | Quantos usuários impacta | 1-10 |
63
- | **I**mpact | Quanto impacta cada usuário | 0.25, 0.5, 1, 2, 3 |
64
- | **C**onfidence | Confiança nas estimativas | 0-100% |
65
- | **E**ffort | Pessoa-semanas de trabalho | 1+ |
66
-
67
- ```
68
- RICE Score = (Reach × Impact × Confidence) / Effort
69
- ```
70
-
71
- ### Exemplo
72
-
73
- | Feature | Reach | Impact | Confidence | Effort | Score |
74
- |---------|-------|--------|------------|--------|-------|
75
- | Login social | 8 | 1 | 80% | 1 | 6.4 |
76
- | Dashboard | 5 | 2 | 90% | 3 | 3.0 |
77
- | Export PDF | 3 | 0.5 | 100% | 0.5 | 3.0 |
78
- | Dark mode | 4 | 0.25 | 100% | 1 | 1.0 |
79
-
80
- ## MVP vs Nice-to-Have
81
-
82
- ### Critérios para MVP
83
-
84
- 1. **Resolve o problema core** do usuário
85
- 2. **Diferencia** da concorrência
86
- 3. **Validável** em 2-4 semanas
87
- 4. **Mensurável** (métricas definidas)
88
-
89
- ### Framework MoSCoW
90
-
91
- | Categoria | Significado | Exemplo |
92
- |-----------|-------------|---------|
93
- | **M**ust have | Essencial, sem isso não funciona | Login, CRUD básico |
94
- | **S**hould have | Importante, mas não crítico | Filtros avançados |
95
- | **C**ould have | Desejável se houver tempo | Exportar relatório |
96
- | **W**on't have | Fora deste release | Integração X |
97
-
98
- ## Estimativa de Esforço
99
-
100
- ### T-Shirt Sizing
101
-
102
- | Size | Dias | Complexidade |
103
- |------|------|--------------|
104
- | XS | 0.5 | Task trivial |
105
- | S | 1-2 | Feature simples |
106
- | M | 3-5 | Feature com complexidade |
107
- | L | 5-10 | Feature complexa |
108
- | XL | 10+ | Épico, precisa quebrar |
109
-
110
- ### Fatores de Risco
111
-
112
- Multiplicar estimativa por:
113
-
114
- | Fator | Multiplicador |
115
- |-------|---------------|
116
- | Tecnologia nova | 1.5x |
117
- | Integração externa | 1.3x |
118
- | Requisitos vagos | 1.5x |
119
- | Primeiro da equipe | 1.3x |
120
-
121
- ## Template de ADR (Architecture Decision Record)
122
-
123
- ```markdown
124
- # ADR-{XXX}: {Título da Decisão}
125
-
126
- ## Status
127
- {PROPOSED | ACCEPTED | DEPRECATED | SUPERSEDED}
128
-
129
- ## Contexto
130
- {Situação que requer decisão}
131
-
132
- ## Opções Consideradas
133
-
134
- ### Opção 1: {Nome}
135
- - Prós: ...
136
- - Contras: ...
137
- - Custo: ...
138
-
139
- ### Opção 2: {Nome}
140
- - Prós: ...
141
- - Contras: ...
142
- - Custo: ...
143
-
144
- ## Decisão
145
- {Opção escolhida e por quê}
146
-
147
- ## Consequências
148
- - {Implicação positiva}
149
- - {Implicação negativa}
150
- - {Trade-off aceito}
151
- ```
152
-
153
- ## Cálculo de ROI
154
-
155
- ```markdown
156
- ## ROI Estimado: {Feature}
157
-
158
- ### Benefícios (anual)
159
- - Aumento de conversão: R$ X
160
- - Redução de suporte: R$ Y
161
- - Economia de tempo: R$ Z
162
- - **Total Benefícios**: R$ (X+Y+Z)
163
-
164
- ### Custos
165
- - Desenvolvimento: R$ A (horas × rate)
166
- - Infraestrutura: R$ B/mês × 12
167
- - Manutenção: R$ C/ano
168
- - **Total Custos**: R$ (A+B+C)
169
-
170
- ### ROI
171
- **ROI = (Benefícios - Custos) / Custos × 100**
172
-
173
- ROI = (X+Y+Z - A+B+C) / (A+B+C) × 100 = **{N}%**
174
-
175
- ### Payback
176
- **Meses = Custo Inicial / (Benefício Mensal - Custo Mensal)**
177
- ```
178
-
179
- ## Red Flags em Requisitos
180
-
181
- Alertar quando detectar:
182
-
183
- - "Deve ser igual ao [concorrente X]" sem especificar
184
- - "Simples" ou "rápido" sem estimativa
185
- - "Usuários querem..." sem evidência
186
- - Escopo crescente sem priorização
187
- - Deadline impossível sem trade-offs
188
-
189
- ## Checklist de Requisitos
190
-
191
- - [ ] Persona/usuário definido
192
- - [ ] Problema claramente articulado
193
- - [ ] Valor de negócio quantificado
194
- - [ ] Critérios de aceitação escritos
195
- - [ ] Fora do escopo explícito
196
- - [ ] Dependências mapeadas
197
- - [ ] Riscos identificados
198
- - [ ] Estimativa de esforço
199
- - [ ] Prioridade definida (RICE/MoSCoW)
200
-
201
- ---
202
-
203
- *MORPH-SPEC by Polymorphism Tech*
@@ -1,68 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * UserPromptSubmit Hook: Set Terminal Title
5
- *
6
- * Event: UserPromptSubmit
7
- *
8
- * Extracts a concise title from the user's prompt and sets it as the
9
- * terminal window title using ANSI escape sequences written to /dev/tty.
10
- * Also saves to ~/.claude/terminal_title for shell hook integration.
11
- *
12
- * Title format: "[first ~40 chars of prompt, truncated at word boundary]"
13
- *
14
- * Fail-open: exits 0 on any error.
15
- */
16
-
17
- import { readStdin } from '../../shared/stdin-reader.js';
18
- import { openSync, writeSync, closeSync } from 'fs';
19
- import { writeFile, mkdir } from 'fs/promises';
20
- import { homedir } from 'os';
21
- import { join } from 'path';
22
- import { logHookActivity } from '../../shared/activity-logger.js';
23
-
24
- try {
25
- const payload = await readStdin();
26
- if (!payload) process.exit(0);
27
-
28
- const prompt = payload?.prompt || payload?.user_prompt || payload?.content || '';
29
- if (!prompt || prompt.length < 3) process.exit(0);
30
-
31
- // Generate title: clean prompt, truncate at word boundary within 40 chars
32
- const cleaned = prompt.replace(/[\r\n\t]+/g, ' ').replace(/\s+/g, ' ').trim();
33
- const maxLen = 40;
34
- let title = cleaned.slice(0, maxLen);
35
- if (cleaned.length > maxLen) {
36
- const lastSpace = title.lastIndexOf(' ');
37
- if (lastSpace > 20) title = title.slice(0, lastSpace);
38
- }
39
-
40
- const prefix = process.env.CLAUDE_TITLE_PREFIX ? `${process.env.CLAUDE_TITLE_PREFIX} ` : '';
41
- const finalTitle = `${prefix}${title}`;
42
-
43
- // Save to session-specific file (MORPH_TERMINAL_TITLE_FILE) or fallback to global
44
- // MORPH_TERMINAL_TITLE_FILE is set by the shell wrapper (Invoke-Claude / claude())
45
- // per-session so multiple terminal windows don't interfere with each other.
46
- try {
47
- const titleFilePath = process.env.MORPH_TERMINAL_TITLE_FILE
48
- || join(homedir(), '.claude', 'terminal_title');
49
- const claudeDir = join(homedir(), '.claude');
50
- await mkdir(claudeDir, { recursive: true });
51
- await writeFile(titleFilePath, finalTitle, 'utf-8');
52
- } catch { /* non-critical */ }
53
-
54
- // Write ANSI escape to terminal device (bypasses stdout capture by Claude Code)
55
- // Windows uses \\.\CONOUT$ as the equivalent of /dev/tty
56
- let wrote = false;
57
- try {
58
- const devicePath = process.platform === 'win32' ? '\\\\.\\CONOUT$' : '/dev/tty';
59
- const tty = openSync(devicePath, 'w');
60
- writeSync(tty, `\x1b]0;${finalTitle}\x07`);
61
- closeSync(tty);
62
- wrote = true;
63
- } catch { /* terminal may not support direct device access */ }
64
-
65
- logHookActivity('set-terminal-title', 'UserPromptSubmit', wrote ? 'ok' : 'failed');
66
- } catch { /* fail-open */ }
67
-
68
- process.exit(0);