Этот проект содержит набор утилит для работы с файлами, такими как объединение файлов, генерация коммитов и построение структуры директорий.
Этот скрипт объединяет файлы в один.
| Параметр | Тип | Описание |
|---|---|---|
projectDir |
string | Путь к директории проекта. Определяет корневую директорию для работы. |
dependencyScanRoot |
string | Директория, откуда начинается сканирование зависимостей. |
paths |
array | Список путей к папкам или файлам, которые должны быть объединены. |
scanDependencies |
boolean | Определяет, нужно ли сканировать зависимости для файлов. |
extensions |
array | Массив допустимых расширений файлов. Можно указать *, чтобы включить все файлы. |
removeStyleTag |
boolean | Удалять ли теги <style> из файлов. |
removeHtmlComments |
boolean | Удалять ли HTML комментарии. |
removeSingleLineComments |
boolean | Удалять ли однострочные комментарии. |
removeMultiLineComments |
boolean | Удалять ли многострочные комментарии. |
removeEmptyLines |
boolean | Удалять ли пустые строки. |
ignoreFiles |
array | Массив файлов, которые нужно игнорировать при объединении. |
ignoreDirectories |
array | Массив директорий, которые нужно игнорировать при сканировании. |
outputFile |
string | Путь к файлу, в который будет записан объединенный результат. |
$config = [
'projectDir' => '/project-directory',
'dependencyScanRoot' => '/project-directory/src',
'paths' => [
'/folder',
'/folder/file.php'
],
'scanDependencies' => true,
'extensions' => ['php', 'vue', 'js', 'json', 'ts', 'html', 'css', 'scss'],
'removeStyleTag' => false,
'removeHtmlComments' => false,
'removeSingleLineComments' => false,
'removeMultiLineComments' => false,
'removeEmptyLines' => false,
'ignoreFiles' => ['ignore_this.php', 'ignore_that.js'],
'ignoreDirectories' => ['folder_to_ignore', 'another_folder_to_ignore'],
'outputFile' => 'merged_files.txt'
];
$merger = new MergeFiles($config);
$merger->merge();Этот скрипт генерирует сообщения для коммитов, используя API OpenAI. Он получает информацию о разнице файлов из stdin и формирует название и описание коммита на основе этой информации.
git diff | php commit_generator.php "Дополнительные инструкции"Этот скрипт создает дерево файловой структуры для заданной директории и сохраняет его в файл directory_tree.txt.
| Параметр | Тип | Описание |
|---|---|---|
directoryPath |
string | Путь к директории, для которой нужно построить дерево файлов. |
extensions |
array | Массив расширений файлов для включения в дерево. |
ignoredDirectories |
array | Массив папок, которые нужно игнорировать при построении дерева. |
$directoryPath = '/folder';
$extensions = ['php', 'vue', 'js'];
$ignoredDirectories = ['node_modules', 'vendor', '.git'];
echo drawTree($directoryPath, '', true, $extensions, $ignoredDirectories);Дерево будет записано в файл directory_tree.txt.
Этот скрипт выполняет семантический поиск по коду с использованием векторных представлений (embeddings) от Voyage AI. Он позволяет находить релевантные фрагменты кода на основе текстового запроса, используя семантическое понимание кода.
- PHP 7.4 или выше
- API ключ Voyage AI
- Объединенный файл с кодом (созданный с помощью
run_merge_files.php)
| Параметр | Тип | Описание |
|---|---|---|
apiKey |
string | Ключ API Voyage для доступа к сервису векторных представлений. |
model |
string | Модель Voyage для создания embeddings (по умолчанию 'voyage-code-3'). |
mergedFilePath |
string | Путь к объединенному файлу с кодом (по умолчанию 'merged_files.txt'). |
embeddingsFilePath |
string | Путь для сохранения/загрузки embeddings (по умолчанию 'code_embeddings.json'). |
| Опция | Описание |
|---|---|
--query "запрос" |
Текст поискового запроса. |
--file merged_files.txt |
Путь к объединенному файлу с кодом. |
--output results.txt |
Путь для сохранения результатов поиска. |
--rebuild |
Принудительно пересоздать embeddings. |
--help |
Показать справку по использованию. |
# Базовый поиск
php search_code.php "Как обрабатываются зависимости"
# Поиск с дополнительными параметрами
php search_code.php --query "Как обрабатываются зависимости" --file code.txt --output results.txt --rebuild- Скрипт разбивает объединенный файл с кодом на отдельные фрагменты по маркерам начала и конца файлов.
- Для каждого фрагмента создается векторное представление с помощью API Voyage.
- При поиске запрос также преобразуется в векторное представление.
- Вычисляется косинусная близость между вектором запроса и векторами фрагментов кода.
- Возвращаются наиболее релевантные фрагменты кода, отсортированные по степени близости.
- Результаты сохраняются в файл для дальнейшего использования.
Основная функциональность реализована в классе CodeEmbeddingsSearch, который предоставляет следующие возможности:
- Разбиение объединенного файла на фрагменты кода
- Создание и сохранение векторных представлений для фрагментов кода
- Семантический поиск по коду на основе текстового запроса
- Вычисление релевантности фрагментов кода к запросу
- Сохранение результатов поиска в файл
Класс автоматически кэширует векторные представления в JSON-файле для повторного использования, что позволяет значительно ускорить последующие поисковые запросы.