Skip to content

feat: adiciona suporte ao Kimi CLI como engine#2

Open
Wellbrito29 wants to merge 3 commits intosandeco:mainfrom
Wellbrito29:feat/kimi-cli-engine
Open

feat: adiciona suporte ao Kimi CLI como engine#2
Wellbrito29 wants to merge 3 commits intosandeco:mainfrom
Wellbrito29:feat/kimi-cli-engine

Conversation

@Wellbrito29
Copy link
Copy Markdown

Resumo

Registra o Kimi CLI (kimi-cli — Moonshot AI) como nova engine no installer do reversa, permitindo que projetos que usam o kimi recebam todas as skills do reversa via npx reversa install.

Por que

O Kimi CLI é um agente de codificação para terminal (Moonshot AI) que segue convenções compatíveis com o ecossistema do reversa:

  • AGENTS.md nativamente, mesclando o conteúdo da raiz do projeto até o working directory (mesma convenção de Codex / Antigravity / Opencode)
  • Auto-descobre skills em .agents/skills/ e .kimi/skills/ (paths que o reversa já popula para outros engines)

Falta apenas registrar a engine no array ENGINES para que o usuário possa selecioná-la no installer — toda a infraestrutura de cópia de skills e merge de entry file já funciona sem modificação.

Como funciona

  • Skills: instaladas em .agents/skills/ (mesma estratégia do Codex / Opencode — auto-descoberta nativa pelo Kimi, sem duplicar arquivos)
  • Entry file: AGENTS.md na raiz. Se Codex / Antigravity / Opencode já estiverem instalados no projeto, o AGENTS.md existente é reaproveitado via askMergeStrategy do Writer.installEntryFile() — comportamento idêntico ao já praticado entre Codex e Antigravity
  • Detecção: via diretório .kimi/ no projeto OU binário kimi no PATH
  • Ativação: pelo nome do agente (reversa), igual Codex / Opencode (Kimi não tem slash commands nativos para skills project-level)

Mudanças

Arquivo Mudança
lib/installer/detector.js Nova entrada no array ENGINES + detector
README.md Linha na tabela "Supported engines"
docs/engines.md Linha na tabela + seção descritiva (EN)
docs/engines.pt.md Linha na tabela + seção descritiva (PT)
docs/engines.es.md Linha na tabela (ES)
package.json Bump 1.2.141.3.0 (minor — feature nova)

Nenhum template novo foi adicionado: o templates/engines/AGENTS.md existente é reutilizado, mantendo o repo enxuto.

Referências da documentação oficial do Kimi

  • Skills directories lista .agents/skills/ e .kimi/skills/ entre os paths auto-descobertos no nível do projeto
  • O agente default injeta AGENTS.md mesclado da raiz até o working directory como variável built-in do system prompt
  • ~/.kimi/config.toml é configuração global (não afetada por este PR)

Test plan

  • detectEngines() retorna kimi-cli com detected: true quando .kimi/ existe ou binário kimi está no PATH
  • Writer.installSkill() copia agentes do reversa para .agents/skills/<agent-id>/ corretamente (sem alteração — caminho já testado para Codex)
  • Writer.installEntryFile() cria AGENTS.md na raiz, ou aciona askMergeStrategy se já existir (sem alteração — caminho já testado para Codex / Antigravity / Opencode)
  • Manifest registra os arquivos por skill instalado (uninstall seguro)
  • Após merge: validar fluxo end-to-end com kimi instalado: kimi → digitar reversa deve carregar a skill principal a partir de .agents/skills/reversa/SKILL.md

UX final no Kimi

Após npx reversa install selecionando "Kimi CLI":

cd projeto
kimi
> reversa            # ativa o orquestrador via AGENTS.md + skill auto-descoberta

Registra o Kimi CLI (Moonshot AI) como nova engine no installer.

Por que
-------
Kimi CLI é um agente de codificação para terminal que lê AGENTS.md
nativamente (mesclando da raiz até o working directory) e auto-descobre
skills em .agents/skills/ — exatamente os mesmos paths que o Reversa já
popula. Falta apenas registrar a engine para que o usuário possa
selecioná-la no installer.

Como funciona
-------------
- Skills: instaladas em .agents/skills/ (auto-discovery nativa do Kimi,
  sem duplicar arquivos)
