chore: prepare GoodBuddy 0.8.2
Cross-platform packages / Validate source (push) Waiting to run
Cross-platform packages / ${{ matrix.platform }} ${{ matrix.arch }} (arm64, macos, macos-15) (push) Blocked by required conditions
Cross-platform packages / ${{ matrix.platform }} ${{ matrix.arch }} (arm64, windows, windows-2025) (push) Blocked by required conditions
Cross-platform packages / ${{ matrix.platform }} ${{ matrix.arch }} (x64, linux, ubuntu-24.04) (push) Blocked by required conditions
Cross-platform packages / ${{ matrix.platform }} ${{ matrix.arch }} (x64, macos, macos-15-intel) (push) Blocked by required conditions
Cross-platform packages / ${{ matrix.platform }} ${{ matrix.arch }} (x64, windows, windows-2025) (push) Blocked by required conditions
Cross-platform packages / Publish GitHub Release (push) Blocked by required conditions
Cross-platform packages / ${{ matrix.platform }} ${{ matrix.arch }} (arm64, linux, ubuntu-24.04-arm) (push) Blocked by required conditions

This commit is contained in:
lofyer
2026-08-06 22:47:13 +08:00
parent 8d00e6371d
commit b8fc7bc86e
114 changed files with 22916 additions and 1560 deletions
+112
View File
@@ -0,0 +1,112 @@
import { isAgentRuntimeModelProtocol } from '../../shared/contracts'
import type { AgentRuntimeSelection } from '../../shared/runtime-selection-contracts'
import type {
ResolvedModelProfile,
ResolvedRuntimeSettings
} from '../runtime-settings-store'
export type SelectedRuntimeTarget = 'model' | 'opencode' | 'continue'
function requireProfile(
settings: ResolvedRuntimeSettings,
profileId: string
): ResolvedModelProfile {
const profile = settings.modelProfiles.find(
(candidate) => candidate.id === profileId
)
if (!profile) {
throw new Error('所选模型连接不存在或已被删除')
}
return profile
}
export function getConfiguredRuntimeTarget(
settings: ResolvedRuntimeSettings
): SelectedRuntimeTarget {
if (settings.provider === 'continue') {
return 'continue'
}
if (
settings.provider === 'opencode' ||
settings.provider === 'auto'
) {
return 'opencode'
}
return 'model'
}
export function applyRuntimeSelection(
settings: ResolvedRuntimeSettings,
selection: AgentRuntimeSelection
): {
settings: ResolvedRuntimeSettings
target: SelectedRuntimeTarget
} {
if (selection.provider === 'auto') {
return {
settings,
target: getConfiguredRuntimeTarget(settings)
}
}
if (selection.provider === 'model') {
const profile = requireProfile(settings, selection.profileId)
return {
target: 'model',
settings: {
...settings,
provider: 'model',
modelBaseUrl: profile.baseUrl,
modelName: profile.modelName,
modelProtocol: profile.protocol,
modelAuthentication: profile.authentication,
imageGenerationQuality:
profile.imageGenerationQuality ?? settings.imageGenerationQuality,
apiKey: profile.apiKey,
defaultModelProfileId: profile.id
}
}
}
const profile = selection.profileId
? requireProfile(settings, selection.profileId)
: undefined
if (selection.provider === 'opencode') {
if (profile && !isAgentRuntimeModelProtocol(profile.protocol)) {
throw new Error(
'OpenCode 独立模型连接仅支持文本对话协议,不支持图像生成协议'
)
}
if (profile && settings.opencodeBaseUrl) {
throw new Error(
'OpenCode 独立模型连接需要启用由 GoodBuddy 自动启动的本机 OpenCode'
)
}
return {
target: 'opencode',
settings: {
...settings,
provider: 'opencode',
opencodeEmbedded: !settings.opencodeBaseUrl,
opencodeModelProfile: profile
}
}
}
if (
profile &&
!isAgentRuntimeModelProtocol(profile.protocol)
) {
throw new Error(
'Continue 独立模型连接仅支持文本对话协议,不支持图像生成协议'
)
}
return {
target: 'continue',
settings: {
...settings,
provider: 'continue',
continueModelProfile: profile
}
}
}