@paroicms/site-generator-plugin
Version:
ParoiCMS Site Generator Plugin
87 lines (86 loc) • 3.14 kB
JavaScript
import { messageOf } from "@paroi/data-formatters-lib";
import { fetchWorkSession, loadStep } from "../db/db-read.queries.js";
import { insertIssueEvent, updateSession } from "../db/db-write.queries.js";
import { invokeMessageGuard } from "../generator/llm-queries/invoke-message-guard.js";
import { startInitialAnalysis } from "../generator/llm-queries/invoke-new-site-analysis.js";
import { startUpdateSiteSchema } from "../generator/llm-queries/invoke-update-site-schema.js";
import { generateSite } from "../generator/site-generator/site-generator.js";
import { newSessionCommand, renewSessionCommand, verifySessionToken } from "./generator-session.js";
export async function executeCommand(commandCtx, input) {
if (input.command === "newSession") {
return {
success: true,
result: await newSessionCommand(commandCtx, input),
};
}
if (input.command === "renewSession") {
return {
success: true,
result: await renewSessionCommand(commandCtx, input),
};
}
const { sessionId } = await verifySessionToken(commandCtx, input.sessionToken);
const ctx = {
...commandCtx,
sessionId,
};
try {
if (input.command === "setLanguage") {
await updateSession(ctx, { language: input.language });
return {
success: true,
result: { updated: true },
};
}
if (input.command === "loadWorkSession") {
return {
success: true,
result: await fetchWorkSession(ctx),
};
}
if (input.command === "loadStep") {
return {
success: true,
result: await loadStep(ctx, input.stepNumber),
};
}
if (input.command === "createSiteSchema") {
const errorResponse = await invokeMessageGuard(ctx, input);
if (errorResponse)
return errorResponse;
return {
success: true,
result: await startInitialAnalysis(ctx, input),
};
}
if (input.command === "updateSiteSchema") {
const errorResponse = await invokeMessageGuard(ctx, input, { skipOutOfScopeCheck: true });
if (errorResponse)
return errorResponse;
return {
success: true,
result: await startUpdateSiteSchema(ctx, input),
};
}
if (input.command === "generateSite") {
return {
success: true,
result: await generateSite(ctx, input),
};
}
ctx.logger.error(`Invalid command: ${input.command}`);
return {
success: false,
userMessage: "Invalid command",
};
}
catch (error) {
try {
await insertIssueEvent(ctx, { eventType: "unexpectedError", issueMessage: messageOf(error) });
}
catch {
ctx.logger.error("Failed to insert issue event", error);
}
throw error;
}
}