feat: release design system engine, studio and component contracts
This commit is contained in:
1 parent
ff1065fb27
commit
3943b946d6
693 files changed
+175546
-3894
No files matched your search
@@ -0,0 +1,113 @@
|
||||
/** Reproducible Phase 6 local agent evaluation. No provider calls, routes or deployments. */
|
||||
import { mkdirSync, writeFileSync } from "node:fs";
|
||||
import { resolve, join } from "node:path";
|
||||
import { createFrameworkMcpServer } from "../packages/mcp/src/index.ts";
|
||||
import { CORE_DESIGN_SYSTEMS } from "../packages/design-system/src/index.ts";
|
||||
import { compileWrnFile } from "../packages/compiler/src/index.ts";
|
||||
import { checkDesignConformance } from "../packages/design-studio/src/conformance.ts";
|
||||
import type { AgentPage } from "../packages/design-studio/src/agent-pages.ts";
|
||||
const output = resolve("output/design-system-phase-6");
|
||||
mkdirSync(output, { recursive: true });
|
||||
const report: Array<Record<string, unknown>> = [];
|
||||
for (const [name, system] of Object.entries(CORE_DESIGN_SYSTEMS)) {
|
||||
const directory = join(output, name);
|
||||
mkdirSync(directory, { recursive: true });
|
||||
writeFileSync(join(directory, "package.json"), "{}");
|
||||
const server = createFrameworkMcpServer(directory, { design: true, designWrite: true });
|
||||
let draft = (await server.call("wrnexus_design_inspect")) as { revision: string };
|
||||
draft = (await server.call("wrnexus_design_create", {
|
||||
baseRevision: draft.revision,
|
||||
source: JSON.stringify(system),
|
||||
})) as typeof draft;
|
||||
const context = await server.call("wrnexus_design_context", {
|
||||
components: ["PageHeader", "Input", "Button", "Alert"],
|
||||
});
|
||||
writeFileSync(join(directory, "agent-context.json"), JSON.stringify(context, null, 2));
|
||||
for (const id of ["account", "support"]) {
|
||||
const page: AgentPage = {
|
||||
id,
|
||||
title: id === "account" ? "Account settings" : "Contact support",
|
||||
components: [
|
||||
{
|
||||
component: "PageHeader",
|
||||
props: { title: id === "account" ? "Your profile" : "How can we help?" },
|
||||
},
|
||||
{
|
||||
component: "Input",
|
||||
props: { id: id + "-name", label: "Your name", placeholder: "Enter your name" },
|
||||
},
|
||||
{
|
||||
component: "Input",
|
||||
props: {
|
||||
id: id + "-email",
|
||||
label: "Email",
|
||||
type: "email",
|
||||
placeholder: "you@example.com",
|
||||
},
|
||||
},
|
||||
{
|
||||
component: "Alert",
|
||||
props: {
|
||||
title: "Design preview",
|
||||
description: "This page uses your selected design system.",
|
||||
},
|
||||
},
|
||||
{
|
||||
component: "Button",
|
||||
props: { label: id === "account" ? "Save profile" : "Send request", variant: "default" },
|
||||
},
|
||||
],
|
||||
};
|
||||
draft = (await server.call("wrnexus_design_page", {
|
||||
baseRevision: draft.revision,
|
||||
page,
|
||||
})) as typeof draft;
|
||||
for (const mode of ["light", "dark"]) {
|
||||
const preview = (await server.call("wrnexus_design_preview", { pageId: id, mode })) as {
|
||||
html: string;
|
||||
};
|
||||
writeFileSync(join(directory, `${id}-${mode}.html`), preview.html);
|
||||
}
|
||||
}
|
||||
const exported = (await server.call("wrnexus_design_export")) as {
|
||||
pages: Record<string, string>;
|
||||
artifacts: Record<string, string>;
|
||||
};
|
||||
for (const [filename, source] of Object.entries(exported.pages)) {
|
||||
writeFileSync(join(directory, filename), source);
|
||||
const conformance = checkDesignConformance(source);
|
||||
const compiled = compileWrnFile(source);
|
||||
if (!conformance.ok || !compiled) throw Error("Agent evaluation failed.");
|
||||
report.push({
|
||||
system: name,
|
||||
page: filename,
|
||||
compiled: true,
|
||||
conformance,
|
||||
modes: ["light", "dark"],
|
||||
preview: "Trusted shipped SSR components; static CSP-protected HTML.",
|
||||
});
|
||||
}
|
||||
for (const [name, body] of Object.entries(exported.artifacts))
|
||||
writeFileSync(join(directory, name + ".txt"), body);
|
||||
}
|
||||
writeFileSync(
|
||||
join(output, "report.json"),
|
||||
JSON.stringify(
|
||||
{
|
||||
passed: true,
|
||||
pages: report.length,
|
||||
previews: report.length * 2,
|
||||
evaluations: report,
|
||||
limits: [
|
||||
"No LLM call. This exercises the agent tool protocol deterministically.",
|
||||
"Static checks and SSR previews do not certify all accessibility, dynamic behavior or visual quality.",
|
||||
"Generated pages and design artifacts require explicit application integration.",
|
||||
],
|
||||
},
|
||||
null,
|
||||
2,
|
||||
),
|
||||
);
|
||||
console.log(
|
||||
`Agent evaluation passed: ${report.length} pages and ${report.length * 2} previews. ${output}`,
|
||||
);
|
||||
Reference in new issue
Block a user