mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-26 17:12:27 +03:00
Landed with the design call resolved per the owner's pick — **option 1**: the synced store is now endpoint-agnostic (persistDiscoveredModels and managedModelImport no longer drop non-chat models at write time), and chat selectability moved to read time (auto-pool expansion in autoStrategy applies filterChatSelectableModels; the models-route projection already had its chatOnly filter). Your discovery test now passes end-to-end (3/3): /api/show capabilities persist per connection and image/embedding requests route through the advertising host. Reconciliation notes: conflicted areas merged onto the current tip (adobe discovery import, requestedModel preflight signature, resolvedProvider fast-path coexists with the synced-route override — explicit resolution wins); carried base-red drains (#10055 memoization, #11071 test variants) dropped as already-landed; the managed-model-import exclusion test was propagated to the new contract (image/video models persist; the read filter still hides them from chat pickers — pinned by a new assertion). Full battery: 205/206 focused (the one red is a confirmed periodic-timer timing flake on the loaded devbox — 20/20 isolated), autoCombo vitest 30/30, combo suites 46/46, gates + typecheck clean. Thank you @yourspraveen — the capability probe + routing design was right; it just needed the store contract opened up. Fixes #11087.
58 lines
2.8 KiB
TypeScript
58 lines
2.8 KiB
TypeScript
// Regression guard for the #10246 follow-up: `resolveOpencodeConfigDir` has exactly ONE
|
|
// implementation, in `src/shared/services/opencodeConfigPath.ts`.
|
|
//
|
|
// #10246 moved the canonical resolvers into `opencodeConfigPath.ts` and left a thin wrapper
|
|
// `resolveOpencodeConfigDir` behind in `cliRuntime.ts`. That wrapper lost its last consumer in
|
|
// the same commit and became a dead export — which is what pushed the `check:dead-code` ratchet
|
|
// to 410 (baseline 409) and made every PR on `release/v3.8.50` born red on that gate.
|
|
//
|
|
// Worse than the ratchet: the wrapper returned `path.dirname()` of the canonical value, i.e.
|
|
// `~/.config` instead of `~/.config/opencode`. Two same-named exports with DIFFERENT return
|
|
// values is a live foot-gun — a future caller importing from `cliRuntime` instead of
|
|
// `opencodeConfigPath` would silently write the OpenCode config one directory too high.
|
|
//
|
|
// This test pins both halves: the canonical resolver's contract, and the absence of the
|
|
// divergent re-export.
|
|
|
|
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import path from "node:path";
|
|
|
|
import { resolveOpencodeConfigDir } from "@/shared/services/opencodeConfigPath";
|
|
import * as cliRuntime from "@/shared/services/cliRuntime";
|
|
|
|
test("#10246 canonical resolveOpencodeConfigDir returns the XDG opencode directory", () => {
|
|
assert.equal(
|
|
resolveOpencodeConfigDir({ XDG_CONFIG_HOME: "/xdg" }, "/home/u"),
|
|
path.join("/xdg", "opencode")
|
|
);
|
|
// No XDG_CONFIG_HOME → `<home>/.config/opencode` on every platform (#3330: OpenCode reads
|
|
// XDG even on Windows, where it uses %USERPROFILE%\.config and never %APPDATA%).
|
|
assert.equal(
|
|
resolveOpencodeConfigDir({}, "/home/u"),
|
|
path.join("/home/u", ".config", "opencode")
|
|
);
|
|
// A blank/whitespace XDG_CONFIG_HOME must fall back, not produce a relative path.
|
|
assert.equal(
|
|
resolveOpencodeConfigDir({ XDG_CONFIG_HOME: " " }, "/home/u"),
|
|
path.join("/home/u", ".config", "opencode")
|
|
);
|
|
});
|
|
|
|
test("#10246 cliRuntime does NOT re-export a divergent resolveOpencodeConfigDir", () => {
|
|
assert.equal(
|
|
(cliRuntime as Record<string, unknown>).resolveOpencodeConfigDir,
|
|
undefined,
|
|
"cliRuntime must not re-export resolveOpencodeConfigDir — the wrapper returned the PARENT " +
|
|
"directory (path.dirname of the canonical value), so importing it by name would write the " +
|
|
"OpenCode config one level too high. Import it from opencodeConfigPath instead."
|
|
);
|
|
});
|
|
|
|
test("#10246 cliRuntime still exposes the config PATH helpers it owns", () => {
|
|
// The path helpers legitimately stay on cliRuntime (they have live consumers) — this guard
|
|
// must not be read as "cliRuntime should stop exporting OpenCode helpers entirely".
|
|
assert.equal(typeof cliRuntime.resolveOpencodeConfigPath, "function");
|
|
assert.equal(typeof cliRuntime.getOpenCodeConfigPath, "function");
|
|
});
|