112 lines
4.5 KiB
Python
112 lines
4.5 KiB
Python
# Инициализация пакета
|
||
import os
|
||
|
||
from .core.ai_interface import AIInterface
|
||
from .core.project_map import ProjectMap
|
||
from .core.file_analyzer import FileAnalyzer
|
||
from .core.commands import CommandGenerator
|
||
from .utils.logger import log
|
||
from .utils.file_utils import read_file, write_file
|
||
from .config import REACT_PROJECT_PATH
|
||
|
||
__all__ = ["AIInterface", "ProjectMap", "FileAnalyzer", "CommandGenerator", "run_workflow"]
|
||
|
||
|
||
def ensure_default_files():
|
||
"""
|
||
Проверяет наличие необходимых файлов и создает их с базовым содержимым, если они отсутствуют.
|
||
"""
|
||
default_files = {
|
||
"workingon.md": "/path/to/react/project/src/Auth.tsx",
|
||
"prompt.md": "Добавить функцию авторизации в файл Auth.tsx",
|
||
"instructions.md": "# Инструкции для ИИ\n\n1. Функции должны быть написаны в TypeScript.\n2. Используйте современные практики React (например, хуки).\n3. При создании новых компонентов добавьте комментарии.",
|
||
}
|
||
|
||
for file_name, content in default_files.items():
|
||
if not os.path.exists(file_name):
|
||
log(f"File {file_name} not found. Creating it with default content.")
|
||
write_file(file_name, content)
|
||
|
||
|
||
def parse_workingon_content(content: str) -> dict:
|
||
"""
|
||
Парсит содержимое файла workingon.md.
|
||
Возвращает словарь с путем к файлу и дополнительным контекстом.
|
||
"""
|
||
lines = content.strip().split("\n")
|
||
result = {"file_path": None, "context": ""}
|
||
|
||
if lines:
|
||
# Первая строка — путь к файлу
|
||
result["file_path"] = lines[0].strip()
|
||
# Остальные строки — дополнительный контекст
|
||
result["context"] = "\n".join(lines[1:]).strip()
|
||
|
||
return result
|
||
|
||
|
||
|
||
def run_workflow():
|
||
"""
|
||
Основной алгоритм работы библиотеки ReactDev.
|
||
1. Создает карту структуры проекта.
|
||
2. Анализирует файлы на наличие функций.
|
||
3. Отправляет запрос к ИИ с контекстом.
|
||
4. Генерирует план модификации.
|
||
"""
|
||
log("Starting ReactDev workflow...")
|
||
|
||
# Шаг 0: Убедиться, что все необходимые файлы существуют
|
||
ensure_default_files()
|
||
|
||
# Шаг 1: Создание карты структуры проекта
|
||
project_map = ProjectMap(REACT_PROJECT_PATH)
|
||
project_structure = project_map.generate_map()
|
||
project_map.save_map()
|
||
|
||
log(f"Generated project structure:\n{project_structure}")
|
||
|
||
# Шаг 2: Чтение и парсинг workingon.md
|
||
workingon_content = read_file("workingon.md")
|
||
workingon_data = parse_workingon_content(workingon_content)
|
||
|
||
target_file = workingon_data["file_path"]
|
||
additional_context = workingon_data["context"]
|
||
|
||
if target_file and not os.path.exists(target_file):
|
||
log(f"Target file {target_file} does not exist.", level="error")
|
||
return
|
||
|
||
# Шаг 3: Анализ целевого файла (если указан)
|
||
functions_info = {}
|
||
if target_file:
|
||
file_analyzer = FileAnalyzer()
|
||
functions_info = file_analyzer.analyze_file(target_file)
|
||
log(f"Analyzed functions in {target_file}: {functions_info}")
|
||
|
||
# Шаг 4: Отправка запроса к ИИ
|
||
ai_interface = AIInterface()
|
||
user_prompt = read_file("prompt.md").strip()
|
||
|
||
# Добавляем дополнительный контекст из workingon.md
|
||
full_context = {
|
||
"project_structure": project_structure,
|
||
"target_file": target_file,
|
||
"functions_info": functions_info,
|
||
"additional_context": additional_context,
|
||
}
|
||
|
||
ai_response = ai_interface.analyze_project(user_prompt, full_context)
|
||
log(f"AI response: {ai_response}")
|
||
|
||
# Шаг 5: Генерация плана модификации
|
||
command_generator = CommandGenerator()
|
||
modifications = ai_response.get("modifications", [])
|
||
modification_plan = command_generator.generate_commands(modifications)
|
||
|
||
with open("modification_plan.md", "w") as f:
|
||
f.write(modification_plan)
|
||
|
||
log(f"Generated modification plan:\n{modification_plan}")
|
||
log("ReactDev workflow completed.")
|