UNPKG

eve

Version:

Filesystem-first framework for durable backend AI agents that run anywhere.

1 lines 1.77 kB
import{mkdir,readFile,writeFile}from"node:fs/promises";import{join}from"node:path";import{readFileSync}from"node:fs";import{readProjectLink}from"#setup/project-resolution.js";import{isObject}from"#shared/guards.js";import{hasEnvValue}from"#internal/resolve-model-endpoint-status.js";import{AI_GATEWAY_API_KEY_ENV_VAR}from"#setup/ai-gateway-api-key.js";import{findEnvFileWithKey}from"#setup/boxes/detect-ai-gateway.js";const PROVIDER_SELECTIONS=[`chatgpt`,`ai-gateway-key`,`ai-gateway-project`];function providerSettingsPath(e){return join(e,`.eve`,`provider.json`)}async function resolveAvailableProviders(e,t={}){let{signal:n,env:r=process.env}=t;n?.throwIfAborted();let[i,a,o]=await Promise.all([readProjectLink(e),findEnvFileWithKey(e,AI_GATEWAY_API_KEY_ENV_VAR),findEnvFileWithKey(e,`VERCEL_OIDC_TOKEN`)]);n?.throwIfAborted();let s=[`chatgpt`];return(a!==void 0||hasEnvValue(r[AI_GATEWAY_API_KEY_ENV_VAR]))&&s.push(`ai-gateway-key`),(i!==void 0||o!==void 0)&&s.push(`ai-gateway-project`),s}async function readProviderSelection(e){try{return parseProviderSelection(JSON.parse(await readFile(providerSettingsPath(e),`utf8`)))}catch{return}}function readProviderSelectionSync(e){try{return parseProviderSelection(JSON.parse(readFileSync(providerSettingsPath(e),`utf8`)))}catch{return}}async function writeProviderSelection(e,t){await mkdir(join(e,`.eve`),{recursive:!0}),await writeFile(providerSettingsPath(e),`${JSON.stringify({selected:t},null,2)}\n`,`utf8`)}function parseProviderSelection(e){return isObject(e)&&isProviderSelection(e.selected)?e.selected:void 0}function isProviderSelection(e){return PROVIDER_SELECTIONS.some(t=>t===e)}export{providerSettingsPath,readProviderSelection,readProviderSelectionSync,resolveAvailableProviders,writeProviderSelection};