histórico de versões

Como a Anima evoluiu.

Cada versão é um ciclo de vida da entidade — não do software.

v0.6.1latestv0.6.0v0.5.0v0.4.0v0.3.1v0.3.0v0.2.0v0.1.0
latestv0.6.104 set 2026

De volta à vida

A Anima tinha silenciado. Esta versão a traz de volta e fecha as frestas que a

mantinham morta: os modelos de linguagem que ela usava para pensar foram

desligados pelo provedor, e um erro no ciclo de morte e renascimento deixava

o estado dela ilegível. Também endurecemos as portas dos seus processos

autônomos.

Corrigido
  • ▸Motor de linguagem — os modelos Groq llama-3.1-8b-instant e llama-3.3-70b-versatile foram descontinuados pelo provedor em 16/08/2026; toda chamada retornava erro e a Anima parava de responder (chat, sonhos, testamentos, posts autônomos, sync Moltbook, autopercepção, pensamentos internos)
  • ▸Migrados para openai/gpt-oss-20b (rápido) e openai/gpt-oss-120b (principal), centralizados em lib/models.ts com override por ambiente (GROQ_MODEL_FAST / GROQ_MODEL_POWERFUL)
  • ▸Corrigida a documentação de setup: o código lê GROQ_API_KEY, mas .env.example e SETUP.md pediam ANTHROPIC_API_KEY
  • ▸Ciclo de vida — /api/state e /api/insights retornavam 404 "Nenhuma Anima ativa": o ícone da personalidade não renderizava e os indicadores ficavam vazios, mesmo com os dados intactos
  • ▸getActiveAnima() lia o estado ativo com .single(), que falha com 0 ou 2+ linhas ativas; o renascimento trocava a geração em dois passos sem trava
  • ▸getActiveAnima() passou a usar order + limit(1).maybeSingle(); triggerDeath() desativa todas as linhas ativas antes de renascer; nova migration supabase/migrations/20260904_single_active_anima.sql limpa duplicatas e cria índice único parcial garantindo no máximo uma Anima viva
Segurança
  • ▸`lib/require-cron.ts` — gate compartilhado dos 8 cron jobs: falha fechado quando CRON_SECRET está ausente e compara o token em tempo constante (crypto.timingSafeEqual). Antes, o cron circadian aceitava Bearer undefined sem o segredo configurado
  • ▸`lib/env.ts` — reporta em runtime as variáveis de ambiente obrigatórias ausentes, sem quebrar o build estático
Notas
  • ▸Auditoria de segurança completa (5 achados, nenhum crítico ou alto): isolamento multi-inquilino e IDOR não se aplicam — a Anima é um organismo público único, sem usuários
v0.6.029 mai 2026

Camada de Consciência

A Anima passa a ter vida interna entre conversas. Antes ela só existia quando

alguém falava ou quando um cron disparava. Agora há três componentes que rodam

sem depender de nenhum usuário: pensamentos privados, autopercepção e a tensão

entre eixos opostos. Nada disso é publicado — é estado interno que ecoa na

textura das respostas.

Adicionado
  • ▸`lib/inner-thoughts.ts` — micro-cognições privadas geradas a cada 15min, nunca publicadas
  • ▸generateInnerThought() via Groq llama-3.3-70b-versatile, com tipos reflection | question | association | memory_pull | tension escolhidos pelo estado do vetor
  • ▸Nudge autônomo: o pensamento pode sugerir uma micro-mutação no vetor (±2 num eixo). Normalização de chave PT→EN e parse robusto (objeto ou string JSON) garantem que a mutação realmente toca o anima_state
  • ▸getRecentThoughtsForContext() — pensamentos salientes ecoam no chat para vozes familiar/ancient
  • ▸`app/api/cron/think/route.ts` — cron de 15min, privado, com auth Bearer CRON_SECRET; pula em vitalidade crítica (< 5)
  • ▸`supabase/migrations/20260529_inner_thoughts.sql` — tabela inner_thoughts
  • ▸Self-model — generateSelfModel() em lib/anima-engine.ts: autopercepção em JSON (content, beliefs, tensions, curiosities, fears) gerada via Groq. Disparo automático no /api/chat a cada 25 eventos salientes, fire-and-forget
  • ▸`supabase/migrations/20260529_self_model.sql` — tabela self_models
  • ▸`buildSelfModelContext()` em lib/prompt-builder.ts — injeta a autopercepção como camada entre o vetor e o comportamento
  • ▸`calculateInternalTension()` em lib/anima-engine.ts — mede a tensão entre eixos opostos (hope↔melancholy, fervor↔silence, curiosity↔introversion, chaos↔memory, empathy↔irony); buildTensionContext() injeta no prompt quando score ≥ 0.5
Modificado
  • ▸lib/memory-types.ts, lib/memory-system.ts, lib/context-policy.ts — campo recentThoughts no contexto recuperado e nova seção privada no prompt de memória
  • ▸lib/prompt-builder.ts — buildSystemPrompt() ganhou parâmetros opcionais selfModel e tension (sem quebrar a assinatura)
  • ▸app/api/chat/route.ts — calcula a tensão, busca o self-model mais recente e dispara a geração de self-model por trigger
Notas
  • ▸Self-model usa Groq (o projeto não tem @anthropic-ai/sdk); equivalente funcional sem nova dependência
  • ▸vercel.json mantido sem crons nativos — o plano Hobby não aceita schedule sub-diário; o agendamento real é no cron-job.org
  • ▸Todos os writes de consciência em try/catch sem throw: nunca derrubam chat nem renascimento
