feat(mcp-gateway): add management dashboard#3722
Conversation
a1ee590 to
d7bc8e4
Compare
281a2e3 to
e7235c0
Compare
80f36bf to
6d97b09
Compare
73e1118 to
b14e7d9
Compare
6d97b09 to
392d27b
Compare
ba76bea to
64acfdc
Compare
Code Review SummaryStatus: 3 Issues Remaining | Recommendation: Address before merge Executive SummaryTwo new issues found in the Overview
Issue Details (click to expand)WARNING
Resolved Since Last Review
Files Reviewed (8 files — incremental since b7f3b7f)
Fix these issues in Kilo Cloud Reviewed by claude-4.6-sonnet-20260217 · 2,190,940 tokens Review guidance: REVIEW.md from base branch |
| const providerScopes = draft.providerScopesEdited | ||
| ? draft.providerScopes.trim() | ||
| ? draft.providerScopes.trim().split(/\s+/) | ||
| : [] |
There was a problem hiding this comment.
WARNING: Empty array sent as providerScopes is truthy and will be treated as an explicit override in config-service.ts.
When a user types into the scope field then clears it, draft.providerScopesEdited is true but draft.providerScopes.trim() is empty, producing providerScopes = []. In config-service.ts lines 64 and 484, input.providerScopes ? 'override' : ... evaluates [] as truthy, so providerScopeSource is set to 'override' and provider_scopes = [] is persisted — instead of falling through to the discovered scopes. The fix is to replace [] with undefined here:
| : [] | |
| : undefined; |
| hasProvider && | ||
| !dynamicAvailable && | ||
| selectedAuthMode !== 'oauth_static' && ( | ||
| <p id="auth-mode-hint" className="text-muted-foreground text-xs"> |
There was a problem hiding this comment.
WARNING: Duplicate id="auth-mode-hint" — two elements with this ID can render simultaneously.
When discovery && hasProvider && !dynamicAvailable is true and selectedAuthMode === 'oauth_dynamic' (the default), both this <p> (line 495) and the <p> at line 501 render at the same time, each with id="auth-mode-hint". Duplicate IDs invalidate the aria-describedby association and are an HTML validity violation.
The prior conditional aria-describedby was more correct. One approach is to compute a single derived hint string and render exactly one <p id="auth-mode-hint"> conditionally, or to revert the SelectTrigger aria-describedby back to a conditional reference.
Summary
apps/webmanages configuration and OAuth workflows, whileservices/mcp-gatewayremains responsible for runtime token verification and credential-injecting proxy behavior./api/mcp-gateway/oauth/register/resource/...to avoid Next.js dynamic route conflicts while retaining the required registration capability.profilescope to remote providers, preserves remote protected-resourceresourcevalues, stores upstream scope provenance on the config, and lets both dashboard sign-in and Codex-triggered sign-in use the same resolved provider OAuth configuration.Verification
Visual Changes
Reviewer Notes
main; the underlying gateway implementation and production hostname work have already landed separately.provider_scopes,provider_scope_source, andprovider_resourceto the config model because remote provider scopes are not the same thing as Kilo gateway scopes.