Pular para conteúdo

v1.8.1 - AI Wishlist, Radar Stability & Profile Context Prep

A v1.8.1 melhora o Radar de Vagas sem transformar o SotuHire em automação de candidatura. O foco é criar uma wishlist estruturada a partir de texto livre, preparar contexto profissional universal e deixar a experiência do Radar mais previsível no modo Demo e no modo API Real.

Objetivo da versão

  • transformar texto livre em rascunho de wishlist revisável;
  • permitir IA opcional para sugerir campos da wishlist;
  • manter fallback local multiárea quando IA estiver desligada ou indisponível;
  • preparar o ProfileContext para uma versão futura de Perfil Profissional Universal;
  • ampliar controles de IA por funcionalidade;
  • reforçar que scores, validações e persistência continuam no backend/core.

O que foi implementado

Wishlist com IA

Novo endpoint:

POST /api/v1/radar/wishlists/draft

Entrada:

{
  "free_text": "Sou estudante de engenharia e procuro estágio híbrido...",
  "use_profile_context": true,
  "language": "pt-BR",
  "profile_context_override": null
}

Saída segura:

{
  "wishlist": {},
  "confidence": 0.74,
  "detected_domains": ["Engenharia"],
  "detected_career_moments": ["estágio"],
  "assumptions": [],
  "questions_to_confirm": [],
  "warnings": [],
  "needs_user_review": true,
  "provider_used": "local",
  "analysis_mode": "local"
}

A resposta nunca salva a wishlist automaticamente. A pessoa revisa e edita antes de clicar em Salvar wishlist.

Prompt Registry

Foi registrado o prompt job_wishlist_builder_v1. Ele exige:

  • JSON estruturado;
  • revisão humana obrigatória;
  • separação entre fato, inferência e pergunta;
  • proibição de inventar formação, experiência, certificação, registro profissional, conselho ou licença;
  • suporte a múltiplas áreas, não apenas tecnologia.

Fallback local multiárea

modules/radar/wishlist_draft.py cria rascunhos locais com sinais conservadores para áreas como:

  • saúde;
  • direito;
  • engenharia;
  • educação;
  • artes e design;
  • pesquisa e laboratório;
  • tecnologia e dados;
  • administração e operações;
  • turismo e serviços.

Isso evita que o Radar dependa de Gemini para funcionar.

ProfileContext prep

Foram criados:

modules/profile/context.py
modules/profile/orchestrator.py

O contexto é genérico e evidencia:

  • objetivos de carreira;
  • educação;
  • experiências;
  • experiências acadêmicas;
  • projetos;
  • certificações e registros;
  • skills;
  • idiomas;
  • localidades;
  • preferências;
  • restrições;
  • sinais de histórico de candidaturas.

Essa preparação não implementa ainda o Perfil Profissional Universal completo. Ela apenas cria a base segura para v1.8.2.

Radar UX

Na tela /radar:

  • há uma seção Criar wishlist com IA;
  • o usuário digita o que procura;
  • pode permitir ou não contexto local do perfil;
  • o frontend mostra badge IA, Local ou Fallback local;
  • suposições, avisos e perguntas aparecem antes do salvamento;
  • o formulário da wishlist é preenchido de forma editável;
  • o botão Rodar radar agora fica desabilitado sem fonte ativa;
  • erros de fonte aparecem no card da fonte;
  • a execução do Radar pode solicitar explicação com IA, mas mantém fallback local.

Controles de IA por funcionalidade

/settings agora expõe controles para:

allow_resume
allow_job
allow_match
allow_ats
allow_tailor
allow_github
allow_source_import
allow_radar
allow_memory_context

A API key continua backend-side e não retorna ao frontend.

Limites de segurança

  • Nenhum score final é calculado no frontend.
  • Nenhuma wishlist é salva automaticamente.
  • Nenhuma API key é salva em localStorage ou sessionStorage.
  • Nenhum segredo retorna ao frontend.
  • Nenhum fluxo de authenticated browser, Chromium/CDP, crawler logado, cookie, token, sessão, CAPTCHA ou auto-apply foi alterado.
  • Fontes públicas e feeds continuam com revisão manual.

Testes

Backend:

  • draft local por texto livre;
  • texto vazio retorna erro amigável;
  • exemplos multiárea não-TI;
  • Gemini fake com JSON válido;
  • JSON inválido faz fallback local;
  • toggle allow_radar=false força local/fallback;
  • draft não salva wishlist;
  • resposta não retorna api_key.

Frontend:

  • Radar abre;
  • textarea de wishlist com IA aparece;
  • draft mockado preenche formulário;
  • wishlist não é salva automaticamente;
  • usuário edita antes de salvar;
  • storage do navegador não recebe chave fake.

CI:

  • mantém Ruff, format check e pytest;
  • adiciona empacotamento da extensão;
  • adiciona npm ci, lint, typecheck, build e smoke E2E Chromium do frontend.

Roadmap real

  • v1.8.2: Perfil Profissional Universal, com UI própria e edição/revisão do contexto.
  • v1.9.0: agendamento local opcional do Radar e conectores oficiais documentados.
  • v2.0.0: assistente mais autônomo, sempre com aprovação manual e sem auto-apply.