Перейти к основному содержимому

Синхронизатор внешнего контекста

Работа с отдельным синхронизатором Git, трекеров задач и Sentry. Страница объясняет назначение, порядок применения и проверку результата.

Интеграции

Этот операторский инструмент связывает историю Git, задачи GitHub/GitLab/Jira и события Sentry с методами существующей CPG. Он полезен для анализа владельцев, истории изменений, инцидентов и горячих точек. Это не корневая команда src.cli и не обязательная часть обычного импорта.

Хранение и эффект

CLI читает CPG через GoCPG gRPC по явному пути --duckdb. Синтетические теги и связи существуют как объекты совместимости только в текущем процессе: инструмент не записывает их в CPG проекта. Если передан --pg-url, исходные метаданные могут добавляться или обновляться в PostgreSQL — например, в external_context, file_commit_history и таблицах runtime-метрик.

Следовательно:

  • items_synced, tags_created и edges_created описывают работу запуска, а не устойчивую мутацию CPG;
  • без PostgreSQL исходные внешние записи не сохраняются;
  • перед пилотной синхронизацией нужно ограничить область и сделать резервную копию PostgreSQL.

Источник реализации — src/services/external_context/orchestrator.py.

Предварительные условия

  • актуальная CPG CodeGraph и доступный GoCPG gRPC runtime;
  • соответствующий checkout репозитория для Git-корреляции;
  • необязательная схема PostgreSQL, если внешние метаданные должны храниться устойчиво;
  • минимально необходимые права GitHub, GitLab, Jira или Sentry для выбранного источника.

До комбинированного запуска проверьте каждый источник отдельно.

История Git

python -m src.services.external_context.orchestrator --duckdb data/projects/PROJECT.duckdb --repo-path C:\work\project --sync-git --git-since-days 30 --git-max-commits 500

По умолчанию берутся 90 дней и не более 1 000 коммитов. --no-blame снижает стоимость запуска, но делает сопоставление авторов менее точным.

Задачи

Для GitHub и GitLab используется --issue-repo, для Jira — --issue-project и обычно --issue-url:

python -m src.services.external_context.orchestrator --duckdb data/projects/PROJECT.duckdb --sync-issues --issue-provider github --issue-repo OWNER/REPOSITORY --issue-token TOKEN
python -m src.services.external_context.orchestrator --duckdb data/projects/PROJECT.duckdb --sync-issues --issue-provider jira --issue-project KEY --issue-url https://jira.example.com --issue-token TOKEN

Текущий CLI принимает токен аргументом. Он может попасть в историю shell или список процессов. Запускайте команды только через защищённую операторскую обёртку, которая не сохраняет секреты; не вставляйте боевые токены в общий терминал и документацию.

Sentry

python -m src.services.external_context.orchestrator --duckdb data/projects/PROJECT.duckdb --sync-sentry --sentry-org ORG --sentry-project PROJECT --sentry-token TOKEN

Для собственного экземпляра добавьте --sentry-url. Ограничение на секрет в командной строке остаётся тем же.

Общий запуск и статистика

--sync-all всегда включает Git, а задачи и Sentry добавляет только при наличии их обязательных селекторов. Передавайте --pg-url, только если намерены записывать данные в PostgreSQL.

python -m src.services.external_context.orchestrator --duckdb data/projects/PROJECT.duckdb --repo-path C:\work\project --sync-all --issue-provider gitlab --issue-repo GROUP/REPOSITORY --issue-token TOKEN --sentry-org ORG --sentry-project PROJECT --sentry-token TOKEN --pg-url POSTGRES_URL
python -m src.services.external_context.orchestrator --duckdb data/projects/PROJECT.duckdb --stats --pg-url POSTGRES_URL

Результат содержит ошибки по каждому источнику. При частичном сбое разбирайте источники отдельно; общий успех подтверждается статусом каждого источника.

Диагностика и откат

  • Если GoCPG недоступен, восстановите runtime до повтора; не открывайте CPG вторым писателем.
  • Если методы не сопоставились, проверьте путь репозитория, свежесть CPG, пути файлов и окно дат.
  • Если запись в PostgreSQL не нужна, не передавайте --pg-url.
  • Откатывайте устойчивые метаданные из резервной копии или транзакцией по источнику; синтетические теги текущего процесса исчезают после его завершения.

Источник истины

  • Оркестратор и CLI: src/services/external_context/orchestrator.py
  • Граница чтения и хранения: src/services/external_context/base.py
  • Адаптеры: src/services/external_context/git_sync.py, issue_sync.py, sentry_sync.py
  • Обработка данных: Безопасность LLM