fix(cli-tools): tolerate JSONC configs in CLI tool settings routes

readConfig/readSettings/readJson across all CLI tool settings routes used
JSON.parse() but only caught ENOENT, re-throwing SyntaxError on any
corrupted or JSONC-formatted config file. The API would return 500, which
the UI misinterpreted as "tool not installed."

This patch:
- strips trailing commas before parsing (handles JSONC from opencode, etc.)
- returns null on any parse error instead of re-throwing, so the UI shows
  "installed but not configured" (accurate) instead of "not installed"
- applies the same fix to all 8 affected routes: opencode, openclaw, kilo,
  droid, cowork, copilot, claude, and cline

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Zireael
2026-06-20 15:37:01 +07:00
committed by decolua
co-authored by Cursor
parent f6c2f7cae3
commit 6c10edf8ba
8 changed files with 54 additions and 30 deletions
+5 -3
View File
@@ -35,10 +35,12 @@ const checkInstalled = async () => {
const readJson = async (filePath) => {
try {
const content = await fs.readFile(filePath, "utf-8");
return JSON.parse(content);
// Tolerate JSONC (trailing commas) and treat unparseable files as "no config"
// rather than throwing a 500 that the UI misreads as "tool not installed".
const stripped = content.replace(/,(\s*[}\]])/g, "$1");
return JSON.parse(stripped);
} catch (error) {
if (error.code === "ENOENT") return null;
throw error;
return null;
}
};