- Entry file: AGENTS.md na raiz (mesma convenção de Codex / Antigravity
  / Opencode). Se já existir, o Writer reaproveita via merge prompt.
- Detecção: via diretório .kimi/ no projeto OU binário kimi no PATH
- Ativação: pelo nome do agente (`reversa`), igual Codex / Opencode

Mudanças
--------
- lib/installer/detector.js: nova entrada no array ENGINES + detector
- README.md: linha na tabela de engines suportadas
- docs/engines.{md,pt.md,es.md}: linha na tabela + seção descritiva
- package.json: bump 1.2.14 -> 1.3.0
* feat(chronicler): add agent skill with before/after modes

Reintroduz o agente Chronicler (removido em v1.2.9) com escopo expandido
para fechar o ciclo de drift entre specs e código.

Modo "before <descrição-ou-arquivos>": surfacea contratos, invariantes
e regras de negócio das specs impactadas antes da mudança. Read-only.

Modo "after": detecta drift via git diff + queue de hooks (preenchida
em fases posteriores), faz 3 perguntas (por quê / breaking / contexto),
atualiza specs in-place, reclassifica confiança 🟢🟡🔴, append em
changelog do dia, mantém dashboard _reversa_sdd/drift.md.

Arquivos:
- agents/reversa-chronicler/SKILL.md (skill principal)
- references/changelog-template.md (formato das entradas)
- references/drift-rules.md (5 categorias de drift + reclassificação)
- references/drift-dashboard-schema.md (schema do drift.md + transições)
- references/queue-schema.md (protocolo hook→agente)

Regras absolutas herdadas: nunca toca código do legado, escreve apenas
em _reversa_sdd/ e .reversa/.

* feat(chronicler): register in installer and add-agent

- prompts.js: adiciona chronicler em OPTIONAL_AGENTS (checked: true)
- add-agent.js: adiciona label + completa labels de reconstructor e
  agents-help que estavam faltando no AGENT_LABELS

* chore: bump to 1.4.0-alpha.1

* feat(hooks): add engine-agnostic runner + queue protocol

Runner script invocado pelos hooks de qualquer engine (Claude, Cursor,
Kimi, Codex, Opencode). Sem deps externas — Node 18+ puro.

Responsabilidades:
- Append entrada em .reversa/chronicler-queue.json (com lockfile)
- Phase post: append stub em _reversa_sdd/changelog/YYYY-MM-DD.md
- Phase post: marca specs afetadas como pending em _reversa_sdd/drift.md
- Imprime warning no stderr quando spec de alta confiança é impactada
- SEMPRE exit 0 — nunca bloqueia a engine. Erros logados em
  .reversa/chronicler-errors.log

Lookup de specs: parseia _reversa_sdd/traceability/code-spec-matrix.md
e extrai a coluna "Spec correspondente" para cada arquivo alterado.

Detecção de payload: aceita o shape do Claude (tool_input.file_path /
tool_input.edits[].file_path), Cursor (file_path / files[]) e formatos
genéricos. Stdin ausente é tolerado (timeout 200ms).

Lock simples: cria <queue>.lock com flag wx exclusiva. Considera lock
órfão após 5s.

index.js: registry de geradores por engine — começa com Claude apenas,
demais engines vêm em fases seguintes.

* feat(hooks): claude code generator

Escreve hooks PreToolUse + PostToolUse em .claude/settings.json
(project-level, committado com o time). Matcher: Edit|Write|MultiEdit.

Identificação de hooks Reversa para remoção idempotente: command string
contém o marcador "reversa/_hooks/runner.js". Outros hooks que o
usuário tenha configurado manualmente são preservados intactos.

A ação remove() limpa tanto entries individuais quanto a chave hooks.*
inteira se não sobrar mais nada.

* feat(cli): add-hooks and remove-hooks commands

- add-hooks [--engine <id>] [--yes]: copia o runner para
  .reversa/_hooks/runner.js (project-local, sem estado global),
  chama o gerador da engine, mostra preview do que vai escrever,
  pede confirmação explícita, escreve, registra em
  state.created_files para uninstall limpo.

