2026-05-10 23:12:26 +02:00
|
|
|
import { z } from 'zod';
|
|
|
|
|
|
|
|
|
|
const projectDirSchema = z.string().min(1);
|
|
|
|
|
const safeConnectionIdSchema = z.string().regex(/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/, 'Unsafe connection id');
|
|
|
|
|
const stringArraySchema = z.array(z.string());
|
|
|
|
|
|
|
|
|
|
export const connectionAddCommandSchema = z.object({
|
|
|
|
|
command: z.literal('add'),
|
|
|
|
|
projectDir: projectDirSchema,
|
|
|
|
|
driver: z.string().min(1),
|
|
|
|
|
connectionId: safeConnectionIdSchema,
|
|
|
|
|
url: z.string().optional(),
|
|
|
|
|
schemas: stringArraySchema,
|
|
|
|
|
readonly: z.boolean(),
|
|
|
|
|
force: z.boolean(),
|
|
|
|
|
allowLiteralCredentials: z.boolean(),
|
|
|
|
|
notion: z
|
|
|
|
|
.object({
|
|
|
|
|
authTokenRef: z.string().min(1),
|
|
|
|
|
crawlMode: z.enum(['all_accessible', 'selected_roots']),
|
|
|
|
|
rootPageIds: stringArraySchema,
|
|
|
|
|
rootDatabaseIds: stringArraySchema,
|
|
|
|
|
rootDataSourceIds: stringArraySchema,
|
|
|
|
|
maxPagesPerRun: z.number().int().positive().optional(),
|
|
|
|
|
maxKnowledgeCreatesPerRun: z.number().int().nonnegative().optional(),
|
|
|
|
|
maxKnowledgeUpdatesPerRun: z.number().int().nonnegative().optional(),
|
|
|
|
|
})
|
|
|
|
|
.optional(),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export const wikiWriteCommandSchema = z.object({
|
|
|
|
|
command: z.literal('write'),
|
|
|
|
|
projectDir: projectDirSchema,
|
|
|
|
|
key: z.string().min(1),
|
|
|
|
|
scope: z.enum(['GLOBAL', 'USER']),
|
|
|
|
|
userId: z.string().min(1),
|
|
|
|
|
summary: z.string().min(1),
|
|
|
|
|
content: z.string().min(1),
|
|
|
|
|
tags: stringArraySchema,
|
|
|
|
|
refs: stringArraySchema,
|
|
|
|
|
slRefs: stringArraySchema,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const orderBySchema = z.union([
|
|
|
|
|
z.string().min(1),
|
|
|
|
|
z.object({
|
|
|
|
|
field: z.string().min(1),
|
|
|
|
|
direction: z.enum(['asc', 'desc']).optional(),
|
|
|
|
|
}),
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
export const slQueryCommandSchema = z.object({
|
|
|
|
|
command: z.literal('query'),
|
|
|
|
|
projectDir: projectDirSchema,
|
|
|
|
|
connectionId: z.string().min(1).optional(),
|
|
|
|
|
query: z.object({
|
|
|
|
|
measures: z.array(z.string().min(1)).min(1),
|
|
|
|
|
dimensions: stringArraySchema,
|
|
|
|
|
filters: stringArraySchema.optional(),
|
|
|
|
|
segments: stringArraySchema.optional(),
|
|
|
|
|
order_by: z.array(orderBySchema).optional(),
|
|
|
|
|
limit: z.number().int().positive().optional(),
|
|
|
|
|
include_empty: z.literal(true).optional(),
|
|
|
|
|
}),
|
|
|
|
|
format: z.enum(['json', 'sql']),
|
|
|
|
|
execute: z.boolean(),
|
2026-05-11 15:50:34 +02:00
|
|
|
cliVersion: z.string().min(1),
|
|
|
|
|
runtimeInstallPolicy: z.enum(['prompt', 'auto', 'never']),
|
2026-05-10 23:12:26 +02:00
|
|
|
maxRows: z.number().int().positive().optional(),
|
|
|
|
|
});
|