Release notes

PathOfAIBuilding v1.1.5

Patch de recuperação de contexto: uma explicação ao redor de uma solicitação válida não deixa mais o chat em erro.

Data
23 de julho de 2026
Base
PoB Community dev
Árvore
3.29 · standard e Ruthless
Plataforma
Windows · Wine/Proton
Licença
MIT · aplicativo grátis

Preço: o aplicativo é gratuito e open source. A API de IA configurada pelo usuário pode ter custo próprio.

V1.1.5 — recuperação de contexto

A bridge continua a conversa quando o modelo pede dados adicionais de forma válida, mas adiciona uma explicação ao redor do bloco.

  • Recuperação
    Um único bloco <context_request> válido agora é aceito mesmo com prosa antes ou depois; a prosa é descartada e a pergunta é repetida com o contexto pedido.
  • Segurança
    Qualquer marcador de <actions> junto da solicitação continua bloqueando a resposta antes de qualquer alteração no build.
  • Limite
    Blocos duplicados, JSON inválido e escopos fora do catálogo seguem rejeitados.
  • Teste
    Regressões cobrem uma resposta com texto ao redor do contexto, blocos duplicados e mistura de ações.

V1.1.4 — ações de gemas canônicas

Uma recomendação de minion não perde mais todo o lote porque o modelo pluralizou uma gema que o PoB conhece no singular.

  • Contexto
    Perguntas sobre skills, minions, summons e invocadores recebem o catálogo de gemas canônicas do PoB.
  • Contrato
    A IA deve usar os nomes exatos de state.reference.gemNames em add_skill e set_main_skill.
  • Compatibilidade
    A bridge converte uma variação singular/plural apenas quando há um único nome canônico possível, antes do preflight.
  • Teste
    Regressões cobrem um starter de minions até o nível 30 e Summon Raging Spirits convertido para Summon Raging Spirit.

V1.1.3 — robustez do chat de IA

A sessão continua utilizável quando o transporte ou a resposta do modelo fogem do caminho esperado.

  • Transporte
    A bridge detecta quando a request ou o teste de conexão não conseguem iniciar e devolve um erro imediato, liberando nova tentativa.
  • Ações
    Blocos <actions> aceitam maiúsculas e espaço nas tags, mas JSON incompleto, inválido, duplicado, objeto ou com conteúdo extra é rejeitado com mensagem visível.
  • Stream
    Uma resposta animada é concluída antes de uma resposta rápida posterior substituir o cursor do stream; nenhuma resposta anterior fica em branco.
  • Cobertura
    Regressões cobrem transporte que não inicia, exceção durante a resposta, tags e JSON de ações malformados, proposta pendente e follow-up imediato.

V1.1.2 — correção de propostas não aplicadas

Uma nova solicitação de correção não presume que a proposta anterior foi aplicada. O estado serializado do PoB continua sendo a fonte de verdade.

  • Contexto
    A bridge informa explicitamente à IA que a proposta anterior não foi aplicada e exige um novo bloco <actions> para correções ou substituições.
  • UI
    As ações da resposta nova substituem a proposta anterior; o botão Apply volta a representar somente o lote atual.
  • Segurança
    O build não muda durante a conversa: qualquer lote continua exigindo Apply explícito do jogador.
  • Teste
    Regressão cobre uma proposta de nível 98 corrigida para nível 97, sem tocar no build antes da aplicação.

V1.1.1 — opções genéricas por provider

A configuração de IA deixa de depender de condicionais por modelo: o usuário informa opções extras do endpoint OpenAI-compatible diretamente no PoB.

  • Config
    AI Setup agora expõe Extra request options (JSON), persistido em ai_config.json.
  • Bridge
    As opções validadas seguem para o teste de conexão e para toda conversa; não há branch específica para MiniMax ou outro provider.
  • Safety
    model, messages e stream permanecem controlados pela bridge para preservar o contrato do chat.
  • MiniMax
    Para respostas diretas do M3, use {"thinking":{"type":"disabled"}} no novo campo.

V1.1.0 — suporte à árvore 3.29

Atualização de compatibilidade com a árvore passiva atual do PoE 1, integrada do branch dev do Path of Building Community.

  • Tree
    Adicionadas TreeData/3_29 e TreeData/3_29_ruthless, incluindo tree.lua, sprites, texturas e assets de passive tree.
  • Default
    GameVersions.lua registra 3.29 standard e Ruthless; latestTreeVersion agora resolve para 3.29 em novas builds.
  • Import
    Mapeamentos de import/export passam a reconhecer a versão 3.29 e a variante Ruthless.
  • Tree UI
    O carregamento de sprites da árvore aceita o formato de coordenadas usado pelos dados 3.29; a UI também reconhece a ascendência Luminary ao importar personagens.
  • Sync
    Sincronizados os commits upstream posteriores à V1.0, incluindo correções de cálculo, comparação, importação e atualização do runtime SimpleGraphic.
  • AI
    A aba AI, configuração local, preflight e guards da V1.0 foram preservados durante o merge upstream.

