Skip to content

Arquitetura

O gitscribe é um pipeline: ler commits, classificá-los, agrupá-los, depois renderizar — de forma determinística ou via um LLM local. O agrupamento acontece antes do LLM, por isso o modelo reescreve uma lista limpa em vez de commits em bruto.

flowchart LR
  G["git log"] --> PA["parseGitLog"]
  PA --> CL["parseConventional<br/>(type · scope · breaking)"]
  CL --> GR["groupCommits"]
  GR --> DEC{"--model?"}
  DEC -- não --> TPL["renderMarkdown<br/>(template)"]
  DEC -- sim --> LLM["Ollama<br/>(buildPrompt → generate)"]
  TPL --> OUT["release notes"]
  LLM --> OUT

Mapa de módulos

Módulo Responsabilidade
git.ts Ler commits via um git log delimitado; parseGitLog (puro)
conventional.ts Parsear Conventional Commits e agrupar por tipo
render.ts Changelog markdown determinístico (offline)
llm.ts buildPrompt (puro) + OllamaClient
generate.ts Escolher template vs LLM

Princípios de design

  • Offline por defeito — o modo template é determinístico e sem dependências (ideal para CI).
  • LLM como polimento, não fonte — o modelo vê commits categorizados, por isso não inventa features.
  • Núcleo testável — parsing, agrupamento e render são puros; git/Ollama são adaptadores finos.