import { getAdapter } from "../driver.js"; import { parseJson, stringifyJson } from "../helpers/jsonCol.js"; import { makeKv } from "../helpers/kvStore.js"; const aliasKv = makeKv("modelAliases"); const customKv = makeKv("customModels"); const mitmKv = makeKv("mitmAlias"); // modelAliases: key=alias, value=modelString export async function getModelAliases() { return await aliasKv.getAll(); } export async function setModelAlias(alias, model) { await aliasKv.set(alias, model); } export async function deleteModelAlias(alias) { await aliasKv.remove(alias); } // customModels: key=`${providerAlias}|${id}|${type}`, value=full model object function customKey(providerAlias, id, type) { return `${providerAlias}|${id}|${type}`; } export async function getCustomModels() { const all = await customKv.getAll(); return Object.values(all); } // Atomic check-then-insert inside transaction to prevent duplicate races export async function addCustomModel({ providerAlias, id, type = "llm", name }) { const k = customKey(providerAlias, id, type); const db = await getAdapter(); let added = false; db.transaction(() => { const row = db.get(`SELECT 1 FROM kv WHERE scope = 'customModels' AND key = ?`, [k]); if (row) return; const value = stringifyJson({ providerAlias, id, type, name: name || id }); db.run(`INSERT INTO kv(scope, key, value) VALUES('customModels', ?, ?)`, [k, value]); added = true; }); return added; } export async function deleteCustomModel({ providerAlias, id, type = "llm" }) { await customKv.remove(customKey(providerAlias, id, type)); } // mitmAlias: key=toolName, value=mappings object export async function getMitmAlias(toolName) { if (toolName) { const v = await mitmKv.get(toolName); return v || {}; } return await mitmKv.getAll(); } export async function setMitmAliasAll(toolName, mappings) { await mitmKv.set(toolName, mappings || {}); }