[PR #2819] feat(windows): add REA desktop GUI #5416

Open
opened 2026-10-31 01:06:28 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/2819
Author: @junsidon
Created: 10/13/2026
Status: 🔄 Open

Base: main ← Head: junsidon-rea-windows-gui


📝 Commits (10+)

  • 8ff7eae feat(windows): add REA desktop GUI
  • d3f5f01 feat(windows): publish portable GUI bundle
  • 9fcf88b fix(windows): make GUI analysis launch reliably
  • a7dab9b Merge origin/main into junsidon-rea-windows-gui
  • 248a8b3 fix(windows): repair GUI release asset publishing
  • 1e7d02b fix(android): default unknown invoke coverage to JSON null
  • dc260ee fix(windows): own GUI child process tree
  • d1d43fe fix(windows): preserve GUI evidence output
  • d1ee28c fix(windows): clear GUI errors with results
  • 9315690 fix(windows-gui): preserve release assets on retries

📊 Changes

40 files changed (+2002 additions, -18 deletions)

View changed files

📝 .github/workflows/ci.yml (+4 -0)
📝 .github/workflows/release.yml (+223 -0)
📝 README.md (+5 -0)
📝 docs/index.md (+1 -0)
📝 docs/readme/README_ar.md (+1 -0)
📝 docs/readme/README_de.md (+1 -0)
📝 docs/readme/README_es.md (+1 -0)
📝 docs/readme/README_fa.md (+1 -0)
📝 docs/readme/README_fr.md (+1 -0)
📝 docs/readme/README_id.md (+1 -0)
📝 docs/readme/README_it.md (+1 -0)
📝 docs/readme/README_ja.md (+1 -0)
📝 docs/readme/README_ko.md (+3 -0)
📝 docs/readme/README_pl.md (+1 -0)
📝 docs/readme/README_pt-BR.md (+1 -0)
📝 docs/readme/README_ru.md (+1 -0)
📝 docs/readme/README_th.md (+1 -0)
📝 docs/readme/README_tr.md (+1 -0)
📝 docs/readme/README_uk.md (+1 -0)
📝 docs/readme/README_vi.md (+1 -0)

...and 20 more files

📄 Description

Summary

Windows users need a downloadable desktop option that does not require installing Node.js or composing CLI commands. This adds a portable Windows x64 ZIP with a self-contained launcher, the Node.js runtime, and the verified REA package, attached to qualified GitHub releases.

Problem and expected behavior

The Windows GUI was previously available only through an npm installation that required a separate Node.js runtime. After this change is merged and a qualified release is published, the release workflow builds a ZIP, verifies the bundled launcher and native artifact, and attaches the ZIP and SHA-256 checksum to the versioned GitHub release.

Change and scope

Adds a self-contained .NET Windows GUI launcher that starts the existing Korean PowerShell WinForms interface. The portable archive includes the Node.js executable, the exact verified REA package, lockfile-resolved production dependencies, runtime license notices, and Korean instructions. The release pipeline verifies package provenance, launcher PE architecture, bundled files, Node version, PowerShell command-validation mode, ZIP integrity, and checksum before upload.

The GUI remains a fixed adapter over existing REA CLI workflows. It does not add a provider, expose arbitrary commands, or launch the inspected target. The ZIP is Windows x64 only; the executable is currently unsigned, and the documentation covers checksum verification, SmartScreen, and PowerShell policy limitations. Contribution scope decision: not applicable; no new analysis capability or target authority is introduced.

Contract and boundary impact

  • Semantic owner and earliest changed stage: Existing CLI workflow contracts; Windows GUI and release packaging adapters.
  • Contribution scope fit and linked maintainer decision: Within existing CLI boundaries; no new provider/capability requiring a maintainer scope decision.
  • CLI and MCP/tool-catalog contract: No CLI/MCP contract changes; adds a portable download to qualified GitHub releases.
  • Provider, bridge, target-format, or platform compatibility: Windows x64 only; delegates provider and format support to the existing CLI.
  • Evidence, artifact, provenance, or reconstruction contract: Existing JSON CLI results are displayed unchanged; the bundled package is the exact qualified release artifact.
  • Target selection, authority, upstream behavior, and cleanup details (if applicable): Local file/directory targets; analysis begins only on explicit user action. The target executable is not launched.
  • Generated metadata (docs/public/product-catalog.json), package, or installation impact: Adds rea-gui.exe and rea-windows-x64-<version>.zip release assets with a SHA-256 sidecar.

Expected effects (check known effects; use documentation-only on its own).
Unchecked items do not establish absence; leave uncertainties visible.

  • Read existing files or captured data.
  • Launch or attach to a target process.
  • Inject instrumentation or run scripts/code in a target.
  • Change target process memory, registers, files, or configuration.
  • Contact network services as part of target analysis.
  • Recover protected code or work around protections.
  • Documentation or usability only; no target interaction.
  • Not sure yet; investigation or maintainer guidance needed.

Evidence and regression coverage

  • Tests added or updated: Package archive isolation fixture includes the rea-gui bin; the release verifier checks bundled executables, native controls, licenses, Node version, and the launcher's PowerShell command-validation mode.
  • Base reproduction or other evidence: Package isolation focused test passed; the GUI allowlist/argument test passed; the release workflow and launcher project metadata parse successfully.
  • User-visible CLI/MCP output (if applicable): Not applicable; the GUI displays JSON output from existing CLI commands.
  • Remaining proof gaps: The self-contained .NET launcher and final ZIP could not be built locally because this host has no .NET SDK. The release Windows runner builds and verifies the bundle. Provider-backed REA analysis was not run here.

For evidence-bearing changes:

  • Observed, derived, and inferred claims remain distinguishable.
  • Artifact identity, source provenance, and failed attempts remain preserved.
  • Unsupported, incomplete, unavailable, or uncertain outcomes remain visible.

Validation performed

  • npm.cmd run test:focused -- tests/boundary/process/packagePackIsolation.test.ts — passed.
  • npm.cmd run docs:check — passed.
  • powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -File .\windows-gui\rea-gui.ps1 -ValidateOnly — passed.
  • npm.cmd exec --no -- oxlint .\scripts\verify-windows-gui-bundle.mjs — passed.
  • node --check .\scripts\verify-windows-gui-bundle.mjs — passed.
  • oxfmt --check on changed sources and documentation — passed.
  • YAML parse and launcher project XML validation — passed.
  • npm.cmd run check:fast — failed on two pre-existing max-lines lint errors in unrelated Ghidra tests (ghidraLauncher.test.ts and GhidraFunctionValues.test.ts).
  • Local .NET launcher build — not run because this host has no .NET SDK.

Compatibility, safety, and release

  • Breaking changes or migration steps: None.
  • Real Hopper/Ghidra, browser, or OS coverage: GUI command validation passed; provider-backed analysis was not verified here.
  • Package or release metadata impact: A Windows x64 ZIP and SHA-256 checksum are attached after successful npm publication for a qualified release.
  • Security, privacy, process, or containment review: Fixed command allowlist; no arbitrary CLI input, target execution, or persistent PowerShell policy change. The launcher is unsigned; the release includes a checksum and instructions to verify it.

Before merge

  • This PR addresses a concrete problem or an agreed enhancement.
  • Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff.
  • The PR has one focused outcome and the title follows type(scope): outcome.
  • Related issue is linked, or the reason for not linking one is stated above.
  • Tests cover changed observable behavior and meaningful failure paths.
  • Owning docs, contracts, and generated metadata are updated where needed.
  • User-visible CLI/MCP changes include representative output.
  • I checked the final diff for secrets, unrelated cleanup, and unsupported claims.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/2819 **Author:** [@junsidon](https://github.com/junsidon) **Created:** 10/13/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `junsidon-rea-windows-gui` --- ### 📝 Commits (10+) - [`8ff7eae`](https://github.com/morluto/rea/commit/8ff7eae4e9606be0b46ce7d189b3aaf2ec68f198) feat(windows): add REA desktop GUI - [`d3f5f01`](https://github.com/morluto/rea/commit/d3f5f01e1e8aef730238db8802a3426b0000e6d7) feat(windows): publish portable GUI bundle - [`9fcf88b`](https://github.com/morluto/rea/commit/9fcf88b4358fcb35796bbd886ef8fbe692bafe5e) fix(windows): make GUI analysis launch reliably - [`a7dab9b`](https://github.com/morluto/rea/commit/a7dab9bb1a7306ce4f77f02abdaf288ec90773d6) Merge origin/main into junsidon-rea-windows-gui - [`248a8b3`](https://github.com/morluto/rea/commit/248a8b38b26d5bafda43ea4b7de7a0f617a65738) fix(windows): repair GUI release asset publishing - [`1e7d02b`](https://github.com/morluto/rea/commit/1e7d02b757db44e039f397cc0430a72144273b1f) fix(android): default unknown invoke coverage to JSON null - [`dc260ee`](https://github.com/morluto/rea/commit/dc260ee38c7af7bb891c4e4271a92d3bdc2ce364) fix(windows): own GUI child process tree - [`d1d43fe`](https://github.com/morluto/rea/commit/d1d43fe8cc1bdca545fdc115e8493f7aae1f3666) fix(windows): preserve GUI evidence output - [`d1ee28c`](https://github.com/morluto/rea/commit/d1ee28c501af61b4a3a234b43cba3be8ca68b7aa) fix(windows): clear GUI errors with results - [`9315690`](https://github.com/morluto/rea/commit/93156900ae96c292b0d94309e87eb48063877570) fix(windows-gui): preserve release assets on retries ### 📊 Changes **40 files changed** (+2002 additions, -18 deletions) <details> <summary>View changed files</summary> 📝 `.github/workflows/ci.yml` (+4 -0) 📝 `.github/workflows/release.yml` (+223 -0) 📝 `README.md` (+5 -0) 📝 `docs/index.md` (+1 -0) 📝 `docs/readme/README_ar.md` (+1 -0) 📝 `docs/readme/README_de.md` (+1 -0) 📝 `docs/readme/README_es.md` (+1 -0) 📝 `docs/readme/README_fa.md` (+1 -0) 📝 `docs/readme/README_fr.md` (+1 -0) 📝 `docs/readme/README_id.md` (+1 -0) 📝 `docs/readme/README_it.md` (+1 -0) 📝 `docs/readme/README_ja.md` (+1 -0) 📝 `docs/readme/README_ko.md` (+3 -0) 📝 `docs/readme/README_pl.md` (+1 -0) 📝 `docs/readme/README_pt-BR.md` (+1 -0) 📝 `docs/readme/README_ru.md` (+1 -0) 📝 `docs/readme/README_th.md` (+1 -0) 📝 `docs/readme/README_tr.md` (+1 -0) 📝 `docs/readme/README_uk.md` (+1 -0) 📝 `docs/readme/README_vi.md` (+1 -0) _...and 20 more files_ </details> ### 📄 Description ## Summary Windows users need a downloadable desktop option that does not require installing Node.js or composing CLI commands. This adds a portable Windows x64 ZIP with a self-contained launcher, the Node.js runtime, and the verified REA package, attached to qualified GitHub releases. ## Problem and expected behavior The Windows GUI was previously available only through an npm installation that required a separate Node.js runtime. After this change is merged and a qualified release is published, the release workflow builds a ZIP, verifies the bundled launcher and native artifact, and attaches the ZIP and SHA-256 checksum to the versioned GitHub release. ## Change and scope Adds a self-contained .NET Windows GUI launcher that starts the existing Korean PowerShell WinForms interface. The portable archive includes the Node.js executable, the exact verified REA package, lockfile-resolved production dependencies, runtime license notices, and Korean instructions. The release pipeline verifies package provenance, launcher PE architecture, bundled files, Node version, PowerShell command-validation mode, ZIP integrity, and checksum before upload. The GUI remains a fixed adapter over existing REA CLI workflows. It does not add a provider, expose arbitrary commands, or launch the inspected target. The ZIP is Windows x64 only; the executable is currently unsigned, and the documentation covers checksum verification, SmartScreen, and PowerShell policy limitations. Contribution scope decision: not applicable; no new analysis capability or target authority is introduced. ## Contract and boundary impact - Semantic owner and earliest changed stage: Existing CLI workflow contracts; Windows GUI and release packaging adapters. - Contribution scope fit and linked maintainer decision: Within existing CLI boundaries; no new provider/capability requiring a maintainer scope decision. - CLI and MCP/tool-catalog contract: No CLI/MCP contract changes; adds a portable download to qualified GitHub releases. - Provider, bridge, target-format, or platform compatibility: Windows x64 only; delegates provider and format support to the existing CLI. - Evidence, artifact, provenance, or reconstruction contract: Existing JSON CLI results are displayed unchanged; the bundled package is the exact qualified release artifact. - Target selection, authority, upstream behavior, and cleanup details (if applicable): Local file/directory targets; analysis begins only on explicit user action. The target executable is not launched. - Generated metadata (`docs/public/product-catalog.json`), package, or installation impact: Adds `rea-gui.exe` and `rea-windows-x64-<version>.zip` release assets with a SHA-256 sidecar. Expected effects (check known effects; use documentation-only on its own). Unchecked items do not establish absence; leave uncertainties visible. - [x] Read existing files or captured data. - [x] Launch or attach to a target process. - [ ] Inject instrumentation or run scripts/code in a target. - [ ] Change target process memory, registers, files, or configuration. - [ ] Contact network services as part of target analysis. - [ ] Recover protected code or work around protections. - [ ] Documentation or usability only; no target interaction. - [ ] Not sure yet; investigation or maintainer guidance needed. ## Evidence and regression coverage - Tests added or updated: Package archive isolation fixture includes the `rea-gui` bin; the release verifier checks bundled executables, native controls, licenses, Node version, and the launcher's PowerShell command-validation mode. - Base reproduction or other evidence: Package isolation focused test passed; the GUI allowlist/argument test passed; the release workflow and launcher project metadata parse successfully. - User-visible CLI/MCP output (if applicable): Not applicable; the GUI displays JSON output from existing CLI commands. - Remaining proof gaps: The self-contained .NET launcher and final ZIP could not be built locally because this host has no .NET SDK. The release Windows runner builds and verifies the bundle. Provider-backed REA analysis was not run here. For evidence-bearing changes: - [x] Observed, derived, and inferred claims remain distinguishable. - [x] Artifact identity, source provenance, and failed attempts remain preserved. - [x] Unsupported, incomplete, unavailable, or uncertain outcomes remain visible. ## Validation performed - `npm.cmd run test:focused -- tests/boundary/process/packagePackIsolation.test.ts` — passed. - `npm.cmd run docs:check` — passed. - `powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -File .\windows-gui\rea-gui.ps1 -ValidateOnly` — passed. - `npm.cmd exec --no -- oxlint .\scripts\verify-windows-gui-bundle.mjs` — passed. - `node --check .\scripts\verify-windows-gui-bundle.mjs` — passed. - `oxfmt --check` on changed sources and documentation — passed. - YAML parse and launcher project XML validation — passed. - `npm.cmd run check:fast` — failed on two pre-existing max-lines lint errors in unrelated Ghidra tests (`ghidraLauncher.test.ts` and `GhidraFunctionValues.test.ts`). - Local .NET launcher build — not run because this host has no .NET SDK. ## Compatibility, safety, and release - Breaking changes or migration steps: None. - Real Hopper/Ghidra, browser, or OS coverage: GUI command validation passed; provider-backed analysis was not verified here. - Package or release metadata impact: A Windows x64 ZIP and SHA-256 checksum are attached after successful npm publication for a qualified release. - Security, privacy, process, or containment review: Fixed command allowlist; no arbitrary CLI input, target execution, or persistent PowerShell policy change. The launcher is unsigned; the release includes a checksum and instructions to verify it. ## Before merge - [x] This PR addresses a concrete problem or an agreed enhancement. - [x] Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff. - [x] The PR has one focused outcome and the title follows `type(scope): outcome`. - [x] Related issue is linked, or the reason for not linking one is stated above. - [x] Tests cover changed observable behavior and meaningful failure paths. - [x] Owning docs, contracts, and generated metadata are updated where needed. - [x] User-visible CLI/MCP changes include representative output. - [x] I checked the final diff for secrets, unrelated cleanup, and unsupported claims. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#5416
No description provided.