V1.0.0 — integração de IA

Histórico técnico da primeira release pública. As seções abaixo descrevem a arquitetura, validações e limitações que continuam vigentes na V1.1.

Integração e interface

  • Added
    Classes/AIChatTab.lua como novo Build.viewMode == "AI", registrado ao lado da aba Compare em Modules/Build.lua.
  • Added
    Botão global AI Setup/AI Ready em Modules/Main.lua, abrindo AIConfigPanel pelo sistema nativo de popups do PoB.
  • Added
    Chat com mensagens user, assistant e system, campo multiline, envio por Enter e três prompts rápidos.
  • Changed
    Requests executadas em subprocesso Lua por LaunchSubScript; a thread de desenho do PoB permanece responsiva.
  • Added
    Resposta recebida integralmente pelo callback HTTP e exibida por revelação progressiva local em AIChatTab:UpdateStream(). Não é streaming de tokens da API.
  • Note
    Histórico é apenas da sessão: AIChatTab:Load() não restaura mensagens e Save() não grava o chat no build.
  • Guard
    AIBridge.pending e AIChatTab.pending limitam a integração a uma request simultânea.

Serialização e contexto do build

  • Added
    AIBridge:SerializeBuild() gera um payload JSON versionado (version = 1) com meta, stats, items, skills e tree.
  • Added
    Serialização dos valores reais de calcsTab.mainOutput: DPS, EHP, vida, ES, mana, ward, armour, evasion, resistências, regen, leech, block, suppression, atributos, DoT, cinco Max Hits e estatísticas de minions quando presentes.
  • Added
    Itens equipados são enviados por slot com nome, rarity, base e Item:BuildRaw(); skills incluem grupo, slot, nível, qualidade, estado, suporte e skillPart.
  • Added
    Árvore serializa IDs alocados, notables, keystones, sockets, joias, masteries e pontos. Candidatos opcionais são limitados aos 50 notables/keystones alcançáveis mais próximos por node.path.
  • Changed
    ClassifyQuestion() roteia contexto por intenção. Os escopos opcionais são gems, uniques, tree e config; catálogos grandes não entram em toda request.
  • Added
    Escalonamento estruturado por <context_request>. O modelo pode pedir uma única ampliação de contexto; a resposta não pode misturar pedido de contexto com <actions>.
  • Changed
    Histórico recente limitado por HISTORY_CHAR_BUDGET = 12000; mensagens antigas são removidas por pares antes da montagem do request.
  • Guard
    Fingerprint do estado: SHA-1(tostring(build) .. "\0" .. build:SaveDB()). Mudanças durante a resposta invalidam request, caches e Apply.

API e transporte HTTP

  • Added
    Cliente para APIs OpenAI-compatible. O endpoint configurado recebe o sufixo /chat/completions após remoção de barras finais.
  • Added
    Payload principal: model, array messages, max_tokens = 2048 e temperature = 0.3.
  • Added
    Teste de conexão separado com prompt mínimo, max_tokens = 16 e temperature = 0.
  • Changed
    launch:DownloadPage() ganhou suporte a body POST e timeout; usa lcurl.safe, compressão HTTP, redirects e callback assíncrono.
  • Changed
    Timeout total configurável entre 1 e 600 s, padrão 120 s; connect timeout é min(timeout, 10).
  • Guard
    Resposta exige HTTP 200, body não vazio e JSON com choices[1].message.content; erros de transporte e shape retornam ao painel.

Simulações e shortlists

  • Gems
    ComputeGemShortlist() testa suportes não legacy e ainda não linkados no grupo principal, em level 20/quality 0, usando ProcessSocketGroup() + BuildOutput().
  • Guard
    Cada suporte temporário é removido mesmo quando a simulação lança erro. O output original é reconstruído ao final; somente ganhos positivos entram no top 10.
  • Uniques
    ComputeUniqueShortlist() pré-seleciona até 40 candidatos por tipo de item: 30 por afinidade com skill/defesas e 10 amostras determinísticas da cauda.
  • Changed
    Únicos são calculados sem equipar no build por GetMiscCalculator() com repSlotName/repItem. O ranking preserva até três objetivos por slot: balanced, DPS e EHP.
  • Added
    Resultados de gems e uniques são cacheados pelo fingerprint exato do build e invalidados em qualquer mudança ou Apply.
  • Added
    Menções a gem, unique ou passive na resposta anterior alimentam lookup detalhado na pergunta seguinte.
  • Scope
    Shortlists são amostras calculadas, não prova exaustiva de todas as combinações do jogo.

Protocolo de ações — 18 tipos

