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çãoUm ú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çaQualquer marcador de
<actions>junto da solicitação continua bloqueando a resposta antes de qualquer alteração no build. - LimiteBlocos duplicados, JSON inválido e escopos fora do catálogo seguem rejeitados.
- TesteRegressõ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.
- ContextoPerguntas sobre skills, minions, summons e invocadores recebem o catálogo de gemas canônicas do PoB.
- ContratoA IA deve usar os nomes exatos de
state.reference.gemNamesemadd_skilleset_main_skill. - CompatibilidadeA bridge converte uma variação singular/plural apenas quando há um único nome canônico possível, antes do preflight.
- TesteRegressões cobrem um starter de minions até o nível 30 e
Summon Raging Spiritsconvertido paraSummon 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.
- TransporteA bridge detecta quando a request ou o teste de conexão não conseguem iniciar e devolve um erro imediato, liberando nova tentativa.
- AçõesBlocos
<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. - StreamUma resposta animada é concluída antes de uma resposta rápida posterior substituir o cursor do stream; nenhuma resposta anterior fica em branco.
- CoberturaRegressõ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.
- ContextoA bridge informa explicitamente à IA que a proposta anterior não foi aplicada e exige um novo bloco
<actions>para correções ou substituições. - UIAs ações da resposta nova substituem a proposta anterior; o botão Apply volta a representar somente o lote atual.
- SegurançaO build não muda durante a conversa: qualquer lote continua exigindo Apply explícito do jogador.
- TesteRegressã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 Setupagora expõeExtra request options (JSON), persistido emai_config.json. - BridgeAs 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,messagesestreampermanecem controlados pela bridge para preservar o contrato do chat. - MiniMaxPara 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.
- TreeAdicionadas
TreeData/3_29eTreeData/3_29_ruthless, incluindotree.lua, sprites, texturas e assets de passive tree. - Default
GameVersions.luaregistra 3.29 standard e Ruthless;latestTreeVersionagora resolve para 3.29 em novas builds. - ImportMapeamentos de import/export passam a reconhecer a versão 3.29 e a variante Ruthless.
- Tree UIO 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.
- SyncSincronizados os commits upstream posteriores à V1.0, incluindo correções de cálculo, comparação, importação e atualização do runtime SimpleGraphic.
- AIA 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.luacomo novoBuild.viewMode == "AI", registrado ao lado da aba Compare emModules/Build.lua. - AddedBotão global
AI Setup/AI ReadyemModules/Main.lua, abrindoAIConfigPanelpelo sistema nativo de popups do PoB. - AddedChat com mensagens
user,assistantesystem, campo multiline, envio por Enter e três prompts rápidos. - ChangedRequests executadas em subprocesso Lua por
LaunchSubScript; a thread de desenho do PoB permanece responsiva. - AddedResposta recebida integralmente pelo callback HTTP e exibida por revelação progressiva local em
AIChatTab:UpdateStream(). Não é streaming de tokens da API. - NoteHistórico é apenas da sessão:
AIChatTab:Load()não restaura mensagens eSave()não grava o chat no build. - Guard
AIBridge.pendingeAIChatTab.pendinglimitam a integração a uma request simultânea.
Serialização e contexto do build
- Added
AIBridge:SerializeBuild()gera um payload JSON versionado (version = 1) commeta,stats,items,skillsetree. - AddedSerializaçã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. - AddedItens equipados são enviados por slot com nome, rarity, base e
Item:BuildRaw(); skills incluem grupo, slot, nível, qualidade, estado, suporte eskillPart. - 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ãogems,uniques,treeeconfig; catálogos grandes não entram em toda request. - AddedEscalonamento 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>. - ChangedHistórico recente limitado por
HISTORY_CHAR_BUDGET = 12000; mensagens antigas são removidas por pares antes da montagem do request. - GuardFingerprint do estado:
SHA-1(tostring(build) .. "\0" .. build:SaveDB()). Mudanças durante a resposta invalidam request, caches e Apply.
API e transporte HTTP
- AddedCliente para APIs OpenAI-compatible. O endpoint configurado recebe o sufixo
/chat/completionsapós remoção de barras finais. - AddedPayload principal:
model, arraymessages,max_tokens = 2048etemperature = 0.3. - AddedTeste de conexão separado com prompt mínimo,
max_tokens = 16etemperature = 0. - Changed
launch:DownloadPage()ganhou suporte a body POST e timeout; usalcurl.safe, compressão HTTP, redirects e callback assíncrono. - ChangedTimeout total configurável entre 1 e 600 s, padrão 120 s; connect timeout é
min(timeout, 10). - GuardResposta 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, usandoProcessSocketGroup()+BuildOutput(). - GuardCada 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()comrepSlotName/repItem. O ranking preserva até três objetivos por slot: balanced, DPS e EHP. - AddedResultados de gems e uniques são cacheados pelo fingerprint exato do build e invalidados em qualquer mudança ou Apply.
- AddedMenções a gem, unique ou passive na resposta anterior alimentam lookup detalhado na pergunta seguinte.
- ScopeShortlists 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 100set_classclasse por nomeset_ascendancyascendência principal por nomeset_secondary_ascendancyascendência secundária da ligaset_banditNone, Oak, Kraityn ou Aliraset_pantheonmajor e/ou minoradd_skillnovo socket group com gemsremove_skillgrupo por label ou nome de gemset_main_skillgrupo/skill principalset_skill_partpart index positivoequip_itemraw item text e slot opcionalequip_jewelraw jewel e nodeId opcionalalloc_nodenode ID ou nome; usa o path do PoBdealloc_nodenode ID ou nomeset_masteryeffect index ou substring do textoapply_tattoonode + nome exato da tattooremove_tattoonode ID ou nomeset_configchave existente + boolean/number
Validação, preflight e Apply
- Validate
ParseActions()usadkjson; o lote deve ser array denso, não vazio, sem gaps, com um dos 18 tipos e shape válido para cada ação. - SnapshotAntes 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. - ChangedRebuild completo executa
wipeGlobalCache(), incrementaoutputRevision, chamaBuildOutput()e atualiza a lista de stats. - DiffPreview captura DPS (Combined/Total/Minion fallback), EHP, Max Hit físico/fire/cold/lightning/chaos, passive points e ascendancy points antes/depois.
- GuardFingerprint é verificado na resposta, antes do snapshot, após qualquer rebuild e depois do preflight. Preview obsoleto não pode ser aplicado.
- ApplySomente o botão Apply executa o lote no build real; depois há rebuild, nova captura de métricas e invalidação dos caches.
- CaveatPreflight é 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õeappliedCounte o erro. Não há rollback automático na V1.
Configuração e segurança
- Added
Modules/AIConfig.luamantém endpoint, API key, model, timeout e config version emuserPath/ai_config.json, fora do repositório e do arquivo do build. - StorageA key é mascarada no
EditControl, mas persistida em texto puro no JSON local. Em sistemas compatíveis, o app tenta aplicarchmod 600; não há integração com keychain na V1. - GuardEndpoint precisa começar com
https://. A verificação de certificado segue a configuração global de conexão do PoB; ativar o modo globalnoSSLtambém afeta requests de IA. - AddedA 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. - NetworkNã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
- PackageDistribuição Windows portable em ZIP; executar
Path of Building.exeapós extrair. A V1 não inclui instalador. - LinuxMesmo binário validado em Wine. Não há build Linux nativo.
- CI387 testes upstream + integração de IA aprovados no commit de release.
- Audit1.323 entradas do ZIP auditadas: nenhuma key, configuração local, log, save, path duplicado, path inseguro ou symlink.
- Integrity
SHA256SUMS.txtpublicado junto do arquivo para verificação de integridade. - Changed
manifest.xmle updater apontam parakaiqueramos/PathOfAIBuilding; canal de release separado do upstream.
Limitações conhecidas
- LimitRequer um build existente e uma main skill configurada; não gera um personagem completo do zero.
- LimitSem consulta de preços, orçamento, poe.ninja, trade API ou automação de compra.
- LimitSem otimização global da árvore; o contexto inclui no máximo 50 candidatos alcançáveis.
- LimitShortlists de uniques são heurísticas e amostradas; resultados não cobrem o catálogo inteiro.
- LimitSem rollback transacional se o Apply real divergir do preflight.
- LimitHistórico de chat não persiste ao fechar o PoB.
- LimitSem Linux nativo e sem armazenamento em keychain.
- LimitO modelo ainda pode emitir recomendações ruins; os cálculos e guards reduzem o risco, mas não substituem revisão humana.