feat(control-center): add Integrations status page (PR-B6) - #34
Merged
Conversation
Replaces the Platform > Integrations "Coming Soon" placeholder with a read-only status page for the third-party integrations already wired into this deployment's own docker-compose (omnibioai-studio's compose file, control-center's own service block): Sentry (SDK crash reporting + Ecosystem Report error aggregation) and the two independent Discord webhook targets (general notifications, known-issue alerts). Discovery (this PR's own report) found no Integration model/CRUD API/ credential-management mechanism anywhere in the ecosystem -- only GlobalConfig (auth, already surfaced via Settings) and these three env- var-derived targets. Scope is deliberately narrow: no CRUD, no credential input, no connection test (none exists to call), no new permission, no database, no Gateway involvement. Backend: - routes_integrations.py: GET /integrations, env-var presence only (booleans + static labels/purposes, no hostnames/tokens/URLs ever returned), read at request time for testability -- same shape and same intentionally-ungated posture as routes_cloud.py's GET /cloud (main.py's own comment explains why: no internal-topology leak). - 14 new backend tests: response shape, per-integration independence, Sentry's report-aggregation AND-gate, explicit no-auth-required assertion, and a dedicated secret-leakage test. Frontend: - integrations.ts: typed data-layer file, mirrors platform_config.ts. - IntegrationsPage.tsx: flat page (no org picker, no tabs -- every integration here is platform-wide), reuses Card/SectionHeader/ LoadingState/ErrorState/EmptyState/StatusBadge. Every card states explicitly why Configure/Test/Rotate aren't offered, rather than silently omitting them. - navigation.ts: integrations flipped to functional: true, same hasAdminAccess gate as Cloud/RAG/Settings. - StatusBadge: added configured/not_configured vocabulary. - 14 new frontend tests (IntegrationsPage) + nav-placement tests + 3 AdminApp route-guard tests, replacing the retired Integrations-as-ComingSoon example (no functional: false nav item remains after this PR). Deployment: nginx gets one new `/integrations` location (no SPA route collision, same as /sessions, /rag). No compose, env var, migration, or new-service changes -- everything read here is already set on control-center's own existing container. Explicitly untouched: omnibioai-auth, JWT, Sessions, Interactions, B5-A/B, RAG producers, interaction worker, Redis streams, API Gateway, database schemas, secret storage, billing, security-audit. 🤖 Generated with Claude Code Co-Authored-By: Claude Sonnet 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.
Summary
Replaces the Platform → Integrations "Coming Soon" placeholder with a real, read-only status page for the third-party integrations already wired into this deployment's own docker-compose: Sentry (SDK crash reporting + Ecosystem Report error aggregation) and the two independent Discord webhook targets (general notifications, known-issue alerts).
Full Phase 1 discovery + architecture decision is in this PR's own conversation record. Short version: no
Integrationmodel, CRUD API, or credential-management mechanism exists anywhere in the ecosystem (16+ repos inspected). The only concrete, evidenced third-party integrations are the three above (found by readingomnibioai-studio/docker-compose.yml's actual deployment service blocks, not guessed). Everything else adjacent (GlobalConfigLLM/cloud provider, compute backends) is already fully surfaced by the existing Settings/Cloud pages — this PR does not duplicate them.Scope
GET /cloud(routes_cloud.py), same ungated-at-router-level posture for the same reason (booleans/labels only, no internal topology, no credential values).Backend
routes_integrations.py:GET /integrations, readsSENTRY_DSN/SENTRY_API_TOKEN/SENTRY_ORG/SENTRY_PROJECT_SLUGS/DISCORD_WEBHOOK_URL/DISCORD_ALERT_WEBHOOK_URLat request time (testable viapatch.dict(os.environ, ...), same conventionroutes_cloud.pyestablished).report_aggregation_configured, explicit "no auth required" assertion, dedicated secret-leakage test.Frontend
integrations.ts: typed data layer, mirrorsplatform_config.ts.IntegrationsPage.tsx: flat page (no org picker, no tabs), reusesCard/SectionHeader/LoadingState/ErrorState/EmptyState/StatusBadge. Every card explicitly states why Configure/Test/Rotate aren't offered.navigation.ts:integrationsflipped tofunctional: true, samehasAdminAccessgate as Cloud/RAG/Settings.StatusBadge: addedconfigured/not_configuredvocabulary (small additive change, same pattern as its existingrevoked/expiredextension).IntegrationsPagetests + nav-placement tests + 3AdminApproute-guard tests. Retired the old "renders Coming Soon for an unimplemented module (e.g. Integrations)" test — after this PR,navigation.tshas no remainingfunctional: falseentry.Deployment
One new nginx
location /integrations(no SPA route collision, same as/sessions//rag). No compose, env var, migration, or new-service changes — everything read here is already set on control-center's own existing container in production.Explicitly untouched
omnibioai-auth, JWT, Sessions, Interactions, B5-A/B, RAG producers, interaction worker, Redis streams, API Gateway, database schemas, secret storage, billing, security-audit.Tests
tsc -b: clean.git diff --check: clean.🤖 Generated with Claude Code