Перед передачей исходного кода в LLM удаляются персональные данные, пароли и любые другие чувствительные данные, которые могут быть указаны в строковых литералах. Это снижает риск утечек и соответствует требованиям по защите тайны связи и персональных данных.
- Все строковые литералы в коде (между
"), включая многострочные. - Содержимое строк полностью заменяется на
<REDACTED>. - Комментарии (
//и/* ... */) заменяются на//<REDACTED_COMMENT>или/*<REDACTED_COMMENT>*/. - Строковые литералы в статических находках (snippets) также редактируются.
Важно: идентификаторы, имена переменных и структура кода сохраняются без изменений.
- Полная редукция: любая строка →
<REDACTED>. - Комментарии сохраняются только как маркер
<REDACTED_COMMENT>. - Маскирование применяется ко всему содержимому файла, которое отправляется в LLM.
Маскирование выполняется перед формированием промптов:
- Кодовые блоки (
codestage). - Паттерны (
patternstage). - Запросы (
querystage).
Для каждого LLM-запроса создаётся артефакт-отчёт:
- Формат: JSON
- Имя файла:
{run_id}_{stage}_llm_redaction_{index}.json - Тип артефакта:
{stage}_llm_redaction.json
source_path: путь исходного файлаunit_name: имя единицы анализаunit_id: идентификатор unit (если доступен)redacted_literals: количество замаскированных строковых литераловredacted_lines: номера строк, где применена маскаredactions_by_line: словарь{номер_строки: количество_масок}redacted_comments: количество замаскированных комментариевcomment_lines: номера строк, где были комментарииcomments_by_line: словарь{номер_строки: количество_комментариев}redacted_in_findings: количество редактирований в статических snippets (если применимо)
- Маскирование выполняется только для строковых литералов.
- В тексте кода вне строк (идентификаторы, имена модулей, метаданные) изменения не производятся.
- Логика маскирования:
worker/app/services/redaction.py - Встраивание в LLM промпты:
worker/app/services/llm_client.py - Передача отчёта:
worker/app/models.py,worker/app/main.py - Сохранение артефакта:
backend/app/services/artifacts.py