diff --git a/docs/installation.md b/docs/installation.md index 7f870e225..0049a9323 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -463,7 +463,7 @@ vendor-defined limits, and a paid license is optional. REA reuses any detected installation and preserves Hopper during uninstall. The supported native host baseline is macOS 12+, Ubuntu 24.04+, Fedora 41+, -Nobara 44+, 64-bit Arch Linux, or CachyOS. Ghidra and IDA have their own provider-specific +Nobara 44+, 64-bit Arch Linux, CachyOS, or Omarchy. Ghidra and IDA have their own provider-specific host requirements; Windows Ghidra uses the [experimental P0 boundary](windows-ghidra-p0.md). On macOS, approved setup downloads the official DMG, checks its published size diff --git a/src/application/Doctor.test.ts b/src/application/Doctor.test.ts index afc0b5ef1..ebdc94f43 100644 --- a/src/application/Doctor.test.ts +++ b/src/application/Doctor.test.ts @@ -22,7 +22,7 @@ describe("doctor", () => { ), ).toEqual({ node: `Install ${SUPPORTED_NODE_VERSION_PROSE}.`, - host: "REA supports macOS 12+, Ubuntu 24.04+, Fedora 41+, Nobara 44+, 64-bit Arch Linux, CachyOS, and the experimental Windows x64 Ghidra P0 boundary.", + host: "REA supports macOS 12+, Ubuntu 24.04+, Fedora 41+, Nobara 44+, 64-bit Arch Linux, CachyOS, Omarchy, and the experimental Windows x64 Ghidra P0 boundary.", hopper: "Run rea setup to install Hopper, or set HOPPER_LAUNCHER_PATH.", target: "Supply a readable local app or program path.", }); diff --git a/src/application/DoctorDiagnostics.ts b/src/application/DoctorDiagnostics.ts index 39d838fde..d8b4379cc 100644 --- a/src/application/DoctorDiagnostics.ts +++ b/src/application/DoctorDiagnostics.ts @@ -113,7 +113,7 @@ const hostCheck = async (host: DoctorHost): Promise => { : `${linuxDistribution.id} ${linuxDistribution.versionId ?? "unknown"}`); return check("host", supported, detail, { remediation: - "REA supports macOS 12+, Ubuntu 24.04+, Fedora 41+, Nobara 44+, 64-bit Arch Linux, CachyOS, and the experimental Windows x64 Ghidra P0 boundary.", + "REA supports macOS 12+, Ubuntu 24.04+, Fedora 41+, Nobara 44+, 64-bit Arch Linux, CachyOS, Omarchy, and the experimental Windows x64 Ghidra P0 boundary.", classification: "unsupported_host", }); }; diff --git a/src/application/LinuxHopper.test.ts b/src/application/LinuxHopper.test.ts index e3e0091b3..b5cf2d38f 100644 --- a/src/application/LinuxHopper.test.ts +++ b/src/application/LinuxHopper.test.ts @@ -60,12 +60,16 @@ describe("Linux Hopper host classification", () => { ['ID=nobara\nVERSION_ID="44"\nID_LIKE="rhel centos fedora"\n', "rpm"], ["ID=arch\n", "arch"], ["ID=cachyos\nID_LIKE=arch\n", "arch"], - ] as const)("accepts an official Hopper distribution", (document, family) => { - expect(parseLinuxDistribution(document)).toMatchObject({ - packageFamily: family, - supported: true, - }); - }); + ['ID=omarchy\nID_LIKE=arch\nVERSION_ID="4.0.4"\n', "arch"], + ] as const)( + "accepts an explicitly supported distribution", + (document, family) => { + expect(parseLinuxDistribution(document)).toMatchObject({ + packageFamily: family, + supported: true, + }); + }, + ); it("detects unresolved or loader-reported shared libraries", () => { expect( @@ -93,6 +97,8 @@ describe("Linux Hopper host classification", () => { 'ID=debian\nVERSION_ID="13"\nID_LIKE=debian\n', "ID=manjaro\nID_LIKE=arch\n", "ID=garuda\nID_LIKE=arch\n", + "ID=omarchy\n", + "ID=omarchy\nID_LIKE=debian\n", ])("rejects unsupported vendor/version combinations", (document) => { expect(parseLinuxDistribution(document).supported).toBe(false); }); diff --git a/src/application/LinuxHopper.ts b/src/application/LinuxHopper.ts index 3d1658287..3a46106bb 100644 --- a/src/application/LinuxHopper.ts +++ b/src/application/LinuxHopper.ts @@ -154,6 +154,7 @@ export const parseLinuxDistribution = (text: string): LinuxDistribution => { packageFamily !== undefined && (id === "arch" || id === "cachyos" || + (id === "omarchy" && packageFamily === "arch") || (id === "ubuntu" && versionAtLeast(versionId, 24)) || (id === "fedora" && versionAtLeast(versionId, 41)) || (id === "nobara" && versionAtLeast(versionId, 44))); diff --git a/src/application/Setup.recovery.test.ts b/src/application/Setup.recovery.test.ts index cef20ccec..ab480337a 100644 --- a/src/application/Setup.recovery.test.ts +++ b/src/application/Setup.recovery.test.ts @@ -267,7 +267,7 @@ describe("setup scoped readiness", () => { expect(result.status).toBe("needs_human"); expect(host.hopperInstalls).toBe(0); expect(result.remediation).toBe( - "Automated Hopper setup supports Ubuntu 24.04+, Fedora 41+, Nobara 44+, 64-bit Arch Linux, and CachyOS; configure an existing supported provider instead.", + "Automated Hopper setup supports Ubuntu 24.04+, Fedora 41+, Nobara 44+, 64-bit Arch Linux, CachyOS, and Omarchy; configure an existing supported provider instead.", ); }); diff --git a/src/application/SetupHost.ts b/src/application/SetupHost.ts index fe2718dc9..de13be596 100644 --- a/src/application/SetupHost.ts +++ b/src/application/SetupHost.ts @@ -90,7 +90,7 @@ export const hostRemediation = async ( : undefined; } if ((await host.linuxDistribution())?.supported === true) return undefined; - return "Automated Hopper setup supports Ubuntu 24.04+, Fedora 41+, Nobara 44+, 64-bit Arch Linux, and CachyOS; configure an existing supported provider instead."; + return "Automated Hopper setup supports Ubuntu 24.04+, Fedora 41+, Nobara 44+, 64-bit Arch Linux, CachyOS, and Omarchy; configure an existing supported provider instead."; }; /** Production setup effects for Hopper, agent configuration, and the canonical skill directory. */