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
@@ -14,6 +14,42 @@ export const DEEPSEEK_HARNESS_CREDENTIAL_REF =
'GOODBUDDY_HARNESS_MODEL_API_KEY'
export const DEEPSEEK_HARNESS_MAX_FRAME_BYTES =
8 * 1024 * 1024
export const DEEPSEEK_HARNESS_EXTENSION_ACTIVATION_TIMEOUT_MS =
5_000
export const DEEPSEEK_HARNESS_EXTENSION_DISPOSAL_TIMEOUT_MS =
1_000
export const DEEPSEEK_HARNESS_TOTAL_EXTENSION_ACTIVATION_TIMEOUT_MS =
90_000
const DEEPSEEK_HARNESS_HOST_STARTUP_OVERHEAD_MS = 10_000
const DEEPSEEK_HARNESS_STARTUP_FAILURE_CLEANUP_MS = 2_000
export function deepSeekHarnessStartupBudget(
extensionCount: number
): {
hostTimeoutMs: number
mainTimeoutMs: number
} {
const boundedExtensionCount = Math.max(
0,
Math.floor(extensionCount)
)
const extensionSequenceMs = Math.min(
DEEPSEEK_HARNESS_TOTAL_EXTENSION_ACTIVATION_TIMEOUT_MS +
DEEPSEEK_HARNESS_EXTENSION_DISPOSAL_TIMEOUT_MS,
boundedExtensionCount *
(DEEPSEEK_HARNESS_EXTENSION_ACTIVATION_TIMEOUT_MS +
DEEPSEEK_HARNESS_EXTENSION_DISPOSAL_TIMEOUT_MS)
)
const hostTimeoutMs =
DEEPSEEK_HARNESS_HOST_STARTUP_OVERHEAD_MS +
extensionSequenceMs
return {
hostTimeoutMs,
mainTimeoutMs:
hostTimeoutMs +
DEEPSEEK_HARNESS_STARTUP_FAILURE_CLEANUP_MS
}
}
const skillPackageSchema = z
.object({