@@ -4,8 +4,6 @@ import { buildSkillInvocationPrompt } from '@studio/common/ai/slash-commands';
44import { readAuthToken } from '@studio/common/lib/shared-config' ;
55import { __ , sprintf } from '@wordpress/i18n' ;
66import {
7- getAvailableAiProviders ,
8- isAiProviderReady ,
97 prepareAiProvider ,
108 resolveAiEnvironment ,
119 resolveInitialAiProvider ,
@@ -29,7 +27,6 @@ import { replaySessionHistory } from 'cli/ai/sessions/replay';
2927import { setLocalSiteSelectedCallback } from 'cli/ai/site-selection' ;
3028import { getActiveSlashCommands , type SlashCommandContext } from 'cli/ai/slash-commands' ;
3129import { AiChatUI } from 'cli/ai/ui' ;
32- import { runCommand as runLoginCommand } from 'cli/commands/auth/login' ;
3330import { readCliConfig } from 'cli/lib/cli-config/core' ;
3431import { findSiteByFolder } from 'cli/lib/cli-config/sites' ;
3532import { Logger , LoggerError , setProgressCallback } from 'cli/logger' ;
@@ -55,13 +52,6 @@ function appendStudioEntry< T extends StudioCustomEntryType >(
5552 return sm . appendCustomEntry ( customType , data ) ;
5653}
5754
58- function isPromptAbortError ( error : unknown ) : boolean {
59- return (
60- error instanceof Error &&
61- [ 'AbortPromptError' , 'CancelPromptError' , 'ExitPromptError' ] . includes ( error . name )
62- ) ;
63- }
64-
6555function getErrorMessage ( error : unknown ) : string {
6656 if ( error instanceof Error ) {
6757 return error . message ;
@@ -96,12 +86,9 @@ export async function runCommand( options: {
9686} ) : Promise < void > {
9787 const ui = options . adapter ;
9888 const isJsonMode = ui instanceof JsonAdapter ;
99- const isStudioAppMode = isJsonMode && typeof process . send === 'function' ;
100- const config = await readCliConfig ( ) ;
10189 const resumeContext = resolveResumeSessionContext ( options . resumeSession ) ;
102- let currentProvider : AiProviderId = isStudioAppMode
103- ? 'wpcom'
104- : resumeContext . provider ?? ( await resolveInitialAiProvider ( ) ) ;
90+ let currentProvider : AiProviderId =
91+ resumeContext . provider ?? ( await resolveInitialAiProvider ( ) ) ;
10592 let currentModel : AiModelId = resumeContext . model ?? DEFAULT_MODEL ;
10693 ui . currentProvider = currentProvider ;
10794 ui . currentModel = currentModel ;
@@ -272,10 +259,6 @@ export async function runCommand( options: {
272259 }
273260
274261 async function maybeAutoSwitchProvider ( ) : Promise < void > {
275- if ( isStudioAppMode ) {
276- return ;
277- }
278-
279262 const fallbackProvider = await resolveUnavailableAiProvider ( currentProvider ) ;
280263 if ( ! fallbackProvider || fallbackProvider === currentProvider ) {
281264 return ;
@@ -314,79 +297,16 @@ export async function runCommand( options: {
314297 }
315298 }
316299
317- if ( isStudioAppMode && ! config . aiProvider ) {
318- await saveSelectedAiProvider ( 'wpcom' ) ;
319- }
320-
321- let showCapabilitiesOnConnect = ! config . aiProvider && ! isStudioAppMode ;
300+ const config = await readCliConfig ( ) ;
301+ let showCapabilitiesOnConnect = ! config . aiProvider ;
322302
323303 if ( showCapabilitiesOnConnect ) {
304+ currentProvider = 'wpcom' ;
305+ ui . currentProvider = currentProvider ;
306+ await saveSelectedAiProvider ( currentProvider ) ;
324307 ui . showOnboarding ( ) ;
325-
326- // Auto-trigger provider selection on first run
327- const availableProviders = await getAvailableAiProviders ( ) ;
328- const labelToProvider = new Map < string , AiProviderId > ( ) ;
329- const providerOptions = availableProviders . map ( ( id ) => {
330- const label = id === 'wpcom' ? __ ( 'WordPress.com (recommended)' ) : AI_PROVIDERS [ id ] ;
331- labelToProvider . set ( label , id ) ;
332- return { label, description : id } ;
333- } ) ;
334- const answer = await ui . askUser ( [
335- {
336- question : __ ( 'Choose how to connect' ) ,
337- options : providerOptions ,
338- } ,
339- ] ) ;
340- const selectedLabel = Object . values ( answer ) [ 0 ] as string ;
341- const selectedProvider = labelToProvider . get ( selectedLabel ) ;
342- if ( selectedProvider ) {
343- try {
344- if ( selectedProvider === 'wpcom' ) {
345- // Run login flow directly instead of prepare(), which would
346- // just throw "login required" since there's no token yet.
347- ui . stop ( ) ;
348- await runLoginCommand ( ) ;
349- ui . start ( ) ;
350-
351- if ( await isAiProviderReady ( 'wpcom' ) ) {
352- await switchProvider ( 'wpcom' , false ) ;
353- const token = await readAuthToken ( ) ;
354- if ( token ) {
355- ui . showSuccess (
356- sprintf (
357- /* translators: 1: display name, 2: email */
358- __ ( 'Logged in as %1$s (%2$s)' ) ,
359- token . displayName ,
360- token . email
361- )
362- ) ;
363- ui . setStatusMessage (
364- sprintf (
365- /* translators: %s: display name */
366- __ ( 'Logged in as %s' ) ,
367- token . displayName
368- )
369- ) ;
370- showCapabilitiesOnConnect = false ;
371- ui . showCapabilities ( ) ;
372- }
373- }
374- } else {
375- await prepareProviderSelection ( selectedProvider ) ;
376- await switchProvider ( selectedProvider , false ) ;
377- showCapabilitiesOnConnect = false ;
378- ui . showCapabilities ( ) ;
379- }
380- } catch ( error ) {
381- if ( ! isPromptAbortError ( error ) ) {
382- if ( error instanceof LoggerError ) {
383- ui . showError ( error . message ) ;
384- } else {
385- throw error ;
386- }
387- }
388- }
389- }
308+ showCapabilitiesOnConnect = false ;
309+ ui . showCapabilities ( ) ;
390310 } else if ( currentProvider === 'wpcom' ) {
391311 const token = await readAuthToken ( ) ;
392312 if ( token ) {
0 commit comments