@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.
- package/LICENSE +21 -0
- package/README.md +366 -2
- package/assets/fonts/Anton-Regular.ttf +0 -0
- package/assets/fonts/BebasNeue-Regular.ttf +0 -0
- package/assets/fonts/OFL.txt +93 -0
- package/assets/fonts/Poppins-Bold.ttf +0 -0
- package/assets/fonts/README.md +13 -0
- package/bin/cli.js +126 -0
- package/package.json +58 -4
- package/scripts/ast_slice.js +73 -0
- package/scripts/cutout.py +197 -0
- package/scripts/dag_validator.js +78 -0
- package/scripts/lint.js +43 -0
- package/scripts/merkle_verify.js +83 -0
- package/scripts/wcag_check.js +77 -0
- package/skill-audit/SKILL.md +42 -0
- package/skill-audit/references/merkle-ledger-spec.md +27 -0
- package/skill-audit/references/receipt-ed25519-verification.md +17 -0
- package/skill-audit/references/time-travel-replay.md +10 -0
- package/skill-code-reviewer/SKILL.md +40 -0
- package/skill-context/SKILL.md +44 -0
- package/skill-context/references/ast-virtualization.md +10 -0
- package/skill-context/references/openapi-contract-synthesis.md +10 -0
- package/skill-engineering-manager/SKILL.md +40 -0
- package/skill-media-producer/SKILL.md +328 -0
- package/skill-media-producer/references/caption-templates.md +194 -0
- package/skill-media-producer/references/composicoes-especiais.md +99 -0
- package/skill-media-producer/references/configuracao-inicial.md +239 -0
- package/skill-media-producer/references/corte-podcast-3-niveis.md +179 -0
- package/skill-media-producer/references/llm-agent-guide.md +231 -0
- package/skill-orchestrate/SKILL.md +49 -0
- package/skill-orchestrate/references/mission-lifecycle.md +36 -0
- package/skill-orchestrate/references/swarm-coordination.md +33 -0
- package/skill-pipeline/SKILL.md +42 -0
- package/skill-pipeline/references/auto-healing-patterns.md +17 -0
- package/skill-pipeline/references/dag-decomposition-rules.md +18 -0
- package/skill-pipeline/references/topological-waves.md +16 -0
- package/skill-product-manager/SKILL.md +40 -0
- package/skill-qa-engineer/SKILL.md +40 -0
- package/skill-review/SKILL.md +46 -0
- package/skill-review/references/anti-slop-patterns.md +17 -0
- package/skill-review/references/dual-blind-adjudication.md +15 -0
- package/skill-review/references/voice-calibration.md +10 -0
- package/skill-security-engineer/SKILL.md +40 -0
- package/skill-software-architect/SKILL.md +40 -0
- package/skill-software-engineer/SKILL.md +40 -0
- package/skill-sre-engineer/SKILL.md +40 -0
- package/skill-system-analyst/SKILL.md +40 -0
- package/skill-tech-lead/SKILL.md +40 -0
- package/skill-technical-writer/SKILL.md +40 -0
- package/skill-ui/SKILL.md +45 -0
- package/skill-ui/references/design-tokens-spec.md +19 -0
- package/skill-ui/references/visual-tdd-methodology.md +10 -0
- package/skill-ui/references/wcag-target-sizes.md +9 -0
- package/src/captionTemplates.js +285 -0
- package/src/commands/onboard.js +618 -0
- package/src/commands/role.js +119 -0
- package/src/commands/setup.js +174 -0
- package/src/commands/studio.js +1822 -0
- package/src/roles/authority.js +129 -0
- package/src/roles/codeReviewer.js +65 -0
- package/src/roles/engineeringManager.js +53 -0
- package/src/roles/index.js +80 -0
- package/src/roles/mediaProducer.js +223 -0
- package/src/roles/productManager.js +50 -0
- package/src/roles/qaEngineer.js +54 -0
- package/src/roles/securityEngineer.js +53 -0
- package/src/roles/softwareArchitect.js +58 -0
- package/src/roles/softwareEngineer.js +76 -0
- package/src/roles/sreEngineer.js +60 -0
- package/src/roles/systemAnalyst.js +45 -0
- package/src/roles/techLead.js +46 -0
- package/src/roles/technicalWriter.js +46 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Merkle Ledger Specification
|
|
2
|
+
|
|
3
|
+
Tamper-evident audit log format maintaining hash chains across execution events.
|
|
4
|
+
|
|
5
|
+
## Block Structure
|
|
6
|
+
|
|
7
|
+
Each block contains metadata and payload, hashed canonically:
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"index": 1,
|
|
12
|
+
"timestamp": 1700000015,
|
|
13
|
+
"previous_hash": "c7be1d82...",
|
|
14
|
+
"data": {
|
|
15
|
+
"action": "task_completed",
|
|
16
|
+
"task_id": "auth_service",
|
|
17
|
+
"status": "GREEN"
|
|
18
|
+
},
|
|
19
|
+
"hash": "e3b0c442..."
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Hash Invariant
|
|
24
|
+
|
|
25
|
+
- `hash = SHA256(canonicalStringify(block_without_hash))`
|
|
26
|
+
- `block[i].previous_hash === block[i - 1].hash`
|
|
27
|
+
- Canonical serialization sorts object keys alphabetically and omits undefined values.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Receipt Verification Specification
|
|
2
|
+
|
|
3
|
+
Protocol for cryptographically verifying signed execution receipts.
|
|
4
|
+
|
|
5
|
+
## Receipt Fields
|
|
6
|
+
|
|
7
|
+
- `receipt_id`: Unique identifier for the execution record.
|
|
8
|
+
- `timestamp`: UTC ISO-8601 creation timestamp.
|
|
9
|
+
- `task_digest`: SHA-256 hash of task definition and input context.
|
|
10
|
+
- `result_digest`: SHA-256 hash of generated output and test verification logs.
|
|
11
|
+
- `signature`: Ed25519 or HMAC signature over canonical `task_digest + result_digest`.
|
|
12
|
+
|
|
13
|
+
## Verification Steps
|
|
14
|
+
|
|
15
|
+
1. Recalculate `task_digest` from input context.
|
|
16
|
+
2. Recalculate `result_digest` from output artifacts.
|
|
17
|
+
3. Verify public key signature matches the concatenated digests.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Time-Travel Replay Specification
|
|
2
|
+
|
|
3
|
+
Framework for deterministic replay and state reconstruction from audit events.
|
|
4
|
+
|
|
5
|
+
## Replay Architecture
|
|
6
|
+
|
|
7
|
+
1. **Genesis State**: Replay initializes from clean baseline or checkpoint 0.
|
|
8
|
+
2. **Sequential Application**: Events from the verified Merkle ledger are applied in exact index order.
|
|
9
|
+
3. **State Checksum**: After applying each wave of events, compute state checksum and compare with recorded checkpoint hash.
|
|
10
|
+
4. **Deviation Halt**: If calculated checksum deviates, replay halts immediately, flagging the anomalous block.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-code-reviewer
|
|
3
|
+
version: "1.0.0"
|
|
4
|
+
description: "Conduct independent peer code reviews, filter out boilerplate/slop, validate diff correctness, and enforce anti-self-review."
|
|
5
|
+
allowed-tools: ["terminal"]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Code Reviewer
|
|
9
|
+
|
|
10
|
+
Perform rigorous, independent code review to catch bugs, regressions, and AI code slop before merge.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
- Inspecting git diffs and pull requests before merging into main branches.
|
|
15
|
+
- Filtering out hallucinations, decorative comments, unused abstractions, and dead code.
|
|
16
|
+
- Verifying regression tests and boundary invariants.
|
|
17
|
+
|
|
18
|
+
## NOT for
|
|
19
|
+
|
|
20
|
+
- Authoring or mutating code patches (strictly read-only role).
|
|
21
|
+
- Reviewing code generated by the same model/agent identity (anti-self-review violation).
|
|
22
|
+
- Orchestrating multi-wave agent swarms (`skill-orchestrate`).
|
|
23
|
+
|
|
24
|
+
## Workflow & CLI
|
|
25
|
+
|
|
26
|
+
Execute via `esquadrao role`:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# 1. View reviewer profile
|
|
30
|
+
esquadrao role info code-reviewer
|
|
31
|
+
|
|
32
|
+
# 2. Generate peer review prompt for a git diff
|
|
33
|
+
esquadrao role prompt code-reviewer "Review PR diff adding local config persistence"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## UX & Operational Rules
|
|
37
|
+
|
|
38
|
+
- Strictly read-only: no modifying commands or file mutations.
|
|
39
|
+
- Enforce absolute independence: an agent cannot review code it implemented.
|
|
40
|
+
- Cite specific file paths and line numbers for every actionable finding.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-context
|
|
3
|
+
version: "1.0.0"
|
|
4
|
+
description: "Extract structural AST outlines, synthesize OpenAPI contracts, and condense context packets under 3k tokens."
|
|
5
|
+
allowed-tools: ["terminal"]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Agent Context
|
|
9
|
+
|
|
10
|
+
Reduce token footprints by extracting structural AST signatures, synthesizing contracts, and filtering noise.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
- Generating concise structural outlines of large source files (JS, TS, Python).
|
|
15
|
+
- Packaging surgical context (<3,000 tokens) for LLM subagents.
|
|
16
|
+
- Synthesizing OpenAPI 3.1 contracts from route definitions and handlers.
|
|
17
|
+
|
|
18
|
+
## NOT for
|
|
19
|
+
|
|
20
|
+
- Running execution waves or resolving task dependencies (`skill-pipeline`).
|
|
21
|
+
- Visual accessibility testing (`skill-ui`).
|
|
22
|
+
- Cryptographic Merkle verification (`skill-audit`).
|
|
23
|
+
|
|
24
|
+
## Workflow & CLI
|
|
25
|
+
|
|
26
|
+
Execute via local script:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# 1. Extract AST outline of file
|
|
30
|
+
node scripts/ast_slice.js src/server.js
|
|
31
|
+
|
|
32
|
+
# 2. Extract AST outline in JSON format
|
|
33
|
+
node scripts/ast_slice.js src/app.py --json
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## UX & Operational Rules
|
|
37
|
+
|
|
38
|
+
- Never send entire code files when an outline or interface signature suffices.
|
|
39
|
+
- Target token reduction >60% compared to raw file contents.
|
|
40
|
+
|
|
41
|
+
## References
|
|
42
|
+
|
|
43
|
+
- AST virtualization: [references/ast-virtualization.md](references/ast-virtualization.md)
|
|
44
|
+
- OpenAPI contract synthesis: [references/openapi-contract-synthesis.md](references/openapi-contract-synthesis.md)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# AST Virtualization Specification
|
|
2
|
+
|
|
3
|
+
Technique for replacing voluminous implementation bodies with concise type and function signatures.
|
|
4
|
+
|
|
5
|
+
## Reduction Principles
|
|
6
|
+
|
|
7
|
+
- Extract top-level `export`, `function`, `class`, `interface`, and `type` declarations.
|
|
8
|
+
- Omit internal implementation bodies `{ ... }`.
|
|
9
|
+
- Strip line comments while preserving docstrings or top-level type signatures.
|
|
10
|
+
- Reduce token consumption by 60% to 80% while retaining full structural interface context.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# OpenAPI Contract Synthesis Specification
|
|
2
|
+
|
|
3
|
+
Derives OpenAPI 3.1 schema contracts from route definitions and handler signatures.
|
|
4
|
+
|
|
5
|
+
## Extraction Rules
|
|
6
|
+
|
|
7
|
+
1. **Path Mapping**: Correlate route decorators/methods (`app.get('/users/:id')` -> `/users/{id}`).
|
|
8
|
+
2. **Parameter Typing**: Map path parameters and query strings to typed OpenAPI schema components.
|
|
9
|
+
3. **Status Codes**: Register default success codes (`200 OK`, `201 Created`) and standard error envelopes (`400`, `401`, `500`).
|
|
10
|
+
4. **Validation Schemas**: Link Zod, Pydantic, or JSON schemas directly to requestBody components.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-engineering-manager
|
|
3
|
+
version: "1.0.0"
|
|
4
|
+
description: "Synthesize completed project evidence into follow-up milestones, roadmap iterations, and next sprint tasks."
|
|
5
|
+
allowed-tools: ["terminal"]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Engineering Manager
|
|
9
|
+
|
|
10
|
+
Transform execution outcomes into follow-up engineering milestones, backlog priorities, and team roadmaps.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
- Planning subsequent development sprints following an accepted release.
|
|
15
|
+
- Converting remaining technical debt and follow-up opportunities into concrete tasks.
|
|
16
|
+
- Mapping task dependencies and team resource allocations.
|
|
17
|
+
|
|
18
|
+
## NOT for
|
|
19
|
+
|
|
20
|
+
- Direct low-level code editing (`skill-software-engineer`).
|
|
21
|
+
- Auditing cryptographic hashes (`skill-audit`).
|
|
22
|
+
- Generating AST outlines (`skill-context`).
|
|
23
|
+
|
|
24
|
+
## Workflow & CLI
|
|
25
|
+
|
|
26
|
+
Execute via `esquadrao role`:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# 1. View engineering manager role profile
|
|
30
|
+
esquadrao role info engineering-manager
|
|
31
|
+
|
|
32
|
+
# 2. Generate roadmap planning prompt
|
|
33
|
+
esquadrao role prompt engineering-manager "Derive Next Milestone from completed Auth release"
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## UX & Operational Rules
|
|
37
|
+
|
|
38
|
+
- Tasks must declare explicit priorities (`P0`, `P1`, `P2`) and assignable role identifiers.
|
|
39
|
+
- Formulate milestone roadmaps based strictly on verified evidence from prior runs.
|
|
40
|
+
- Maintain immutable system guarantees across milestone transitions.
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skill-media-producer
|
|
3
|
+
version: "1.6.0"
|
|
4
|
+
description: "Set up Esquadrão Studio and configure video aspect ratio, captions, cuts, audio gain, EditPlan validation, rendering, and QA. Use for initial setup and video configuration requests."
|
|
5
|
+
allowed-tools: ["terminal"]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Media Producer — Esquadrão de Conteúdo
|
|
9
|
+
|
|
10
|
+
Guia canônico e motor de execução para agentes de IA e LLMs produzirem vídeos automatizados via `@esquadrao/cli` e FFmpeg local.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
- Configuração inicial do estúdio de vídeo e setup do ambiente local.
|
|
15
|
+
- Criação de planos de corte e edição estruturados (`EditPlan v1`) sem alucinações.
|
|
16
|
+
- Fatiamento de podcasts e gravações longas com legendas sincronizadas (`podcast_clip`).
|
|
17
|
+
- Decupagem e junção contígua de trechos de vídeo (`edit_only`).
|
|
18
|
+
- Vídeos com tipografia destacada (`dark`), exclusivamente sob demanda expressa do usuário.
|
|
19
|
+
- Inspeção técnica automatizada de qualidade (`studio qa`) e validação de conformidade.
|
|
20
|
+
|
|
21
|
+
## NOT for
|
|
22
|
+
|
|
23
|
+
- Validação de ledgers Merkle criptográficos (`skill-audit`).
|
|
24
|
+
- Orquestração de enxames e bloqueios de leasing (`skill-orchestrate`).
|
|
25
|
+
- Fatiamento sintático de AST (`skill-context`).
|
|
26
|
+
- Auditorias visuais WCAG de páginas web (`skill-ui`).
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 1. Princípio Fundamental de Escolha do Usuário (Anti-Padrão Forçado)
|
|
31
|
+
|
|
32
|
+
> **REGRA MANDATÓRIA PARA A LLM:**
|
|
33
|
+
> **A forma de edição com fundo preto e widescreen NÃO é o padrão do sistema.**
|
|
34
|
+
> Quem escolhe a proporção e o estilo visual é SEMPRE o usuário. A LLM NUNCA deve assumir proporção 16:9 ou fundo escuro sem perguntar explicitamente.
|
|
35
|
+
|
|
36
|
+
A LLM deve obter a confirmação do usuário para dois eixos decisórios fundamentais:
|
|
37
|
+
|
|
38
|
+
1. **Proporção de Tela / Formato:**
|
|
39
|
+
- **Vertical 9:16 (`1080x1920`):** Ideal para TikTok, Instagram Reels, YouTube Shorts e consumo mobile.
|
|
40
|
+
- **Widescreen 16:9 (`1920x1080`):** Ideal para YouTube padrão, desktop, apresentações e TV.
|
|
41
|
+
2. **Estilo de Edição / Mídia de Fundo:**
|
|
42
|
+
- **`podcast_clip` (Cortes com Legendas):** Fatiamento de falas longas com áudio balanceado e queima gráfica de legendas dinâmicas.
|
|
43
|
+
- **`edit_only` (Decupagem de Vídeo):** Junção contígua de 2 cortes a partir de filmagens do usuário ou packs de vídeos e imagens cinematográficas.
|
|
44
|
+
- **`dark` (Fundo Escuro Tipográfico):** Animação tipográfica de texto centralizado sobre fundo escuro com silêncio ou trilha sintética (usar apenas se o usuário pedir explicitamente).
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 2. Guia de Conversação e Setup Passo a Passo para LLMs
|
|
49
|
+
|
|
50
|
+
Quando o usuário solicitar ajuda para produzir vídeos ou configurar a esteira, a LLM deve seguir exatamente esta sequência:
|
|
51
|
+
|
|
52
|
+
### Passo 1: Sondagem Inicial de Preferências
|
|
53
|
+
A LLM pergunta de forma direta e objetiva:
|
|
54
|
+
1. *"Qual formato você prefere para o seu vídeo? (1) Vertical 9:16 para Reels/Shorts/TikTok ou (2) Widescreen 16:9 para YouTube?"*
|
|
55
|
+
2. *"Qual estilo você quer aplicar? (1) Cortar uma gravação com legendas (via SRT, OpenAI ou modelo local), (2) Decupar e unir trechos de vídeos/packs, ou (3) Vídeo tipográfico sobre fundo escuro?"*
|
|
56
|
+
|
|
57
|
+
### Passo 2: Instalação no Agente de IA e Resolução de Dependências
|
|
58
|
+
O usuário instala o pacote executando apenas o comando npm através do seu agente de IA preferido (Claude Code, OpenAI Codex, Gemini, Cursor):
|
|
59
|
+
```bash
|
|
60
|
+
npm install -g @esquadrao/cli
|
|
61
|
+
```
|
|
62
|
+
> **Resolução Automática:** Caso o Node.js (>=18) ou o FFmpeg/ffprobe não estejam presentes na máquina, o próprio comando `esquadrao setup` ou o agente de IA realiza a instalação necessária de forma transparente. O usuário não precisa executar comandos de sistema operacional além do npm.
|
|
63
|
+
|
|
64
|
+
> **Onboarding Real (`onboard`):** No modo `podcast_clip`, o `onboard` executa o pipeline real de `auto-clip` (detecção de silêncio, cortes, legendas e QA). Use `--captions`, `--openai`, `--local` ou `--no-captions`; sem motor de legenda, ele aplica `--no-captions`, gera o corte real sem legendas e avisa.
|
|
65
|
+
|
|
66
|
+
### Passo 3: Definição do Workspace e Configuração das Skills
|
|
67
|
+
O usuário escolhe uma pasta no computador para ser seu repositório/workspace principal de uso diário (ex.: `./meu-estudio`). É nessa pasta que as skills inteligentes do Esquadrão operam:
|
|
68
|
+
```bash
|
|
69
|
+
# Dentro da pasta do seu projeto/workspace
|
|
70
|
+
esquadrao setup
|
|
71
|
+
```
|
|
72
|
+
> **Acervo de Apoio:** Os packs de vídeos e imagens adquiridos na plataforma devem ser descompactados e mantidos dentro dessa mesma pasta de trabalho (ex.: `./packs/`), garantindo acesso imediato aos agentes para cortes e B-rolls.
|
|
73
|
+
|
|
74
|
+
### Passo 4: Inicialização do Estúdio
|
|
75
|
+
```bash
|
|
76
|
+
# Inicializa a estrutura atômica de pastas do workspace
|
|
77
|
+
esquadrao studio init --dest ./workspace
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Estrutura criada por `studio init`:
|
|
81
|
+
```text
|
|
82
|
+
workspace/
|
|
83
|
+
├── assets/ # Arquivos de mídia importados e cópias locais
|
|
84
|
+
├── packages/ # Planos de edição (editplan.json) e transcrições
|
|
85
|
+
├── artifacts/ # Vídeos finais renderizados em MP4
|
|
86
|
+
└── studio.json # Manifesto do estúdio e inventário de assets
|
|
87
|
+
```
|
|
88
|
+
*(Nota: o comando cria apenas `assets/`, `packages/`, `artifacts/` e `studio.json`. Pastas como `editplans/`, `renders/` e `qa/` não existem.)*
|
|
89
|
+
|
|
90
|
+
### Passo 5: Importação das Fontes de Mídia (se aplicável)
|
|
91
|
+
```bash
|
|
92
|
+
# Importa o arquivo de vídeo e inspeciona duração, codecs e áudio
|
|
93
|
+
esquadrao studio import ./caminho/meu-video.mp4 --dest ./workspace --json
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Passo 6: Criação do EditPlan e Aprovação do Usuário
|
|
97
|
+
A LLM gera o arquivo `./workspace/packages/editplan.json` com base nos modelos canônicos abaixo.
|
|
98
|
+
**A LLM deve exibir os cortes, a duração final e as legendas para o usuário aprovar antes de renderizar.**
|
|
99
|
+
|
|
100
|
+
### Passo 7: Renderização e Verificação de Qualidade (QA)
|
|
101
|
+
```bash
|
|
102
|
+
# Renderiza o artefato final em MP4
|
|
103
|
+
esquadrao studio render ./workspace/packages/editplan.json --dest ./workspace --json
|
|
104
|
+
|
|
105
|
+
# Valida conformidade técnica (áudio, resolução e duração)
|
|
106
|
+
esquadrao studio qa ./workspace/artifacts/video.mp4 --plan ./workspace/packages/editplan.json
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Passo Alternativo: Pipeline Integrado de Auto-Corte (`auto-clip`)
|
|
110
|
+
Para vídeos falados com remoção de pausas e silêncios (>0.8s):
|
|
111
|
+
```bash
|
|
112
|
+
esquadrao studio auto-clip ./caminho/meu-video.mp4 --dest ./workspace --json
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Caminhos de legendas no `auto-clip`:**
|
|
116
|
+
1. `--captions <arquivo.srt>`: Determinístico, offline e testado (caminho recomendado).
|
|
117
|
+
2. `--openai`: Requer a variável de ambiente `OPENAI_API_KEY` para transcrição remota via API Whisper.
|
|
118
|
+
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.
|
|
119
|
+
|
|
120
|
+
> **Templates de legenda:** o catálogo canônico tem nove presets em [`references/caption-templates.md`](references/caption-templates.md), disponíveis no CLI 1.5.0 via `--caption-template <id>` ou `captions[].template`. `--caption-style impact|word|full` permanece como legado.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 3. Modelos Canônicos de EditPlan v1 (Prontos para LLM sem Alucinação)
|
|
125
|
+
|
|
126
|
+
### Modelo 1: Vertical 9:16 (`1080x1920`) — `podcast_clip` (Cortes com Legendas)
|
|
127
|
+
```json
|
|
128
|
+
{
|
|
129
|
+
"schema_version": 1,
|
|
130
|
+
"mode": "podcast_clip",
|
|
131
|
+
"output": {
|
|
132
|
+
"width": 1080,
|
|
133
|
+
"height": 1920,
|
|
134
|
+
"fps_num": 30,
|
|
135
|
+
"fps_den": 1,
|
|
136
|
+
"video_codec": "h264",
|
|
137
|
+
"audio_codec": "aac"
|
|
138
|
+
},
|
|
139
|
+
"clips": [
|
|
140
|
+
{
|
|
141
|
+
"kind": "video",
|
|
142
|
+
"clip_id": "clip-01",
|
|
143
|
+
"asset_id": "AST-12345678",
|
|
144
|
+
"in_ms": 1000,
|
|
145
|
+
"out_ms": 7000,
|
|
146
|
+
"timeline_start_ms": 0,
|
|
147
|
+
"speed": 1
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
"audio_tracks": [
|
|
151
|
+
{
|
|
152
|
+
"kind": "source",
|
|
153
|
+
"clip_id": "clip-01",
|
|
154
|
+
"gain_db": 0
|
|
155
|
+
}
|
|
156
|
+
],
|
|
157
|
+
"captions": [
|
|
158
|
+
{
|
|
159
|
+
"text": "Vídeo longo parado não dá visualização.",
|
|
160
|
+
"timeline_start_ms": 0,
|
|
161
|
+
"duration_ms": 3000
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"text": "A esteira local corta silêncios e gera legendas.",
|
|
165
|
+
"timeline_start_ms": 3000,
|
|
166
|
+
"duration_ms": 3000
|
|
167
|
+
}
|
|
168
|
+
]
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Modelo 2: Widescreen 16:9 (`1920x1080`) — `edit_only` (Decupagem Contígua)
|
|
173
|
+
```json
|
|
174
|
+
{
|
|
175
|
+
"schema_version": 1,
|
|
176
|
+
"mode": "edit_only",
|
|
177
|
+
"output": {
|
|
178
|
+
"width": 1920,
|
|
179
|
+
"height": 1080,
|
|
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": "corte-01",
|
|
189
|
+
"asset_id": "AST-12345678",
|
|
190
|
+
"in_ms": 0,
|
|
191
|
+
"out_ms": 4000,
|
|
192
|
+
"timeline_start_ms": 0,
|
|
193
|
+
"speed": 1
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"kind": "video",
|
|
197
|
+
"clip_id": "corte-02",
|
|
198
|
+
"asset_id": "AST-12345678",
|
|
199
|
+
"in_ms": 4000,
|
|
200
|
+
"out_ms": 8000,
|
|
201
|
+
"timeline_start_ms": 4000,
|
|
202
|
+
"speed": 1
|
|
203
|
+
}
|
|
204
|
+
],
|
|
205
|
+
"audio_tracks": [
|
|
206
|
+
{
|
|
207
|
+
"kind": "source",
|
|
208
|
+
"clip_id": "corte-01",
|
|
209
|
+
"gain_db": 0
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"kind": "source",
|
|
213
|
+
"clip_id": "corte-02",
|
|
214
|
+
"gain_db": 0
|
|
215
|
+
}
|
|
216
|
+
]
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Modelo 3: Vertical 9:16 (`1080x1920`) — `edit_only` (Dois Cortes com Cenas de Fundo)
|
|
221
|
+
```json
|
|
222
|
+
{
|
|
223
|
+
"schema_version": 1,
|
|
224
|
+
"mode": "edit_only",
|
|
225
|
+
"output": {
|
|
226
|
+
"width": 1080,
|
|
227
|
+
"height": 1920,
|
|
228
|
+
"fps_num": 30,
|
|
229
|
+
"fps_den": 1,
|
|
230
|
+
"video_codec": "h264",
|
|
231
|
+
"audio_codec": "aac"
|
|
232
|
+
},
|
|
233
|
+
"clips": [
|
|
234
|
+
{
|
|
235
|
+
"kind": "video",
|
|
236
|
+
"clip_id": "take-01",
|
|
237
|
+
"asset_id": "AST-CENA0001",
|
|
238
|
+
"in_ms": 0,
|
|
239
|
+
"out_ms": 3000,
|
|
240
|
+
"timeline_start_ms": 0,
|
|
241
|
+
"speed": 1
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"kind": "video",
|
|
245
|
+
"clip_id": "take-02",
|
|
246
|
+
"asset_id": "AST-CENA0002",
|
|
247
|
+
"in_ms": 0,
|
|
248
|
+
"out_ms": 3500,
|
|
249
|
+
"timeline_start_ms": 3000,
|
|
250
|
+
"speed": 1
|
|
251
|
+
}
|
|
252
|
+
],
|
|
253
|
+
"audio_tracks": [
|
|
254
|
+
{
|
|
255
|
+
"kind": "source",
|
|
256
|
+
"clip_id": "take-01",
|
|
257
|
+
"gain_db": 0
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"kind": "source",
|
|
261
|
+
"clip_id": "take-02",
|
|
262
|
+
"gain_db": 0
|
|
263
|
+
}
|
|
264
|
+
]
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### Modelo 4: Fundo Escuro Tipográfico — `dark` (Sob Solicitação Expressa do Usuário)
|
|
269
|
+
```json
|
|
270
|
+
{
|
|
271
|
+
"schema_version": 1,
|
|
272
|
+
"mode": "dark",
|
|
273
|
+
"output": {
|
|
274
|
+
"width": 1080,
|
|
275
|
+
"height": 1920,
|
|
276
|
+
"fps_num": 30,
|
|
277
|
+
"fps_den": 1,
|
|
278
|
+
"video_codec": "h264",
|
|
279
|
+
"audio_codec": "aac"
|
|
280
|
+
},
|
|
281
|
+
"clips": [
|
|
282
|
+
{
|
|
283
|
+
"kind": "text",
|
|
284
|
+
"text": "Ideia Principal em Destaque",
|
|
285
|
+
"duration_ms": 2000,
|
|
286
|
+
"timeline_start_ms": 0
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"kind": "text",
|
|
290
|
+
"text": "Conclusão e Próximo Passo",
|
|
291
|
+
"duration_ms": 2500,
|
|
292
|
+
"timeline_start_ms": 2000
|
|
293
|
+
}
|
|
294
|
+
]
|
|
295
|
+
}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## 4. Fronteiras Rígidas e Regras Anti-Alucinação para LLMs
|
|
301
|
+
|
|
302
|
+
1. **Resoluções Válidas:** Estritamente `1080x1920` (Vertical 9:16) ou `1920x1080` (Widescreen 16:9). Qualquer outro valor causa falha na validação de QA.
|
|
303
|
+
2. **Taxa de Quadros e Codecs:** Sempre `fps_num: 30`, `fps_den: 1`, `video_codec: "h264"`, `audio_codec: "aac"`.
|
|
304
|
+
3. **Cortes de Vídeo:** Mínimo de 100 milissegundos por corte. O ponto de término `out_ms` não pode exceder a duração real do asset importado.
|
|
305
|
+
4. **Legendas:**
|
|
306
|
+
- 1 a 200 caracteres por frase.
|
|
307
|
+
- Normalização NFC sem caracteres invisíveis.
|
|
308
|
+
- Zero tags HTML (`<b>`, `<font>`, `<br>`).
|
|
309
|
+
- Caracteres especiais são tratados pelo motor: `%` vira `\%`, `'` vira `\'`, `\` vira `\\`.
|
|
310
|
+
5. **Ganho de Áudio e Ducking:**
|
|
311
|
+
- Intervalo restrito entre `-60` dB e `+12` dB. `0` dB preserva o volume original.
|
|
312
|
+
- `music_tracks.ducking`: Aplica atenuação estática de volume (`-22dB` via mixagem `amix`), e não ducking dinâmico sidechain (backlog CLI-05).
|
|
313
|
+
6. **Overlays e Layouts:**
|
|
314
|
+
- Layouts funcionais no renderizador: `fullscreen`, `pip` e `split_bottom`.
|
|
315
|
+
- **Split permanente:** `auto-clip --broll <pack> --layout split_bottom --overlay-duration full` mantém o orador no topo e o pack na base durante todo o clipe; o pack é repetido em loop e o áudio original é preservado.
|
|
316
|
+
- O layout `split_top` é aceito no schema de validação, mas não está implementado no renderizador atual (cai em tela cheia; pendente no backlog CLI-06).
|
|
317
|
+
- **Recorte de pessoa com troca de fundo:** disponível em `studio cutout <video> --background <pack> --python <interpretador>`, como experimental. Requer Python com `rembg`, `onnxruntime`, `opencv-python-headless`, `numpy` e Pillow; ~18–20 min de CPU por 60 s em 15 fps. Não prometa tempo real nem qualidade de estúdio. Detalhes em [`references/composicoes-especiais.md`](./references/composicoes-especiais.md).
|
|
318
|
+
7. **Verificação Técnica Independente:** Sempre execute `studio qa` com `--plan` para validar integridade antes de concluir a tarefa.
|
|
319
|
+
8. **Onboarding Real:** O comando `esquadrao onboard --mode podcast_clip` usa o pipeline real de `auto-clip`; os modos `dark` e `edit_only` continuam gerando planos guiados.
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## 5. Referências Adicionais
|
|
324
|
+
|
|
325
|
+
- [`references/llm-agent-guide.md`](references/llm-agent-guide.md): Guia de conversação completo com fluxos de tratamento de erro.
|
|
326
|
+
- [`references/configuracao-inicial.md`](references/configuracao-inicial.md): Guia passo a passo para execução via PowerShell / Windows.
|
|
327
|
+
- [`references/caption-templates.md`](references/caption-templates.md): catálogo canônico dos nove templates de legenda, com fonte, cores, contorno, sombra e contrato CLI.
|
|
328
|
+
- [`references/corte-podcast-3-niveis.md`](references/corte-podcast-3-niveis.md): procedimento validado para demonstrar corte de pausas longas e respiros curtos em três níveis, com métricas e critérios de aceite.
|