-
Notifications
You must be signed in to change notification settings - Fork 2.6k
/
Copy pathindex.ts
104 lines (91 loc) · 3.03 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import * as z from "zod";
import { dataSchema } from "./data/index.js";
import { modelSchema, partialModelSchema } from "./models.js";
export const contextSchema = z.object({
provider: z.string(),
params: z.any().optional(),
});
const mcpServerSchema = z.object({
name: z.string(),
command: z.string(),
faviconUrl: z.string().optional(),
args: z.array(z.string()).optional(),
env: z.record(z.string()).optional(),
});
const promptSchema = z.object({
name: z.string(),
description: z.string().optional(),
prompt: z.string(),
});
const docSchema = z.object({
name: z.string(),
startUrl: z.string(),
rootUrl: z.string().optional(),
faviconUrl: z.string().optional(),
});
export const blockItemWrapperSchema = <T extends z.AnyZodObject>(schema: T) =>
z.object({
uses: z.string(),
with: z.record(z.string()).optional(),
override: schema.partial().optional(),
});
export const blockOrSchema = <T extends z.AnyZodObject>(schema: T) =>
z.union([schema, blockItemWrapperSchema(schema)]);
export const baseConfigYamlSchema = z.object({
name: z.string(),
version: z.string(),
schema: z.string().optional(),
});
export const configYamlSchema = baseConfigYamlSchema.extend({
models: z
.array(
z.union([
modelSchema,
z.object({
uses: z.string(),
with: z.record(z.string()).optional(),
override: partialModelSchema.optional(),
}),
]),
)
.optional(),
context: z.array(blockOrSchema(contextSchema)).optional(),
data: z.array(blockOrSchema(dataSchema)).optional(),
mcpServers: z.array(blockOrSchema(mcpServerSchema)).optional(),
rules: z
.array(
z.union([
z.string(),
z.object({
uses: z.string(),
with: z.record(z.string()).optional(),
}),
]),
)
.optional(),
prompts: z.array(blockOrSchema(promptSchema)).optional(),
docs: z.array(blockOrSchema(docSchema)).optional(),
});
export type ConfigYaml = z.infer<typeof configYamlSchema>;
export const assistantUnrolledSchema = baseConfigYamlSchema.extend({
models: z.array(modelSchema.nullable()).optional(),
context: z.array(contextSchema.nullable()).optional(),
data: z.array(dataSchema.nullable()).optional(),
mcpServers: z.array(mcpServerSchema.nullable()).optional(),
rules: z.array(z.string().nullable()).optional(),
prompts: z.array(promptSchema.nullable()).optional(),
docs: z.array(docSchema.nullable()).optional(),
});
export type AssistantUnrolled = z.infer<typeof assistantUnrolledSchema>;
export const blockSchema = baseConfigYamlSchema.and(
z.union([
z.object({ models: z.array(modelSchema).length(1) }),
z.object({ context: z.array(contextSchema).length(1) }),
z.object({ data: z.array(dataSchema).length(1) }),
z.object({ mcpServers: z.array(mcpServerSchema).length(1) }),
z.object({ rules: z.array(z.string()).length(1) }),
z.object({ prompts: z.array(promptSchema).length(1) }),
z.object({ docs: z.array(docSchema).length(1) }),
]),
);
export type Block = z.infer<typeof blockSchema>;