fix(package): separate agent and Hopper setup support (#584)

This commit is contained in:
Kaoru0822
2026-10-06 00:00:15 +08:00
committed by GitHub
parent 6fa6f1f9b1
commit 205a977777
3 changed files with 90 additions and 4 deletions
+19
View File
@@ -0,0 +1,19 @@
/** Derive agent and Hopper setup support from the corresponding doctor checks. */
export function packageSetupSupport(
checks:
| readonly { readonly name: string; readonly ok: boolean }[]
| undefined,
platform: NodeJS.Platform,
): {
supportedSetupHost: boolean;
hopperSetupSupported: boolean;
};
/** Validate --help, --llms, and doctor output and determine host setup support. */
export function verifyPackageDiscovery(input: {
readonly cli: string;
readonly environment: Readonly<Record<string, string | undefined>>;
}): Promise<{
supportedSetupHost: boolean;
hopperSetupSupported: boolean;
}>;
+15 -4
View File
@@ -27,6 +27,17 @@ const REQUIRED_LLM_TOPICS = [
"analyze-javascript-application",
];
/** Derive agent and Hopper setup support from the corresponding doctor checks. */
export function packageSetupSupport(checks, platform) {
const supportedSetupHost =
checks?.find(({ name }) => name === "node")?.ok === true;
const hopperSetupSupported =
supportedSetupHost &&
checks?.find(({ name }) => name === "host")?.ok === true &&
platform !== "win32";
return { supportedSetupHost, hopperSetupSupported };
}
/** Validate --help, --llms, and doctor output and determine host setup support. */
export async function verifyPackageDiscovery({ cli, environment }) {
const help = await run(cli, ["--help"], environment);
@@ -37,10 +48,10 @@ export async function verifyPackageDiscovery({ cli, environment }) {
environment,
);
const doctor = json(doctorExecution.stdout);
const supportedSetupHost =
doctor.checks?.find(({ name }) => name === "host")?.ok === true;
const hopperSetupSupported =
supportedSetupHost && process.platform !== "win32";
const { supportedSetupHost, hopperSetupSupported } = packageSetupSupport(
doctor.checks,
process.platform,
);
const hopperReady = doctor.checks?.find(({ name }) => name === "hopper")?.ok;
const expectedDoctorHealth = doctor.checks?.every(({ ok }) => ok) === true;
const missingHelp = REQUIRED_HELP_COMMANDS.filter(
@@ -0,0 +1,56 @@
import { describe, expect, it } from "vitest";
import { packageSetupSupport } from "../../../scripts/verify-package-discovery.mjs";
describe("packaged setup support classification", () => {
it.each([
["linux", true, true, true, true],
["linux", true, false, true, false],
["linux", false, true, false, false],
["linux", false, false, false, false],
["darwin", true, true, true, true],
["darwin", true, false, true, false],
["darwin", false, true, false, false],
["darwin", false, false, false, false],
["win32", true, true, true, false],
["win32", true, false, true, false],
["win32", false, true, false, false],
["win32", false, false, false, false],
] as const)(
"%s with node=%s and host=%s: agent setup=%s, Hopper setup=%s",
(platform, node, host, supportedSetupHost, hopperSetupSupported) => {
expect(
packageSetupSupport(
[
{ name: "host", ok: host },
{ name: "node", ok: node },
],
platform,
),
).toEqual({ supportedSetupHost, hopperSetupSupported });
},
);
it.each([
{ checks: undefined },
{ checks: [] },
{ checks: [{ name: "host", ok: true }] },
])("requires an affirmative Node check: $checks", ({ checks }) => {
expect(packageSetupSupport(checks, "linux")).toEqual({
supportedSetupHost: false,
hopperSetupSupported: false,
});
});
it("requires an affirmative host check only for Hopper setup", () => {
expect(
packageSetupSupport(
[
{ name: "node", ok: true },
{ name: "hopper", ok: true },
],
"linux",
),
).toEqual({ supportedSetupHost: true, hopperSetupSupported: false });
});
});