feat: Ф1 поддержки Cloud — клиент чтения на REST API v2#55
Merged
Conversation
- ConfluenceCloudApiClient за тем же IConfluenceApiClient: страницы, дети, вложения и версии через /wiki/api/v2; CQL-поиск и ping — через v1-эндпоинты, сохранившиеся на Cloud; cursor-пагинация (query из _links.next применяется к собственному абсолютному URL); дети — стабы + bulk GET /pages?id=…& body-format=storage с сохранением порядка - числовые spaceId Cloud транслируются в ключи пространств (кэш на время процесса); parentId из v2 отображается в Ancestors, заголовок родителя резолвится через кэш id→title - операции записи на Cloud бросают NotSupportedException → MCP-код NOT_SUPPORTED - DI выбирает реализацию клиента по DeploymentType; общие хелперы ошибок и CQL вынесены в ConfluenceApiHelpers (используются обоими клиентами) - compare: отсутствующий childTypes (Cloud) теперь означает «проверить вложения», а не «молча пропустить» (+ регрессионный тест) - 457 тестов зелёные (+30 новых); CHANGELOG и README (RU+EN), agent-instructions: код NOT_SUPPORTED и режим Cloud read-only Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Что сделано
Фаза 1 плана поддержки Confluence Cloud: Cloud-клиент на чтение. На Cloud теперь работают
download update/download merge,compare(включая--detect-source),confluence_pingиconfluence_get_page_content.ConfluenceCloudApiClient (гибрид v2 + v1)
/wiki/api/v2(v1 content API на Cloud удалён Atlassian в 2025).FindPageByTitleAsync) и auth-ping (/user/current) — через v1-эндпоинты, сохранившиеся на Cloud (v2-эквивалентов нет)._links.nextберётся только query string и применяется к собственному абсолютному URL — относительная база Atlassian не доверяется.GET /pages?id=…&body-format=storageчанками по 100, порядок листинга сохраняется.spaceIdпрозрачно транслируются в ключи пространств (кэш на время жизни клиента) — маркеры.id, конфиг и параметры инструментов остаются на ключах.parentIdиз v2 отображается вAncestors; заголовок родителя резолвится через кэш id→title (best-effort: недоступный родитель деградирует до пустого заголовка, не роняя запрос)./wiki— префиксуются корректно.https://site.atlassian.netи…/wiki.Read-only контракт
Операции записи (create/update страниц, вложения) бросают
NotSupportedExceptionс пояснением; в MCP это кодNOT_SUPPORTED(добавлен в классификатор и в agent-instructions). Запись — фаза 2.Сопутствующее
ConfluenceApiHelpers— оба клиента дают идентичные типизированные исключения (409 →ConfluenceConflictExceptionи т.д.).compare:ChildTypes == null(так отвечает Cloud v2) теперь означает «проверить вложения», а не «молча пропустить» — раньше вложения, добавленные только на сервере, ускользали бы из отчёта. Регрессионный тест добавлен; тестовые страницы Server-сценариев переведены на явныйhasAttachments: false(точнее моделирует v1-ответ и сохраняет свойство «нет лишних вызовов» под strict-моками).Тесты
457 зелёные (+30 новых: маппинг v2, кэши, cursor, префиксация ссылок, NOT_SUPPORTED, регрессия compare).
Ограничения (осознанные, до Ф4-проверки на живом Cloud)
GET /pages/{id}?version=N&body-format=storage) реализовано по спецификации, но на живом Cloud не проверено — риск №1 плана, помечен в коде.sort=-modified-date(новые первыми, как в v1).Часть плана: Ф0 ✅ → Ф1 (этот PR) → R2 запись страниц → R3 вложения → Ф4 e2e/канонизация.
🤖 Generated with Claude Code