|
|
@@ -12,7 +12,6 @@ import { Auth } from "../auth"
|
|
|
import { Env } from "../env"
|
|
|
import { applyEdits, modify } from "jsonc-parser"
|
|
|
import { Instance, type InstanceContext } from "../project/instance"
|
|
|
-import * as LSPServer from "../lsp/server"
|
|
|
import { InstallationLocal, InstallationVersion } from "@/installation/version"
|
|
|
import { existsSync } from "fs"
|
|
|
import { GlobalBus } from "@/bus/global"
|
|
|
@@ -37,6 +36,8 @@ import { ConfigPermission } from "./permission"
|
|
|
import { ConfigProvider } from "./provider"
|
|
|
import { ConfigSkills } from "./skills"
|
|
|
import { ConfigPaths } from "./paths"
|
|
|
+import { ConfigFormatter } from "./formatter"
|
|
|
+import { ConfigLSP } from "./lsp"
|
|
|
|
|
|
const log = Log.create({ service: "config" })
|
|
|
|
|
|
@@ -186,56 +187,8 @@ export const Info = z
|
|
|
)
|
|
|
.optional()
|
|
|
.describe("MCP (Model Context Protocol) server configurations"),
|
|
|
- formatter: z
|
|
|
- .union([
|
|
|
- z.literal(false),
|
|
|
- z.record(
|
|
|
- z.string(),
|
|
|
- z.object({
|
|
|
- disabled: z.boolean().optional(),
|
|
|
- command: z.array(z.string()).optional(),
|
|
|
- environment: z.record(z.string(), z.string()).optional(),
|
|
|
- extensions: z.array(z.string()).optional(),
|
|
|
- }),
|
|
|
- ),
|
|
|
- ])
|
|
|
- .optional(),
|
|
|
- lsp: z
|
|
|
- .union([
|
|
|
- z.literal(false),
|
|
|
- z.record(
|
|
|
- z.string(),
|
|
|
- z.union([
|
|
|
- z.object({
|
|
|
- disabled: z.literal(true),
|
|
|
- }),
|
|
|
- z.object({
|
|
|
- command: z.array(z.string()),
|
|
|
- extensions: z.array(z.string()).optional(),
|
|
|
- disabled: z.boolean().optional(),
|
|
|
- env: z.record(z.string(), z.string()).optional(),
|
|
|
- initialization: z.record(z.string(), z.any()).optional(),
|
|
|
- }),
|
|
|
- ]),
|
|
|
- ),
|
|
|
- ])
|
|
|
- .optional()
|
|
|
- .refine(
|
|
|
- (data) => {
|
|
|
- if (!data) return true
|
|
|
- if (typeof data === "boolean") return true
|
|
|
- const serverIds = new Set(Object.values(LSPServer).map((s) => s.id))
|
|
|
-
|
|
|
- return Object.entries(data).every(([id, config]) => {
|
|
|
- if (config.disabled) return true
|
|
|
- if (serverIds.has(id)) return true
|
|
|
- return Boolean(config.extensions)
|
|
|
- })
|
|
|
- },
|
|
|
- {
|
|
|
- error: "For custom LSP servers, 'extensions' array is required.",
|
|
|
- },
|
|
|
- ),
|
|
|
+ formatter: ConfigFormatter.Info.optional(),
|
|
|
+ lsp: ConfigLSP.Info.optional(),
|
|
|
instructions: z.array(z.string()).optional().describe("Additional instruction files or patterns to include"),
|
|
|
layout: Layout.optional().describe("@deprecated Always uses stretch layout."),
|
|
|
permission: ConfigPermission.Info.optional(),
|