Wand open issue - #234
Open
taubenzuechterdome wants to merge 15 commits into
Open
Conversation
…nd CI Add verify-dist.mjs (node --check on bundles, dev-only payload guard). Wire lint into build.ps1 and type-check both web and bridge in pnpm build. Drop noImplicitAny override and switch bridge to Bundler resolution. Run CI on pull_request and push to master.
… input InsertFile resolved the grandparent node instead of the parent. Reads no longer create phantom directories in the header. Bound symlink traversal and skip reparse points when crawling. Locked or unreadable files now abort packing instead of being dropped. Read headers and integrity blocks with a full-read loop. Assert the header keeps its size before overwriting the placeholder. Validate Pickle buffer sizes, payload overflow and negative lengths. Check CreateSymbolicLink and external tool exit codes. Drop unused Pickle accessors, TransformedFile and FilesystemFilesAndLinks.Links.
Anchor each patch on a stable string (API endpoint, IPC channel, method name) and walk the delimiter structure via JsCursor to the edit site, reading minified identifiers out of the located region. Move injected JavaScript into WandEnhancer/Patches/*.js as embedded resources. Declare patches as PatchEntry rows in EnhancerConfig with CandidateFileNames, SearchHints and optional CapabilityHints. Recognise keyword-preceded regex literals in JsCursor so `return/re/.test(x)` no longer desynchronises the scan. Require the remote setValue anchor to match exactly once; Wand ships sibling call sites for other sources. Require both backup halves in IsPatched so a partial backup no longer blocks patch and restore at the same time. Chain inner exceptions when unpack or pack fails. Rename Common to ProcessTerminator and Utils.Extensions to WeModInstalls.
…y DLL Launch Wand with DEBUG_PROCESS and patch the integrity fuse byte in every process Electron spawns, then detach once the startup burst settles. Electron respawns children from its own on-disk exe, so patching only the main process left renderers crashing with -36861. Remove the version.dll proxy project and its CMake build step; the launcher no longer ships a native helper. Update the README to describe the debugger-based mechanism and drop CMake from the build requirements. Time the detach with Stopwatch instead of Environment.TickCount, which wraps. Check the PatchFuse result and surface a failure to the startup log. Scan for the fuse sentinel byte by byte rather than assuming 8-byte alignment. Close the image handle the kernel hands over with each process event. Name the DEBUG_EVENT and fuse wire offsets. Re-quote forwarded argv so Squirrel paths containing spaces survive. Keep an unobserved task exception from terminating the process.
…ts output Introduce IShellView and IFileDialogs so MainWindowVm no longer holds the concrete window or reaches through MainWindow.Instance, and file pickers are injectable. Run Restore off the UI thread like Patch and gate both buttons on IsBusy. Gate the log commands on a non-empty log. Move runtime log messages into the locale dictionaries and add the 14 new keys to all 12 languages. Track the injected locale dictionary so switching language replaces it instead of appending a new one each time. Remove the unused InfoItem control, ToVisibilityInvertedConverter, mw_title and the popup placeholder title.
…erver Type every module under bridge/src against a shared types.ts vocabulary and the protocol payload types; narrow Wand IPC input as unknown instead of any. Keep the Electron port types out of the CommonJS runtime files, where an export statement makes esbuild treat the module as ESM and drop module.exports. Reject unmasked client frames, enforce control-frame length and fragmentation limits, and echo the peer close code. Resolve static requests inside the panel root and serve the whole root, not only assets/. Ignore value-changed events that name a different trainer. Validate envelopes through the shared protocol validator. Bind the renderer destroyed listener once per sender. Handle https response errors while fetching trainer strings. Compare installed-app snapshots structurally so no field is missed.
ipcRenderer.invoke rejects asynchronously, so marking the bridge bound before awaiting left set-value dead for the session while the log reported success. Compare installed-app snapshots structurally instead of by an explicit field list, which had already drifted from the bridge copy and hid location changes.
…1y gaps Extract IconButton into shared/ui and reuse it across the drawers, top bar and cheat tiles instead of repeating the glass button markup. Render the app even when the locale catalog fails to load; a rejected import previously left a blank page. Keep a draft string while a number input is focused so typing a decimal point survives formatting, and snap stepper results to the step precision. Let IncrementalControl step forward from an unrecognised value. Back off reconnect attempts and stop reconnecting after an explicit disconnect. Route locale storage through shared/storage. Give the drawers dialog semantics, Escape and focus containment; add listbox semantics plus click-away and Escape to the selection dropdown; add aria-expanded to category headers and accessible names to the controls. Add a pin button to cheat tiles, which were previously pin-by-swipe only. Compare handler props in the CategorySection memo comparator. Clear the swipe settle timer on unmount.
Bump AssemblyInfo to 2.0.0.0 and add the 2.0.0.0 changelog section. Resolve a tag suffix (2.0.0.0-rc.1) to its base version so release metadata validation and changelog extraction accept pre-release tags. Publish suffixed tags as a pre-release and keep them off "Latest release".
Patching mutated the install in place with no recovery, so a failure left a partly patched Wand behind: rewritten bundles in app.asar.unpacked, or a patched app.asar with no launcher deployed, which cannot clear the fuse and fails with -36861. Restore both backups on any failure and rethrow the original error. Pack the archive into a sibling file and swap it in at the end. Writing straight into app.asar truncated it when the stream opened, so a failed pack destroyed the archive it was replacing.
Records spawned processes and their fuse state, exit and unhandled exception codes, detach timing and reason, and the exit code after detach.
An access-denied copy now names the destination's attributes, owner and the account running the patcher.
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.
No description provided.