From 38ff11ee16d84d5c39f08f8c14f06f469a1c6165 Mon Sep 17 00:00:00 2001 From: luulam Date: Tue, 8 Sep 2026 09:38:03 +0700 Subject: [PATCH] fix(merge): restore chat.js imports, trust-vision floor, gitignore entries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Audit of every branch-owned line the -X theirs merge dropped from the 32 pre-merge commits found three more real regressions: * src/sse/handlers/chat.js: merge kept the capsOverride feature (bb8d67ba) but reverted the import block, so getCustomModels and capabilitiesFromServiceKind were undefined. The runtime error was swallowed by the feature's own fail-open try/catch — custom models silently lost their vision override. Restored both imports. * open-sse/providers/capabilities.js: TRUST_UPSTREAM_VISION (the floor that keeps vision on for unknown models on upstream-validating gateways like openrouter) was left as dead code by the merge — upstream rewrote step 4 as refine() and dropped the check. Re-applied it on top of the new refine() so catalog/limits refinement still applies. * tests/unit/chat-connection-pin.test.js: mock auth module lacked isModelAllowedForKey added by f0adfb20. * .gitignore: re-add .pi-subagents/. --- .gitignore | 5 ++++- open-sse/providers/capabilities.js | 5 ++++- src/sse/handlers/chat.js | 3 ++- tests/unit/chat-connection-pin.test.js | 1 + 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index f231c22c..fbab4ac0 100644 --- a/.gitignore +++ b/.gitignore @@ -91,4 +91,7 @@ graphify-out/* .kiro/ # CommandCode CLI local state (auth/taste/projects) -.commandcode/ \ No newline at end of file +.commandcode/ + +# Pi subagent run artifacts +.pi-subagents/ \ No newline at end of file diff --git a/open-sse/providers/capabilities.js b/open-sse/providers/capabilities.js index 14c996da..999779f6 100644 --- a/open-sse/providers/capabilities.js +++ b/open-sse/providers/capabilities.js @@ -476,6 +476,9 @@ export function getCapabilitiesForModel(provider, model) { } } - // 4. Floor + // 4. Floor (upstream-validated gateways keep vision on for unknown models) + if (provider && TRUST_UPSTREAM_VISION.has(provider)) { + return { ...refine(null, provider, model), vision: true }; + } return refine(null, provider, model); } diff --git a/src/sse/handlers/chat.js b/src/sse/handlers/chat.js index a0dea5d8..23141522 100644 --- a/src/sse/handlers/chat.js +++ b/src/sse/handlers/chat.js @@ -10,8 +10,9 @@ import { isModelAllowedForKey, } from "../services/auth.js"; import { handleAntigravityQuotaError, clearAntigravityStrikes } from "../services/antigravityQuota.js"; -import { getSettings } from "@/lib/localDb"; +import { getSettings, getCustomModels } from "@/lib/localDb"; import { getModelInfo, getComboModels } from "../services/model.js"; +import { capabilitiesFromServiceKind } from "open-sse/providers/capabilities.js"; import { handleChatCore } from "open-sse/handlers/chatCore.js"; import { DEFAULT_HEADROOM_URL } from "@/lib/headroom/detect"; import { getTransform as getPxpipeTransform } from "@/lib/pxpipe/loader.js"; diff --git a/tests/unit/chat-connection-pin.test.js b/tests/unit/chat-connection-pin.test.js index 523019e5..d4d367e3 100644 --- a/tests/unit/chat-connection-pin.test.js +++ b/tests/unit/chat-connection-pin.test.js @@ -16,6 +16,7 @@ const authMocks = vi.hoisted(() => ({ clearAccountError: vi.fn(async () => {}), extractApiKey: vi.fn(() => null), isValidApiKey: vi.fn(async () => true), + isModelAllowedForKey: vi.fn(() => true), })); const tokenMocks = vi.hoisted(() => ({ checkAndRefreshToken: vi.fn(async (_p, creds) => creds),