|
|
|
|
@@ -71,15 +71,8 @@ function get_config_paths() {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Project-local: ./.opencode/svelte.json (cwd)
|
|
|
|
|
let project_path: string | null = null;
|
|
|
|
|
const project_config = join(process.cwd(), '.opencode', 'svelte.json');
|
|
|
|
|
if (existsSync(project_config)) {
|
|
|
|
|
project_path = project_config;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Lowest priority first, highest priority last (project overrides global)
|
|
|
|
|
return [global_path, config_dir_path, project_path];
|
|
|
|
|
// returning config_dir first so it has higher priority
|
|
|
|
|
return [config_dir_path, global_path];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function load_config_file(config_path: string): ConfigLoadResult {
|
|
|
|
|
@@ -128,9 +121,6 @@ function merge_with_defaults(user_config: Partial<McpConfig>): McpConfig {
|
|
|
|
|
|
|
|
|
|
export function get_mcp_config(ctx: PluginInput) {
|
|
|
|
|
const config_paths = get_config_paths();
|
|
|
|
|
let merged: Partial<McpConfig> = {};
|
|
|
|
|
|
|
|
|
|
// Iterate from lowest to highest priority, merging as we go
|
|
|
|
|
for (const path of config_paths) {
|
|
|
|
|
if (path && existsSync(path)) {
|
|
|
|
|
const result = load_config_file(path);
|
|
|
|
|
@@ -139,28 +129,23 @@ export function get_mcp_config(ctx: PluginInput) {
|
|
|
|
|
ctx.client.tui.showToast({
|
|
|
|
|
body: {
|
|
|
|
|
title: 'Svelte: Invalid opencode plugin config',
|
|
|
|
|
message: `${result.parse_error} (${path})\nSkipping this config file`,
|
|
|
|
|
message: `${result.parse_error}\nUsing default values`,
|
|
|
|
|
variant: 'warning',
|
|
|
|
|
duration: 7000,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}, 7000);
|
|
|
|
|
continue;
|
|
|
|
|
return default_config;
|
|
|
|
|
}
|
|
|
|
|
const parsed = v.safeParse(config_schema, result.data);
|
|
|
|
|
if (parsed.success) {
|
|
|
|
|
merged = {
|
|
|
|
|
mcp: { ...merged.mcp, ...parsed.output.mcp },
|
|
|
|
|
subagent: { ...merged.subagent, ...parsed.output.subagent },
|
|
|
|
|
instructions: { ...merged.instructions, ...parsed.output.instructions },
|
|
|
|
|
skills: { ...merged.skills, ...parsed.output.skills },
|
|
|
|
|
};
|
|
|
|
|
return merge_with_defaults(parsed.output);
|
|
|
|
|
} else {
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
ctx.client.tui.showToast({
|
|
|
|
|
body: {
|
|
|
|
|
title: 'Svelte: Invalid opencode plugin config',
|
|
|
|
|
message: `Invalid config schema (${path})\nSkipping this config file`,
|
|
|
|
|
message: `${result.parse_error}\nUsing default values`,
|
|
|
|
|
variant: 'warning',
|
|
|
|
|
duration: 7000,
|
|
|
|
|
},
|
|
|
|
|
@@ -170,5 +155,5 @@ export function get_mcp_config(ctx: PluginInput) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return merge_with_defaults(merged);
|
|
|
|
|
return default_config;
|
|
|
|
|
}
|
|
|
|
|
|