File size: 2,137 Bytes
cd8bd0a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import { z } from "zod";

export const CliCatalogEntrySchema = z.object({
  category: z.enum(["code", "agent"]),
  vendor: z.string().min(1),
  acpSpawnable: z.boolean(),
  baseUrlSupport: z.enum(["full", "partial", "none"]),

  id: z.string().min(1),
  name: z.string().min(1),
  icon: z.string().optional(),
  image: z.string().optional(),
  imageLight: z.string().optional(),
  imageDark: z.string().optional(),
  color: z.string().regex(/^#[0-9A-Fa-f]{6}$/),
  description: z.string().min(1),
  docsUrl: z.string().min(1),
  configType: z.enum(["env", "custom", "guide", "custom-builder", "mitm"]),
  envVars: z.record(z.string()).optional(),
  modelAliases: z.array(z.string()).optional(),
  settingsFile: z.string().optional(),
  defaultCommand: z.string().optional(),
  defaultCommands: z.array(z.string()).optional(),
  defaultModels: z
    .array(
      z.object({
        id: z.string(),
        name: z.string(),
        alias: z.string(),
        envKey: z.string().optional(),
        defaultValue: z.string().optional(),
        isTopLevel: z.boolean().optional(),
      })
    )
    .optional(),
  guideSteps: z
    .array(
      z.object({
        step: z.number().int().positive(),
        title: z.string(),
        desc: z.string().optional(),
        value: z.string().optional(),
        copyable: z.boolean().optional(),
        type: z.enum(["apiKeySelector", "modelSelector"]).optional(),
      })
    )
    .optional(),
  codeBlock: z.object({ language: z.string(), code: z.string() }).optional(),
  notes: z
    .array(
      z.object({ type: z.enum(["info", "warning", "error", "cloudCheck"]), text: z.string() })
    )
    .optional(),
  requiresCloud: z.boolean().optional(),
  modelSelectionMode: z.enum(["single", "multiple"]).optional(),
  hideComboModels: z.boolean().optional(),
  previewConfigMode: z.string().optional(),
});

export type CliCatalogEntry = z.infer<typeof CliCatalogEntrySchema>;

export const CliCatalogSchema = z.record(CliCatalogEntrySchema);

/** Cardinalidade obrigatória (Plano §3.1/§3.2 + D15). */
export const EXPECTED_CODE_COUNT = 19;
export const EXPECTED_AGENT_COUNT = 6;