import { tool } from "@opencode-ai/plugin" import { createDesignPackage, validateDesignPackage } from "../lib/design/designs" export default tool({ description: "Create and validate local Revela design packages generated by the AI design authoring workflow. " + "Use action 'create' to save DESIGN.md and preview.html into ~/.config/revela/designs/{name}/. " + "Use action 'validate' to check a generated design package before asking the user to activate it.", args: { action: tool.schema .enum(["create", "validate"]) .describe("Operation to perform"), name: tool.schema .string() .optional() .describe("Design name in kebab-case. Required for create and validate."), base: tool.schema .string() .optional() .describe("Base design used as structural scaffold, e.g. 'summit'. Recorded in the result only."), designMd: tool.schema .string() .optional() .describe("Complete DESIGN.md content. Required for create."), previewHtml: tool.schema .string() .optional() .describe("Complete preview.html content. Required for create."), overwrite: tool.schema .boolean() .optional() .describe("Whether to replace an existing local design package. Defaults to false."), }, async execute(args) { try { if (!args.name) return JSON.stringify({ error: "name is required" }) switch (args.action) { case "create": { if (!args.designMd) return JSON.stringify({ error: "designMd is required for create" }) if (!args.previewHtml) return JSON.stringify({ error: "previewHtml is required for create" }) const result = createDesignPackage({ name: args.name, base: args.base, designMd: args.designMd, previewHtml: args.previewHtml, overwrite: args.overwrite ?? false, }) return JSON.stringify(result, null, 2) } case "validate": { return JSON.stringify(validateDesignPackage(args.name), null, 2) } default: { return JSON.stringify({ error: `Unknown action: ${args.action}` }) } } } catch (e: any) { return JSON.stringify({ error: e.message || String(e) }) } }, })