/*
RFC-0790: sternsystem.discover — scan ../systems-cache/ and list all discovered systems.
- Does not mutate state — read-only discovery command.
- RFC-0790: initial discover command handler.
- RFC-1249: wire werkstatt.commands.validate into packages.check + retire CMD-OUTPUT debt
*/
import type {
KernelCommandInput,
KernelCommandResult,
KernelRuntimeContext,
} from "@warpgogol/werkstatt-engine/kernel";
import { discoverSystems } from "./registry-io.ts";
export interface SternsystemDiscoverData {
systems: Array<{
id: string;
cosmicStar: string;
status: string;
pinnedPlatform: string;
registeredAt: string;
}>;
errors: Array<{ id: string; error: string }>;
count: number;
}
export async function runSternsystemDiscover(
_input: KernelCommandInput,
context: KernelRuntimeContext,
): Promise> {
const { workspaceRoot, logger } = context;
const { systems, errors } = await discoverSystems(workspaceRoot);
const summary = systems.map((s) => ({
id: s.id,
cosmicStar: s.cosmicStar,
status: s.status,
pinnedPlatform: s.pinnedPlatform,
registeredAt: s.registeredAt,
}));
for (const s of summary) {
logger.info(
` ${s.id.padEnd(24)} ${s.cosmicStar.padEnd(12)} ${s.status.padEnd(12)} ${s.pinnedPlatform}`,
);
}
for (const err of errors) {
logger.warn(` [error] ${err.id}: ${err.error}`);
}
return {
data: { systems: summary, errors, count: summary.length },
exitCode: 0,
summary: `[sternsystem.discover] ${summary.length} system${summary.length === 1 ? "" : "s"} discovered${errors.length > 0 ? `, ${errors.length} error${errors.length === 1 ? "" : "s"}` : ""}`,
nextSteps: [
{
action: `Validate discovered systems: pnpm exec werkstatt run sternsystem.validate`,
kind: "optional",
},
],
};
}