fix: prevent managed runtime stalls during file changes
Cross-platform packages / Validate source (push) Canceled after 0s
Cross-platform packages / Authorize desktop packaging (push) Canceled after 0s
Cross-platform packages / linux arm64 (push) Canceled after 0s
Cross-platform packages / macos arm64 (push) Canceled after 0s
Cross-platform packages / windows arm64 (push) Canceled after 0s
Cross-platform packages / linux x64 (push) Canceled after 0s
Cross-platform packages / macos x64 (push) Canceled after 0s
Cross-platform packages / windows x64 (push) Canceled after 0s
Cross-platform packages / Publish GitHub and OSS release (push) Canceled after 0s
GoodBuddy Agents / Validate Agent source (push) Canceled after 0s
GoodBuddy Agents / Build darwin arm64 Agent (push) Canceled after 0s
GoodBuddy Agents / Build linux arm64 Agent (push) Canceled after 0s
GoodBuddy Agents / Build linux x64 Agent (push) Canceled after 0s

Automatic native Git snapshot diffs could block concurrent OpenCode sessions
after broad rewrites or line-ending conversions. Managed desktop and Agent
profiles now skip snapshots that GoodBuddy does not use, while preserving
file tools, native subagents, workspace Git operations, and Ask/Execute rules.

Drain otherwise-unused Continue utility-host stdout to prevent console output
from filling the pipe and blocking requests. Correct the lifecycle regression's
body observer to watch the underlying reader rather than a buffered wrapper.

Prepare Desktop 0.12.10 and Agent 0.11.22 with aligned bilingual notes and
feature documentation. Existing runtimes require restart or Agent update.
Full desktop UI before/after and Linux Agent production-path checks passed;
3626 tests passed, with 61 existing platform/manual skips.

Release note: 修复批量文件改写或换行转换后的托管 OpenCode 并行停顿,以及 Continue 控制台输出阻塞;本机升级重启后生效,远程项目请配套更新 Agent。
This commit is contained in:
mesalogo
2026-09-09 03:07:55 +08:00
parent 177ab2140e
commit 5a77dfdb93
20 changed files with 198 additions and 28 deletions
+36
View File
@@ -288,6 +288,41 @@ async function collectRun(
}
describe("OpenCodeRuntime embedded launcher", () => {
it.each(["native", "profile"] as const)(
"disables unused automatic Git snapshots with %s model configuration",
async (configuration) => {
const { deps, spawnMock } = dependencies(fakeChild());
const runtime = new OpenCodeRuntime(
options({
modelProfile: configuration === "profile"
? {
id: "00000000-0000-4000-8000-000000000011",
name: "Test model",
baseUrl: "https://model.example/v1",
modelName: "test-model",
protocol: "openai-responses",
authentication: "none",
supportsImageInput: false,
}
: undefined,
}),
deps,
);
try {
await expect(runtime.testConnection()).resolves.toMatchObject({
available: true,
});
const config = JSON.parse(
spawnMock.mock.calls[0]?.[2]?.env?.OPENCODE_CONFIG_CONTENT ?? "{}",
);
expect(config.snapshot).toBe(false);
expect(config.permission["*"]).toBe("allow");
} finally {
await runtime.dispose();
}
},
);
it("forwards retry scheduling and resumes only on a matching native busy event", async () => {
const next = Date.now() + 120_000;
const setup = runClient([
@@ -640,6 +675,7 @@ describe("OpenCodeRuntime embedded launcher", () => {
spawnOptions?.env?.OPENCODE_CONFIG_CONTENT ?? "{}",
) as Record<string, unknown>;
expect(config).toEqual({
snapshot: false,
skills: {
paths: [join(configDirectory!, "skills")],
urls: [],