export type WorkflowNodeDefinition = { id: string; name: string; category: "Source" | "Transform" | "Inspect" | "Annotate" | "Export" | "Utility"; description: string; executorType: "python" | "docker" | "http"; inputSchemaSummary: string; outputSchemaSummary: string; supportsCodeHook?: boolean; }; export const WORKFLOW_NODE_DEFINITIONS: WorkflowNodeDefinition[] = [ { id: "source-asset", name: "Source Asset", category: "Source", description: "Load an uploaded asset or registered storage path.", executorType: "python", inputSchemaSummary: "assetRef", outputSchemaSummary: "assetRef", }, { id: "extract-archive", name: "Extract Archive", category: "Transform", description: "Expand a compressed archive into a managed folder artifact.", executorType: "docker", inputSchemaSummary: "assetRef", outputSchemaSummary: "artifactRef", supportsCodeHook: true, }, { id: "rename-folder", name: "Rename Delivery Folder", category: "Transform", description: "Rename the top-level delivery folder to the business naming convention.", executorType: "python", inputSchemaSummary: "artifactRef", outputSchemaSummary: "artifactRef", supportsCodeHook: true, }, { id: "validate-structure", name: "Validate Structure", category: "Inspect", description: "Validate required directories and metadata files.", executorType: "python", inputSchemaSummary: "artifactRef", outputSchemaSummary: "artifactRef + report", supportsCodeHook: true, }, { id: "export-delivery-package", name: "Export Delivery Package", category: "Export", description: "Produce the final delivery package artifact for upload.", executorType: "http", inputSchemaSummary: "artifactRef", outputSchemaSummary: "artifactRef", }, ]; export function renderNodeLibrary(): string { const sections = ["Source", "Transform", "Inspect", "Annotate", "Export", "Utility"] .map((category) => { const nodes = WORKFLOW_NODE_DEFINITIONS.filter( (item) => item.category === category, ) .map((item) => `
  • ${item.name}
  • `) .join(""); return `

    ${category}

    `; }) .join(""); return ``; }