Skip to content

Fix leaderboard sync for OpenCode: invalid SQLite JSON path \$.type in session enrichment query #146

@lightcomc

Description

@lightcomc

Описание

При вызове 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions