sagadeck 1.8.0 → 1.10.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/README.md +25 -8
- package/SKILL.md +10 -3
- package/bin/sagadeck.js +23 -0
- package/docs/ANDAMENTO.md +482 -7
- package/docs/PLANO-MELHORIAS.md +180 -0
- package/docs/REFERENCIA.md +178 -111
- package/package.json +35 -4
- package/src/ai/commands.js +2 -2
- package/src/ai/context.js +7 -2
- package/src/ai/deck-ai.js +4 -2
- package/src/ai/ia-check.js +127 -0
- package/src/ai/ia-config.js +2 -2
- package/src/ai/llm.js +5 -1
- package/src/ai/map-analysis-run.js +1 -1
- package/src/ai/quality.js +1 -1
- package/src/ai/video-generation.js +70 -25
- package/src/api-client.js +42 -10
- package/src/build.js +46 -14
- package/src/code-highlight.js +19 -2
- package/src/code-language.js +13 -0
- package/src/elements.js +39 -1
- package/src/export/pptx.js +7 -2
- package/src/export/shots.js +7 -2
- package/src/fiscal/normalize.js +19 -0
- package/src/fs-retry.js +37 -2
- package/src/import/office.js +5 -4
- package/src/layouts.js +104 -99
- package/src/lessons.js +1 -1
- package/src/library.js +7 -7
- package/src/map-analysis.js +4 -1
- package/src/map-config.js +10 -4
- package/src/map.js +21 -8
- package/src/mcp/server.js +17 -0
- package/src/motion.js +20 -6
- package/src/purpose.js +1 -1
- package/src/runtime/api-core.js +122 -11
- package/src/runtime/api-ui.js +2 -1
- package/src/runtime/base.css +88 -332
- package/src/runtime/fit.js +3 -2
- package/src/runtime/fonts/amatic-sc.css +3 -0
- package/src/runtime/fonts/bebas-neue.css +2 -0
- package/src/runtime/fonts/cabin-sketch.css +2 -0
- package/src/runtime/fonts/fraunces.css +3 -0
- package/src/runtime/fonts/gelasio.css +3 -0
- package/src/runtime/fonts/ibm-plex-mono.css +4 -0
- package/src/runtime/fonts/index.json +10 -1
- package/src/runtime/fonts/itim.css +2 -0
- package/src/runtime/fonts/montserrat.css +2 -0
- package/src/runtime/fonts/space-grotesk.css +2 -0
- package/src/runtime/map-background.js +91 -0
- package/src/runtime/map.js +41 -9
- package/src/runtime/runtime.js +81 -100
- package/src/runtime/skins/aurora-dev.css +39 -0
- package/src/runtime/skins/caderno.css +33 -0
- package/src/runtime/skins/cartaz.css +27 -0
- package/src/runtime/skins/infografico.css +29 -0
- package/src/runtime/skins/lousa.css +22 -0
- package/src/runtime/skins/musgo.css +42 -0
- package/src/runtime/skins/terminal-pro.css +33 -0
- package/src/runtime/vendor/MAPLIBRE-LEAFLET-LICENSE.txt +15 -0
- package/src/runtime/vendor/MAPLIBRE-LICENSE.txt +116 -0
- package/src/runtime/vendor/geo-contornos.json +1 -1
- package/src/runtime/vendor/maplibre-gl.css +1 -0
- package/src/runtime/vendor/maplibre-gl.js +825 -0
- package/src/runtime/vendor/maplibre-leaflet.js +234 -0
- package/src/runtime/vendor/maplibre-worker.js +10 -0
- package/src/studio/ai-chat-route.js +26 -7
- package/src/studio/assets/imagens/tour-mapa-botao.jpg +0 -0
- package/src/studio/assets/imagens/tour-mapa-editor.jpg +0 -0
- package/src/studio/command-approval.js +2 -3
- package/src/studio/demo-decks.js +4 -2
- package/src/studio/developer-starters.js +46 -0
- package/src/studio/export-jobs.js +86 -0
- package/src/studio/exporting.js +36 -18
- package/src/studio/feature-demos.js +144 -0
- package/src/studio/ia-routes.js +9 -0
- package/src/studio/layout-samples.js +9 -18
- package/src/studio/library-routes.js +7 -9
- package/src/studio/project.js +1 -0
- package/src/studio/public/about.js +68 -0
- package/src/studio/public/ai-settings.js +2 -2
- package/src/studio/public/app.js +43 -52
- package/src/studio/public/chat.js +5 -1
- package/src/studio/public/developer-authoring.css +12 -0
- package/src/studio/public/developer-authoring.js +306 -0
- package/src/studio/public/export-status.js +154 -0
- package/src/studio/public/generation-guide.js +42 -0
- package/src/studio/public/index.html +31 -10
- package/src/studio/public/library.css +48 -3
- package/src/studio/public/library.html +5 -1
- package/src/studio/public/library.js +150 -41
- package/src/studio/public/map-data.js +7 -3
- package/src/studio/public/map-editor.js +625 -236
- package/src/studio/public/map-settings.js +3 -1
- package/src/studio/public/slide-form.js +27 -29
- package/src/studio/public/style.css +56 -9
- package/src/studio/public/ui-icons.js +1 -1
- package/src/studio/server.js +29 -14
- package/src/studio/snapshot.js +8 -4
- package/src/studio/template-collections.js +1 -1
- package/src/studio/tour.js +89 -7
- package/src/themes.js +202 -0
- package/templates/cenario-e-ciencia.yaml +1 -21
- package/templates/ensaio-api.yaml +3 -3
- package/templates/cenario/Texto no cen/303/241rio.yaml" +0 -171
- package/templates/cenario/imagens/cidade.svg +0 -30
- package/templates/cenario/imagens/pessoa.svg +0 -15
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Plano de melhorias — sagadeck
|
|
2
|
+
|
|
3
|
+
Avaliação do repositório em 11/10/2026 (branch `arena/349f2d88-sagadeck`, base `main` em 8ff7005).
|
|
4
|
+
**Nenhum código foi alterado** — este documento é o entregável: diagnóstico + sugestões de melhoria,
|
|
5
|
+
ordenadas por impacto, com esforço e risco estimados.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Radiografia do projeto
|
|
10
|
+
|
|
11
|
+
| área | tamanho |
|
|
12
|
+
|---|---|
|
|
13
|
+
| `src/` (JS, incl. vendor embutido) | ~48 mil linhas |
|
|
14
|
+
| `src/` sem vendor | ~40 mil linhas |
|
|
15
|
+
| testes (136 arquivos) | ~20 mil linhas, 808 testes |
|
|
16
|
+
| `bin/sagadeck.js` | 555 linhas (CLI inteira) |
|
|
17
|
+
| `docs/` | ~3,4 mil linhas (REFERENCIA 1.164 + ANDAMENTO 2.122) |
|
|
18
|
+
|
|
19
|
+
Maioria Node puro (ESM), sem build de frontend (o Studio serve JS cru — bom para depurar).
|
|
20
|
+
Dependências de runtime enxutas e usadas: `yaml`, `jszip`, `pptxgenjs`, `katex`, `pdfjs-dist`,
|
|
21
|
+
`qrcode-generator`, `playwright-core`, `plotly.js-dist-min`, `lucide-static` (as duas últimas via
|
|
22
|
+
arquivos copiados do `node_modules` pelos scripts `vendor-*`).
|
|
23
|
+
|
|
24
|
+
## 2. Pontos fortes — manter exatamente como está
|
|
25
|
+
|
|
26
|
+
1. **Cultura de teste exemplar.** `test/isolate.js` blinda biblioteca, credenciais e preferências de
|
|
27
|
+
quem roda; mock de LLM (`mock-llm.js`) testa encanamento e teste ao vivo (`SAGADECK_LIVE=1`) testa
|
|
28
|
+
decisão; regra "bug sem teste que reproduza não entra"; teste de UI exige zero erros de JS e confere
|
|
29
|
+
o resultado **no deck salvo**. É acima da média de projetos comerciais.
|
|
30
|
+
2. **CI séria.** Linux + Windows (onde quebraria barra invertida e acento), Node 24, concorrência
|
|
31
|
+
cancelando runs antigos, publish npm com trusted publishing + provenance, regra "só merge com CI verde".
|
|
32
|
+
3. **Segurança do Studio local bem pensada.** `server.js` restringe a loopback **e** fixa Origin/Host
|
|
33
|
+
contra DNS rebinding (comentário no código mostra que a ameaça foi estudada). Chaves de IA e mapas
|
|
34
|
+
moram em `~/.sagadeck/`, nunca no repositório nem na biblioteca.
|
|
35
|
+
4. **Convenções guardadas por teste.** `guards.test.js` e `engine.test.js` falham se aparecer emoji-ícone,
|
|
36
|
+
menção proibida, fonte via CDN, layout sem exemplo/descrição ou recurso fora do `docs/REFERENCIA.md`.
|
|
37
|
+
A REFERENCIA como fonte única do prompt da IA é um design particularmente elegante.
|
|
38
|
+
5. **Edição segura de decks.** `writeDeckFile` (patch de nós + gravação atômica + releitura), patch da IA
|
|
39
|
+
com trava `sanitizeCheck` e junção a três (`merge-decks.js`) para o que a pessoa muda enquanto a IA pensa.
|
|
40
|
+
6. **Disciplina de rede.** "Uma tentativa e para" em serviços externos, consentimento antes de enviar
|
|
41
|
+
dados da pessoa, cache de geocodificação. Regras claras e testadas.
|
|
42
|
+
|
|
43
|
+
## 3. Diagnóstico — o que pode melhorar
|
|
44
|
+
|
|
45
|
+
### A. Testes que precisam do navegador *falham* em vez de *pularem* (prioridade alta)
|
|
46
|
+
|
|
47
|
+
Rodei a suíte completa nesta máquina (sem Chrome/Edge): **532 passaram, 271 pularam, 5 falharam**.
|
|
48
|
+
As 5 falhas não são bugs de `main` — são testes que dependem de Chromium indiretamente:
|
|
49
|
+
|
|
50
|
+
- `test/ground.test.js` (2 falhas) e trechos de `ai.test.js`, `document-visuals.test.js`,
|
|
51
|
+
`pedidos-0210.test.js` passam por `imagesAsDataUrls`/`cropRegions` (`src/import/crop.js`), que
|
|
52
|
+
**lança um Chromium via playwright-core só para redimensionar/recortar PNG** (`canvas.toDataURL`).
|
|
53
|
+
- Os testes de UI já têm o guard correto (`t.skip("sem Chrome/Edge")` em `helpers.js`); esses não têm.
|
|
54
|
+
No CI passa porque o runner tem Chrome — mas qualquer pessoa clonando sem navegador vê a suíte vermelha
|
|
55
|
+
e não sabe por quê.
|
|
56
|
+
|
|
57
|
+
**Sugestões:**
|
|
58
|
+
1. Aplicar o mesmo guard `skip` nesses testes (consistência com o padrão já existente).
|
|
59
|
+
2. (Melhor ainda) Tirar o navegador do caminho de "foto reduzida para a visão": um redimensionador em
|
|
60
|
+
JS puro (decoder/encoder PNG/JPEG) resolve o caso de uso; o Chromium ficaria só para o que realmente
|
|
61
|
+
precisa dele (PDF, capturas, crop de regiões de slides do Office).
|
|
62
|
+
|
|
63
|
+
### B. Nenhuma ferramenta de qualidade estática (prioridade alta, esforço baixo)
|
|
64
|
+
|
|
65
|
+
Não há ESLint/Prettier/Biome, `.editorconfig`, `jsconfig/tsconfig` nem checagem de tipos. O estilo se
|
|
66
|
+
mantém por disciplina, e já há ruído: helper `esc` reimplementado **~10 vezes** (com semânticas
|
|
67
|
+
diferentes de entidades em cada uma — `markup.js`, `docx.js`, `api-ui.js`, `ai-settings.js`…),
|
|
68
|
+
aspas simples/duplas misturadas, `console.log` solto em 9 arquivos de `src/`.
|
|
69
|
+
|
|
70
|
+
**Sugestões:**
|
|
71
|
+
1. **Biome** (lint + format num binário só, rápido, zero configuração pesada) ou ESLint+Prettier.
|
|
72
|
+
Entrar em modo tolerante (warnings) e apertar arquivo por arquivo — nunca um reformat de 48 mil linhas
|
|
73
|
+
de uma vez (destruiria o `git blame` num projeto com diário de mudanças).
|
|
74
|
+
2. `// @ts-check` + JSDoc incremental nos módulos puros e de contrato estável: `fiscal/*`, `markup.js`,
|
|
75
|
+
`aspect.js`, `uid.js`, `csv.js`, `deck-file.js`, `figures/points.js`. Contratos como `spec`/`slide`/
|
|
76
|
+
`hotspots` hoje vivem só na cabeça de quem escreveu.
|
|
77
|
+
3. `.editorconfig` (final de linha, indentação) — ajuda quem contribui de outro editor.
|
|
78
|
+
4. Um logger único com nível (`SAGADECK_DEBUG`) no lugar dos `console.log` e, nos `catch {}` (são **76**
|
|
79
|
+
hoje; muitos intencionais, mas o padrão vira hábito), logar em debug o que foi engolido — principal
|
|
80
|
+
fonte de "bug que some".
|
|
81
|
+
|
|
82
|
+
### C. Arquivos gigantes e prompts embutidos (prioridade média)
|
|
83
|
+
|
|
84
|
+
| arquivo | linhas | sugestão |
|
|
85
|
+
|---|---|---|
|
|
86
|
+
| `src/studio/public/app.js` | 4.571 | É um IIFE monólito; o resto do Studio já são ES modules em `public/*.js` (gallery, chat, map-editor…). Dividir em `state.js`, `gallery.js`, `canvas.js`, `inspector.js`, `history.js`… — hoje qualquer mudança no editor toca esse arquivo inteiro. |
|
|
87
|
+
| `src/ai/deck-ai.js` | 1.390 | Prompts gigantes inline (linhas de centenas de caracteres). Extrair para `src/ai/prompts/*.md` — revisão do prompt vira diff legível, e dá para testar o prompt como golden file. |
|
|
88
|
+
| `src/ai/transform.js` | 907 | Mesmo caso (prompts + pipeline misturados). |
|
|
89
|
+
| `bin/sagadeck.js` | 555 | Parsing de flags + todos os comandos num arquivo; fatiar em `src/cli/` (um módulo por comando). |
|
|
90
|
+
| `test/studio.test.js` | 2.330 | Fatiar por área (biblioteca, editor, chat, dados) para rodar em paralelo e localizar falha mais rápido. |
|
|
91
|
+
|
|
92
|
+
`src/studio/server.js` (1.318) já está bem servido por módulos de rotas (`ia-routes`, `geo-routes`…)
|
|
93
|
+
— o padrão usado lá vale como referência para as divisões acima.
|
|
94
|
+
|
|
95
|
+
### D. Velocidade da suíte e da CI (prioridade média)
|
|
96
|
+
|
|
97
|
+
- `npm test` roda com `--test-concurrency=1` (serial): ~2 min mesmo pulando navegador; com Chrome
|
|
98
|
+
deve ser bem mais. Os testes já se isolam em tmpdir e portas livres — dá para paralelizar com segurança.
|
|
99
|
+
- Sugestão: **jobs separados na CI** por família (`engine` / `runtime` / `studio` / `ai` + `guards`),
|
|
100
|
+
cada um com seu arquivo — a matriz Ubuntu×Windows passa a rodar 4× mais rápido em wall-clock e a falha
|
|
101
|
+
aponta o arquivo direto.
|
|
102
|
+
- Cobertura: `node --test --experimental-test-coverage` já existe nativo; começar reportando (badge) e
|
|
103
|
+
só depois impor piso nos módulos puros.
|
|
104
|
+
|
|
105
|
+
### E. Matriz de Node enganosa (prioridade média, esforço baixo)
|
|
106
|
+
|
|
107
|
+
`package.json` declara `engines: node >=18`, mas a CI testa **só Node 24**. Ou testar 20/22/24 na
|
|
108
|
+
matriz (recomendado — custo barato com jobs paralelos), ou subir `engines` para `>=20` e dizer isso
|
|
109
|
+
na README. Hoje ninguém sabe se 18/20/22 realmente funcionam.
|
|
110
|
+
|
|
111
|
+
### F. Dependências e segurança contínua (prioridade média, esforço baixo)
|
|
112
|
+
|
|
113
|
+
`npm outdated` hoje: atualizações menores disponíveis (`playwright-core` 1.64, `pdfjs-dist` 6.4,
|
|
114
|
+
`plotly.js-dist-min` 4.1.2, `lucide-static` 1.55, `katex` 0.18.10) e **major** (`mermaid` 12).
|
|
115
|
+
Não há Dependabot/Renovate nem `npm audit` na CI.
|
|
116
|
+
|
|
117
|
+
**Sugestões:**
|
|
118
|
+
1. `npm audit --omit=dev` como step informativo na CI (não travar de início).
|
|
119
|
+
2. Dependabot (ou Renovate) agrupado: "patch/minor semanal, major sob demanda" — casa com a regra de
|
|
120
|
+
só publicar release com CI verde.
|
|
121
|
+
3. Rever `mermaid` 12 com calma (vendor embutido por `scripts/vendor-*.mjs` — o fluxo de vendorização
|
|
122
|
+
já existe e ajuda aqui).
|
|
123
|
+
|
|
124
|
+
### G. Documentação e convivência (prioridade baixa)
|
|
125
|
+
|
|
126
|
+
1. **`docs/ANDAMENTO.md` tem 2.122 linhas e não para de crescer.** Arquivar por mês
|
|
127
|
+
(`ANDAMENTO-2026-10.md`) mantendo o índice no topo — o diário é um dos maiores ativos do projeto e
|
|
128
|
+
está virando uma parede de texto.
|
|
129
|
+
2. **`AGENTS.md`/`CLAUDE.md` citam caminhos da máquina da mantenedora** (`C:\Users\narum\…`). Num
|
|
130
|
+
repositório público, vale generalizar ("a pasta oficial do repositório", "a biblioteca") e deixar o
|
|
131
|
+
caminho concreto num arquivo local não versionado — os agentes continuam funcionando e o repo fica
|
|
132
|
+
acolhedor a contribuintes.
|
|
133
|
+
3. `package.json` sem `keywords`, `homepage`, `bugs` — descoberta no npm e links oficiais.
|
|
134
|
+
4. Sem `CHANGELOG.md` — as releases do GitHub são o histórico hoje; um CHANGELOG curto (mantido à mão
|
|
135
|
+
ou por release) ajuda quem pula versões. A README já documenta muito bem o *como*; falta o *o que mudou*.
|
|
136
|
+
|
|
137
|
+
## 4. Plano em fases
|
|
138
|
+
|
|
139
|
+
### Fase 0 — suíte verde em qualquer máquina (1 sessão)
|
|
140
|
+
- Guard `skip` nos testes que dependem de navegador sem o guard (itens A.1).
|
|
141
|
+
- Investigar se as 5 falhas observadas aqui reproduzem em máquina com Chrome (no CI deve estar verde;
|
|
142
|
+
se não estiver, é bug real — a regra do CLAUDE.md manda consertar antes de tudo).
|
|
143
|
+
|
|
144
|
+
### Fase 1 — qualidade estática barata (1–2 sessões)
|
|
145
|
+
- Biome (ou ESLint+Prettier) em modo tolerante + `.editorconfig`.
|
|
146
|
+
- `npm audit` na CI (informativo) + Dependabot agrupado.
|
|
147
|
+
- Matriz de Node corrigida (testar 20/22+24 ou subir `engines`).
|
|
148
|
+
- `CHANGELOG.md` + `keywords`/`homepage`/`bugs` no package.json.
|
|
149
|
+
- Logger único + revisão dos 76 `catch {}` (log em `SAGADECK_DEBUG` onde engole erro de fs/rede).
|
|
150
|
+
|
|
151
|
+
### Fase 2 — contratos e desmontagem dos monólitos (2–4 sessões)
|
|
152
|
+
- `@ts-check` + JSDoc nos módulos puros (`fiscal/*`, `markup`, `aspect`, `uid`, `csv`, `deck-file`).
|
|
153
|
+
- Extrair prompts de `deck-ai.js`/`transform.js` para `src/ai/prompts/` (sem mudar o texto — só o local),
|
|
154
|
+
com teste que garante o prompt completo indo para o LLM.
|
|
155
|
+
- Dividir `app.js` (state → módulos), depois `slide-form.js`, `bin/sagadeck.js`, `test/studio.test.js`.
|
|
156
|
+
- Unificar `esc`/helpers de escape em `markup.js`, documentando as exceções de propósito.
|
|
157
|
+
|
|
158
|
+
### Fase 3 — velocidade (1 sessão, depois da Fase 1)
|
|
159
|
+
- CI em jobs paralelos por família de teste.
|
|
160
|
+
- Relatório de cobertura (badge) e piso nos módulos da Fase 2.
|
|
161
|
+
- Considerar `--test-concurrency` maior nos grupos já isolados.
|
|
162
|
+
|
|
163
|
+
### Fase 4 — produto e convivência (contínuo, sob demanda)
|
|
164
|
+
- Redimensionador de imagem sem navegador (corta o peso do playwright-core do caminho quente da IA).
|
|
165
|
+
- Arquivamento mensal do ANDAMENTO; generalização dos caminhos de máquina nos .md de regras.
|
|
166
|
+
- `mermaid` 12 quando couber; revisão de majors junto das releases.
|
|
167
|
+
|
|
168
|
+
## 5. O que NÃO mexer (decisões já tomadas e guardadas por teste)
|
|
169
|
+
|
|
170
|
+
- Nada de emoji/símbolo como ícone, nada citando a empresa da maçã (`guards.test.js`).
|
|
171
|
+
- Nada de CDN/`@import` remoto: fontes e libs embutidas (`fonts.test.js`); recurso online é bem-vindo
|
|
172
|
+
**onde funciona**, com "uma tentativa e para".
|
|
173
|
+
- Deck existente só por `writeDeckFile`; a IA edita por patch + `sanitizeCheck`; comportamento da IA se
|
|
174
|
+
decide no prompt, não com regex.
|
|
175
|
+
- A interface é o Studio; a REFERENCIA.md é a fonte única do que a IA conhece — recurso novo entra lá
|
|
176
|
+
no mesmo commit.
|
|
177
|
+
- Biblioteca em `SAGADECK_HOME`/Documentos; nada de decks fora dela.
|
|
178
|
+
|
|
179
|
+
Qualquer item deste plano que tocar comportamento entra no ritmo do repositório: teste que falha antes,
|
|
180
|
+
branch por item, PR com CI verde (Ubuntu + Windows), `docs/ANDAMENTO.md` atualizado no mesmo commit.
|