fix(package): separate agent and Hopper setup support (#584)
This commit is contained in:
@@ -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;
|
||||
}>;
|
||||
@@ -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 });
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user