@esquadrao/cli 0.0.0-stage → 1.6.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 (73) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +366 -2
  3. package/assets/fonts/Anton-Regular.ttf +0 -0
  4. package/assets/fonts/BebasNeue-Regular.ttf +0 -0
  5. package/assets/fonts/OFL.txt +93 -0
  6. package/assets/fonts/Poppins-Bold.ttf +0 -0
  7. package/assets/fonts/README.md +13 -0
  8. package/bin/cli.js +126 -0
  9. package/package.json +58 -4
  10. package/scripts/ast_slice.js +73 -0
  11. package/scripts/cutout.py +197 -0
  12. package/scripts/dag_validator.js +78 -0
  13. package/scripts/lint.js +43 -0
  14. package/scripts/merkle_verify.js +83 -0
  15. package/scripts/wcag_check.js +77 -0
  16. package/skill-audit/SKILL.md +42 -0
  17. package/skill-audit/references/merkle-ledger-spec.md +27 -0
  18. package/skill-audit/references/receipt-ed25519-verification.md +17 -0
  19. package/skill-audit/references/time-travel-replay.md +10 -0
  20. package/skill-code-reviewer/SKILL.md +40 -0
  21. package/skill-context/SKILL.md +44 -0
  22. package/skill-context/references/ast-virtualization.md +10 -0
  23. package/skill-context/references/openapi-contract-synthesis.md +10 -0
  24. package/skill-engineering-manager/SKILL.md +40 -0
  25. package/skill-media-producer/SKILL.md +328 -0
  26. package/skill-media-producer/references/caption-templates.md +194 -0
  27. package/skill-media-producer/references/composicoes-especiais.md +99 -0
  28. package/skill-media-producer/references/configuracao-inicial.md +239 -0
  29. package/skill-media-producer/references/corte-podcast-3-niveis.md +179 -0
  30. package/skill-media-producer/references/llm-agent-guide.md +231 -0
  31. package/skill-orchestrate/SKILL.md +49 -0
  32. package/skill-orchestrate/references/mission-lifecycle.md +36 -0
  33. package/skill-orchestrate/references/swarm-coordination.md +33 -0
  34. package/skill-pipeline/SKILL.md +42 -0
  35. package/skill-pipeline/references/auto-healing-patterns.md +17 -0
  36. package/skill-pipeline/references/dag-decomposition-rules.md +18 -0
  37. package/skill-pipeline/references/topological-waves.md +16 -0
  38. package/skill-product-manager/SKILL.md +40 -0
  39. package/skill-qa-engineer/SKILL.md +40 -0
  40. package/skill-review/SKILL.md +46 -0
  41. package/skill-review/references/anti-slop-patterns.md +17 -0
  42. package/skill-review/references/dual-blind-adjudication.md +15 -0
  43. package/skill-review/references/voice-calibration.md +10 -0
  44. package/skill-security-engineer/SKILL.md +40 -0
  45. package/skill-software-architect/SKILL.md +40 -0
  46. package/skill-software-engineer/SKILL.md +40 -0
  47. package/skill-sre-engineer/SKILL.md +40 -0
  48. package/skill-system-analyst/SKILL.md +40 -0
  49. package/skill-tech-lead/SKILL.md +40 -0
  50. package/skill-technical-writer/SKILL.md +40 -0
  51. package/skill-ui/SKILL.md +45 -0
  52. package/skill-ui/references/design-tokens-spec.md +19 -0
  53. package/skill-ui/references/visual-tdd-methodology.md +10 -0
  54. package/skill-ui/references/wcag-target-sizes.md +9 -0
  55. package/src/captionTemplates.js +285 -0
  56. package/src/commands/onboard.js +618 -0
  57. package/src/commands/role.js +119 -0
  58. package/src/commands/setup.js +174 -0
  59. package/src/commands/studio.js +1822 -0
  60. package/src/roles/authority.js +129 -0
  61. package/src/roles/codeReviewer.js +65 -0
  62. package/src/roles/engineeringManager.js +53 -0
  63. package/src/roles/index.js +80 -0
  64. package/src/roles/mediaProducer.js +223 -0
  65. package/src/roles/productManager.js +50 -0
  66. package/src/roles/qaEngineer.js +54 -0
  67. package/src/roles/securityEngineer.js +53 -0
  68. package/src/roles/softwareArchitect.js +58 -0
  69. package/src/roles/softwareEngineer.js +76 -0
  70. package/src/roles/sreEngineer.js +60 -0
  71. package/src/roles/systemAnalyst.js +45 -0
  72. package/src/roles/techLead.js +46 -0
  73. package/src/roles/technicalWriter.js +46 -0
