mirror of
https://github.com/morluto/rea
synced 2026-10-26 22:28:27 -04:00
70cd4cbfb8
Replace fixed Linux Hopper release pins with current vendor feed metadata, complete detached-PGP package verification under the stable publisher primary key, and authenticated package evidence for offline admission. Share parsed publisher facts across approved setup, doctor and the pre-execution guard. Preserve existing ownership, cancellation, private-display and cleanup rules. Fixes #3577 Normalize empty XDG settings, preserve backups during approved cache repair, and retain publisher cleanup through cancellation and shutdown. Exercise cold offline verification without reusing process-local proof state. Serialize approved cache publication across processes, restore old evidence on failure, and share the existing lease owner from process without changing its identities. Validation: 438 focused tests (six platform-related skips), full static/documentation checks, real Ubuntu 24.04 official Hopper 6.6.0 setup/CLI/MCP, offline ordinary-user admission, launcher mutation rejection, and cold/warm verification measurements. Official RPM metadata mismatch is tracked separately in #3578 and fails closed. BREAKING CHANGE: Older Linux Hopper builds admitted by the fixed allowlist now require retained publisher-signed package evidence or an approved update to the current public demo. Update explicit HOPPER_LAUNCHER_PATH values when migrating; the live feed exposes only its current release. Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com> Co-authored-by: gensokyo-dev <342580529+gensokyo-dev@users.noreply.github.com>
44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
import { CATALOG_IDENTITY } from "../catalogIdentity.js";
|
|
import { PRODUCT_IDENTITY } from "../identity.js";
|
|
import { ok } from "../domain/result.js";
|
|
import type { DoctorHost } from "./Doctor.js";
|
|
|
|
/** Healthy recording host for focused doctor and projection tests. */
|
|
export const createDoctorHostFixture = (
|
|
overrides: Partial<DoctorHost> = {},
|
|
): DoctorHost => ({
|
|
platform: "darwin",
|
|
homeDirectory: "/fixture/home",
|
|
architecture: "x64",
|
|
runtime: { id: "node", version: "24.18.0" },
|
|
macosVersion: () => Promise.resolve("14.0"),
|
|
linuxDistribution: () => Promise.resolve(undefined),
|
|
validTarget: (path) => Promise.resolve(path.includes("Hopper")),
|
|
executable: (path) => Promise.resolve(path.includes("Hopper")),
|
|
inspectLinuxHopper: () =>
|
|
Promise.resolve(
|
|
ok({
|
|
sha256: "0".repeat(64),
|
|
version: "fixture",
|
|
primaryFingerprint: "0".repeat(40),
|
|
signingFingerprint: "1".repeat(40),
|
|
source: "signed_package_cache" as const,
|
|
}),
|
|
),
|
|
linuxDemoRuntimeCheck: () =>
|
|
Promise.resolve({
|
|
name: "hopper-demo-runtime",
|
|
ok: true,
|
|
classification: "healthy",
|
|
}),
|
|
brewHopperPath: () => Promise.resolve(undefined),
|
|
manualHopperPaths: () => Promise.resolve([]),
|
|
installedSkillIdentity: () =>
|
|
Promise.resolve({
|
|
version: PRODUCT_IDENTITY.skillVersion,
|
|
toolCount: CATALOG_IDENTITY.counts.mcp_tools,
|
|
canonical: true,
|
|
}),
|
|
...overrides,
|
|
});
|