Описание
При вызове POST /api/leaderboard/sync в логах появляется ошибка:
Error: stepping, bad JSON path: '\$.type'
Проблема возникает во время локального сбора статистики перед отправкой данных в leaderboard.
Источник ошибки: src/data.js
Причина
Сейчас запрос к SQLite собирается через execSync(...) как shell-команда и содержит JSON path с лишним экранированием:
\$.tool
\$.state.input.name
\$.type
Для SQLite это невалидные JSON path. Корректный формат:
$.tool
$.state.input.name
$.type
Из-за этого SQLite и пишет:
Error: stepping, bad JSON path: '\$.type'
Дополнительно код использует shell-специфичное quoting ($'\t'), что делает поведение хрупким и платформозависимым.
Текущее поведение
leaderboard/sync засоряет логи ошибками SQLite
- enrichment OpenCode sessions по
mcp_servers и skills может не выполняться
- поведение зависит от shell/окружения, что особенно заметно при переносе с воркера на реальный сервер
Предлагаемый фикс
Заменить этот вызов execSync(...) на execFileSync('sqlite3', [...]), как это уже сделано в остальных SQLite-запросах в коде.
Что нужно изменить:
- передавать
-separator и \t отдельными аргументами
- передавать SQL как отдельный аргумент, без shell-экранирования
- использовать JSON path без обратного слэша:
$.tool
$.state.input.name
$.type
Ожидаемый результат
После фикса:
POST /api/leaderboard/sync больше не пишет bad JSON path
- OpenCode sessions корректно заполняют
mcp_servers и skills
- запрос работает стабильно и одинаково на Windows/Linux
Критерии приёмки
- повторные вызовы
POST /api/leaderboard/sync не дают ошибок bad JSON path
- OpenCode sessions продолжают корректно загружаться
- поля
mcp_servers и skills присутствуют там, где должны
- нет регрессии в остальных SQLite-частях статистики
Тема для PR
fix(data): replace shell sqlite query in OpenCode scan and remove invalid JSON path escaping
Описание
При вызове
POST /api/leaderboard/syncв логах появляется ошибка:Проблема возникает во время локального сбора статистики перед отправкой данных в leaderboard.
Источник ошибки: src/data.js
Причина
Сейчас запрос к SQLite собирается через
execSync(...)как shell-команда и содержит JSON path с лишним экранированием:Для SQLite это невалидные JSON path. Корректный формат:
Из-за этого SQLite и пишет:
Дополнительно код использует shell-специфичное quoting (
$'\t'), что делает поведение хрупким и платформозависимым.Текущее поведение
leaderboard/syncзасоряет логи ошибками SQLitemcp_serversиskillsможет не выполнятьсяПредлагаемый фикс
Заменить этот вызов
execSync(...)наexecFileSync('sqlite3', [...]), как это уже сделано в остальных SQLite-запросах в коде.Что нужно изменить:
-separatorи\tотдельными аргументами$.tool$.state.input.name$.typeОжидаемый результат
После фикса:
POST /api/leaderboard/syncбольше не пишетbad JSON pathmcp_serversиskillsКритерии приёмки
POST /api/leaderboard/syncне дают ошибокbad JSON pathmcp_serversиskillsприсутствуют там, где должныТема для PR