@@ -3,7 +3,7 @@ import { readFileSync } from "node:fs";
33import { join } from "node:path" ;
44import { gatherRoutedModels } from "../src/codex/catalog" ;
55import { catalogHintsFromModelsApiItem } from "../src/codex/catalog/provider-fetch" ;
6- import { clearModelCache } from "../src/codex/model-cache" ;
6+ import { clearModelCache , getFreshCached , setCached } from "../src/codex/model-cache" ;
77import { buildModelsRequest } from "../src/oauth" ;
88import { KEY_LOGIN_PROVIDERS , validateApiKey } from "../src/oauth/key-providers" ;
99import { deriveKeyLoginMap , providerConfigSeed } from "../src/providers/derive" ;
@@ -67,10 +67,17 @@ describe("registry-owned provider model discovery", () => {
6767 . toContain ( "https" ) ;
6868 expect ( providerModelDiscoverySpecError ( { path : "models?unbounded=true" } ) )
6969 . toContain ( "query-free" ) ;
70- expect ( providerModelDiscoverySpecError ( { path : "../../internal/models" } ) )
71- . toContain ( "parent-directory" ) ;
72- expect ( providerModelDiscoverySpecError ( { path : "models/../internal" } ) )
73- . toContain ( "parent-directory" ) ;
70+ for ( const path of [
71+ "../../internal/models" ,
72+ "models/../internal" ,
73+ "models/%2e%2e/internal" ,
74+ "models/.%2E/internal" ,
75+ "models/%2e./internal" ,
76+ ] ) {
77+ expect ( providerModelDiscoverySpecError ( { path } ) ) . toContain ( "parent-directory" ) ;
78+ }
79+ expect ( providerModelDiscoverySpecError ( { path : String . raw `models\..\internal` } ) )
80+ . toContain ( "forward slashes" ) ;
7481 expect ( providerModelDiscoverySpecError ( { path : "models/model..variant" } ) ) . toBeNull ( ) ;
7582 expect ( providerModelDiscoverySpecError ( {
7683 url : "https://api.example.test/models" ,
@@ -79,6 +86,15 @@ describe("registry-owned provider model discovery", () => {
7986 expect ( providerModelDiscoverySpecError ( { maxModels : 25 } ) ) . toBeNull ( ) ;
8087 } ) ;
8188
89+ test ( "clears cached rows before applying a temporary registry discovery policy" , async ( ) => {
90+ setCached ( "together" , [ ] ) ;
91+ expect ( getFreshCached ( "together" , 60_000 ) ) . toEqual ( [ ] ) ;
92+
93+ await withTogetherDiscovery ( { maxModels : 25 } , ( ) => {
94+ expect ( getFreshCached ( "together" , 60_000 ) ) . toBeNull ( ) ;
95+ } ) ;
96+ } ) ;
97+
8298 test ( "limits collision preservation to fixed API-key destinations" , ( ) => {
8399 for ( const entry of PROVIDER_REGISTRY ) {
84100 if ( entry . preserveCustomDestination !== true ) continue ;
0 commit comments