Repository navigation
Add headless engine worker with JSON-lines RPC - #2566
Closed
Skitty4fingers wants to merge 14 commits into
Closed
Skitty4fingers wants to merge 14 commits into
Skitty4fingers wants to merge 14 commits into
Conversation
engine/worker.lua boots Path of Building headless (without HeadlessWrapper's blocking stdin prompt) and serves namespaced methods over stdin/stdout: build, stats (incl. item/passive what-if), skills, items, tree, config, data. Upstream src/ is untouched. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TWRTJMJXeedgrL19GpAUs7
- engine.py manages the LuaJIT worker process - codec.py handles share codes and pobb.in/pastebin/poe.ninja links - service.py holds operations shared by all front ends and a change revision - mcp_server.py exposes 32 tools, 2 resources and 2 prompts (MCP SDK v2) - web/ is a FastAPI REST API that also serves MCP at /mcp on the same build - cli.py prints JSON - pytest suite covering codec, engine integration and REST Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TWRTJMJXeedgrL19GpAUs7
Vite + React 19 + Tailwind 4 + TanStack Query. Canvas passive tree with hover what-if deltas and click-to-allocate, skills, items workbench (compare before equip), config, and MCP connection help. Live-refreshes when an agent edits the build. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TWRTJMJXeedgrL19GpAUs7
scripts/setup-engine.sh builds LuaJIT at commit 2460b3ff (needed for the syntax extensions upstream now uses) plus lua-utf8 without luarocks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TWRTJMJXeedgrL19GpAUs7
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TWRTJMJXeedgrL19GpAUs7
compose.tailscale.yml runs the app in a Tailscale sidecar's network namespace with Tailscale Serve providing HTTPS on the tailnet (Funnel off, no host ports). POB2_ALLOWED_HOSTS extends /mcp's DNS-rebinding protection so requests to the tailnet hostname are accepted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TWRTJMJXeedgrL19GpAUs7
Tree - Export/import official PoE2 planner links (pathofexile2.com, format v7) with weapon sets and attribute choices; legacy codes still import. - Convert the game's DDS tree atlases to WebP at image build time (scripts/build_tree_art.py) and draw real node icons, frames, jewels, class/ascendancy art and orbit arcs in the web tree. Advisors (engine modules + REST + MCP + web UI) - Guide tab: compare against a PoE2 BuildPlanner .build reference (passives, skills/supports, gear, stages) and rank next steps. - Tree advisor: next passive point, point to move, attribute node recommendations constrained by gear/gem requirements. - Upgrades tab: per-slot gear/jewel value, dead mods, what to look for, weighted trade searches; gem support/level advice; unique shopping with poe.ninja prices. - One-click Update from poe.ninja character (ladder or profile) links, keeping Config settings; index.html served with no-cache. Spirit and totems - PoB reports totem DPS per totem, reserves Ancestral Bond Spirit once and does not apply "Your Totem Limit is doubled". New budget module counts totems the Spirit can keep up; every advisor scores with DPS across all totems and what-ifs drop the replaced item's granted skills. - "Check before you buy" verdict (check_item) with warnings for lost totems, Spirit shortfalls, requirements and removed skills; sidebar Spirit/totem card; equip asks for confirmation on warnings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Commit the PoE2 tree artwork (tree-art/, WebP) so a clone and the Docker build need no conversion step; the image no longer ships the .zst textures. scripts/build_tree_art.py regenerates it after tree updates. - Publish a multi-arch image to GitHub Container Registry on pushes to main and version tags (.github/workflows/publish.yml). - compose.image.yml runs the prebuilt image; both Compose files take POB2_BIND and POB2_ALLOWED_HOSTS for hosting on a server. - Remove upstream-only workflows (releases, installer, backports, beta, spellcheck) that need Path of Building's secrets; run PoB's tests and the enhanced CI on main. - Rewrite the README for this project with screenshots, hosting options (image, Compose, source, NAS), usage, MCP, configuration and credits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Spell Totem's skill data OVERRIDEs ActiveTotemLimit to 2, which drops BASE bonuses such as Oracle's Unnamed Heartwood (+1). The budget now adds non-gem BASE totem limit mods back, doubles only the skill's base for Ancestral Bond (the game places 5 = 2 x 2 + 1), and lets the "# of Summoned Totems" config raise the cap as well as lower it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Upstream GetPrimarySlot returns "Focus" for foci, which is not a slot, so check_item crashed indexing a nil slot. Map foci to Weapon 2 and fail with a clear message for any other item type without a slot. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
sockets.analyze values each socketed augment (vs an empty socket) and ranks every legal replacement per socket. Legality uses PoB's GetValidRunesForItem plus corruption, level, per-item limits and character-wide limitIds (e.g. Ancient Augment), flagging options a limit held elsewhere blocks. sockets.optimize builds a greedy plan, re-measured after each swap, including paired swaps that free a limit; augments with lines PoB does not model are kept unless freeing a limit. Exposed as the socket_advice MCP tool and /api/sockets(/plan). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Upgrades > Sockets shows each rune, soul core and idol's worth (dead, unmodelled and socket-bound flagged), the best legal alternatives with "blocked by" badges, and a Build plan that lists the ordered swaps with paired swaps grouped, the total and warnings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With a slot filter, character-wide limits (limitId) only saw the filtered item, so e.g. Amanamu's Gaze looked legal in the chest while the gloves held the Ancient Augment limit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
DPS and EHP lead in large type (DPS counts totems when the main skill uses them), followed by the resources the character has: Mana, Spirit, Rage or Runic Ward, each with a bar and net regen vs skill cost. Change chips show the effect of the last recalculation, a spinner and dimming mark refetches, a skeleton covers loading, and hover panels break down DPS, EHP (defences, resists) and Spirit reservations. budget.get adds skill, ehp, life, es, resources and defence, and counts totems for Spirit even when another skill is the main skill. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
engine/worker.lua boots Path of Building headless (without HeadlessWrapper's
blocking stdin prompt) and serves namespaced methods over stdin/stdout:
build, stats (incl. item/passive what-if), skills, items, tree, config, data.
Upstream src/ is untouched.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01TWRTJMJXeedgrL19GpAUs7Fixes # .
Description of the problem being solved:
Steps taken to verify a working solution:
Link to a build that showcases this PR:
Before screenshot:
After screenshot: