feat: expand multi-runtime workflows for 0.10.0

GoodBuddy previously exposed Runtime capabilities, MCP assignments, plugin controls, context compaction, usage reporting, and task-completion behavior through incomplete or inconsistent paths. This release unifies managed OpenCode, Continue, and DeepSeek Harness controls; adds DSH plugin and image workflows; strengthens MCP and Runtime lifecycle bounds; fixes Windows notification activation; validates cross-architecture packages; and presents the approved bilingual four-section release notes.

The DSH plugin marketplace remains a default-off preview whose trusted third-party code runs with current-user permissions. Ask remains read-only, Execute keeps approval controls, and context compaction may use the selected model without deleting GoodBuddy chat history.

Release note: GoodBuddy 0.10.0 重点完善多 Runtime 工作流,统一 OpenCode、Continue 与 DeepSeek Harness 的能力、MCP、插件和上下文管理,并提升长对话、多会话与任务通知的连贯性。
This commit is contained in:
mesalogo
2026-08-17 12:57:12 +08:00
parent f5ee9b2198
commit cbbe30896e
50 changed files with 4077 additions and 605 deletions
+6 -3
View File
@@ -127,6 +127,7 @@ import {
import {
agentRuntimeSelectionKey,
agentRuntimeSelectionSchema,
getDefaultRuntimeSelection,
type AgentRuntimeSelection
} from '../shared/runtime-selection-contracts'
import {
@@ -2968,10 +2969,13 @@ export function registerIpcHandlers(
const conversation = assistantDatabase.getConversation(
request.conversationId
)
const settings = await settingsStore.getResolvedSettings()
const persistedRuntimeSelection =
conversation.runtimeSelection ??
getDefaultRuntimeSelection(settings)
if (
conversation.projectId !== request.projectId ||
!conversation.runtimeSelection ||
agentRuntimeSelectionKey(conversation.runtimeSelection) !==
agentRuntimeSelectionKey(persistedRuntimeSelection) !==
agentRuntimeSelectionKey(request.runtimeSelection)
) {
throw new Error('对话 Runtime 或 Project 已更改,请刷新后重试')
@@ -2998,7 +3002,6 @@ export function registerIpcHandlers(
contextCompressionState:
conversation.contextCompressionState
}
const settings = await settingsStore.getResolvedSettings()
const selected = applyRuntimeSelection(
settings,
request.runtimeSelection