UNPKG

@autobe/agent

Version:

AI backend server code generator

105 lines (95 loc) 4.27 kB
import { AutoBeDatabase } from "@autobe/interface"; import { StringUtil } from "@autobe/utils"; import { v7 } from "uuid"; import { AutoBeSystemPromptConstant } from "../../../constants/AutoBeSystemPromptConstant"; import { AutoBeState } from "../../../context/AutoBeState"; import { IAutoBeOrchestrateHistory } from "../../../structures/IAutoBeOrchestrateHistory"; import { AutoBePreliminaryController } from "../../common/AutoBePreliminaryController"; import { transformInterfaceCommonHistory } from "./transformInterfaceCommonHistory"; export const transformInterfaceGroupHistory = (props: { state: AutoBeState; instruction: string; preliminary: AutoBePreliminaryController< | "analysisSections" | "databaseSchemas" | "previousAnalysisSections" | "previousDatabaseSchemas" | "previousInterfaceOperations" | "complete" >; }): IAutoBeOrchestrateHistory => { const common = transformInterfaceCommonHistory(props.state); if (common !== null) return { histories: [common[0], ...common.slice(1)], userMessage: "Please wait for prerequisites to complete", }; const app: AutoBeDatabase.IApplication | undefined = props.state.database?.result.data; return { histories: [ { id: v7(), created_at: new Date().toISOString(), type: "systemMessage", text: AutoBeSystemPromptConstant.INTERFACE_GROUP, }, ...props.preliminary.getHistories(), { id: v7(), created_at: new Date().toISOString(), type: "assistantMessage", text: StringUtil.trim` Here is the database grouping information you can reference. However, database groups are your **STARTING POINT**, not your **STRICT BOUNDARY**: - **Use database groups as your BASELINE**: Most API groups should align with database groups (1:1 mapping) - **API ≠ Database**: APIs serve different purposes than normalized database schemas • APIs organize by **USER WORKFLOWS** (how users interact) • Databases organize by **DATA NORMALIZATION** (how data is stored) - **When to DIVERGE from database groups**: • Cross-schema operations: Analytics/dashboards aggregating multiple database groups • Workflow-based APIs: Checkout spanning Carts + Orders + Payments • Pure computation: APIs that don't touch database at all • External integrations: Webhooks, third-party API gateways - **CRITICAL**: Don't create 1-2 mega-groups ignoring database organization. Start with database groups, then add API-specific groups as needed. Belonged Namespace | Table Name | Stance | Summary -------------------|------------|--------|----------- ${app?.files .map((file) => file.models.map((model) => [file, model] as const)) .flat() .map(([file, model]) => [ file.namespace, model.name, model.stance, StringUtil.summary(model.description), ].join(" | "), ) .join("\n")} `, }, { id: v7(), created_at: new Date().toISOString(), type: "assistantMessage", text: StringUtil.trim` ## API Design Instructions The following API-specific instructions were extracted from the user's requirements. These focus on API interface design aspects such as endpoint patterns, request/response formats, DTO schemas, and operation specifications. Follow these instructions when organizing API endpoints. Carefully distinguish between: - Suggestions or recommendations (consider these as guidance) - Direct specifications or explicit commands (these must be followed exactly) When instructions contain direct specifications or explicit design decisions, follow them precisely even if you believe you have better alternatives. ${props.instruction} `, }, ], userMessage: "Design API endpoint groups please", }; };