- remove-hooks [--engine <id>] [--all] [--yes]: chama o remove()
  do gerador (preserva hooks não-Reversa via marcador no command).
  Se nenhum engine ainda usa hooks, remove o runner também.

- uninstall.js: integra HOOK_GENERATORS — antes de deletar arquivos
  rastreados, chama gen.remove() em cada engine para strippar hooks
  Reversa de configs compartilhadas (.claude/settings.json) sem
  deletar o arquivo inteiro do usuário.

- bin/reversa.js: registra os 2 comandos novos + atualiza --help

* chore: bump to 1.4.0-alpha.2

* feat(hooks): cursor, kimi cli, codex and opencode generators

Adiciona 4 geradores ao registry, totalizando 5 engines com hooks
automáticos do Chronicler.

- cursor.js: .cursor/hooks.json com afterFileEdit (matcher **/*).
  Filter por marcador no command — preserva hooks do usuário.

- kimi.js: .kimi/config.toml (project) ou ~/.kimi/config.toml (global)
  com [[hooks]] PreToolUse + PostToolUse. Seção bracketada por marcadores
  >>> reversa-chronicler hooks >>>. Backup obrigatório antes de editar
  config global. Tooling do Kimi suporta múltiplos [[hooks]] empilhados.

- codex.js: .codex/hooks.toml com [[hook]] PreToolUse + PostToolUse
  matcher apply_patch (formato esperado da release GA). Mesma estratégia
  de marcador que kimi.

- opencode.js: plugin JS em .opencode/plugins/reversa-chronicler.js.
  Plugin spawna o runner via child_process nos eventos
  tool.execute.before/after. Arquivo inteiro é owned by Reversa
  (criado/deletado, sem merge).

Bump alpha.2 → alpha.3.

* feat(cli): drift-check command for CI gating

CLI standalone para integração com pipelines de CI. Engine-agnostic e
sem dependências externas (não carrega chalk, inquirer ou agent code).

Lê _reversa_sdd/drift.md, conta status na coluna Status, exit code útil:
- 0: clean (zero pending no severity escolhido)
- 1: drift detectado
- 2: drift.md ausente (projeto não inicializado)

Severity:
- high (default): só pending bloqueia
- medium: pending + stale bloqueiam
- low: nunca bloqueia, só reporta

Format:
- text (default): legível por humano, dica de fix
- json: parseável por CI tooling

Detecta output_folder via .reversa/state.json se existir; fallback para
_reversa_sdd. Override via --folder.

Bump alpha.3 → alpha.4.

* docs: add chronicler agent documentation (3 langs)

- docs/agentes/cronista.{md,pt.md,es.md}: doc completa do agente
  (modos before/after, regras de drift, reclassificação de confiança,
  outputs, integração com outros agentes, trigger manual vs auto)
- docs/agentes/index.{md,pt.md,es.md}: linha do Chronicler na tabela
  de agentes opcionais

* docs: add hooks and drift-check guides + cli/nav updates

- docs/hooks.{md,pt.md,es.md}: guia de add-hooks/remove-hooks por
  engine, garantias de segurança, integração CI, diagrama de fluxo
- docs/drift-check.{md,pt.md,es.md}: referência completa do CI gate
  (severity, format, exit codes, exemplos GitHub Actions/GitLab/git hook,
  schema JSON)
- docs/cli.{md,pt.md,es.md}: adiciona seções dos 3 comandos novos
- mkdocs.yml: nav nova "Drift loop" com hooks + drift-check, listagem
  do Chronicler na seção Agents (3 idiomas via nav_translations)

* docs(readme): cleanup obsolete refs + drift loop section

- Remove menções a "Tracer" — agente removido em v1.2.9
- Substitui linha do antigo "Chronicler v1.0" pelo escopo expandido v2.0
- Adiciona Reconstructor na tabela de Optional agents (faltava)
- Substitui dynamic.md (output do Tracer) por changelog/ + drift.md no
  diagrama de _reversa_sdd/
- Nova seção "## Drift loop" explicando o ciclo completo (manual /
  automático / enforced) com diagrama
- CLI commands inclui add-hooks, remove-hooks, drift-check

* chore: bump to 1.4.0
Resolve conflito de versão: bump para 1.5.0 (Chronicler 1.4.0 + Kimi CLI engine).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant