PoEnhance is a Windows companion application and in-game overlay for Path of Exile. Development currently focuses on Path of Exile 1.
The long-term goal is to combine price checking, economy and stash value tracking, Trade search, regex tools, and searchable shared game data in one free application. The project is currently an early engineering prototype.
- Early development.
- Not ready for general use.
- Version 0.1 is a technical prototype.
- No public release is currently available.
- GGG compliance.
- No gameplay automation.
- Local-first storage and behavior.
- Modular architecture.
- Graceful handling of unknown data.
- Shared reusable game-data catalogs.
- Explicit user control over network requests.
Confirmed version 0.1 scope:
- WPF shell.
- Background lifecycle.
- Path of Exile process detection.
- Active-window detection.
- Configurable shortcut foundation.
- Clipboard capture.
- Manual pasted-item input.
- Basic parser.
- Basic overlay.
- Parser tests where practical.
- Local development logging.
Version 0.1 does not require Trade API, OAuth, stash value, economy tracking, complete databases, or polished final UI.
The initial stack is provisional until validated by the technical prototype:
- C#.
- .NET 10 LTS.
- WPF.
- Windows 11 primary.
- Windows 10 where practical.
Current repository contents:
PoEnhance.slnx- solution file.PoEnhance.App/- WPF application project.PoEnhance.Core/- shared business logic class library.PoEnhance.Core.Tests/- xUnit tests forPoEnhance.Core.PoEnhance.GameData/- independent shared game-data class library for versioned provider-neutral package manifests, item bases, modifier tiers, stat definitions, and stat translations.PoEnhance.GameData.Tests/- xUnit tests forPoEnhance.GameData.PoEnhance.DataImport/- local-file-only data import adapters; currently imports RePoEbase_items.json,mods.json,stats.json, andstat_translations.jsoninto provider-neutral game-data records without automatic downloading.PoEnhance.DataImport.Tests/- xUnit tests forPoEnhance.DataImport.PoEnhance.DataTool/- developer command-line tool for building a complete local PoEnhance game-data package from local RePoE files.PoEnhance.DataTool.Tests/- xUnit tests forPoEnhance.DataTool.docs/- project documentation.README.md- repository overview.
Key documentation:
- Windows 10 or Windows 11.
- .NET 10 SDK.
- Git.
- An editor such as VS Code with C# support.
From the repository root:
dotnet restore
dotnet build
dotnet run --project .\PoEnhance.App\PoEnhance.App.csprojFrom the repository root:
dotnet testThe generated artifacts/poenhance-game-data.json remains ignored and is not downloaded by a
normal application build. A fresh clone must run the explicit pinned bootstrap once before
building or publishing the application:
Set-Location D:\Projects\PoEnhance
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\Setup-GameData.ps1
dotnet build .\PoEnhance.slnx --configuration Release --no-restore
$expected = '326DB7D0603AEE938BAB9A347473AAB6410021AA38BBB23A2C07310F686067F6'
$actual = (Get-FileHash -Algorithm SHA256 -LiteralPath '.\PoEnhance.App\bin\Release\net10.0-windows\poenhance-game-data.json').Hash
if ($actual -ne $expected) { throw "Unexpected packaged GameData hash: $actual" }Setup-GameData.ps1 is the repository-supported network/setup step. It reads
data/game-data/sources.json, acquires the exact pinned RePoE parser commits, the
content-addressed RePoE hosted-export commits, and Path of Building tag v2.67.2; verifies
every input hash; evaluates the PoB Unique catalog; and calls the existing source-guarded
Refresh-GameData.ps1 pipeline twice with the fixed package timestamp. Both packages must be
byte-identical to validated SHA-256
326DB7D0603AEE938BAB9A347473AAB6410021AA38BBB23A2C07310F686067F6 before the script
atomically activates one at artifacts/poenhance-game-data.json.
The validated E5 package retains legacy absolute extraction-directory names in its serialized
provenance. Setup recreates those directories from the pinned source exports; it does not depend
on a pre-existing TEMP candidate or diagnostic runtime. Making sourceDataRoot portable is a
separate release-readiness task because changing it would change the accepted package bytes.
Regular dotnet build, application startup, and publishing do not fetch data. The application
project fails early with an actionable setup command when the generated package is absent, and
copies the verified package beside the Release executable when it exists.
PoEnhance.DataTool builds a complete local game-data package from local RePoE files. It does not download RePoE data or contact the network. Current local development packages use the active repoe-fork/repoe PoE1 export at commit c50acab2ed660a70511e7f91ee09db4e632089e4.
Package builds are source-guarded. The command must declare the git checkout root, exported data root, repository URI, branch, and exact source SHA. The build fails before writing output if the local git checkout does not match those values or if any input JSON file is outside the declared data root. The package manifest records the source identity plus SHA-256 fingerprints for the four input files.
The item-property semantic file is a reviewed, source-controlled PoEnhance input that supplies structural meaning RePoE does not expose. It is imported separately from the guarded RePoE exports and fingerprinted with its schema and review versions in package provenance. Any import or validation failure leaves the last valid output package unchanged.
dotnet run --project .\PoEnhance.DataTool -- build-package `
--base-items .\artifacts\source-audit\active-poe1\base_items.json `
--mods .\artifacts\source-audit\active-poe1\mods.json `
--stats .\artifacts\source-audit\active-poe1\stats.json `
--translations .\artifacts\source-audit\active-poe1\stat_translations.json `
--item-property-semantics .\data\semantics\item-property-semantics.json `
--output .\artifacts\poenhance-game-data.json `
--source-root .\artifacts\source-audit\repoe-fork `
--source-data-root .\artifacts\source-audit\active-poe1 `
--source-uri https://github.com/repoe-fork/repoe `
--source-branch master `
--source-version c50acab2ed660a70511e7f91ee09db4e632089e4 `
--data-version dev-001When a valid existing package must be bridged because its original RePoE exports are no longer available, augment-package-semantics can produce a separate candidate with the reviewed semantic dataset:
dotnet run --project .\PoEnhance.DataTool\PoEnhance.DataTool.csproj -- augment-package-semantics `
--input-package .\artifacts\poenhance-game-data.json `
--item-property-semantics .\data\semantics\item-property-semantics.json `
--output .\artifacts\poenhance-game-data.candidate.json `
--data-version dev-milestone-3-semantics-weapon-dps-v1The augmentation command never overwrites its input, and a failure preserves any previous candidate. Normal future league updates should continue to use the full source-guarded build-package pipeline.
Generated packages are local artifacts and are not committed. Use local paths such as artifacts/, local-data/, or data/repoe/ for generated packages and local source snapshots.
The current active-fork package build imports 4,639 item bases, 38,800 modifiers, 22,774 stats, and 11,060 stat translations with zero validation errors. Inscribed Ultimatum and Card Belt are still not exact imported item-base names; Engraved Ultimatum remains the catalog base for the related Ultimatum map record.
PoEnhance.GameData can load complete local package files or streams asynchronously, deserialize them with the shared package JSON options, and validate them before use. Runtime lookup catalogs are provider-neutral and are built in memory only from validated packages.
PoEnhance.Core can enrich an already parsed item with provider-neutral item-base resolution when a caller supplies a validated GameDataCatalog. Exact parsed base-type matches are catalog-backed only when one item-class-compatible record remains; identified magic item names use a conservative token-boundary suffix match and are reported as probable. It can also discover modifier candidates from Advanced Item Description modifier names plus parsed generation kind, then narrow those candidates with verified item-base eligibility when exactly one catalog item base has been resolved. Eligibility uses provider-neutral base domain, static base tags, dynamic traditional-influence item-context tags, modifier domain, and ordered modifier spawn weights. After eligibility, modifier resolution can compare conservative stat-text signatures built from ordered modifier stats and imported stat translations: numeric rolls are placeholders, definitive text-shape mismatches are excluded, and unsupported or ambiguous translation shapes remain Unknown instead of being guessed. Traditional influence context is derived from parsed item influence lines and the resolved item-base tags; it is not stored back into the item-base record, and eldritch influences do not unlock traditional influence affixes. If the base is unresolved or ambiguous, modifier resolution preserves the earlier name-and-kind candidates instead of guessing.
The development application can load one local generated package for a session and show item-base resolution plus modifier candidate diagnostics in the developer parser UI. Modifier debug output shows the parsed modifier name, final status, name/kind/eligibility/text narrowing counts, a limited candidate preview, and the diagnostic code for supported modifier kinds; unsupported placeholder kinds remain parsed but do not append repetitive candidate debug blocks in the regular panel. Description remains stored on ParsedItem and visible in Raw Input, but it is hidden from the regular development result panel. Configure the package with --game-data <path>, POENHANCE_GAMEDATA_PATH, or the development fallback artifacts/poenhance-game-data.json discovered from the current directory or parent repository directories. Missing or invalid game data does not prevent parser operation; the UI degrades to parser-only output.
The development application also keeps a minimal local provisional game-data store at %LOCALAPPDATA%\PoEnhance\provisional-game-data.json. It records only high-confidence unresolved identities found during normal parsing and catalog resolution: missing parsed item bases with a BASE_NOT_FOUND result, and missing authentic Advanced modifier names with zero catalog name candidates and a supported generation kind. Records are provider-neutral, local-only, deduplicated by stable key, and store source, timestamps, league or patch context, confidence, and concise discovery context. They do not store full copied item text, seller notes, account names, prices, or clipboard history, and they do not automatically become canonical game data. Review, enrichment, promotion, and management UI remain deferred.
Production package activation, installation, rollback, automatic updates, and update UI are not implemented yet. Parser enrichment does not load package files or create global catalog state. Modifier tier inference, value-range matching, full rendered-stat/value matching, Trade stat mapping, fuzzy matching, and statless RePoE concepts audited in docs/development/repoe-skipped-record-audit-2026-07-12.md remain deferred.
PoEnhance.App writes local development logs to %LOCALAPPDATA%\PoEnhance\Logs.
PoEnhance.App writes provisional game-data records to %LOCALAPPDATA%\PoEnhance\provisional-game-data.json.
- Documentation-first.
- Small verifiable milestones.
- Working software after each milestone.
- Requirements, architecture, compliance, tests, and documentation reviewed before major expansion.
PoEnhance is an unofficial community project. It is not affiliated with or endorsed by Grinding Gear Games.
Implementation must comply with current GGG rules and API policies. The project must not automate gameplay or use hidden integrations. This repository does not claim legal approval or formal certification from GGG.
The project is initially intended for the owner and a small group of friends. A detailed public contribution process has not been created yet.
No open-source license has been selected yet.
- Path of Exile 1 focus.
- English game client first.
- Windows only.
- Early prototype.
- Incomplete parser and data catalogs.
- RePoE importing is local-file-only for supported files; there is no automatic data downloading or update workflow yet.
- Complete local game-data packages can be loaded and validated. The development App can load one local package for the current session through
--game-data <path>,POENHANCE_GAMEDATA_PATH, or theartifacts/poenhance-game-data.jsonfallback. - Parsed items can be enriched with item-base resolution and Advanced metadata modifier candidate discovery in
PoEnhance.Corewhen a caller supplies a validatedGameDataCatalog; modifier candidates can be narrowed by verified base eligibility, dynamic traditional-influence item-context tags, and conservative stat-text signature matching. Unresolved or ambiguous bases preserve earlier candidates, and unsupported translation shapes remain Unknown. Tier inference, modifier value-range matching, full rendered-stat/value matching, and fuzzy matching are not implemented yet. - Provisional game-data records capture only high-confidence unresolved identities in a local provider-neutral JSON store. They are not a second canonical data package and are not automatically promoted into trusted game data.
- Production package installation, activation, rollback, automatic updates, and update UI are not implemented yet.
- Runtime lookup indexes are provider-neutral and intentionally exclude statless RePoE behavior records until a separate future model is designed.
- No production-ready Trade, OAuth, stash, or economy integration yet.
Wersja angielska jest kanonicznym źródłem tego README. Ta sekcja po polsku jest tłumaczeniem pomocniczym.
PoEnhance jest aplikacją companion dla Windows i overlay w grze dla Path of Exile. Rozwój obecnie koncentruje się na Path of Exile 1.
Długoterminowym celem jest połączenie price checking, economy and stash value tracking, Trade search, narzędzi regex i przeszukiwalnych współdzielonych danych gry w jednej darmowej aplikacji. Projekt jest obecnie wczesnym prototypem inżynieryjnym.
- Wczesny rozwój.
- Nie jest gotowy do ogólnego użycia.
- Wersja 0.1 jest prototypem technicznym.
- Obecnie nie ma publicznego wydania.
- Zgodność z GGG.
- Brak automatyzacji gameplay.
- Local-first storage i zachowanie.
- Modularna architektura.
- Graceful handling nieznanych danych.
- Współdzielone katalogi game-data wielokrotnego użytku.
- Jawna kontrola użytkownika nad żądaniami sieciowymi.
Potwierdzony zakres wersji 0.1:
- WPF shell.
- Lifecycle w tle.
- Wykrywanie procesu Path of Exile.
- Wykrywanie aktywnego okna.
- Fundament konfigurowalnego skrótu.
- Przechwytywanie clipboard.
- Ręcznie wklejony input przedmiotu.
- Podstawowy parser.
- Podstawowy overlay.
- Testy parsera tam, gdzie jest to praktyczne.
- Lokalne logowanie developerskie.
Wersja 0.1 nie wymaga Trade API, OAuth, stash value, economy tracking, kompletnych baz danych ani dopracowanego finalnego UI.
Początkowy stack jest provisional do czasu walidacji przez prototyp techniczny:
- C#.
- .NET 10 LTS.
- WPF.
- Windows 11 jako główny system.
- Windows 10 tam, gdzie jest to praktyczne.
Obecna zawartość repozytorium:
PoEnhance.slnx- plik solution.PoEnhance.App/- projekt aplikacji WPF.PoEnhance.Core/- biblioteka klas dla współdzielonej logiki biznesowej.PoEnhance.Core.Tests/- testy xUnit dlaPoEnhance.Core.PoEnhance.GameData/- niezależna biblioteka klas dla wersjonowanych, provider-neutral manifestów pakietów, baz przedmiotów, tierów modifierów, definicji statystyk i tłumaczeń statystyk.PoEnhance.GameData.Tests/- testy xUnit dlaPoEnhance.GameData.PoEnhance.DataImport/- adaptery importu danych tylko z lokalnych plików; obecnie importuje RePoEbase_items.json,mods.json,stats.jsonistat_translations.jsondo provider-neutral rekordów game-data bez automatycznego pobierania.PoEnhance.DataImport.Tests/- testy xUnit dlaPoEnhance.DataImport.PoEnhance.DataTool/- narzędzie developerskie command-line do budowania kompletnego lokalnego pakietu game-data PoEnhance z lokalnych plików RePoE.PoEnhance.DataTool.Tests/- testy xUnit dlaPoEnhance.DataTool.docs/- dokumentacja projektu.README.md- przegląd repozytorium.
Kluczowa dokumentacja:
- Windows 10 lub Windows 11.
- .NET 10 SDK.
- Git.
- Edytor taki jak VS Code ze wsparciem C#.
Z katalogu głównego repozytorium:
dotnet restore
dotnet build
dotnet run --project .\PoEnhance.App\PoEnhance.App.csprojZ katalogu głównego repozytorium:
dotnet testObecne lokalne pakiety developerskie uzywaja aktywnego eksportu PoE1 repoe-fork/repoe z commita c50acab2ed660a70511e7f91ee09db4e632089e4. Budowanie pakietu ma source guard: komenda musi podac root checkoutu git, root wyeksportowanych danych, URI repozytorium, branch i dokladny SHA zrodla. Build konczy sie przed zapisem outputu, jesli lokalny checkout git nie pasuje do tych wartosci albo jesli ktorykolwiek input JSON jest poza zadeklarowanym data root. Manifest pakietu zapisuje tozsamosc zrodla oraz SHA-256 fingerprints czterech plikow input.
PoEnhance.DataTool buduje kompletny lokalny pakiet game-data z lokalnych plików RePoE. Narzędzie nie pobiera danych RePoE i nie kontaktuje się z siecią.
dotnet run --project .\PoEnhance.DataTool -- build-package `
--base-items .\artifacts\source-audit\active-poe1\base_items.json `
--mods .\artifacts\source-audit\active-poe1\mods.json `
--stats .\artifacts\source-audit\active-poe1\stats.json `
--translations .\artifacts\source-audit\active-poe1\stat_translations.json `
--item-property-semantics .\data\semantics\item-property-semantics.json `
--output .\artifacts\poenhance-game-data.json `
--source-root .\artifacts\source-audit\repoe-fork `
--source-data-root .\artifacts\source-audit\active-poe1 `
--source-uri https://github.com/repoe-fork/repoe `
--source-branch master `
--source-version c50acab2ed660a70511e7f91ee09db4e632089e4 `
--data-version dev-001Wygenerowane pakiety są lokalnymi artefaktami i nie są commitowane. Do wygenerowanych pakietów i lokalnych snapshotów źródłowych używaj ścieżek takich jak artifacts/, local-data/ lub data/repoe/.
PoEnhance.GameData moze ladowac kompletne lokalne pliki lub streamy pakietow asynchronicznie, deserializowac je wspolnymi opcjami JSON i walidowac przed uzyciem. Runtime lookup catalogs sa provider-neutral i powstaja w pamieci tylko z poprawnie zwalidowanych pakietow.
PoEnhance.Core moze wzbogacic juz sparsowany przedmiot o provider-neutral rozpoznanie item-base, gdy caller przekaze zwalidowany GameDataCatalog. Exact match z parsowanego base type jest uznawany tylko wtedy, gdy zostaje jeden rekord zgodny z item class; rozpoznanie nazw zidentyfikowanych magic itemow uzywa konserwatywnego suffix match na granicach tokenow i ma status probable. Core moze tez odkrywac pierwszy etap kandydatow modifierow z nazw modifierow w Advanced Item Description oraz sparsowanego generation kind. Candidate discovery jest exact i konserwatywne: ambiguous nazwy pozostaja nierozwiazanymi zbiorami kandydatow, a normalny opis przedmiotu nie jest reverse-engineered do tozsamosci modifierow.
Development App moze zaladowac jeden lokalnie wygenerowany pakiet na sesje i pokazac item-base resolution oraz diagnostyke kandydatow modifierow w developerskim UI parsera. Sciezke mozna ustawic przez --game-data <path>, POENHANCE_GAMEDATA_PATH albo development fallback artifacts/poenhance-game-data.json znaleziony z current directory lub parent repository directories. Brak lub niepoprawne game data nie blokuje parsera; UI degraduje sie do parser-only output.
Production package activation, instalacja, rollback, automatyczne aktualizacje i update UI nie sa jeszcze zaimplementowane. Parser enrichment nie laduje plikow pakietu i nie tworzy globalnego stanu katalogu. Modifier value matching, tier resolution, rendered stat matching, Trade stat mapping, fuzzy matching i statless koncepty RePoE opisane w docs/development/repoe-skipped-record-audit-2026-07-12.md pozostaja odlozone.
PoEnhance.App zapisuje lokalne logi developerskie w %LOCALAPPDATA%\PoEnhance\Logs.
- Documentation-first.
- Małe, weryfikowalne milestones.
- Działające oprogramowanie po każdym milestone.
- Review wymagań, architektury, zgodności, testów i dokumentacji przed dużym rozszerzeniem zakresu.
PoEnhance jest nieoficjalnym projektem społecznościowym. Nie jest powiązany z Grinding Gear Games ani przez nie wspierany.
Implementacja musi być zgodna z aktualnymi zasadami GGG i politykami API. Projekt nie może automatyzować gameplay ani używać ukrytych integracji. To repozytorium nie twierdzi, że posiada zgodę prawną lub formalną certyfikację od GGG.
Projekt jest początkowo przeznaczony dla właściciela i małej grupy znajomych. Szczegółowy publiczny proces współpracy nie został jeszcze utworzony.
Nie wybrano jeszcze licencji open-source.
- Skupienie na Path of Exile 1.
- Najpierw angielski klient gry.
- Tylko Windows.
- Wczesny prototyp.
- Niekompletny parser i katalogi danych.
- Import RePoE działa tylko z obsługiwanych lokalnych plików; nie ma jeszcze automatycznego pobierania danych ani workflow aktualizacji.
- Kompletne lokalne pakiety game-data moga byc ladowane i walidowane. Development App moze zaladowac jeden lokalny pakiet na aktualna sesje przez
--game-data <path>,POENHANCE_GAMEDATA_PATHalbo fallbackartifacts/poenhance-game-data.json. - Sparsowane przedmioty moga byc wzbogacane o item-base resolution i pierwszy etap Advanced metadata modifier candidate discovery w
PoEnhance.Core, gdy caller przekaze zwalidowanyGameDataCatalog; modifier value/tier matching i fuzzy matching nie sa jeszcze zaimplementowane. - Production package installation, activation, rollback, automatyczne aktualizacje i update UI nie sa jeszcze zaimplementowane.
- Runtime lookup indexes sa provider-neutral i celowo wykluczaja statless rekordy RePoE do czasu zaprojektowania osobnego przyszlego modelu.
- Brak production-ready integracji Trade, OAuth, stash lub economy.