UNPKG

@directus/api

Version:

Directus is a real-time API and App dashboard for managing SQL database content

108 lines (106 loc) 3.38 kB
import { requireText } from "../../../utils/require-text.js"; import { defineTool } from "../define-tool.js"; import { CollectionsService } from "../../../services/collections.js"; import { CollectionItemInputSchema, CollectionItemOutputSchema, CollectionItemValidateCreateSchema, CollectionItemValidateUpdateSchema, PrimaryKeyOutputSchema } from "../schema.js"; import { InvalidPayloadError } from "@directus/errors"; import { isObject, toArray } from "@directus/utils"; import { fileURLToPath } from "node:url"; import { z as z$1 } from "zod"; import { dirname, resolve } from "node:path"; //#region src/ai/tools/collections/index.ts const __dirname = dirname(fileURLToPath(import.meta.url)); const CollectionsValidateSchema = z$1.discriminatedUnion("action", [ z$1.strictObject({ action: z$1.literal("create"), data: z$1.array(CollectionItemValidateCreateSchema) }), z$1.strictObject({ action: z$1.literal("read"), keys: z$1.array(z$1.string()).optional() }), z$1.strictObject({ action: z$1.literal("update"), data: z$1.array(CollectionItemValidateUpdateSchema) }), z$1.strictObject({ action: z$1.literal("delete"), keys: z$1.array(z$1.string()) }) ]); const CollectionsInputSchema = z$1.object({ action: z$1.enum([ "create", "read", "update", "delete" ]).describe("The operation to perform"), keys: z$1.array(z$1.string()).optional(), data: z$1.array(CollectionItemInputSchema).optional() }); const CollectionsOutputSchema = z$1.object({ data: z$1.union([ z$1.array(CollectionItemOutputSchema), z$1.array(PrimaryKeyOutputSchema), z$1.null() ]) }); const collections = defineTool({ name: "collections", admin: true, description: "Reads and changes Directus collections. Use to create content models, folders, collection metadata, or inspect existing collections.", instructions: requireText(resolve(__dirname, "./prompt.md")), keywords: [ "data model", "content model", "tables", "schema folders", "collection metadata" ], annotations: { title: "Directus - Collections", destructiveHint: true }, inputSchema: CollectionsInputSchema, validateSchema: CollectionsValidateSchema, output: CollectionsOutputSchema, readOnly: (input) => input.action === "read", endpoint({ data }) { if (!isObject(data) || !("collection" in data)) return; return ["content", data["collection"]]; }, async handler({ args, schema, accountability }) { const service = new CollectionsService({ schema, accountability }); if (args.action === "create") { const data = toArray(args.data); const savedKeys = await service.createMany(data); return { type: "text", data: await service.readMany(savedKeys) || null }; } if (args.action === "read") { let result = null; if (args.keys) result = await service.readMany(args.keys); else result = await service.readByQuery(); return { type: "text", data: result || null }; } if (args.action === "update") { const updatedKeys = await service.updateBatch(toArray(args.data)); return { type: "text", data: await service.readMany(updatedKeys) || null }; } if (args.action === "delete") return { type: "text", data: await service.deleteMany(args.keys) }; throw new InvalidPayloadError({ reason: "Invalid action" }); } }); //#endregion export { CollectionsInputSchema, CollectionsValidateSchema, collections };