feat(provider): align provider and model workflows (#324)

* feat(provider): align provider and model workflows

* fix(provider): clear gemini/github flags and use local ollama default

* fix(provider): preserve explicit startup provider selection

* fix(provider): clear env when deleting last profile

* chore(provider): apply review nits in ProviderManager

* fix(provider): preserve explicit env on last-profile delete

* fix(provider): preserve explicit env when profile marker is stale

---------

Co-authored-by: Gitlawb <gitlawb@users.noreply.github.com>
This commit is contained in:
Agent_J
2026-04-04 17:59:45 +05:30
committed by GitHub
parent a0bdab24c0
commit ef881b247f
10 changed files with 1803 additions and 22 deletions

View File

@@ -1,12 +1,10 @@
import type { Command } from '../../commands.js'
import { shouldInferenceConfigCommandBeImmediate } from '../../utils/immediateCommand.js'
export default {
const provider = {
type: 'local-jsx',
name: 'provider',
description: 'Set up and save a third-party provider profile for OpenClaude',
get immediate() {
return shouldInferenceConfigCommandBeImmediate()
},
description: 'Manage API provider profiles',
load: () => import('./provider.js'),
} satisfies Command
export default provider

View File

@@ -2,6 +2,7 @@ import * as React from 'react'
import type { LocalJSXCommandCall, LocalJSXCommandOnDone } from '../../types/command.js'
import { COMMON_HELP_ARGS, COMMON_INFO_ARGS } from '../../constants/xml.js'
import { ProviderManager } from '../../components/ProviderManager.js'
import TextInput from '../../components/TextInput.js'
import {
Select,
@@ -1289,22 +1290,34 @@ export function ProviderWizard({
}
export const call: LocalJSXCommandCall = async (onDone, _context, args) => {
const normalizedArgs = args?.trim().toLowerCase() || ''
const trimmedArgs = args?.trim().toLowerCase() ?? ''
if (COMMON_INFO_ARGS.includes(normalizedArgs)) {
onDone(buildUsageText(), { display: 'system' })
return null
if (
COMMON_HELP_ARGS.includes(trimmedArgs) ||
COMMON_INFO_ARGS.includes(trimmedArgs) ||
trimmedArgs === 'help' ||
trimmedArgs === '--help' ||
trimmedArgs === '-h'
) {
onDone(
'Run /provider to add, edit, delete, or activate provider profiles. The active provider controls base URL, model, and API key.',
{ display: 'system' },
)
return
}
if (COMMON_HELP_ARGS.includes(normalizedArgs)) {
onDone(buildUsageText(), { display: 'system' })
return null
}
return (
<ProviderManager
mode="manage"
onDone={result => {
const message =
result?.message ??
(result?.action === 'saved'
? 'Provider profile updated'
: 'Provider manager closed')
if (normalizedArgs) {
onDone('Usage: /provider', { display: 'system' })
return null
}
return <ProviderWizard onDone={onDone} />
onDone(message, { display: 'system' })
}}
/>
)
}