Ações são emitidas como JSON dentro de <actions>[...]</actions>. A ordem do array é preservada.

  • set_levelinteiro de 1 a 100
  • set_classclasse por nome
  • set_ascendancyascendência principal por nome
  • set_secondary_ascendancyascendência secundária da liga
  • set_banditNone, Oak, Kraityn ou Alira
  • set_pantheonmajor e/ou minor
  • add_skillnovo socket group com gems
  • remove_skillgrupo por label ou nome de gem
  • set_main_skillgrupo/skill principal
  • set_skill_partpart index positivo
  • equip_itemraw item text e slot opcional
  • equip_jewelraw jewel e nodeId opcional
  • alloc_nodenode ID ou nome; usa o path do PoB
  • dealloc_nodenode ID ou nome
  • set_masteryeffect index ou substring do texto
  • apply_tattoonode + nome exato da tattoo
  • remove_tattoonode ID ou nome
  • set_configchave existente + boolean/number

Validação, preflight e Apply

  • Validate
    ParseActions() usa dkjson; o lote deve ser array denso, não vazio, sem gaps, com um dos 18 tipos e shape válido para cada ação.
  • Snapshot
    Antes do preview, build:SaveDB() captura o XML canônico do build.
  • Preflight
    new("CompareEntry", snapshotXml, "AI action preflight") cria um clone isolado. Todas as ações rodam em ordem nesse clone, permitindo dependências entre ações do mesmo lote.
  • Changed
    Rebuild completo executa wipeGlobalCache(), incrementa outputRevision, chama BuildOutput() e atualiza a lista de stats.
  • Diff
    Preview captura DPS (Combined/Total/Minion fallback), EHP, Max Hit físico/fire/cold/lightning/chaos, passive points e ascendancy points antes/depois.
  • Guard
    Fingerprint é verificado na resposta, antes do snapshot, após qualquer rebuild e depois do preflight. Preview obsoleto não pode ser aplicado.
  • Apply
    Somente o botão Apply executa o lote no build real; depois há rebuild, nova captura de métricas e invalidação dos caches.
  • Caveat
    Preflight é all-or-nothing. O Apply real é sequencial: uma divergência inesperada depois de um preflight válido pode produzir partial = true; o relatório expõe appliedCount e o erro. Não há rollback automático na V1.

Configuração e segurança

  • Added
    Modules/AIConfig.lua mantém endpoint, API key, model, timeout e config version em userPath/ai_config.json, fora do repositório e do arquivo do build.
  • Storage
    A key é mascarada no EditControl, mas persistida em texto puro no JSON local. Em sistemas compatíveis, o app tenta aplicar chmod 600; não há integração com keychain na V1.
  • Guard
    Endpoint precisa começar com https://. A verificação de certificado segue a configuração global de conexão do PoB; ativar o modo global noSSL também afeta requests de IA.
  • Added
    A key entra somente em Authorization: Bearer. Payload contém pergunta, histórico recente e contexto selecionado do build.
  • Guard
    GetSanitizedConfig() substitui a key por [SET]/[EMPTY]. Logs de debug registram tamanhos, timings, scopes e contagens, não o request body nem a key.
  • Network
    Não existe backend, proxy, telemetria ou analytics do projeto. O PoB conecta diretamente ao endpoint configurado pelo usuário.
  • Release
    ai_config.json, logs, settings e saves são excluídos do Git e do pacote de release.

Release e verificação

  • Package
    Distribuição Windows portable em ZIP; executar Path of Building.exe após extrair. A V1 não inclui instalador.
  • Linux
    Mesmo binário validado em Wine. Não há build Linux nativo.
  • CI
    387 testes upstream + integração de IA aprovados no commit de release.
  • Audit
    1.323 entradas do ZIP auditadas: nenhuma key, configuração local, log, save, path duplicado, path inseguro ou symlink.
  • Integrity
    SHA256SUMS.txt publicado junto do arquivo para verificação de integridade.
  • Changed
    manifest.xml e updater apontam para kaiqueramos/PathOfAIBuilding; canal de release separado do upstream.

Limitações conhecidas

  • Limit
    Requer um build existente e uma main skill configurada; não gera um personagem completo do zero.
  • Limit
    Sem consulta de preços, orçamento, poe.ninja, trade API ou automação de compra.
  • Limit
    Sem otimização global da árvore; o contexto inclui no máximo 50 candidatos alcançáveis.
  • Limit
    Shortlists de uniques são heurísticas e amostradas; resultados não cobrem o catálogo inteiro.
  • Limit
    Sem rollback transacional se o Apply real divergir do preflight.
  • Limit
    Histórico de chat não persiste ao fechar o PoB.
  • Limit
    Sem Linux nativo e sem armazenamento em keychain.
  • Limit
    O modelo ainda pode emitir recomendações ruins; os cálculos e guards reduzem o risco, mas não substituem revisão humana.