mirror of
https://github.com/davidkaya/aryx.git
synced 2026-08-28 13:47:12 +02:00
feat: add MCP OAuth authentication frontend wiring and banner
- Add McpOauthRequiredEvent and McpOauthStaticClientConfigEvent to sidecar contracts - Add PendingMcpAuthRecord domain type with status tracking (pending/authenticating/failed/done) - Add pendingMcpAuth field to SessionRecord for session-level auth state - Wire onMcpOAuthRequired callback through sidecarProcess, runTurnPending, and AryxAppService - Handle mcp-oauth-required events: set session pendingMcpAuth, clear on turn finalize/cancel - Add dismissSessionMcpAuth IPC channel with preload binding and handler registration - Create McpAuthBanner component (amber-themed, shows server name/URL, dismiss button) - Integrate McpAuthBanner into ChatPane with placeholder text and App.tsx callback - Update test fixtures for new RunTurnPendingCommand.onMcpOAuthRequired field Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -29,6 +29,7 @@ export const ipcChannels = {
|
||||
resolveSessionUserInput: 'sessions:resolve-user-input',
|
||||
setSessionInteractionMode: 'sessions:set-interaction-mode',
|
||||
dismissSessionPlanReview: 'sessions:dismiss-plan-review',
|
||||
dismissSessionMcpAuth: 'sessions:dismiss-mcp-auth',
|
||||
querySessions: 'sessions:query',
|
||||
updateSessionModelConfig: 'sessions:update-model-config',
|
||||
selectProject: 'selection:project',
|
||||
|
||||
@@ -116,6 +116,10 @@ export interface DismissSessionPlanReviewInput {
|
||||
sessionId: string;
|
||||
}
|
||||
|
||||
export interface DismissSessionMcpAuthInput {
|
||||
sessionId: string;
|
||||
}
|
||||
|
||||
export interface ElectronApi {
|
||||
describeSidecarCapabilities(): Promise<SidecarCapabilities>;
|
||||
refreshSidecarCapabilities(): Promise<SidecarCapabilities>;
|
||||
@@ -145,6 +149,7 @@ export interface ElectronApi {
|
||||
resolveSessionUserInput(input: ResolveSessionUserInputInput): Promise<WorkspaceState>;
|
||||
setSessionInteractionMode(input: SetSessionInteractionModeInput): Promise<WorkspaceState>;
|
||||
dismissSessionPlanReview(input: DismissSessionPlanReviewInput): Promise<WorkspaceState>;
|
||||
dismissSessionMcpAuth(input: DismissSessionMcpAuthInput): Promise<WorkspaceState>;
|
||||
updateSessionModelConfig(input: UpdateSessionModelConfigInput): Promise<WorkspaceState>;
|
||||
querySessions(input: QuerySessionsInput): Promise<SessionQueryResult[]>;
|
||||
selectProject(projectId?: string): Promise<WorkspaceState>;
|
||||
|
||||
@@ -244,6 +244,23 @@ export interface UserInputRequestedEvent {
|
||||
allowFreeform?: boolean;
|
||||
}
|
||||
|
||||
export interface McpOauthStaticClientConfigEvent {
|
||||
clientId: string;
|
||||
publicClient?: boolean;
|
||||
}
|
||||
|
||||
export interface McpOauthRequiredEvent {
|
||||
type: 'mcp-oauth-required';
|
||||
requestId: string;
|
||||
sessionId: string;
|
||||
oauthRequestId: string;
|
||||
agentId?: string;
|
||||
agentName?: string;
|
||||
serverName: string;
|
||||
serverUrl: string;
|
||||
staticClientConfig?: McpOauthStaticClientConfigEvent;
|
||||
}
|
||||
|
||||
export interface ExitPlanModeRequestedEvent {
|
||||
type: 'exit-plan-mode-requested';
|
||||
requestId: string;
|
||||
@@ -276,6 +293,7 @@ export type SidecarEvent =
|
||||
| AgentActivityEvent
|
||||
| ApprovalRequestedEvent
|
||||
| UserInputRequestedEvent
|
||||
| McpOauthRequiredEvent
|
||||
| ExitPlanModeRequestedEvent
|
||||
| CommandErrorEvent
|
||||
| CommandCompleteEvent;
|
||||
|
||||
Reference in New Issue
Block a user