@iaforged/context-code 2.2.8 → 2.2.9

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.
@@ -1 +1 @@
1
- import{getStoredLastModelForProvider as e,getStoredProviderBaseUrl as r,readProviderProfilesState as i,writeProviderProfilesState as o}from"./providerProfilesDb.js";const t=new Set(["claude","openai","openrouter","ollama","ollama-cloud","gemini-api","gemini-google","zai","minimax","nvidia","deepseek"]),l={claude:"main",openai:"main",openrouter:"main",ollama:"local","ollama-cloud":"main","gemini-api":"main","gemini-google":"main",zai:"main",minimax:"main",nvidia:"main",deepseek:"main"},n={claude:"claude",openai:"openai",openrouter:"openrouter",ollama:"ollama-local","ollama-cloud":"ollama-cloud","gemini-api":"gemini-api","gemini-google":"gemini-google",zai:"z-ai",minimax:"minimax",nvidia:"nvidia",deepseek:"deepseek"},a={openrouter:"https://openrouter.ai/api/v1",ollama:"http://localhost:11434/v1","ollama-cloud":"http://localhost:11434/v1","gemini-api":"https://generativelanguage.googleapis.com/v1beta/openai","gemini-google":"https://generativelanguage.googleapis.com/v1beta/openai",zai:"https://api.z.ai/api/coding/paas/v4",minimax:"https://api.minimax.io/anthropic",deepseek:"https://api.deepseek.com/v1"};function sanitizeProfileSegment(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"default"}function buildProfileId(e,r){return`${e}/${sanitizeProfileSegment(r)}`}function buildDefaultAgentName(e,r){const i=n[e],o=sanitizeProfileSegment(r);return o===sanitizeProfileSegment(l[e])?i:`${i}-${o}`}export function getDefaultProfileName(e){return l[e]}export function buildProviderProfileId(e,r){return buildProfileId(e,r)}export function isDefaultProfileId(e,r){return!!r&&r===buildProfileId(e,l[e])}function getState(){const e=i();return{version:1,profiles:e.profiles??{},lastProfileIdByProvider:e.lastProfileIdByProvider??{},activeProfileId:e.activeProfileId}}function saveState(e){const r=e(getState());return o(r),r}function getProfilesMap(){return getState().profiles??{}}function getProfileSeed(i,o){return o?function(i){return{baseUrl:"openrouter"===i||"ollama"===i||"ollama-cloud"===i||"zai"===i||"minimax"===i||"deepseek"===i?r(i):void 0,lastModel:e(i)??null}}(i):{baseUrl:a[i],lastModel:null}}export function isProfiledProvider(e){return t.has(e)}export function listProviderProfiles(e){const r=Object.values(getProfilesMap());return e?r.filter(r=>r.provider===e):r}export function getProviderProfile(e){return e?getProfilesMap()[e]??null:null}export function getActiveProviderProfile(){return getProviderProfile(getState().activeProfileId)}export function getLastUsedProviderProfile(e){const r=getState(),i=r.lastProfileIdByProvider?.[e];if(i){const e=getProviderProfile(i);if(e)return e}return listProviderProfiles(e)[0]??null}export function createProviderProfile(e){const r=buildProfileId(e.provider,e.name),i=getProviderProfile(r);if(i)return i;const o=(new Date).toISOString(),t={id:r,provider:e.provider,name:e.name.trim()||l[e.provider],agentName:e.agentName?.trim()||buildDefaultAgentName(e.provider,e.name),baseUrl:e.baseUrl,lastModel:e.lastModel??null,createdAt:o,updatedAt:o};return saveState(r=>({...r,activeProfileId:e.activate?t.id:r.activeProfileId,profiles:{...r.profiles??{},[t.id]:t},lastProfileIdByProvider:{...r.lastProfileIdByProvider??{},[e.provider]:t.id}})),t}export function ensureProviderProfile(e,r=l[e]){const i=getProviderProfile(buildProfileId(e,r));if(i)return i;return createProviderProfile({provider:e,name:r,...getProfileSeed(e,0===listProviderProfiles(e).length),activate:!1})}export function resolveProviderProfile(e,r={}){const i=getActiveProviderProfile();if(i?.provider===e)return i;const o=getLastUsedProviderProfile(e);return o||(r.createIfMissing?ensureProviderProfile(e):null)}export function getResolvedProviderProfileId(e){return resolveProviderProfile(e)?.id??null}export function setActiveProviderProfile(e){const r=getProviderProfile(e);return r?(saveState(e=>({...e,activeProfileId:r.id,lastProfileIdByProvider:{...e.lastProfileIdByProvider??{},[r.provider]:r.id}})),r):null}export function setActiveProfileForProvider(e,r){const i=r&&r.trim()?ensureProviderProfile(e,r):resolveProviderProfile(e,{createIfMissing:!0});return setActiveProviderProfile(i.id),i}export function findProviderProfileByName(e,r){return getProviderProfile(buildProfileId(e,r))}export function updateProviderProfile(e,r){let i=null;return saveState(o=>{const t=o.profiles?.[e];return t?(i=r(t),{...o,profiles:{...o.profiles??{},[e]:i},lastProfileIdByProvider:{...o.lastProfileIdByProvider??{},[t.provider]:e}}):o}),i}export function renameProviderProfile(e,r,i){const o=findProviderProfileByName(e,r);if(!o)return null;const t=i.trim();if(!t)throw new Error("Debes indicar un nuevo nombre de perfil.");const l=buildProfileId(e,t);if(l!==o.id&&getProviderProfile(l))throw new Error(`Ya existe un perfil ${e}/${t}.`);const n={...o,id:l,name:t,updatedAt:(new Date).toISOString()};return saveState(r=>{const i={...r.profiles??{}};delete i[o.id],i[l]=n;const t={...r.lastProfileIdByProvider??{},[e]:r.lastProfileIdByProvider?.[e]===o.id?l:r.lastProfileIdByProvider?.[e]};return{...r,activeProfileId:r.activeProfileId===o.id?l:r.activeProfileId,profiles:i,lastProfileIdByProvider:t}}),{previousId:o.id,profile:n}}export function removeProviderProfile(e,r){const i=findProviderProfileByName(e,r);return i?(saveState(r=>{const o={...r.profiles??{}};delete o[i.id];const t=Object.values(o).filter(r=>r.provider===e),l=t[0]?.id;return{...r,activeProfileId:r.activeProfileId===i.id?l:r.activeProfileId,profiles:o,lastProfileIdByProvider:{...r.lastProfileIdByProvider??{},[e]:r.lastProfileIdByProvider?.[e]===i.id?l:r.lastProfileIdByProvider?.[e]}}}),i):null}export function clearAllProviderProfiles(){const e=Object.values(getProfilesMap());return saveState(e=>({version:1,profiles:{},lastProfileIdByProvider:{}})),e}export function setProviderProfileAgentNameByName(e,r,i){const o=findProviderProfileByName(e,r);if(!o)return null;const t=sanitizeProfileSegment(i);if(!t)throw new Error("Debes indicar un agentName valido.");return updateProviderProfile(o.id,e=>({...e,agentName:t,updatedAt:(new Date).toISOString()}))}export function setProviderProfileBaseUrl(e,r){const i=resolveProviderProfile(e,{createIfMissing:!0});return updateProviderProfile(i.id,e=>({...e,baseUrl:r,updatedAt:(new Date).toISOString()}))??i}export function clearProviderProfileBaseUrl(e){const r=resolveProviderProfile(e);return r?updateProviderProfile(r.id,e=>({...e,baseUrl:void 0,updatedAt:(new Date).toISOString()})):null}export function getProviderProfileBaseUrl(e){return resolveProviderProfile(e)?.baseUrl??null}export function setProviderProfileLastModel(e,r){const i=resolveProviderProfile(e);return i?updateProviderProfile(i.id,e=>({...e,lastModel:r,updatedAt:(new Date).toISOString()})):null}export function getProviderProfileLastModel(e){return resolveProviderProfile(e)?.lastModel??null}export function setProviderProfileLastModelByName(e,r,i){const o=findProviderProfileByName(e,r);return o?updateProviderProfile(o.id,e=>({...e,lastModel:i,updatedAt:(new Date).toISOString()})):null}
1
+ import{getStoredLastModelForProvider as e,getStoredProviderBaseUrl as r,readProviderProfilesState as i,writeProviderProfilesState as o}from"./providerProfilesDb.js";const t=new Set(["claude","openai","openrouter","ollama","ollama-cloud","gemini-api","gemini-google","zai","minimax","nvidia","deepseek","custom-openai","custom-anthropic"]),l={claude:"main",openai:"main",openrouter:"main",ollama:"local","ollama-cloud":"main","gemini-api":"main","gemini-google":"main",zai:"main",minimax:"main",nvidia:"main",deepseek:"main","custom-openai":"main","custom-anthropic":"main"},n={claude:"claude",openai:"openai",openrouter:"openrouter",ollama:"ollama-local","ollama-cloud":"ollama-cloud","gemini-api":"gemini-api","gemini-google":"gemini-google",zai:"z-ai",minimax:"minimax",nvidia:"nvidia",deepseek:"deepseek","custom-openai":"custom-openai","custom-anthropic":"custom-anthropic"},a={openrouter:"https://openrouter.ai/api/v1",ollama:"http://localhost:11434/v1","ollama-cloud":"http://localhost:11434/v1","gemini-api":"https://generativelanguage.googleapis.com/v1beta/openai","gemini-google":"https://generativelanguage.googleapis.com/v1beta/openai",zai:"https://api.z.ai/api/coding/paas/v4",minimax:"https://api.minimax.io/anthropic",deepseek:"https://api.deepseek.com/v1"};function sanitizeProfileSegment(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"default"}function buildProfileId(e,r){return`${e}/${sanitizeProfileSegment(r)}`}function buildDefaultAgentName(e,r){const i=n[e],o=sanitizeProfileSegment(r);return o===sanitizeProfileSegment(l[e])?i:`${i}-${o}`}export function getDefaultProfileName(e){return l[e]}export function buildProviderProfileId(e,r){return buildProfileId(e,r)}export function isDefaultProfileId(e,r){return!!r&&r===buildProfileId(e,l[e])}function getState(){const e=i();return{version:1,profiles:e.profiles??{},lastProfileIdByProvider:e.lastProfileIdByProvider??{},activeProfileId:e.activeProfileId}}function saveState(e){const r=e(getState());return o(r),r}function getProfilesMap(){return getState().profiles??{}}function getProfileSeed(i,o){return o?function(i){return{baseUrl:"openrouter"===i||"ollama"===i||"ollama-cloud"===i||"zai"===i||"minimax"===i||"deepseek"===i?r(i):void 0,lastModel:e(i)??null}}(i):{baseUrl:a[i],lastModel:null}}export function isProfiledProvider(e){return t.has(e)}export function listProviderProfiles(e){const r=Object.values(getProfilesMap());return e?r.filter(r=>r.provider===e):r}export function getProviderProfile(e){return e?getProfilesMap()[e]??null:null}export function getActiveProviderProfile(){return getProviderProfile(getState().activeProfileId)}export function getLastUsedProviderProfile(e){const r=getState(),i=r.lastProfileIdByProvider?.[e];if(i){const e=getProviderProfile(i);if(e)return e}return listProviderProfiles(e)[0]??null}export function createProviderProfile(e){const r=buildProfileId(e.provider,e.name),i=getProviderProfile(r);if(i)return i;const o=(new Date).toISOString(),t={id:r,provider:e.provider,name:e.name.trim()||l[e.provider],agentName:e.agentName?.trim()||buildDefaultAgentName(e.provider,e.name),baseUrl:e.baseUrl,lastModel:e.lastModel??null,createdAt:o,updatedAt:o};return saveState(r=>({...r,activeProfileId:e.activate?t.id:r.activeProfileId,profiles:{...r.profiles??{},[t.id]:t},lastProfileIdByProvider:{...r.lastProfileIdByProvider??{},[e.provider]:t.id}})),t}export function ensureProviderProfile(e,r=l[e]){const i=getProviderProfile(buildProfileId(e,r));if(i)return i;return createProviderProfile({provider:e,name:r,...getProfileSeed(e,0===listProviderProfiles(e).length),activate:!1})}export function resolveProviderProfile(e,r={}){const i=getActiveProviderProfile();if(i?.provider===e)return i;const o=getLastUsedProviderProfile(e);return o||(r.createIfMissing?ensureProviderProfile(e):null)}export function getResolvedProviderProfileId(e){return resolveProviderProfile(e)?.id??null}export function setActiveProviderProfile(e){const r=getProviderProfile(e);return r?(saveState(e=>({...e,activeProfileId:r.id,lastProfileIdByProvider:{...e.lastProfileIdByProvider??{},[r.provider]:r.id}})),r):null}export function setActiveProfileForProvider(e,r){const i=r&&r.trim()?ensureProviderProfile(e,r):resolveProviderProfile(e,{createIfMissing:!0});return setActiveProviderProfile(i.id),i}export function findProviderProfileByName(e,r){return getProviderProfile(buildProfileId(e,r))}export function updateProviderProfile(e,r){let i=null;return saveState(o=>{const t=o.profiles?.[e];return t?(i=r(t),{...o,profiles:{...o.profiles??{},[e]:i},lastProfileIdByProvider:{...o.lastProfileIdByProvider??{},[t.provider]:e}}):o}),i}export function renameProviderProfile(e,r,i){const o=findProviderProfileByName(e,r);if(!o)return null;const t=i.trim();if(!t)throw new Error("Debes indicar un nuevo nombre de perfil.");const l=buildProfileId(e,t);if(l!==o.id&&getProviderProfile(l))throw new Error(`Ya existe un perfil ${e}/${t}.`);const n={...o,id:l,name:t,updatedAt:(new Date).toISOString()};return saveState(r=>{const i={...r.profiles??{}};delete i[o.id],i[l]=n;const t={...r.lastProfileIdByProvider??{},[e]:r.lastProfileIdByProvider?.[e]===o.id?l:r.lastProfileIdByProvider?.[e]};return{...r,activeProfileId:r.activeProfileId===o.id?l:r.activeProfileId,profiles:i,lastProfileIdByProvider:t}}),{previousId:o.id,profile:n}}export function removeProviderProfile(e,r){const i=findProviderProfileByName(e,r);return i?(saveState(r=>{const o={...r.profiles??{}};delete o[i.id];const t=Object.values(o).filter(r=>r.provider===e),l=t[0]?.id;return{...r,activeProfileId:r.activeProfileId===i.id?l:r.activeProfileId,profiles:o,lastProfileIdByProvider:{...r.lastProfileIdByProvider??{},[e]:r.lastProfileIdByProvider?.[e]===i.id?l:r.lastProfileIdByProvider?.[e]}}}),i):null}export function clearAllProviderProfiles(){const e=Object.values(getProfilesMap());return saveState(e=>({version:1,profiles:{},lastProfileIdByProvider:{}})),e}export function setProviderProfileAgentNameByName(e,r,i){const o=findProviderProfileByName(e,r);if(!o)return null;const t=sanitizeProfileSegment(i);if(!t)throw new Error("Debes indicar un agentName valido.");return updateProviderProfile(o.id,e=>({...e,agentName:t,updatedAt:(new Date).toISOString()}))}export function setProviderProfileBaseUrl(e,r){const i=resolveProviderProfile(e,{createIfMissing:!0});return updateProviderProfile(i.id,e=>({...e,baseUrl:r,updatedAt:(new Date).toISOString()}))??i}export function clearProviderProfileBaseUrl(e){const r=resolveProviderProfile(e);return r?updateProviderProfile(r.id,e=>({...e,baseUrl:void 0,updatedAt:(new Date).toISOString()})):null}export function getProviderProfileBaseUrl(e){return resolveProviderProfile(e)?.baseUrl??null}export function setProviderProfileLastModel(e,r){const i=resolveProviderProfile(e);return i?updateProviderProfile(i.id,e=>({...e,lastModel:r,updatedAt:(new Date).toISOString()})):null}export function getProviderProfileLastModel(e){return resolveProviderProfile(e)?.lastModel??null}export function setProviderProfileLastModelByName(e,r,i){const o=findProviderProfileByName(e,r);return o?updateProviderProfile(o.id,e=>({...e,lastModel:i,updatedAt:(new Date).toISOString()})):null}
@@ -1 +1 @@
1
- import{resetModelCapabilityOverridesForProviderChange as r}from"./modelSupportOverrides.js";import{resetModelStringsForProviderChange as e}from"./modelStrings.js";import{getStoredLastModelForProvider as o,setStoredActiveProviderPreference as i,setStoredLastModelForProvider as t}from"./providerProfilesDb.js";import{getProviderProfileLastModel as n,isProfiledProvider as d,setActiveProfileForProvider as a,setProviderProfileLastModel as u}from"./providerProfiles.js";export function toProviderPreference(r){return"openai"===r?"openai":"openrouter"===r?"openrouter":"ollama"===r?"ollama":"ollama-cloud"===r?"ollama-cloud":"gemini-api"===r?"gemini-api":"zai"===r?"zai":"minimax"===r?"minimax":"nvidia"===r?"nvidia":"deepseek"===r?"deepseek":"claude"}export function getStoredModelForProvider(r){if(d(r)){const e=n(r);if(null!==e)return e}const e=o(r);return void 0!==e?e:null}export function switchProviderPreference(o){const n="claude"===o.currentProvider||"openai"===o.currentProvider||"openrouter"===o.currentProvider||"ollama"===o.currentProvider||"ollama-cloud"===o.currentProvider||"gemini-google"===o.currentProvider||"zai"===o.currentProvider||"minimax"===o.currentProvider||"nvidia"===o.currentProvider||"deepseek"===o.currentProvider?o.currentProvider:toProviderPreference(o.currentProvider);return d(n)&&u(n,o.currentModel),t(n,o.currentModel),d(o.targetProvider)&&a(o.targetProvider,o.targetProfileName??void 0),i(o.targetProvider),n!==o.targetProvider&&(e(),r()),getStoredModelForProvider(o.targetProvider)}
1
+ import{resetModelCapabilityOverridesForProviderChange as r}from"./modelSupportOverrides.js";import{resetModelStringsForProviderChange as e}from"./modelStrings.js";import{getStoredLastModelForProvider as o,setStoredActiveProviderPreference as i,setStoredLastModelForProvider as t}from"./providerProfilesDb.js";import{getProviderProfileLastModel as n,isProfiledProvider as d,setActiveProfileForProvider as a,setProviderProfileLastModel as c}from"./providerProfiles.js";export function toProviderPreference(r){return"openai"===r?"openai":"openrouter"===r?"openrouter":"ollama"===r?"ollama":"ollama-cloud"===r?"ollama-cloud":"gemini-api"===r?"gemini-api":"zai"===r?"zai":"minimax"===r?"minimax":"nvidia"===r?"nvidia":"deepseek"===r?"deepseek":"custom-openai"===r?"custom-openai":"custom-anthropic"===r?"custom-anthropic":"claude"}export function getStoredModelForProvider(r){if(d(r)){const e=n(r);if(null!==e)return e}const e=o(r);return void 0!==e?e:null}export function switchProviderPreference(o){const n="claude"===o.currentProvider||"openai"===o.currentProvider||"openrouter"===o.currentProvider||"ollama"===o.currentProvider||"ollama-cloud"===o.currentProvider||"gemini-google"===o.currentProvider||"zai"===o.currentProvider||"minimax"===o.currentProvider||"nvidia"===o.currentProvider||"deepseek"===o.currentProvider||"custom-openai"===o.currentProvider||"custom-anthropic"===o.currentProvider?o.currentProvider:toProviderPreference(o.currentProvider);return d(n)&&c(n,o.currentModel),t(n,o.currentModel),d(o.targetProvider)&&a(o.targetProvider,o.targetProfileName??void 0),i(o.targetProvider),n!==o.targetProvider&&(e(),r()),getStoredModelForProvider(o.targetProvider)}
@@ -1 +1 @@
1
- import{isEnvTruthy as e}from"../envUtils.js";import{getSecureStorage as r}from"../secureStorage/index.js";import{isProviderBaseUrlCustomized as o}from"./providerBaseUrls.js";import{getProviderOverride as i}from"./providerOverrideContext.js";import{getStoredActiveProviderPreference as n}from"./providerProfilesDb.js";import{listProviderProfiles as t}from"./providerProfiles.js";export function providerPreferenceToApiProvider(e){if(e)return"claude"===e?"firstParty":e}export function isOpenAIProviderConfigured(){return e(process.env.CLAUDE_CODE_USE_OPENAI)||Boolean(process.env.OPENAI_API_KEY)||Boolean(process.env.OPENAI_API_TOKEN)||Boolean(process.env.OPENAI_OAUTH_TOKEN)||function(){try{const e=r().read(),o=Object.entries(e?.providerProfileOauth??{}).some(([e,r])=>e.startsWith("openai/")&&"object"==typeof r&&null!==r&&"string"==typeof r.accessToken&&r.accessToken.trim());return Boolean(o||e?.openAiOauth?.accessToken)}catch{return!1}}()}export function isOpenRouterProviderConfigured(){try{const e=r().read(),o=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("openrouter/")&&"string"==typeof r&&r.trim());return Boolean(process.env.OPENROUTER_API_KEY||process.env.OPENROUTER_API_TOKEN||e?.providerApiKeys?.openrouter||o)}catch{return Boolean(process.env.OPENROUTER_API_KEY||process.env.OPENROUTER_API_TOKEN)}}export function isOllamaProviderConfigured(){try{const e=n();return Boolean(process.env.OLLAMA_BASE_URL||o("ollama")||t("ollama").length>0||"ollama"===e)}catch{return Boolean(process.env.OLLAMA_BASE_URL)}}export function isOllamaCloudProviderConfigured(){if(isOllamaProviderConfigured())return!0;try{const e=r().read(),i=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("ollama-cloud/")&&"string"==typeof r&&r.trim()),t=n();return Boolean(process.env.OLLAMA_CLOUD_BASE_URL||process.env.OLLAMA_BASE_URL||process.env.OLLAMA_API_KEY||e?.providerApiKeys?.["ollama-cloud"]||i||o("ollama-cloud")||"ollama-cloud"===t||"ollama"===t)}catch{return Boolean(process.env.OLLAMA_CLOUD_BASE_URL||process.env.OLLAMA_BASE_URL||process.env.OLLAMA_API_KEY)}}export function isGeminiApiProviderConfigured(){try{const e=r().read(),o=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("gemini-api/")&&"string"==typeof r&&r.trim());return Boolean(process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY||e?.providerApiKeys?.["gemini-api"]||o)}catch{return Boolean(process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY)}}export function isGeminiGoogleProviderConfigured(){try{const e=n();return Boolean(process.env.GEMINI_OAUTH_TOKEN||process.env.GOOGLE_OAUTH_ACCESS_TOKEN||process.env.GOOGLE_APPLICATION_CREDENTIALS||process.env.GEMINI_GOOGLE_PROJECT_ID||process.env.GOOGLE_CLOUD_PROJECT||process.env.GCLOUD_PROJECT||Object.entries(storage?.providerProfileOauth??{}).some(([e,r])=>e.startsWith("gemini-google/")&&"object"==typeof r&&null!==r&&"string"==typeof r.accessToken&&r.accessToken.trim())||"gemini-google"===e)}catch{return Boolean(process.env.GEMINI_OAUTH_TOKEN||process.env.GOOGLE_OAUTH_ACCESS_TOKEN||process.env.GOOGLE_APPLICATION_CREDENTIALS||process.env.GEMINI_GOOGLE_PROJECT_ID||process.env.GOOGLE_CLOUD_PROJECT||process.env.GCLOUD_PROJECT)}}export function isZAIProviderConfigured(){try{const e=r().read(),o=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("zai/")&&"string"==typeof r&&r.trim());return Boolean(process.env.ZAI_API_KEY||e?.providerApiKeys?.zai||o)}catch{return Boolean(process.env.ZAI_API_KEY)}}export function isMiniMaxProviderConfigured(){try{const e=r().read(),o=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("minimax/")&&"string"==typeof r&&r.trim());return Boolean(process.env.MINIMAX_API_KEY||e?.providerApiKeys?.minimax||o)}catch{return Boolean(process.env.MINIMAX_API_KEY)}}export function isNvidiaProviderConfigured(){try{const e=r().read(),o=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("nvidia/")&&"string"==typeof r&&r.trim());return Boolean(process.env.NVIDIA_API_KEY||e?.providerApiKeys?.nvidia||o)}catch{return Boolean(process.env.NVIDIA_API_KEY)}}export function isDeepSeekProviderConfigured(){try{const e=r().read(),o=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("deepseek/")&&"string"==typeof r&&r.trim());return Boolean(process.env.DEEPSEEK_API_KEY||e?.providerApiKeys?.deepseek||o)}catch{return Boolean(process.env.DEEPSEEK_API_KEY)}}export function isOpenAICompatibleProvider(e){return"openai"===e||"openrouter"===e||"ollama"===e||"ollama-cloud"===e||"gemini-api"===e||"gemini-google"===e||"zai"===e||"minimax"===e||"nvidia"===e||"deepseek"===e}export function usesOpenAIBackend(e){return isOpenAICompatibleProvider(e)&&"minimax"!==e}export function hasDualProviderSessions(){return(isOpenAIProviderConfigured()||isOpenRouterProviderConfigured()||isOllamaProviderConfigured()||isOllamaCloudProviderConfigured()||isGeminiApiProviderConfigured()||isGeminiGoogleProviderConfigured()||isZAIProviderConfigured()||isMiniMaxProviderConfigured()||isNvidiaProviderConfigured()||isDeepSeekProviderConfigured())&&function(){try{const e=r().read(),o=Object.entries(e?.providerProfileOauth??{}).some(([e,r])=>e.startsWith("claude/")&&"object"==typeof r&&null!==r&&"string"==typeof r.accessToken&&r.accessToken.trim());return Boolean(o)}catch{return!1}}()}export function getAPIProvider(){const r=i();if(r)return r;if(e(process.env.CLAUDE_CODE_USE_BEDROCK))return"bedrock";if(e(process.env.CLAUDE_CODE_USE_VERTEX))return"vertex";if(e(process.env.CLAUDE_CODE_USE_FOUNDRY))return"foundry";try{const e=n();if("claude"===e)return"firstParty";if("openai"===e)return"openai";if("openrouter"===e)return"openrouter";if("ollama"===e)return"ollama";if("ollama-cloud"===e)return"ollama-cloud";if("gemini-api"===e)return"gemini-api";if("gemini-google"===e)return"gemini-google";if("zai"===e)return"zai";if("minimax"===e)return"minimax";if("nvidia"===e)return"nvidia";if("deepseek"===e)return"deepseek"}catch{}const o=isOpenAIProviderConfigured(),t=isOpenRouterProviderConfigured(),s=isOllamaProviderConfigured(),a=isOllamaCloudProviderConfigured(),p=isGeminiApiProviderConfigured(),c=isGeminiGoogleProviderConfigured(),d=isZAIProviderConfigured(),u=isMiniMaxProviderConfigured(),l=isNvidiaProviderConfigured(),v=isDeepSeekProviderConfigured();return o?"openai":t?"openrouter":d?"zai":u?"minimax":l?"nvidia":v?"deepseek":p?"gemini-api":c?"gemini-google":a?"ollama-cloud":s?"ollama":"firstParty"}export function getAPIProviderForStatsig(){return getAPIProvider()}export function isFirstPartyAnthropicBaseUrl(){const e=process.env.ANTHROPIC_BASE_URL;if(!e)return!0;try{const r=new URL(e).host,o=["api.anthropic.com"];return"ant"===process.env.USER_TYPE&&o.push("api-staging.anthropic.com"),o.includes(r)}catch{return!1}}
1
+ import{isEnvTruthy as e}from"../envUtils.js";import{getSecureStorage as r}from"../secureStorage/index.js";import{isProviderBaseUrlCustomized as o}from"./providerBaseUrls.js";import{getProviderOverride as i}from"./providerOverrideContext.js";import{getStoredActiveProviderPreference as n}from"./providerProfilesDb.js";import{listProviderProfiles as t}from"./providerProfiles.js";export function providerPreferenceToApiProvider(e){if(e)return"claude"===e?"firstParty":e}export function isOpenAIProviderConfigured(){return e(process.env.CLAUDE_CODE_USE_OPENAI)||Boolean(process.env.OPENAI_API_KEY)||Boolean(process.env.OPENAI_API_TOKEN)||Boolean(process.env.OPENAI_OAUTH_TOKEN)||function(){try{const e=r().read(),o=Object.entries(e?.providerProfileOauth??{}).some(([e,r])=>e.startsWith("openai/")&&"object"==typeof r&&null!==r&&"string"==typeof r.accessToken&&r.accessToken.trim());return Boolean(o||e?.openAiOauth?.accessToken)}catch{return!1}}()}export function isOpenRouterProviderConfigured(){try{const e=r().read(),o=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("openrouter/")&&"string"==typeof r&&r.trim());return Boolean(process.env.OPENROUTER_API_KEY||process.env.OPENROUTER_API_TOKEN||e?.providerApiKeys?.openrouter||o)}catch{return Boolean(process.env.OPENROUTER_API_KEY||process.env.OPENROUTER_API_TOKEN)}}export function isOllamaProviderConfigured(){try{const e=n();return Boolean(process.env.OLLAMA_BASE_URL||o("ollama")||t("ollama").length>0||"ollama"===e)}catch{return Boolean(process.env.OLLAMA_BASE_URL)}}export function isOllamaCloudProviderConfigured(){if(isOllamaProviderConfigured())return!0;try{const e=r().read(),i=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("ollama-cloud/")&&"string"==typeof r&&r.trim()),t=n();return Boolean(process.env.OLLAMA_CLOUD_BASE_URL||process.env.OLLAMA_BASE_URL||process.env.OLLAMA_API_KEY||e?.providerApiKeys?.["ollama-cloud"]||i||o("ollama-cloud")||"ollama-cloud"===t||"ollama"===t)}catch{return Boolean(process.env.OLLAMA_CLOUD_BASE_URL||process.env.OLLAMA_BASE_URL||process.env.OLLAMA_API_KEY)}}export function isGeminiApiProviderConfigured(){try{const e=r().read(),o=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("gemini-api/")&&"string"==typeof r&&r.trim());return Boolean(process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY||e?.providerApiKeys?.["gemini-api"]||o)}catch{return Boolean(process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY)}}export function isGeminiGoogleProviderConfigured(){try{const e=n();return Boolean(process.env.GEMINI_OAUTH_TOKEN||process.env.GOOGLE_OAUTH_ACCESS_TOKEN||process.env.GOOGLE_APPLICATION_CREDENTIALS||process.env.GEMINI_GOOGLE_PROJECT_ID||process.env.GOOGLE_CLOUD_PROJECT||process.env.GCLOUD_PROJECT||Object.entries(storage?.providerProfileOauth??{}).some(([e,r])=>e.startsWith("gemini-google/")&&"object"==typeof r&&null!==r&&"string"==typeof r.accessToken&&r.accessToken.trim())||"gemini-google"===e)}catch{return Boolean(process.env.GEMINI_OAUTH_TOKEN||process.env.GOOGLE_OAUTH_ACCESS_TOKEN||process.env.GOOGLE_APPLICATION_CREDENTIALS||process.env.GEMINI_GOOGLE_PROJECT_ID||process.env.GOOGLE_CLOUD_PROJECT||process.env.GCLOUD_PROJECT)}}export function isZAIProviderConfigured(){try{const e=r().read(),o=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("zai/")&&"string"==typeof r&&r.trim());return Boolean(process.env.ZAI_API_KEY||e?.providerApiKeys?.zai||o)}catch{return Boolean(process.env.ZAI_API_KEY)}}export function isMiniMaxProviderConfigured(){try{const e=r().read(),o=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("minimax/")&&"string"==typeof r&&r.trim());return Boolean(process.env.MINIMAX_API_KEY||e?.providerApiKeys?.minimax||o)}catch{return Boolean(process.env.MINIMAX_API_KEY)}}export function isNvidiaProviderConfigured(){try{const e=r().read(),o=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("nvidia/")&&"string"==typeof r&&r.trim());return Boolean(process.env.NVIDIA_API_KEY||e?.providerApiKeys?.nvidia||o)}catch{return Boolean(process.env.NVIDIA_API_KEY)}}export function isDeepSeekProviderConfigured(){try{const e=r().read(),o=Object.entries(e?.providerProfileApiKeys??{}).some(([e,r])=>e.startsWith("deepseek/")&&"string"==typeof r&&r.trim());return Boolean(process.env.DEEPSEEK_API_KEY||e?.providerApiKeys?.deepseek||o)}catch{return Boolean(process.env.DEEPSEEK_API_KEY)}}export function isOpenAICompatibleProvider(e){return"openai"===e||"openrouter"===e||"ollama"===e||"ollama-cloud"===e||"gemini-api"===e||"gemini-google"===e||"zai"===e||"minimax"===e||"nvidia"===e||"deepseek"===e||"custom-openai"===e}export function usesOpenAIBackend(e){return isOpenAICompatibleProvider(e)&&"minimax"!==e}export function hasDualProviderSessions(){return(isOpenAIProviderConfigured()||isOpenRouterProviderConfigured()||isOllamaProviderConfigured()||isOllamaCloudProviderConfigured()||isGeminiApiProviderConfigured()||isGeminiGoogleProviderConfigured()||isZAIProviderConfigured()||isMiniMaxProviderConfigured()||isNvidiaProviderConfigured()||isDeepSeekProviderConfigured())&&function(){try{const e=r().read(),o=Object.entries(e?.providerProfileOauth??{}).some(([e,r])=>e.startsWith("claude/")&&"object"==typeof r&&null!==r&&"string"==typeof r.accessToken&&r.accessToken.trim());return Boolean(o)}catch{return!1}}()}export function getAPIProvider(){const r=i();if(r)return r;if(e(process.env.CLAUDE_CODE_USE_BEDROCK))return"bedrock";if(e(process.env.CLAUDE_CODE_USE_VERTEX))return"vertex";if(e(process.env.CLAUDE_CODE_USE_FOUNDRY))return"foundry";try{const e=n();if("claude"===e)return"firstParty";if("openai"===e)return"openai";if("openrouter"===e)return"openrouter";if("ollama"===e)return"ollama";if("ollama-cloud"===e)return"ollama-cloud";if("gemini-api"===e)return"gemini-api";if("gemini-google"===e)return"gemini-google";if("zai"===e)return"zai";if("minimax"===e)return"minimax";if("nvidia"===e)return"nvidia";if("deepseek"===e)return"deepseek";if("custom-openai"===e)return"custom-openai";if("custom-anthropic"===e)return"custom-anthropic"}catch{}const o=isOpenAIProviderConfigured(),t=isOpenRouterProviderConfigured(),s=isOllamaProviderConfigured(),a=isOllamaCloudProviderConfigured(),p=isGeminiApiProviderConfigured(),c=isGeminiGoogleProviderConfigured(),u=isZAIProviderConfigured(),d=isMiniMaxProviderConfigured(),l=isNvidiaProviderConfigured(),v=isDeepSeekProviderConfigured();return o?"openai":t?"openrouter":u?"zai":d?"minimax":l?"nvidia":v?"deepseek":p?"gemini-api":c?"gemini-google":a?"ollama-cloud":s?"ollama":"firstParty"}export function getAPIProviderForStatsig(){return getAPIProvider()}export function isFirstPartyAnthropicBaseUrl(){const e=process.env.ANTHROPIC_BASE_URL;if(!e)return!0;try{const r=new URL(e).host,o=["api.anthropic.com"];return"ant"===process.env.USER_TYPE&&o.push("api-staging.anthropic.com"),o.includes(r)}catch{return!1}}