feat: layer runtime and model selection across conversation, project and global

- Store runtime selection as { provider?, model? } layers and resolve them per
  field (conversation -> project -> global); drop the legacy auto provider.
- Migrate stored selections (database v49) and clear deleted profile ids.
- Re-resolve selections in Main per request and at queue dispatch.
- Add ProjectRuntimeSelector and a two-column RuntimeModelPicker; manage
  link opens model connections; restore per-runtime default model tabs.
- Stop duplicating trusted instructions and history across OpenCode,
  Continue and DeepSeek Harness runtimes.
- Document the layered design, global provider removal plan and planned
  purpose-specific models.
This commit is contained in:
mesalogo
2026-09-29 21:33:06 +08:00
parent d1b92deff3
commit 9c88ca20f3
50 changed files with 2879 additions and 1836 deletions
+5 -3
View File
@@ -1645,7 +1645,9 @@ export function SettingsPanel({
provider: agentRuntimeType,
profileId: runtimeSource.profileId
}
: { provider: agentRuntimeType }
: runtimeSource.kind === 'platform'
? { provider: agentRuntimeType, runtimeConfig: true as const }
: { provider: agentRuntimeType }
const status = testingModel
? await window.goodbuddy.settings.testModelConnection(profileId)
: await window.goodbuddy.settings.testRuntime(runtimeSelection)
@@ -3563,10 +3565,10 @@ export function SettingsPanel({
'openai-images-generations'
? t('model.profile.imageGeneration')
: t('model.profile.textChat'),
continueCompatibility: isContinueCompatible(profile)
continueCompatibility: isAgentRuntimeModelProtocol(profile.protocol)
? t('model.profile.compatible')
: t('model.profile.incompatible'),
openCodeCompatibility: isOpenCodeCompatible(profile)
openCodeCompatibility: isAgentRuntimeModelProtocol(profile.protocol)
? t('model.profile.compatible')
: t('model.profile.incompatibleImageProtocol'),
deepseekHarnessCompatibility: