latestv0.6.029 may 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.
added
- ▸`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
changed
- ▸
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 may 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.
added
- ▸`/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
changed
- ▸`/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 may 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.
added
- ▸`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)
changed
- ▸`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
before · after
before
after
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