@@ -0,0 +1,179 @@
1
+ # Prova de Corte de Podcast em 3 Níveis
2
+
3
+ > **Status:** procedimento validado em 2026-11-11 com o CLI 1.5.0. A skill **consegue** detectar pausas longas e respiros curtos, cortar, remapear legendas, renderizar e medir. A composição visual de comparação (três painéis + timelines) é feita **fora** da skill, com FFmpeg/Python.
4
+
5
+ Este documento descreve o teste que mostra, na prática, a diferença entre:
6
+
7
+ 1. **Pausa longa:** silêncio de 1,2–1,5 s entre blocos de fala.
8
+ 2. **Respiro curto:** pausa de 0,35–0,45 s entre frases.
9
+ 3. **Controle:** o mesmo vídeo cortado em três níveis, sem refazer a gravação.
10
+
11
+ ---
12
+
13
+ ## 1. O que a skill faz e o que não faz
14
+
15
+ | Etapa | A skill faz? | Comando / observação |
16
+ | :--- | :--- | :--- |
17
+ | Detectar pausas e respiros | **Sim** | `esquadrao studio detect-silence <video> --silence-duration <s>` |
18
+ | Cortar pausas longas | **Sim** | `auto-clip` com `--silence-duration 0.8` (padrão) |
19
+ | Cortar respiros curtos | **Sim** | `auto-clip` com `--silence-duration 0.35` |
20
+ | Remapear legendas após o corte | **Sim** | `--captions <arquivo.srt>` |
21
+ | Renderizar e validar QA | **Sim** | `auto-clip` gera MP4 e roda `qa` |
22
+ | Reportar métricas | **Sim** | JSON com `silences_detected`, `silence_cut_s`, `speech_clips_count`, `captions_count`, `qa` |
23
+ | Montar o comparativo de 3 painéis | **Não** | Composição externa com FFmpeg (`xstack`/`hstack`) e timelines |
24
+ | Gerar timeline visual verde/vermelho | **Não** | Script Python/PIL ou SVG externo |
25
+
26
+ **Conclusão:** o corte e a medição são 100% da skill; a peça de marketing é uma composição posterior.
27
+
28
+ ---
29
+
30
+ ## 2. Fixture de validação
31
+
32
+ Para o teste ser determinístico, use uma gravação limpa, sem ruído de fundo:
33
+
34
+ - **8 frases** de 2–3 s cada.
35
+ - **4 pausas longas** de 1,5 s entre blocos.
36
+ - **3 respiros curtos** de 0,40 s entre frases.
37
+ - Áudio final com ~28 s.
38
+ - Legenda SRT com os tempos de cada frase.
39
+ - Vídeo vertical 1080×1920 com cena de apoio contínua (a cena não interfere no corte).
40
+
41
+ Padrão dos intervalos:
42
+
43
+ ```text
44
+ frase 1 [1,5 s] frase 2 [0,4 s] frase 3 [1,5 s] frase 4
45
+ frase 4 [0,4 s] frase 5 [1,5 s] frase 6 [0,4 s] frase 7
46
+ frase 7 [1,5 s] frase 8
47
+ ```
48
+
49
+ > **Dica:** se usar TTS, corte o silêncio residual do início e do fim de cada arquivo antes de concatenar. Caso contrário, o arredondamento do encoder pode transformar um respiro de 0,40 s em 0,80 s e ele será cortado já no nível padrão.
50
+
51
+ ---
52
+
53
+ ## 3. Passo a passo
54
+
55
+ ### Passo 1 — Montar o bruto
56
+
57
+ 1. Gere ou grave as 8 frases separadas.
58
+ 2. Remova o silêncio residual de cada frase:
59
+
60
+ ```bash
61
+ ffmpeg -i frase.mp3 \
62
+ -af "silenceremove=start_periods=1:start_duration=0:start_threshold=-45dB,areverse,silenceremove=start_periods=1:start_duration=0:start_threshold=-45dB,areverse" \
63
+ -c:a aac frase-limpa.m4a
64
+ ```
65
+
66
+ 3. Concatene na ordem do padrão acima, inserindo os intervalos de 1,5 s e 0,40 s.
67
+ 4. Monte o vídeo vertical com a cena de apoio e o áudio concatenado.
68
+ 5. Crie o `raw.srt` com os tempos de cada frase.
69
+
70
+ ### Passo 2 — Verificar o que será detectado
71
+
72
+ Rode a detecção nos dois níveis antes de renderizar:
73
+
74
+ ```bash
75
+ esquadrao studio detect-silence raw.mp4 --silence-duration 0.8 --json
76
+ esquadrao studio detect-silence raw.mp4 --silence-duration 0.35 --json
77
+ ```
78
+
79
+ **Esperado no fixture de referência:**
80
+
81
+ | Nível | `--silence-duration` | Silêncios detectados | Clipes de fala |
82
+ | :--- | ---: | ---: | ---: |
83
+ | Padrão | `0.8` | 4 (apenas pausas longas) | 5 |
84
+ | Respiro | `0.35` | 7 (4 longas + 3 curtas) | 8 |
85
+
86
+ Se o nível de 0,35 detectar muito mais que 7, há ruído ou pausas naturais da locução sendo tratadas como respiro. Ajuste para `0.40` ou `0.45`.
87
+
88
+ ### Passo 3 — Rodar os três níveis
89
+
90
+ O nível “original” é o próprio `raw.mp4`, sem corte. Os outros dois usam o mesmo arquivo e a mesma legenda:
91
+
92
+ ```bash
93
+ # Padrão: remove pausas longas, preserva respiros
94
+ esquadrao studio auto-clip raw.mp4 \
95
+ --captions raw.srt \
96
+ --silence-duration 0.8 \
97
+ --dest workspace-padrao --json
98
+
99
+ # Respiro: remove pausas longas e respiros curtos
100
+ esquadrao studio auto-clip raw.mp4 \
101
+ --captions raw.srt \
102
+ --silence-duration 0.35 \
103
+ --dest workspace-respiro --json
104
+ ```
105
+
106
+ Cada execução devolve um JSON com os campos usados na comparação:
107
+
108
+ ```json
109
+ {
110
+ "status": "ok",
111
+ "silences_detected": 7,
112
+ "silence_cut_s": 7.339,
113
+ "speech_clips_count": 8,
114
+ "captions_count": 17,
115
+ "qa": { "passed": true, "duration_s": 21.1 }
116
+ }
117
+ ```
118
+
119
+ ### Passo 4 — Validar os números
120
+
121
+ Critérios de aceite:
122
+
123
+ - [ ] O nível padrão tem menos silêncios que o nível respiro.
124
+ - [ ] O nível respiro tem duração menor que o nível padrão.
125
+ - [ ] Os dois MP4s passam no QA (`qa.passed = true`).
126
+ - [ ] As legendas continuam sincronizadas e sem corte nas duas saídas.
127
+ - [ ] O nível respiro não remove fala: compare os `speech_clips_count` e ouça as junções.
128
+
129
+ ### Passo 5 — Montar o comparativo (fora da skill)
130
+
131
+ A skill entrega três MP4s verticais. A peça de LP é montada depois:
132
+
133
+ 1. Três painéis verticais de 360×640, centralizados em um canvas 1920×1080.
134
+ 2. Rótulos: `Original`, `Corte padrão 0,8 s`, `Corte de respiro 0,35 s`.
135
+ 3. Abaixo de cada painel, uma timeline:
136
+ - verde = fala;
137
+ - vermelho = trecho removido;
138
+ - marcações nas pausas longas e nos respiros.
139
+ 4. Métricas reais extraídas do JSON:
140
+ - `8 pausas • 14,2 s removidos • 27% mais curto` (exemplo).
141
+ 5. Sem áudio no comparativo; é uma peça visual em loop.
142
+
143
+ Composição de referência:
144
+
145
+ ```bash
146
+ ffmpeg -i original.mp4 -i padrao.mp4 -i respiro.mp4 \
147
+ -filter_complex "\
148
+ [0:v]scale=360:640,setsar=1[a];\
149
+ [1:v]scale=360:640,setsar=1[b];\
150
+ [2:v]scale=360:640,setsar=1[c];\
151
+ [a][b][c]hstack=inputs=3[out]" \
152
+ -map "[out]" -an -c:v libx264 -pix_fmt yuv420p comparativo.mp4
153
+ ```
154
+
155
+ > A timeline verde/vermelha não é gerada pelo `auto-clip`; use o JSON de `detect-silence` para desenhar os blocos.
156
+
157
+ ---
158
+
159
+ ## 4. Resultado da validação (2026-11-11)
160
+
161
+ Fixture de referência: 28,4 s de vídeo, 8 frases, 4 pausas de 1,5 s e 3 respiros de 0,40 s.
162
+
163
+ | Nível | `--silence-duration` | Silêncios | Clipes de fala | Duração final | QA |
164
+ | :--- | ---: | ---: | ---: | ---: | :--- |
165
+ | Original | — | — | 1 | 28,4 s | — |
166
+ | Padrão | `0.8` | 4 | 5 | 22,3 s | aprovado |
167
+ | Respiro | `0.35` | 7 | 8 | 21,1 s | aprovado |
168
+
169
+ **Leitura:** o nível padrão removeu 6,07 s (4 pausas longas); o nível respiro removeu 7,34 s (as 4 longas + 3 curtas). A diferença de 1,27 s é exatamente o conjunto de respiros, sem perda de fala.
170
+
171
+ ---
172
+
173
+ ## 5. Limites e recomendações
174
+
175
+ - **0,35 s é agressivo.** Use apenas em áudio limpo, sem ruído e com locução pausada. Para podcast com respiração audível ou ambiente, comece em `0.45` ou `0.5`.
176
+ - **Ruído de fundo impede o `silencedetect`.** Normalize ou aplique redução de ruído antes; caso contrário, o silêncio “real” pode não cruzar o limiar de `-30dB`.
177
+ - **TTS tem silêncio residual.** Sem o corte de bordas, o respiro de 0,40 s pode virar 0,8 s e ser removido no nível padrão.
178
+ - **O comparativo não é um comando da skill.** Se virar item de produto, entra como backlog próprio; hoje é composição externa.
179
+ - **Sempre ouça as junções.** Métrica verde não substitui a checagem auditiva de respiração cortada no meio da palavra.
@@ -0,0 +1,231 @@
1
+ # Guia Operacional para LLMs e Agentes de IA — Esquadrão de Conteúdo Studio
2
+
3
+ Este guia estabelece o padrão de comportamento, diálogo e orquestração para assistentes inteligentes (Claude Code, Cursor, Codex CLI, Grok Build e Hermes) ao interagir com usuários na produção de vídeos automatizados.
4
+
5
+ ---
6
+
7
+ ## 1. Regra de Ouro: Soberania da Decisão do Usuário
8
+
9
+ O assistente de IA **nunca** deve impor uma configuração padrão arbitrária:
10
+ - **Não force formato widescreen (16:9):** Mais de 80% do consumo atual de cortes ocorre em formato vertical (9:16). Sempre pergunte a intenção do usuário.
11
+ - **Não force fundo preto (`dark`):** O modo `dark` é voltado para testes ou canais puramente tipográficos. A maioria dos usuários deseja cortar vídeos longos com legendas (`podcast_clip`) ou unir cenas de apoio e filmagens (`edit_only`).
12
+
13
+ ---
14
+
15
+ ## 2. Roteiro de Interação com o Usuário
16
+
17
+ Ao ser acionado pelo usuário com comandos como *"quero criar um corte"*, *"edite este vídeo"* ou *"configure o estúdio de vídeo"*, siga este fluxo:
18
+
19
+ ### Fase 1: Sondagem e Descoberta
20
+ Envie uma mensagem amigável e direta coletando as decisões essenciais:
21
+ > *"Vou preparar a esteira de edição para você. Para deixar o vídeo no ponto certo, me diga:*
22
+ > *1. **Formato:** Você quer em formato **vertical 9:16** (Reels, TikTok, Shorts) ou **widescreen 16:9** (YouTube tradicional)?*
23
+ > *2. **Estilo:** Você quer **fatiar uma gravação com legendas** sincronizadas, **unir trechos de vídeo** ou prefere **texto sobre fundo escuro**?*
24
+ > *3. Qual é o arquivo de vídeo que vamos usar de fonte?"*
25
+
26
+ ### Fase 2: Checagem de Ambiente
27
+ Antes de criar arquivos, verifique se a máquina possui os requisitos operacionais:
28
+ ```bash
29
+ node -v
30
+ ffmpeg -version
31
+ ffprobe -version
32
+ ```
33
+ Se o FFmpeg não for encontrado, responda com o comando de instalação imediato:
34
+ - **Windows:** `winget install Gyan.FFmpeg`
35
+ - **macOS:** `brew install ffmpeg`
36
+ - **Linux:** `sudo apt update && sudo apt install -y ffmpeg`
37
+
38
+ ### Fase 3: Preparação do Workspace
39
+ Execute no terminal:
40
+ ```bash
41
+ # 1. Instalar o CLI globalmente se ainda não estiver presente
42
+ npm install -g @esquadrao/cli
43
+
44
+ # 2. Configurar o workspace atual
45
+ esquadrao setup
46
+
47
+ # 3. Inicializar o estúdio
48
+ esquadrao studio init --dest ./workspace
49
+ ```
50
+
51
+ A inicialização cria a seguinte árvore real no workspace:
52
+ ```text
53
+ workspace/
54
+ ├── assets/ # Cópias locais das mídias importadas
55
+ ├── packages/ # EditPlans (editplan.json), transcrições e ganchos
56
+ ├── artifacts/ # Vídeos finais em MP4 gerados pelo renderizador
57
+ └── studio.json # Manifesto do estúdio e inventário de assets
58
+ ```
59
+ *(Nota: O estúdio cria estritamente `assets/`, `packages/`, `artifacts/` e `studio.json`. Pastas como `editplans/`, `renders/` e `qa/` não são geradas.)*
60
+
61
+ > **Onboarding:** No modo `podcast_clip`, o `esquadrao onboard` executa o pipeline real de `auto-clip` e aceita `--captions`, `--openai`, `--local` ou `--no-captions`. Sem motor de legenda, ele aplica `--no-captions`, gera o corte real sem legendas e avisa; nunca prometa legendas sem informar o pré-requisito.
62
+
63
+ ### Fase 4: Importação da Mídia e Leitura dos Metadados
64
+ Importe o arquivo do usuário e anote o ID do asset:
65
+ ```bash
66
+ esquadrao studio import /caminho/do/video.mp4 --dest ./workspace --json
67
+ ```
68
+ A resposta retorna:
69
+ ```json
70
+ {
71
+ "id": "AST-A1B2C3D4",
72
+ "metadata": {
73
+ "duration_s": 45.2,
74
+ "width": 1920,
75
+ "height": 1080,
76
+ "has_audio": true
77
+ }
78
+ }
79
+ ```
80
+
81
+ ### Fase 5: Montagem do EditPlan
82
+ Com base nas escolhas do usuário, crie `./workspace/packages/editplan.json`.
83
+ - Para formato vertical: `width: 1080`, `height: 1920`.
84
+ - Para formato widescreen: `width: 1920`, `height: 1080`.
85
+ - Ajuste os pontos de corte (`in_ms`, `out_ms`) garantindo que `out_ms <= duration_s * 1000`.
86
+
87
+ **Apresente um resumo claro para o usuário antes de renderizar:**
88
+ > *"Preparei o plano de corte:*
89
+ > *- Formato: Vertical 9:16 (1080x1920)*
90
+ > *- Trecho: 00:05 a 00:35 (30 segundos)*
91
+ > *- Legendas: 3 frases sincronizadas com áudio nivelado*
92
+ > *Posso iniciar a renderização no seu computador?"*
93
+
94
+ ### Fase 6: Renderização e QA
95
+ Após a confirmação:
96
+ ```bash
97
+ esquadrao studio render ./workspace/packages/editplan.json --dest ./workspace --json
98
+ esquadrao studio qa ./workspace/artifacts/video.mp4 --plan ./workspace/packages/editplan.json
99
+ ```
100
+ Entregue o caminho do vídeo final gerado e confirme que a checagem técnica passou com sucesso.
101
+
102
+ ### Fase Alternativa Rápida: Pipeline Integrado de Auto-Corte (`auto-clip`)
103
+ Quando o usuário deseja fatiar pausas mortas a partir de um vídeo longo sem montar o `editplan.json` manualmente:
104
+ ```bash
105
+ # Executa corte de silêncios (>0.8s), montagem de cortes contíguos e renderização com QA:
106
+ esquadrao studio auto-clip /caminho/do/video.mp4 --dest ./workspace --json
107
+ ```
108
+ O comando emite o resumo com total de silêncio expurgado, quantidade de cortes contíguos e o artefato renderizado aprovado.
109
+
110
+ > **REGRA MANDATÓRIA PARA A LLM — NÃO PROMETER LEGENDA AUTOMÁTICA SEM PRÉ-REQUISITO:**
111
+ > O assistente de IA NÃO deve prometer ao usuário legendas automáticas sem explicitar os três caminhos suportados:
112
+ > 1. `--captions <arquivo.srt>`: Caminho canônico, offline e determinístico (recomendado).
113
+ > 2. `--openai`: Requer a variável de ambiente `OPENAI_API_KEY` para transcrição via API remota OpenAI Whisper.
114
+ > 3. `--local`: Utiliza `@xenova/transformers` + `Xenova/whisper-tiny` (declarada em `optionalDependencies`). Se o pacote opcional não estiver instalado, o comando falha com instrução acionável; use `--no-captions` para cortar sem legendas.
115
+ > O agente deve sempre solicitar um arquivo SRT, instruir a configuração de `OPENAI_API_KEY` ou instalar o modelo local antes de prometer legendas no corte.
116
+ >
117
+ > **Templates de legenda:** existem nove presets documentados em [`caption-templates.md`](caption-templates.md), disponíveis via `--caption-template <id>` ou `captions[].template`. `--caption-style impact|word|full` permanece como legado.
118
+
119
+ ---
120
+
121
+ ## 3. Matriz de Tratamento de Erros Comuns
122
+
123
+ | Erro Observado | Causa Raiz | Ação Corretiva Determinística |
124
+ | :--- | :--- | :--- |
125
+ | `ffmpeg is not installed` | Binário ausente no PATH | Orientar instalação via `winget`, `brew` ou `apt` e reabrir terminal. |
126
+ | `out_ms exceeds asset duration` | Ponto de saída além do arquivo | Obter duração real com `studio import` e recalcular `out_ms`. |
127
+ | `Missing audio stream in artifact` | Fonte sem áudio ou falha de mix | Garantir `anullsrc` para vídeo mudo ou verificar se o arquivo original tem áudio. |
128
+ | `Caption special characters error` | Caracteres `%` ou `'` na legenda | O motor trata com `\%` e `\'`. Não usar tags HTML em legendas. |
129
+ | `QA duration mismatch > 250ms` | Cortes inconsistentes com a timeline | Alinhar `timeline_start_ms` com o somatório dos cortes anteriores. |
130
+
131
+
132
+ ---
133
+
134
+ ## 4. Playbook Avançado: Corte de Vídeo Longo, Copy Viral, B-Rolls e Música
135
+
136
+ Quando o usuário fornecer uma gravação longa (podcast, aula, live ou entrevista de 30min a 2h), siga este roteiro de 5 passos para entregar um corte viral de alto nível:
137
+
138
+ ### Passo 1: Transcrição Estruturada
139
+ Extraia o mapa textual completo com marcações de tempo:
140
+ ```bash
141
+ esquadrao studio transcribe /caminho/do/video_longo.mp4 --dest ./workspace --json
142
+ ```
143
+ O arquivo `./workspace/packages/transcript.json` conterá todos os blocos com `start_s`, `end_s` e `text`.
144
+
145
+ > **Aviso de Execução:** O comando `transcribe` utiliza o mesmo mecanismo do auto-clip. Requer chave `OPENAI_API_KEY` configurada ou instalação prévia do módulo `@xenova/transformers`.
146
+
147
+ ### Passo 2: Análise de Copy e Seleção dos Melhores Trechos
148
+ A LLM pode rodar o detector automatizado de ganchos ou analisar manualmente o `transcript.json`:
149
+ ```bash
150
+ esquadrao studio find-hooks ./workspace/packages/transcript.json --min-dur 30 --max-dur 60 --json
151
+ ```
152
+ O comando retorna os Top 3 candidatos ranqueados com pontuação de gancho, timestamps exatos (`start_ms`, `end_ms`) e punchlines.
153
+
154
+ A LLM deve aplicar a **Fórmula Tripartite de Retenção Viral**:
155
+ 1. **O Gancho (0 a 3 segundos):** Identifique o momento em que o orador faz uma pergunta contraintuitiva, revela um segredo ou expõe um erro comum. O corte DEVE começar exatamente na primeira palavra do gancho (ex: *"O maior erro de quem tenta vender..."*).
156
+ 2. **Janela de Retenção (30s a 60s flexível):** A ideia central precisa ser explicada com clareza sem prolixidade. Se o raciocínio exigir 45s ou 55s, respeite a conclusão natural da ideia. Permita ajuste se o usuário solicitar cortes mais curtos ou mais longos.
157
+ 3. **Punchline de Fechamento:** O corte encerra no clímax da resposta ou conclusão, cortando antes de transições vazias ("é isso", "então pessoal", "deixa o like").
158
+
159
+ ### Passo 3: Escolha Dinâmica dos B-Rolls e Layouts
160
+ Para evitar que o corte fique monótono ("cabeça falante"), a LLM insere B-rolls (`overlays`) e escolhe o layout ideal:
161
+ - **`layout: "fullscreen"` (Padrão):** Insira a cada 5 a 8 segundos cenas de apoio temáticas (ex: dinheiro, mansões, carros, trabalho) cobrindo 100% da tela durante 2 a 3 segundos, mantendo a voz do orador contínua.
162
+ - **`layout: "split_bottom"` (Dupla Retenção):** Para canais de alta velocidade (TikTok/Shorts), divida a tela com o orador em cima e o vídeo de apoio/pack embaixo. Use `--overlay-duration full` para manter o pack na base durante todo o clipe; sem essa flag, o layout é uma janela de B-roll de 2–4 s.
163
+ - **`layout: "pip"` (Picture-in-Picture):** Quando o orador estiver apontando para um objeto ou reagindo a algo.
164
+ - **`layout: "split_top"` (Pendente / Backlog CLI-06):** Previsto no schema (orador embaixo e B-roll em cima), porém não implementado no renderizador atual (cai em tela cheia). O agente deve utilizar `"split_bottom"`, `"fullscreen"` ou `"pip"`.
165
+ - **Recorte de pessoa / cutout (experimental / CLI-14):** `studio cutout --background <pack> --python <interpretador>` remove o fundo e compõe o pack atrás do orador. Exige Python com `rembg`/OpenCV e custa ~18–20 min de CPU por 60 s em 15 fps; não prometa tempo real. Consulte [`composicoes-especiais.md`](./composicoes-especiais.md).
166
+
167
+ ### Passo 4: Trilha Sonora com Ducking
168
+ Importe a música de fundo e configure a atenuação de volume:
169
+ - **Atenuação Estática de Volume:** A propriedade `ducking: true` em `music_tracks` aplica uma redução fixa de `-22dB` via mixagem `amix`. Não se trata de ducking dinâmico por sidechain com compressão em tempo real sobre a voz (previsto no backlog CLI-05). O volume fixo reduz a trilha para não encobrir a fala.
170
+
171
+ ### Passo 5: Geração do EditPlan Completo e Renderização
172
+ Exemplo canônico de EditPlan com cortes, B-rolls, música e legendas estilo impacto:
173
+ ```json
174
+ {
175
+ "schema_version": 1,
176
+ "mode": "podcast_clip",
177
+ "output": {
178
+ "width": 1080,
179
+ "height": 1920,
180
+ "fps_num": 30,
181
+ "fps_den": 1,
182
+ "video_codec": "h264",
183
+ "audio_codec": "aac"
184
+ },
185
+ "clips": [
186
+ {
187
+ "kind": "video",
188
+ "clip_id": "fala-principal",
189
+ "asset_id": "AST-PODCAST01",
190
+ "in_ms": 124000,
191
+ "out_ms": 168000,
192
+ "timeline_start_ms": 0,
193
+ "speed": 1
194
+ }
195
+ ],
196
+ "audio_tracks": [
197
+ { "kind": "source", "clip_id": "fala-principal", "gain_db": 0 }
198
+ ],
199
+ "overlays": [
200
+ {
201
+ "kind": "video",
202
+ "asset_id": "AST-BROLL-DINHEIRO",
203
+ "layout": "fullscreen",
204
+ "in_ms": 0,
205
+ "out_ms": 3000,
206
+ "timeline_start_ms": 6000,
207
+ "duration_ms": 3000
208
+ }
209
+ ],
210
+ "music_tracks": [
211
+ {
212
+ "asset_id": "AST-TRILHA01",
213
+ "gain_db": -22,
214
+ "ducking": true
215
+ }
216
+ ],
217
+ "captions": [
218
+ {
219
+ "text": "O MAIOR ERRO",
220
+ "timeline_start_ms": 0,
221
+ "duration_ms": 1200,
222
+ "style": "impact"
223
+ }
224
+ ]
225
+ }
226
+ ```
227
+ Renderize e verifique com:
228
+ ```bash
229
+ esquadrao studio render ./workspace/packages/editplan.json --dest ./workspace
230
+ esquadrao studio qa ./workspace/artifacts/video.mp4 --plan ./workspace/packages/editplan.json
231
+ ```
@@ -0,0 +1,49 @@
1
+ ---
2
+ name: skill-orchestrate
3
+ version: "1.0.0"
4
+ description: "Orchestrate autonomous multi-agent missions, manage checkpoints, and coordinate execution."
5
+ allowed-tools: ["terminal"]
6
+ ---
7
+
8
+ # Agent Orchestrate
9
+
10
+ Orchestrate end-to-end missions, autonomous pipelines, and checkpoint rollbacks via CLI or git branches.
11
+
12
+ ## When to Use
13
+
14
+ - Executing end-to-end autonomous missions across multi-phase tasks.
15
+ - Coordinating autonomous multi-agent swarms with bounded resource budgets.
16
+ - Capturing atomic state snapshots (`checkpoints`) before high-risk mutations.
17
+ - Reverting failed or regressed mission states deterministically (`rollback`).
18
+
19
+ ## NOT for
20
+
21
+ - AST slicing or syntax graph extraction (`skill-context`).
22
+ - WCAG accessibility or visual TDD audits (`skill-ui`).
23
+ - Isolated forensic ledger verification (`skill-audit`).
24
+ - Single-wave pipeline scheduling (`skill-pipeline`).
25
+
26
+ ## Workflow & CLI
27
+
28
+ Execute via local script and git commands:
29
+
30
+ ```bash
31
+ # 1. Validate DAG and execution waves
32
+ node scripts/dag_validator.js tasks.json
33
+
34
+ # 2. Capture git checkpoint before mutation
35
+ git checkout -b checkpoint/pre-mutation
36
+
37
+ # 3. Rollback to checkpoint on failure
38
+ git reset --hard HEAD
39
+ ```
40
+
41
+ ## UX & Operational Rules
42
+
43
+ - **Anti-Context-Dumping**: Dispatch minimal context packets (<3,000 tokens). Never dump full workspace trees.
44
+ - **Structured Communication**: Return concise status summaries with work IDs, checkpoint hashes, and gate results.
45
+
46
+ ## References
47
+
48
+ - Mission lifecycle & transitions: [references/mission-lifecycle.md](references/mission-lifecycle.md)
49
+ - Swarm coordination & arbitration: [references/swarm-coordination.md](references/swarm-coordination.md)
@@ -0,0 +1,36 @@
1
+ # Mission Lifecycle Specification
2
+
3
+ Governs mission state transitions and atomic checkpointing in agent orchestration.
4
+
5
+ ## Lifecycle States
6
+
7
+ - **INIT**: Task intake and contract refinement (`refine_prompt`). WorkRecord instantiated with DAG.
8
+ - **RUNNING**: Topological waves executing subtasks concurrently with GREEN test gates.
9
+ - **CHECKPOINT**: Execution paused to persist immutable state snapshot before risky mutations.
10
+ - **COMPLETED**: All subtasks verified GREEN (`verify_subtask`) and Merkle ledger exported.
11
+ - **FAILED**: Unrecoverable regression or exhausted remediations; triggers fail-closed state.
12
+
13
+ ```
14
+ INIT ──> RUNNING ──┬──> CHECKPOINT ──> RUNNING
15
+ ├──> COMPLETED (all gates GREEN)
16
+ └──> FAILED (unrecoverable / budget exhausted)
17
+ ```
18
+
19
+ ## Checkpoint & Rollback Protocol
20
+
21
+ 1. **Snapshot (`create_checkpoint`)**:
22
+ - Takes `work_id` and optional `label`.
23
+ - Serializes atomic snapshot of `WorkRecord` (DAG, task outputs, event log).
24
+ - Returns immutable `checkpoint_id`.
25
+ 2. **Rollback (`rollback_checkpoint`)**:
26
+ - Takes `work_id` and `checkpoint_id`.
27
+ - Deterministically restores `WorkRecord` to snapshot and releases acquired locks.
28
+ - Appends signed rollback event to audit ledger.
29
+
30
+ ```bash
31
+ # Capture checkpoint via git branch or stash
32
+ git stash save "checkpoint-pre-patch"
33
+
34
+ # Rollback checkpoint on failure
35
+ git reset --hard HEAD
36
+ ```
@@ -0,0 +1,33 @@
1
+ # Swarm Coordination Specification
2
+
3
+ Framework for coordinating autonomous multi-agent swarms, budgets, and concurrency locks via CLI and filesystem locks.
4
+
5
+ ## Autonomous Swarm Coordination (`coordinate_mission_swarm`)
6
+
7
+ Swarms execute autonomous agents across topological DAG waves:
8
+ - **Wave Partitioning**: Subtasks grouped by disjoint file paths for safe parallelism.
9
+ - **Context Virtualization**: Minimal surgical context packets (<3,000 tokens) dispatched per agent.
10
+ - **Evidence Gates**: Subtask progression requires deterministic GREEN test verification.
11
+
12
+ ## Budget Allocation (Tokens & Time)
13
+
14
+ Strict operational ceilings prevent runaway resource consumption:
15
+ - **Token Quotas**: Per-task allocation with SHA-256 context deduplication (>75% token savings).
16
+ - **Timeout Ceilings**: Bounded wall-clock timeouts trigger auto-remediation or fail-closed abort.
17
+
18
+ ## Concurrency Arbitration (`arbitrate_concurrency`)
19
+
20
+ Prevents file access collisions and deadlocks across concurrent subagents:
21
+ - **Lock Modes**:
22
+ - `SHARED`: Simultaneous read-only access by multiple agents.
23
+ - `EXCLUSIVE`: Single-agent write lock on specific file paths.
24
+ - **Lease Operations**:
25
+ - `acquire`: Claims lock on `paths` with `agent_id`, `workspace_id`, and `ttl_seconds`.
26
+ - `renew`: Heartbeat extends `expires_at` for long-running executions.
27
+ - `release`: Deterministic cleanup requiring matching `agent_id` in `finally` blocks.
28
+ - **Zombie Purging**: Expired leases (`expires_at < now()`) auto-evict, promoting waiters.
29
+
30
+ ```bash
31
+ # Acquire path lockfile with atomic file write
32
+ node -e "fs.writeFileSync('.lock-src-core', JSON.stringify({agent_id: 'agent-1', expires_at: Date.now() + 30000}), {flag: 'wx'})"
33
+ ```
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: skill-pipeline
3
+ version: "1.0.0"
4
+ description: "Decompose complex tasks into acyclic execution DAGs, compute topological waves, and auto-heal test failures."
5
+ allowed-tools: ["terminal"]
6
+ ---
7
+
8
+ # Agent Pipeline
9
+
10
+ Decompose tasks into topological waves, enforce acyclic dependencies, and trigger deterministic auto-healing.
11
+
12
+ ## When to Use
13
+
14
+ - Breaking down epics into granular, testable DAG tasks.
15
+ - Validating dependency acyclicity and computing execution waves.
16
+ - Automated error diagnosis and targeted test remediation (auto-healing).
17
+
18
+ ## NOT for
19
+
20
+ - Merkle ledger verification (`skill-audit`).
21
+ - Multi-agent swarm leasing and concurrency locks (`skill-orchestrate`).
22
+ - Codebase outline and AST extraction (`skill-context`).
23
+
24
+ ## Workflow & CLI
25
+
26
+ Execute via local script:
27
+
28
+ ```bash
29
+ # Validate DAG and compute topological waves
30
+ node scripts/dag_validator.js tasks.json
31
+ ```
32
+
33
+ ## UX & Operational Rules
34
+
35
+ - Tasks must declare strict `depends_on` lists referencing valid IDs.
36
+ - Never execute cyclical DAGs; validate with Kahn's algorithm before running.
37
+
38
+ ## References
39
+
40
+ - Topological waves: [references/topological-waves.md](references/topological-waves.md)
41
+ - DAG decomposition rules: [references/dag-decomposition-rules.md](references/dag-decomposition-rules.md)
42
+ - Auto-healing patterns: [references/auto-healing-patterns.md](references/auto-healing-patterns.md)
@@ -0,0 +1,17 @@
1
+ # Auto-Healing Patterns
2
+
3
+ Deterministic remediation patterns for test failures and execution anomalies.
4
+
5
+ ## Failure Classification
6
+
7
+ 1. **Assertion Failure**: Code output deviates from expected contract.
8
+ - *Remediation*: Inspect AST diff, locate mutated function, revert to last known green contract.
9
+ 2. **Environment Failure**: Missing dependency or uninitialized database/service.
10
+ - *Remediation*: Trigger idempotent initialization hook; re-verify preflight prerequisites.
11
+ 3. **Flaky / Timing Failure**: Race condition or asynchronous event timeout.
12
+ - *Remediation*: Isolate concurrent promises, replace arbitrary sleep with deterministic event listener.
13
+
14
+ ## Remediation Protocol
15
+
16
+ - Maximum 3 auto-healing cycles per subtask.
17
+ - If cycle count exceeds threshold, escalate to parent orchestrator with full error trace.
@@ -0,0 +1,18 @@
1
+ # DAG Decomposition Rules
2
+
3
+ Rules for breaking complex engineering goals into parallelizable execution units.
4
+
5
+ ## Core Rules
6
+
7
+ 1. **Atomic Boundaries**: Each task touches at most 3 related source files.
8
+ 2. **Explicit Verification**: Every task must define at least one executable check (unit test or command).
9
+ 3. **Strict Acyclicity**: No task may directly or transitively depend on its own output.
10
+ 4. **Declared Dependencies**: All inputs from previous tasks must be listed in `depends_on`.
11
+
12
+ ```json
13
+ [
14
+ { "id": "task_1", "description": "Define data schema", "depends_on": [] },
15
+ { "id": "task_2", "description": "Implement repository", "depends_on": ["task_1"] },
16
+ { "id": "task_3", "description": "Create HTTP routes", "depends_on": ["task_2"] }
17
+ ]
18
+ ```
@@ -0,0 +1,16 @@
1
+ # Topological Waves Specification
2
+
3
+ Topological wave computation partitions tasks into ordered parallel batches using Kahn's algorithm.
4
+
5
+ ## Computation Algorithm
6
+
7
+ 1. Calculate in-degrees (number of incoming dependencies) for each node.
8
+ 2. Wave 0 contains all nodes with `in_degree == 0`.
9
+ 3. Process Wave N: decrement in-degrees of dependent nodes.
10
+ 4. Nodes reaching `in_degree == 0` form Wave N+1.
11
+ 5. If processed node count does not equal total nodes, the graph contains cycles.
12
+
13
+ ## Execution Model
14
+
15
+ - Tasks within the same wave run concurrently up to configured `max_concurrency`.
16
+ - Progression to Wave N+1 is blocked until all tasks in Wave N pass their verification gates.
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: skill-product-manager
3
+ version: "1.0.0"
4
+ description: "Synthesize user intent and business needs into unambiguous requirements, scope boundaries, and acceptance criteria."
5
+ allowed-tools: ["terminal"]
6
+ ---
7
+
8
+ # Product Manager
9
+
10
+ Synthesize product vision into crisp, testable requirements and explicit boundary constraints.
11
+
12
+ ## When to Use
13
+
14
+ - Translating high-level feature requests into formal requirement contracts.
15
+ - Defining bounded scope (`in_scope`, `out_of_scope`) before engineering kickoff.
16
+ - Establishing verifiable acceptance criteria and risk classifications.
17
+
18
+ ## NOT for
19
+
20
+ - Generating code patches (`skill-software-engineer`).
21
+ - Arbitrating architectural trade-offs (`skill-tech-lead`).
22
+ - Slicing repository ASTs (`skill-context`).
23
+
24
+ ## Workflow & CLI
25
+
26
+ Execute via `esquadrao role`:
27
+
28
+ ```bash
29
+ # 1. Inspect role definition and constraints
30
+ esquadrao role info product-manager
31
+
32
+ # 2. Generate calibrated prompt for requirements synthesis
33
+ esquadrao role prompt product-manager "Build headless authentication with OAuth2"
34
+ ```
35
+
36
+ ## UX & Operational Rules
37
+
38
+ - Scope must be concrete: name specific workflows or modules, not open-ended epics.
39
+ - Acceptance criteria must be binary and verifiable (true/false).
40
+ - Classify risk objectively based on data sensitivity and operational blast radius.