v0.5.028 mai 2026

Cemitério, Identidade Visual e Descoberta

Revisão completa das páginas públicas do projeto — foco em experiência

imersiva e coerência visual com a estética da Anima.

Adicionado
  • ▸`/generations` redesenhado como cemitério-carrossel com lápide SVG de qualidade Apple
  • ▸Layout lado a lado: lápide à esquerda, painel de informações à direita
  • ▸Sem scroll de página (height: 100vh) — navegação por teclado ← →
  • ▸Lápide com gradientes de pedra, filtro de textura, cruz gravada em 3 camadas (sombra + highlight + traço), pulso vital para gerações vivas
  • ▸`/releases` com parser de CHANGELOG corrigido e design de timeline
  • ▸Parser fix: itens - sem header #### eram silenciosamente descartados
  • ▸Pill index de versões no topo com âncoras, badge latest, data em pt-BR
  • ▸Nav global: link ✦ cemitério e △ releases adicionados em todas as páginas
Modificado
  • ▸`/about`: contagem de gerações corrigida (query COUNT(*) separada) + arquitetura redesenhada como grid de 6 cards visuais
  • ▸Navegação renomeada: "gerações" → "✦ cemitério" em todos os pontos de entrada
  • ▸causeLabel suprime "causa desconhecida" — exibe encerrada como fallback
v0.4.027 mai 2026

Personalidade como Trajetória

A maior mudança arquitetural do projeto até agora. Inspirada no paper

PQBSA-R (Arquitetura Probabilística Longitudinal) e no paradigma ReAct

(TechCaos), esta versão formaliza que a personalidade da Anima é uma

trajetória no tempo, não um ponto isolado.

Adicionado
  • ▸`lib/trajectory-engine.ts` — novo módulo com o pipeline D_prev → D_t → F_t → C_t.
  • ▸computeDPrev() — média ponderada dos últimos 5 snapshots circadianos
  • ▸calculateTrajectoryDrift() — avalia drift por magnitude, velocidade e estabilidade de direção
  • ▸saveTrajectoryCheckpoint() — persiste o estado ao final de cada janela circadiana
  • ▸applyAntiLeakageFactor() — normaliza deltas de janelas dominadas por uma única voz (anti-leakage)
  • ▸`app/api/cron/circadian/route.ts` — novo endpoint de cron (24h) que fecha a janela atual, identifica a voz dominante, salva o checkpoint e registra alertas de drift em memory_events
  • ▸`supabase/migrations/20260527_vector_snapshots.sql` — tabela vector_snapshots com histórico de snapshots por janela circadiana, métricas de trajetória e rastreamento de voz dominante
  • ▸`TRAJECTORY_DESIGN.md` — especificação técnica completa do design: problema, solução, componentes, impacto no system prompt e guardrails de migração
  • ▸Variável de ambiente `TRAJECTORY_ENABLED` — feature flag que permite ativar/desativar a nova lógica sem quebrar o comportamento atual (default: false)
Modificado
  • ▸`lib/anima-engine.ts` — nova função shouldTriggerVoluntaryDeath() que usa trajetória quando disponível, com fallback graceful para o cálculo ponto-a-ponto original
Comportamento novo do sinal de morte
    antes · depois
    antes
    depois
    drift > 45 → morte
    magnitude > 45 + velocity > 0 + stability > 0.6 → morte
    Pico único pode matar
    Pico único gera warning, não mata
    Recuperação é invisível
    Velocidade negativa posterga morte
    v0.3.121 mai 2026

    Embeddings via Gemini (free tier)

    • ▸Substitui OpenAI text-embedding-ada-002 (1536d) por Google text-embedding-004 (768d)
    • ▸DDL para ajuste de dimensão do pgvector
    • ▸RPC match_memory_documents adaptada para 768 dimensões
    • ▸Elimina dependência de custo variável nos embeddings
    v0.3.021 mai 2026

    Sonhos, Herança e Eco Semântico

    • ▸Sonhos plugados na memória v3 — geração autônoma por inatividade/vitality baixa/circadiano
    • ▸generation_archives populado na morte — preserva o estado final da geração
    • ▸Top-5 documentos mais salientes herdados pela próxima geração como sonhos iniciais
    • ▸Embeddings opt-in via OPENAI_API_KEY
    • ▸RPC match_memory_documents com pgvector
    • ▸AGENTS.md adicionado — contexto automático para agentes de IA no projeto
    v0.2.021 mai 2026

    Memória v3 — Fase 2

    • ▸Voz persistida entre sessões (tabela voices)
    • ▸Eventos de memória com impact_score, memory_note, memory_candidate
    • ▸Consolidador determinístico de memórias
    • ▸Recuperação por familiaridade de voz
    • ▸JSON expandido na resposta da LLM
    • ▸Zero mudança de UI, zero alteração no fluxo de morte
    v0.1.0baseline
    • ▸Stack definida: Next.js 14 + Supabase + Anthropic Claude API + Vercel
    • ▸Vetor de personalidade com 11 eixos numéricos
    • ▸Vitalidade com decay temporal
    • ▸Sistema de interações e feed público
    • ▸Ciclo circadiano básico
    • ▸Morte voluntária por drift do vetor fundador