Загрузка данных
Ты работаешь на корпоративном MacBook в проекте:
/Users/23865613/IdeaProjects/untitled/adt-markdownify-meta-mvp
Контекст:
Наставник уточнил, что по заданию нужно выгрузить в Markdown информацию из META по моему подразделению/ФП СНЛ.
Сейчас проект уже работает:
- запускается через SberBrowser/Playwright;
- читает meta_urls.txt;
- открывает страницы META;
- сохраняет HTML в temp_html/;
- сохраняет Markdown в output/;
- создает отчеты:
output/HIERARCHY.md
output/INTERACTION_POINTS.md
output/INTEGRATION_INTERACTIONS.md
output/API.md
output/STANDS.md
output/TECH_RESOURCES.md
output/ARCHITECTURE_TREE.md
output/INTERACTIONS.md
output/LINK_DISCOVERY_REPORT.md
output/EXPORT_REPORT.md
output/README.md
Главная цель:
Доработать проект так, чтобы он максимально полно выгружал всю доступную информацию из META, которая относится к ФП SberGeo.СНЛ.
То есть нужно выгружать не только одну страницу ФП, а связанные страницы:
1. АС SberGeo.
2. ФП SberGeo.СНЛ.
3. Все модули СНЛ.
4. Подмодули, если они найдены.
5. Технические компоненты СНЛ.
6. Разделы интеграций.
7. Точки взаимодействия + API, если ссылки найдены.
8. Интеграционные взаимодействия + API, если ссылки найдены.
9. Стенды.
10. Технические ресурсы.
Важно:
- Не переписывай проект с нуля.
- Не удаляй уже работающие функции.
- Не ломай запуск через SberBrowser/Playwright.
- Не используй API META.
- Не используй requests/httpx/aiohttp/urllib.
- Не добавляй token/cookie/login/password.
- Не сохраняй cookies/sessionStorage/localStorage.
- Авторизация только вручную через браузер.
- Не выдумывай URL.
- Используй только ссылки, реально найденные в HTML/Markdown выгруженных страниц.
- Если отдельная страница не найдена, честно пиши TODO в отчетах.
Задача 1. Проанализировать текущий проект
Сначала изучи:
README.md
SKILL.md
DEMO.md
meta_urls.txt
meta_exporter.yaml
run_exporter.py
scripts/config_loader.py
scripts/scrape_meta.py
scripts/html_to_markdown.py
scripts/markdown_writer.py
output/LINK_DISCOVERY_REPORT.md
output/HIERARCHY.md
output/TECH_RESOURCES.md
output/INTERACTIONS.md
Напиши коротко:
1. Как сейчас устроена выгрузка.
2. Какие URL сейчас есть в meta_urls.txt.
3. Какие связанные ссылки уже находятся.
4. Какие данные по СНЛ уже выгружаются.
5. Какие данные по СНЛ еще не выгружаются.
Задача 2. Добавить режим расширенной выгрузки связанных страниц СНЛ
Нужно добавить в конфиг meta_exporter.yaml и meta_exporter.yaml.example параметр:
discovery:
enabled: true
max_depth: 2
same_domain_only: true
allowed_url_patterns:
- "/meta/earp/automatedSystem/"
- "/meta/earp/functionalSubsystem/"
- "/meta/earp/module/"
- "/meta/earp/submodule/"
- "/meta/earp/techComponent/"
- "/meta/earp/integration/"
- "/meta/earp/interaction/"
- "/meta/earp/api/"
- "/meta/earp/stand/"
- "/meta/earp/technicalResource/"
required_text_patterns:
- "SberGeo"
- "СНЛ"
- "snl-"
- "SOWA"
- "Sigma"
Логика:
- сначала выгружаются URL из meta_urls.txt;
- из каждой выгруженной страницы извлекаются ссылки;
- ссылки фильтруются:
- только meta.sberbank.ru;
- только /meta/earp/...;
- только разрешенные типы URL;
- предпочтительно содержащие SberGeo, СНЛ, snl, SOWA, Sigma или связанные объекты, найденные на странице ФП;
- найденные ссылки добавляются в очередь выгрузки;
- глубина обхода ограничена max_depth;
- не должно быть бесконечного обхода;
- дубликаты URL не выгружать повторно;
- все найденные ссылки писать в output/LINK_DISCOVERY_REPORT.md.
Задача 3. Реализовать функцию извлечения ссылок
В scripts/scrape_meta.py или отдельном файле scripts/link_discovery.py добавь функции:
extract_meta_links(html: str, base_url: str) -> list
normalize_meta_url(url: str, base_url: str) -> str
is_allowed_meta_url(url: str, config: dict) -> bool
discover_related_urls(html: str, base_url: str, config: dict) -> list
Требования:
- использовать только стандартные библиотеки Python: re, urllib.parse можно использовать только для разбора URL, но не для HTTP-запросов;
- не делать сетевые запросы через urllib;
- извлекать ссылки из href;
- поддерживать относительные ссылки вида /meta/earp/module/...
- нормализовать ссылки до полного URL;
- удалять якоря #...;
- удалять дубликаты;
- не добавлять внешние домены.
Важно:
Запрет requests/httpx/aiohttp/urllib относится к HTTP-запросам. urllib.parse можно использовать только для разбора и сборки URL.
Задача 4. Обновить export_meta
В export_meta(config) нужно добавить очередь обработки:
- initial_urls = parse_meta_urls(meta_urls_file)
- очередь содержит элементы:
{
"name": "...",
"url": "...",
"depth": 0,
"source": "manual"
}
После успешной выгрузки страницы:
- получить html;
- если discovery.enabled == true и depth < max_depth:
- извлечь связанные ссылки;
- добавить новые ссылки в очередь с depth + 1;
- source = текущий URL;
- не выгружать URL повторно;
- вести visited_urls;
- вести failed_urls;
- вести discovered_urls.
В конце создать отчеты:
- output/LINK_DISCOVERY_REPORT.md
- output/EXPORT_REPORT.md
- output/TASK_COVERAGE.md
- output/README.md
Задача 5. Улучшить LINK_DISCOVERY_REPORT.md
Отчет должен содержать:
# Отчет по найденным ссылкам META
## 1. Исходные URL из meta_urls.txt
Таблица:
| Название | URL |
|---|---|
## 2. Автоматически найденные ссылки
Таблица:
| Тип | Название/URL | Источник | Глубина |
|---|---|---|---|
Тип определять по URL:
- automatedSystem
- functionalSubsystem
- module
- submodule
- techComponent
- integration
- interaction
- api
- stand
- technicalResource
- other
## 3. Не найдено автоматически
Список:
- Точки взаимодействия + API
- Интеграционные взаимодействия + API
- Стенды
- Технические ресурсы
Если ссылки реально найдены — не писать их как не найденные.
## 4. Что нужно добавить вручную
Если точные URL разделов не найдены:
- открыть нужный раздел в META;
- скопировать URL;
- добавить в meta_urls.txt.
Задача 6. Улучшить отчеты под формулировку задания
Отчеты должны прямо соответствовать заданию:
1. output/HIERARCHY.md
Должен иметь разделы:
# Иерархия архитектуры СНЛ
## Автоматизированная система
## Функциональная подсистема
## Модули
## Подмодули
## Технические компоненты
Если подмодули не найдены — честно написать:
"Подмодули не найдены в выгруженных страницах. Для полной детализации нужно добавить URL страниц модулей или подмодулей."
2. output/INTERACTION_POINTS.md
Должен иметь:
# Точки взаимодействия + API
## Найденные точки взаимодействия
## Связанные API
## Источники данных
## Ограничение MVP
3. output/INTEGRATION_INTERACTIONS.md
Должен иметь:
# Интеграционные взаимодействия + API
## Найденные интеграционные взаимодействия
## Связанные API
## Источники данных
## Ограничение MVP
4. output/STANDS.md
Должен иметь:
# Стенды
## Найденные стенды
## Источники данных
## Ограничение MVP
5. output/TECH_RESOURCES.md
Должен иметь:
# Технические ресурсы
## Базы данных
## Сервисы
## Proxy
## Vault
## Backend / Frontend
## Прочие технические компоненты
## Источники данных
Задача 7. Добавить отчет по полноте выгрузки СНЛ
Создай или обнови:
output/SNL_EXPORT_COVERAGE.md
Содержание:
# Полнота выгрузки СНЛ
| Блок архитектуры | Статус | Количество найденных объектов | Файл результата | Комментарий |
|---|---|---:|---|---|
Строки:
- АС
- ФП
- Модули
- Подмодули
- Технические компоненты
- Точки взаимодействия
- API
- Интеграционные взаимодействия
- Стенды
- Технические ресурсы
Статусы:
- Закрыто
- Частично
- Не найдено
- Требует ручного URL
Задача 8. Обновить README.md
README.md должен объяснять, что теперь проект — это skill для выгрузки архитектуры СНЛ из META.
Добавь раздел:
## Что считается полной выгрузкой СНЛ
Полная выгрузка включает:
1. АС SberGeo.
2. ФП SberGeo.СНЛ.
3. Модули СНЛ.
4. Подмодули, если они заведены в META.
5. Технические компоненты.
6. Точки взаимодействия + API.
7. Интеграционные взаимодействия + API.
8. Стенды.
9. Технические ресурсы.
Добавь раздел:
## Как расширить полноту выгрузки
Если в отчетах указано "Требует ручного URL":
1. Открыть соответствующий раздел META.
2. Скопировать URL.
3. Добавить его в meta_urls.txt.
4. Запустить python run_exporter.py повторно.
Задача 9. Обновить SKILL.md
SKILL.md должен описывать skill для GigaCode:
- назначение;
- входные файлы;
- выходные файлы;
- алгоритм;
- безопасность;
- ограничения;
- что делать, если не хватает URL.
Задача 10. Проверка
После изменений выполнить:
python -m py_compile run_exporter.py scripts/config_loader.py scripts/scrape_meta.py scripts/html_to_markdown.py scripts/markdown_writer.py
Потом выполнить тестовый запуск:
source .venv/bin/activate
python run_exporter.py
После запуска проверить:
ls -la output
ls -la temp_html
Проверить, что появились или обновились:
output/HIERARCHY.md
output/INTERACTION_POINTS.md
output/INTEGRATION_INTERACTIONS.md
output/API.md
output/STANDS.md
output/TECH_RESOURCES.md
output/LINK_DISCOVERY_REPORT.md
output/EXPORT_REPORT.md
output/TASK_COVERAGE.md
output/SNL_EXPORT_COVERAGE.md
output/README.md
Финальный ответ:
Покажи отчет:
# Итог доработки выгрузки СНЛ
## 1. Что изменено
## 2. Сколько URL было исходно
## 3. Сколько URL найдено автоматически
## 4. Сколько страниц успешно выгружено
## 5. Какие файлы результата созданы
## 6. Какие требования задания закрыты
Таблица:
| Требование | Статус | Файл |
|---|---|---|
## 7. Что осталось добрать вручную
Список только тех разделов, для которых URL реально не найден.
## 8. Результат py_compile
## 9. Результат тестового запуска
Главная цель:
Сделать проект не просто MVP, а максимально полезный skill для GigaCode, который выгружает всю доступную архитектурную информацию по ФП SberGeo.СНЛ из META в Markdown.