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
@@ -4,7 +4,7 @@ import {
REMOTE_WORKSPACE_LIMITS,
remoteAbsolutePathSchema
} from './remote-agent-contracts'
import { agentRuntimeSelectionSchema } from './runtime-selection-contracts'
import { runtimeSelectionLayerSchema } from './runtime-selection-contracts'
import { sshHostIdSchema } from './ssh-host-contracts'
export const REMOTE_PROJECT_SAVE_LIMITS = {
@@ -30,7 +30,7 @@ const commonDraftFields = {
name: projectCreateSchema.shape.name,
description: projectCreateSchema.shape.description,
defaultWorkMode: projectCreateSchema.shape.defaultWorkMode,
runtimeSelection: agentRuntimeSelectionSchema,
runtimeSelection: runtimeSelectionLayerSchema.optional(),
hostId: sshHostIdSchema,
remoteRootPath: remoteProjectRootPathSchema
} as const