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
+9 -1
View File
@@ -430,6 +430,8 @@ export type ResolvedRuntimeSettings = {
opencodeModelProfile?: ResolvedModelProfile
continueModelProfile?: ResolvedModelProfile
deepseekHarnessModelProfile?: ResolvedModelProfile
/** What DeepSeek Harness uses when its own configuration is selected. */
deepseekHarnessPlatformModelProfile?: ResolvedModelProfile
opencodeBaseUrl: string
opencodeEmbedded: boolean
opencodeBinaryPath: string
@@ -1989,6 +1991,11 @@ export class RuntimeSettingsStore {
: undefined
const deepseekHarnessModelProfile =
this.resolveDeepSeekHarnessModelProfile(settings, modelProfiles)
const deepseekHarnessPlatformModelProfile =
this.resolveDeepSeekHarnessModelProfile(
{ ...settings, deepseekHarnessModelSource: { kind: 'platform' } },
modelProfiles
)
const embeddingConnections =
this.resolveEmbeddingConnections(settings)
const activeEmbeddingConnection =
@@ -2014,6 +2021,7 @@ export class RuntimeSettingsStore {
defaultImageModelProfileId: settings.defaultImageModelProfileId,
continueModelProfile,
deepseekHarnessModelProfile,
deepseekHarnessPlatformModelProfile,
...agent,
subagentSmartRoutingEnabled:
settings.subagentSmartRoutingEnabled,
@@ -2530,7 +2538,7 @@ export class RuntimeSettingsStore {
const next: StoredSettings = {
...current,
version: CURRENT_SETTINGS_VERSION,
provider: input.provider,
provider: input.provider === 'auto' ? 'model' : input.provider,
modelProfiles,
defaultModelProfileId,
opencodeModelSource,