Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
325 changes: 320 additions & 5 deletions packages/cli/src/__tests__/pi-tui-runner.test.ts

Large diffs are not rendered by default.

477 changes: 476 additions & 1 deletion packages/cli/src/__tests__/runtime-host-onboarding.test.ts

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions packages/cli/src/onboarding-catalog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ export function listApiKeyOnboardableProviders(): OnboardableProvider[] {
providerType,
label: definition.label,
requiresBaseUrl: !definition.baseUrl,
setupMethod: 'api_key' as const,
};
});
}
28 changes: 28 additions & 0 deletions packages/cli/src/pi-tui-contracts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ import type {
ConnectionEffectFailureClass,
ConnectionOnboardingSaveResult as RuntimeHostOnboardingSaveResult,
ConnectionOnboardingVerifyResult as RuntimeHostOnboardingVerifyResult,
OAuthConnectionIdentity,
OAuthLoginFailureCode,
} from '@maka/runtime-host/protocol';
import type { MakaPiTuiTurnActivity } from './pi-tui-turn.js';

Expand Down Expand Up @@ -62,6 +64,7 @@ export interface OnboardableProvider {
providerType: ProviderType;
label: string;
requiresBaseUrl: boolean;
setupMethod: 'api_key' | 'oauth';
}

export type OnboardingIdentityChoice = {
Expand Down Expand Up @@ -154,8 +157,33 @@ export type OnboardingSaveResult =
}
| OnboardingFailure;

export interface OnboardingOAuthPresentation {
readonly url: string;
readonly stateHint?: string;
}

export interface OnboardingOAuthInput {
readonly target: ConnectionOnboardingTarget;
readonly signal: AbortSignal;
readonly onPresentation: (presentation: OnboardingOAuthPresentation) => void;
}

export type OnboardingOAuthFailureReason =
| OAuthLoginFailureCode
| 'connection_not_found'
| 'operation_conflict'
| 'unavailable';

export type OnboardingOAuthResult =
| { readonly kind: 'authenticated'; readonly connection: OAuthConnectionIdentity }
| { readonly kind: 'cancelled' }
| { readonly kind: 'failed'; readonly reason: OnboardingOAuthFailureReason };

export interface MakaOnboardingSurface {
listProviders(): Promise<OnboardingProviderEntry[]>;
/** One complete Host-owned OAuth attempt. Polling, cancellation convergence,
* and presentation transport stay behind this interface. */
loginOAuth?(input: OnboardingOAuthInput): Promise<OnboardingOAuthResult>;
verify(input: OnboardingVerifyInput): Promise<OnboardingVerifyResult>;
save(input: OnboardingSaveInput): Promise<OnboardingSaveResult>;
}
Expand Down
Loading