@jeffusion/bungee-core 4.4.1 → 4.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -189,12 +189,13 @@
189
189
  "X-Codex-Window-Id",
190
190
  "Thread-Id",
191
191
  "Session-Id",
192
+ "X-Codex-Routing-Hint",
192
193
  "X-OpenAI-Internal-Codex-Responses-Lite"
193
194
  ],
194
195
  "set": {
195
196
  "Accept": "text/event-stream",
196
197
  "Content-Type": "application/json",
197
- "User-Agent": "codex-tui/0.153.3 (Mac OS 26.5.1; arm64) iTerm.app/3.6.11 (codex-tui; 0.153.3)",
198
+ "User-Agent": "codex-tui/0.154.0 (Mac OS 26.5.2; arm64) iTerm.app/3.6.11 (codex-tui; 0.154.0)",
198
199
  "Originator": "codex-tui"
199
200
  }
200
201
  }
@@ -17488,9 +17488,11 @@ var listModels = reg.listModels;
17488
17488
 
17489
17489
  // plugins/model-mapping/server/catalog.ts
17490
17490
  var MODEL_CATALOG_STORAGE_KEY = "catalog:v1:data";
17491
- var MAX_CATALOG_BODY_BYTES = 512 * 1024;
17492
- var MAX_CATALOG_ITEMS = 4096;
17491
+ var MAX_CATALOG_BODY_BYTES = 16 * 1024 * 1024;
17492
+ var MAX_CATALOG_ITEMS = 20000;
17493
17493
  var MAX_CATALOG_STRING_BYTES = 512;
17494
+ var MODEL_CATALOG_PAGE_SIZE = 50;
17495
+ var MAX_MODEL_CATALOG_PAGE = Math.ceil(MAX_CATALOG_ITEMS / MODEL_CATALOG_PAGE_SIZE);
17494
17496
  var textEncoder = new TextEncoder;
17495
17497
  function isBoundedString(value) {
17496
17498
  return typeof value === "string" && textEncoder.encode(value).byteLength <= MAX_CATALOG_STRING_BYTES;
@@ -17666,13 +17668,31 @@ async function loadStoredModelCatalog(storage) {
17666
17668
  return null;
17667
17669
  return { fetchedAt: value.fetchedAt, models: value.models };
17668
17670
  }
17669
- function summarizeCatalog(source, models, fetchedAt) {
17671
+ function summarizeCatalog(source, models, fetchedAt, options = {}) {
17670
17672
  const providers = [...new Set(models.map((model) => model.provider).filter((provider) => Boolean(provider)))].sort();
17671
- return { source, fetchedAt, modelCount: models.length, providerCount: providers.length, models, providers };
17673
+ const filtered = models.filter((model) => (!options.provider || model.provider === options.provider) && (!options.search || model.label.toLocaleLowerCase().includes(options.search.toLocaleLowerCase()) || model.value.toLocaleLowerCase().includes(options.search.toLocaleLowerCase())));
17674
+ const requestedPage = options.page ?? 1;
17675
+ const page = Math.min(requestedPage, Math.max(1, Math.ceil(filtered.length / MODEL_CATALOG_PAGE_SIZE)));
17676
+ const start = (page - 1) * MODEL_CATALOG_PAGE_SIZE;
17677
+ return {
17678
+ source,
17679
+ fetchedAt,
17680
+ modelCount: models.length,
17681
+ providerCount: providers.length,
17682
+ providers,
17683
+ matchedCount: filtered.length,
17684
+ page,
17685
+ pageSize: MODEL_CATALOG_PAGE_SIZE,
17686
+ models: filtered.slice(start, start + MODEL_CATALOG_PAGE_SIZE)
17687
+ };
17672
17688
  }
17673
- async function getModelMappingCatalogStatus(storage) {
17689
+ async function getModelMappingCatalogStatus(storage, options = {}) {
17690
+ const page = options.page ?? 1;
17691
+ if (!Number.isInteger(page) || page < 1 || page > MAX_MODEL_CATALOG_PAGE || options.provider !== undefined && textEncoder.encode(options.provider).byteLength > MAX_CATALOG_STRING_BYTES || options.search !== undefined && textEncoder.encode(options.search).byteLength > MAX_CATALOG_STRING_BYTES) {
17692
+ throw new Error("invalid catalog query");
17693
+ }
17674
17694
  const stored = await loadStoredModelCatalog(storage);
17675
- return stored ? summarizeCatalog("stored", stored.models, stored.fetchedAt) : summarizeCatalog("static", buildStaticAllModels(), null);
17695
+ return stored ? summarizeCatalog("stored", stored.models, stored.fetchedAt, { ...options, page }) : summarizeCatalog("static", buildStaticAllModels(), null, { ...options, page });
17676
17696
  }
17677
17697
  async function refreshStoredModelMappingCatalog(storage, signal) {
17678
17698
  const catalog = await fetchModels({ signal, fetch: boundedFetch });
@@ -17689,6 +17709,23 @@ var API_ROUTES = Object.freeze([
17689
17709
  { path: "/catalog/refresh", methods: ["POST"], handler: "refreshCatalog" }
17690
17710
  ]);
17691
17711
  var MAX_RESPONSE_BYTES = 256 * 1024;
17712
+ var MAX_CATALOG_QUERY_BYTES = 512;
17713
+ var MAX_CATALOG_PAGE = 400;
17714
+ var queryEncoder = new TextEncoder;
17715
+ function catalogQuery(request) {
17716
+ const params = new URL(request.url).searchParams;
17717
+ for (const key of ["provider", "search", "page"]) {
17718
+ if (params.getAll(key).length > 1)
17719
+ return null;
17720
+ }
17721
+ const provider = params.get("provider") ?? undefined;
17722
+ const search = params.get("search") ?? undefined;
17723
+ const rawPage = params.get("page");
17724
+ const page = rawPage === null ? 1 : Number(rawPage);
17725
+ if (provider !== undefined && queryEncoder.encode(provider).byteLength > MAX_CATALOG_QUERY_BYTES || search !== undefined && queryEncoder.encode(search).byteLength > MAX_CATALOG_QUERY_BYTES || !Number.isSafeInteger(page) || page < 1 || page > MAX_CATALOG_PAGE)
17726
+ return null;
17727
+ return { provider, search, page };
17728
+ }
17692
17729
  function jsonResponse(value, status = 200) {
17693
17730
  const body = JSON.stringify(value);
17694
17731
  if (new TextEncoder().encode(body).byteLength > MAX_RESPONSE_BYTES) {
@@ -17732,7 +17769,12 @@ class ModelMappingControl {
17732
17769
  }
17733
17770
  };
17734
17771
  this.api = [
17735
- { ...API_ROUTES[0], invoke: invoke((context) => getModelMappingCatalogStatus(context.storage).then(jsonResponse)) },
17772
+ { ...API_ROUTES[0], invoke: invoke((context) => {
17773
+ const query = catalogQuery(context.request);
17774
+ if (!query)
17775
+ return Promise.resolve(jsonResponse({ error: "invalid_query" }, 400));
17776
+ return getModelMappingCatalogStatus(context.storage, query).then(jsonResponse);
17777
+ }) },
17736
17778
  { ...API_ROUTES[1], invoke: invoke((context) => this.refresh(context.storage).then(jsonResponse)) }
17737
17779
  ];
17738
17780
  }
@@ -17775,4 +17817,4 @@ export {
17775
17817
  control_default as default
17776
17818
  };
17777
17819
 
17778
- //# debugId=9E06B3A14515034D64756E2164756E21
17820
+ //# debugId=5399261F28937EB464756E2164756E21