fix(merge): restore chat.js imports, trust-vision floor, gitignore entries

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/.
This commit is contained in:
2026-09-08 09:38:03 +07:00
parent e3ba5d2207
commit 38ff11ee16
4 changed files with 11 additions and 3 deletions

5
.gitignore vendored
View File

@@ -91,4 +91,7 @@ graphify-out/*
.kiro/
# CommandCode CLI local state (auth/taste/projects)
.commandcode/
.commandcode/
# Pi subagent run artifacts
.pi-subagents/

View File

@@ -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);
}

View File

@@ -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";

View File

@@ -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),