47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
import { findDuplicateAgentDirs, formatDuplicateAgentDirError } from "./agent-dirs.js";
|
|
import { applyModelDefaults, applySessionDefaults } from "./defaults.js";
|
|
import { findLegacyConfigIssues } from "./legacy.js";
|
|
import type { ClawdbotConfig, ConfigValidationIssue } from "./types.js";
|
|
import { ClawdbotSchema } from "./zod-schema.js";
|
|
|
|
export function validateConfigObject(
|
|
raw: unknown,
|
|
): { ok: true; config: ClawdbotConfig } | { ok: false; issues: ConfigValidationIssue[] } {
|
|
const legacyIssues = findLegacyConfigIssues(raw);
|
|
if (legacyIssues.length > 0) {
|
|
return {
|
|
ok: false,
|
|
issues: legacyIssues.map((iss) => ({
|
|
path: iss.path,
|
|
message: iss.message,
|
|
})),
|
|
};
|
|
}
|
|
const validated = ClawdbotSchema.safeParse(raw);
|
|
if (!validated.success) {
|
|
return {
|
|
ok: false,
|
|
issues: validated.error.issues.map((iss) => ({
|
|
path: iss.path.join("."),
|
|
message: iss.message,
|
|
})),
|
|
};
|
|
}
|
|
const duplicates = findDuplicateAgentDirs(validated.data as ClawdbotConfig);
|
|
if (duplicates.length > 0) {
|
|
return {
|
|
ok: false,
|
|
issues: [
|
|
{
|
|
path: "agents.list",
|
|
message: formatDuplicateAgentDirError(duplicates),
|
|
},
|
|
],
|
|
};
|
|
}
|
|
return {
|
|
ok: true,
|
|
config: applyModelDefaults(applySessionDefaults(validated.data as ClawdbotConfig)),
|
|
};
|
|
}
|