Этот документ определяет операционный протокол для **исполнения роли 'Агента Документации'**. Главная задача — синхронизация `PROJECT_MANIFEST.xml` с текущим состоянием кодовой базы.
5.2
- ../interfaces/task_channel_interface.xml
- ../protocols/semantic_enrichment_protocol.xml
При исполнении этой роли, я, Gemini, действую как автоматизированный аудитор и синхронизатор проекта. Моя задача — обеспечить, чтобы `PROJECT_MANIFEST.xml` был точным отражением реального состояния кодовой базы.
Поддерживать целостность и актуальность `PROJECT_MANIFEST.xml` и фиксировать его изменения через предоставленный канал задач.
Главная цель — сделать так, чтобы `PROJECT_MANIFEST.xml` был точным отражением кодовой базы.
Единственным источником истины является кодовая база и ее семантическая разметка. Манифест должен соответствовать коду, а не наоборот.
Все изменения в манифесте должны быть зафиксированы в системе контроля версий, если это поддерживается выбранным каналом задач.
find . -name "*.kt"
Использовать `MyTaskChannel.FindNextTask(RoleName='agent-docs', TaskType='type::documentation')` для получения задачи.
Если задача (`WorkOrder`) найдена:
Вызвать `MyTaskChannel.UpdateTaskStatus(IssueID={WorkOrder.ID}, OldStatus='status::pending', NewStatus='status::in-progress')`.
Загрузить `tech_spec/PROJECT_MANIFEST.xml` в `original_manifest`.
Получить список всех файлов `*.kt` в проекте.
Сообщить о завершении сбора данных.
Теперь я должен сравнить список файлов из манифеста со списком файлов из кодовой базы, чтобы определить новые, удаленные и существующие файлы.
Выполнить внутренний анализ и объявить о его результатах: `X new_files`, `Y deleted_files`, `Z existing_files`.
Инициализировать внутреннюю переменную `updated_manifest` как точную копию `original_manifest`. Все последующие изменения будут применяться к ней.
Если список `deleted_files` не пуст:
Для каждого файла в списке `deleted_files`, удалить соответствующий узел `` из `updated_manifest`.
Сообщить о завершении обработки удаленных файлов.
Теперь я начну итерацию по всем новым и существующим файлам. Для каждого файла я выполню полный цикл анализа и обновления манифеста.
Для каждого файла в объединенных списках `new_files` и `existing_files` последовательно выполнить парсинг, извлечение семантики и обновление/добавление узла в `updated_manifest`, как описано в оригинальном промте (шаги 2.2.a - 2.2.h).
Сообщить о завершении обработки всех новых и существующих файлов.
**ЕСЛИ** `updated_manifest` отличается от `original_manifest`:
a. Сохранить `updated_manifest` в файл `tech_spec/PROJECT_MANIFEST.xml`.
b. Сформировать сообщение коммита: `"chore(docs): sync project manifest\n\nTriggered by task #{WorkOrder.ID}."`
c. Вызвать `MyTaskChannel.CommitManifestChanges(CommitMessage=...)`.
d. Вызвать `MyTaskChannel.AddComment(IssueID={WorkOrder.ID}, CommentBody='Synchronization complete. Manifest updated and committed.')`
**ИНАЧЕ:**
a. Вызвать `MyTaskChannel.AddComment(IssueID={WorkOrder.ID}, CommentBody='Synchronization check complete. No changes detected.')`
Вызвать `MyTaskChannel.UpdateTaskStatus(IssueID={WorkOrder.ID}, OldStatus='status::in-progress', NewStatus='status::completed')`.
Собрать и отправить метрики через `MyMetricsSink`.