@luanpdd/kit-mcp 1.2.0 → 1.3.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/CHANGELOG.md +119 -0
- package/package.json +1 -1
- package/src/ui/static/index.html +1615 -532
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,125 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) · Versioning:
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [1.3.0] - 2026-05-05
|
|
10
|
+
|
|
11
|
+
UI redesign completo entregue por handoff do Claude Design (claude.ai/design). Layout repensado, paleta OKLCH, painel de tweaks (acento/densidade/movimento) acessível, timeline com rail + nó por evento, hero card de active runs com borda cônica animada e barra com gradient + shimmer, empty state com heartbeat bars, e cenários de demo (`Sync` / `Multi` / `Erro` / `Idle`) mockáveis pelo painel de tweaks.
|
|
12
|
+
|
|
13
|
+
### Adicionado — design
|
|
14
|
+
|
|
15
|
+
- **Tokens OKLCH** com hue do acento configurável (padrão `130` — lima/verde). Trocas em runtime via tweaks panel: 6 swatches (lima, azul, roxo, laranja, magenta, ciano).
|
|
16
|
+
- **Tema dark é puro `#000` no fundo**, com surfaces escalonados (`#0b0d10`, `#11141a`, `#171b22`). Light mode preservado via `prefers-color-scheme` (não é o default).
|
|
17
|
+
- **Layout shell** centralizado em 980px. Header (logo + brand + conn pill), toolbar (search com atalho `/`, filter popover, pause, tweaks), main (active region + timeline + empty), footer (counts + last-seen).
|
|
18
|
+
- **Hero card de active run**: ícone do tool family (sync/reverse/gates), título humanizado, tool id em mono cinza, elapsed badge à direita (vira `--warn` após 30s), barra com gradient OKLCH + shimmer linear infinito, caption do passo atual em pill com glyph spinning, run id chip em mono. Borda cônica animada (`@property --ang`) anuncia "rodando".
|
|
19
|
+
- **Multi-run stacking**: quando há 2+ runs simultâneos, `active-region[data-count]` reduz padding/font-size dos cards pra caber sem rolagem.
|
|
20
|
+
- **Timeline com rail**: coluna de tempo relativo (`agora`, `há 5s`, `há 2m`), rail vertical pontilhado conectando os nós, nó colorido por tipo (verde pra `run.start`, vermelho pra `error`, etc). Eventos do mesmo `runId` consecutivos viram `data-grouped="true"` (visualmente sub-eventos).
|
|
21
|
+
- **Empty state com `empty-viz`**: 13 barras animadas em onda heartbeat enquanto aguarda o primeiro evento.
|
|
22
|
+
- **Tweaks panel** flutuante (canto inferior direito, dialog acessível): paleta de acento, densidade (compacta / normal / confortável), movimento (sutil / médio / rico), e cenário mock (sync/multi/error/idle) pra demos.
|
|
23
|
+
|
|
24
|
+
### Adicionado — produção
|
|
25
|
+
|
|
26
|
+
- **Conexão real via `EventSource('/events')`** com retry nativo + `visibilitychange` que força `hydrate + reconnect` quando o tab volta a ser visível.
|
|
27
|
+
- **Hydrate inicial via `GET /state`** ANTES do connect, replayando o ring buffer pelo mesmo `ingest()` (dedup por `ts|type|runId`).
|
|
28
|
+
- **Shutdown banner** acima do main quando o servidor envia evento `shutdown`. Conn pill vai pra estado `off` com label `encerrado`.
|
|
29
|
+
- **Estados de conexão** humanizados no pill: `conectado` (verde, pulsa), `conectando`, `desconectado`, `pausado`, `encerrado`.
|
|
30
|
+
- **Mock scenarios preservados** via tweaks (mas não rodam mais em loop ao boot — `EventSource` é a fonte real). Útil pra demo offline e pra testar visualmente cada estado sem precisar disparar workflow real.
|
|
31
|
+
|
|
32
|
+
### Corrigido
|
|
33
|
+
|
|
34
|
+
- **Filter pop incluía só 5 tipos por default** — agora `tool_invocation` e `shutdown` aparecem na lista de eventos por default (sem chip de filtro, mas visíveis); evita esconder eventos importantes do servidor.
|
|
35
|
+
|
|
36
|
+
### Removido
|
|
37
|
+
|
|
38
|
+
- Helpers `pausedBuffer`/`flushPaused` da v1.2.x — o design optou por **descartar eventos durante pause** em vez de bufferizar (evita explosão de memória se user esquece pausado). Trade-off documentado.
|
|
39
|
+
- Botão "rolagem auto" — timeline rola naturalmente conforme novos eventos entram; sem toggle.
|
|
40
|
+
- Botão "limpar tela" — `clearAll()` continua disponível pelos tweaks (botão `limpar` no painel).
|
|
41
|
+
|
|
42
|
+
### Stable API ainda preservada
|
|
43
|
+
|
|
44
|
+
Todas as mudanças são apenas em `src/ui/static/index.html`. Nada em `src/core/`, `src/cli/`, `src/mcp-server/`, ou em qualquer schema MCP/CLI. Servidor (`src/ui/server.js`) intocado — endpoints `/`, `/events`, `/state`, `/healthz`, `/publish`, `/shutdown` mesmos.
|
|
45
|
+
|
|
46
|
+
Bump pra **minor** (não patch) porque a UI é experiência radicalmente diferente — usuários verão a mudança visual imediatamente.
|
|
47
|
+
|
|
48
|
+
## [1.2.3] - 2026-05-04
|
|
49
|
+
|
|
50
|
+
UI inteira agora fala português e usa termos que fazem sentido pra quem não conhece o código por dentro. Os tipos de evento técnicos viraram nomes legíveis, os caminhos absolutos viraram descrições do tipo "agente planner" / "comando novo-marco" / "skill limpeza", e o status badge da conexão agora lê "CONECTADO/CONECTANDO/DESCONECTADO".
|
|
51
|
+
|
|
52
|
+
### Adicionado — humanização de labels
|
|
53
|
+
|
|
54
|
+
- `EVENT_TYPE_LABEL` mapeia `run.start → Iniciado`, `run.end → Finalizado`, `progress → Em andamento`, `tool_invocation → Comando`, `milestone → Marco`, `error → Erro`, `shutdown → Desligado`. O `data-type` raw continua na markup (CSS de cor + filtros funcionam igual), apenas o texto exibido muda.
|
|
55
|
+
- `TOOL_LABEL` mapeia ids técnicos pra descrições amigáveis: `sync.install → Sincronizando kit`, `reverse-sync.apply → Importando edições do IDE`, `gates.run → Executando gate`, `sync.watch → Vigiando kit (watch)`, `sidecar → Servidor sidecar`.
|
|
56
|
+
- `STATUS_LABEL` traduz `running → em execução`, `done → concluído`, `error → erro`. Usado nos badges dos cards de active runs e no label de fade-out.
|
|
57
|
+
- `CONN_LABEL` traduz `CONNECTING → CONECTANDO`, `OPEN → CONECTADO`, `CLOSED → DESCONECTADO`.
|
|
58
|
+
- `humanizePath()` reconhece padrões comuns e devolve descrições amigáveis:
|
|
59
|
+
- `.claude/agents/planner.md` → `agente planner`
|
|
60
|
+
- `kit/commands/novo-marco.md` → `comando novo-marco`
|
|
61
|
+
- `kit/skills/limpeza/SKILL.md` → `skill limpeza`
|
|
62
|
+
- `.claude/framework/...` → `framework`
|
|
63
|
+
- `CLAUDE.md` → `manifesto CLAUDE.md`
|
|
64
|
+
- `humanizeLabel()` reconhece o padrão "verbo + caminho" comum em payloads de progresso e traduz: `writing .claude/agents/planner.md` → `criando agente planner`, `merging kit/commands/foo.md` → `mesclando comando foo`. Verbos suportados: reading, writing, projecting, merging, copying, deleting, creating, updating, syncing, applying, fetching.
|
|
65
|
+
|
|
66
|
+
### Adicionado — copy PT-BR
|
|
67
|
+
|
|
68
|
+
Toda a interface está em português:
|
|
69
|
+
- Placeholder do search: `filtrar por nome ou conteúdo…`
|
|
70
|
+
- Botões: `⏸ pausar` / `▶ retomar`, `↧ rolagem auto`, `limpar tela`
|
|
71
|
+
- Header active runs: `Em execução agora`
|
|
72
|
+
- Footer: `eventos: N`, `pausado: N em fila`, `fonte: ao vivo`
|
|
73
|
+
- Header port: `porta NNNN`
|
|
74
|
+
- Estados de timing: `há 2m 15s` (substitui `started 2m 15s`)
|
|
75
|
+
- Status do card: `em execução` / `concluído` / `erro`
|
|
76
|
+
- Fim de run: `concluído com sucesso` / `falhou` (em vez de `done` / `failed`)
|
|
77
|
+
- Início de run: `iniciando…` (em vez de `starting…`)
|
|
78
|
+
|
|
79
|
+
### Por que
|
|
80
|
+
|
|
81
|
+
A v1.2.2 tinha layout bonito mas linguagem técnica — `RUN.START`, `writing .claude/agents/example-reviewer.md`, `RUNNING`. Pra quem usa o sidecar pra primeira vez ou não conhece a arquitetura interna do kit, esses labels eram opacos. Agora o painel diz "Sincronizando kit · em execução · criando agente example-reviewer · 34/100 · 12s" em vez de jogar paths absolutos e enums no usuário.
|
|
82
|
+
|
|
83
|
+
### Sem mudanças de API
|
|
84
|
+
|
|
85
|
+
Pure UI patch, ainda. Stable API v1.0+ preservada. Sem deps novas. `data-type` no DOM continua raw (filtros e CSS não quebram). Apenas `src/ui/static/index.html` mudou.
|
|
86
|
+
|
|
87
|
+
## [1.2.2] - 2026-05-04
|
|
88
|
+
|
|
89
|
+
UX upgrade da sidecar: o feed cronológico continua, mas agora a janela mostra TAMBÉM um painel "Active runs" no topo com cards visuais pra cada execução em andamento — barra de progresso animada, percentual grande, label do passo atual, runId truncado e tempo decorrido tickando ao vivo.
|
|
90
|
+
|
|
91
|
+
### Adicionado
|
|
92
|
+
|
|
93
|
+
- **Active runs panel** em `src/ui/static/index.html` — uma `<section id="active-runs">` antes do log de eventos. Para cada `runId` ativo, renderiza um card com:
|
|
94
|
+
- Nome do tool (de `payload.tool` no `run.start`) com badge de status (running/done/error)
|
|
95
|
+
- Percentual grande (22px tabular-nums) à direita
|
|
96
|
+
- Barra de progresso 8px com transição suave + shimmer animado em estado `running`
|
|
97
|
+
- Label do passo atual (último `payload.label` ou `current/total` derivado)
|
|
98
|
+
- Footer com tempo decorrido (tick a cada 1s) + runId truncado + current/total
|
|
99
|
+
- Estado consolidado via `Map<runId, ActiveRun>`, atualizado por `run.start` (cria), `progress` (incrementa), `tool_invocation` (refina título), `run.end` (marca done, fade-out em 4s), `error` (marca erro, fade-out em 8s).
|
|
100
|
+
- Cards são **atualizados in-place** via `dataset.runid` matching — preserva a transição CSS da barra em vez de recriar o DOM a cada update.
|
|
101
|
+
- Painel some quando 0 runs ativos; aparece automaticamente quando o primeiro `run.start` chega.
|
|
102
|
+
|
|
103
|
+
### Por que
|
|
104
|
+
|
|
105
|
+
A v1.2.0 mostrava progresso, mas misturado no feed cronológico — pra saber "tô em quanto" você precisava scanar o último `progress`. O painel novo mostra o estado atual sem rolagem, com afordância visual: barra cresce, percentual sobe, shimmer anda. Quando termina, o card vira verde e some 4s depois (vermelho 8s pra erro). Pareceu "log do servidor", agora parece "process viewer".
|
|
106
|
+
|
|
107
|
+
### Sem mudanças de API
|
|
108
|
+
|
|
109
|
+
Pure UI patch. Stable API v1.0+ preservada. Sem deps novas. Apenas `src/ui/static/index.html` (~120 LOC adicionados — CSS dos cards + lógica do `upsertActiveRun` + tick interval).
|
|
110
|
+
|
|
111
|
+
## [1.2.1] - 2026-05-04
|
|
112
|
+
|
|
113
|
+
Cosmetic + UX patches descobertos durante o smoke da v1.2.0. Sem mudanças de comportamento de API.
|
|
114
|
+
|
|
115
|
+
### Corrigido
|
|
116
|
+
|
|
117
|
+
- **`eventLabel()` agora lê `payload.name`.** Eventos `milestone` que usavam `payload.name` (sem `label`) renderizavam como texto cru "milestone" em vez do nome real. Adicionado fallback `name` na cadeia de helpers no `src/ui/static/index.html`.
|
|
118
|
+
- **SSE reconecta quando o tab volta a ficar visível.** Chrome (e outros browsers Chromium) throttla timers em background tabs, podendo suspender o retry interno do `EventSource` e deixar a conexão presa em `CLOSED` mesmo depois do `kit ui` voltar. Adicionado listener `visibilitychange` que faz `hydrateFromState() → connect()` quando o tab volta a `visible` e o status atual é `CLOSED`. Re-hidrata o ring buffer pra mostrar eventos que chegaram durante o gap.
|
|
119
|
+
|
|
120
|
+
### Sem mudanças de API
|
|
121
|
+
|
|
122
|
+
`v1.2.0 → v1.2.1` é puro patch:
|
|
123
|
+
- Stable API v1.0+ preservada
|
|
124
|
+
- Sem deps novas (deps em 6/6)
|
|
125
|
+
- Sem mudança em `src/core/`, `src/cli/`, `src/mcp-server/`, ou em qualquer schema MCP/CLI
|
|
126
|
+
- Apenas `src/ui/static/index.html` recebeu ~10 LOC
|
|
127
|
+
|
|
9
128
|
## [1.2.0] - 2026-05-04
|
|
10
129
|
|
|
11
130
|
**GUI sidecar de acompanhamento.** Janela web localhost paralela mostra ao vivo (via Server-Sent Events) o que kit-mcp está fazendo enquanto sua IDE chama tools — `sync install`, `reverse-sync apply`, `gates run`. Sidecar é totalmente opt-in: quem não invoca `kit ui` continua com a experiência v1.1 idêntica.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luanpdd/kit-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Generic infrastructure to ship YOUR personal kit of agents/commands/skills as an MCP server, with cross-IDE sync (Claude Code, Cursor, Codex, Gemini, Windsurf, Antigravity, Copilot, Trae).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|