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
ProfileContextpara 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,LocalouFallback 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
localStorageousessionStorage. - 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=falseforç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.