UNPKG

eve

Version:

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

1 lines • 2.62 kB
import{mkdir,readFile}from"node:fs/promises";import{isObject}from"#shared/guards.js";import{join}from"node:path";import{readFileSync}from"node:fs";import{readProjectLink}from"#setup/project-resolution.js";import{hasEnvValue}from"#internal/resolve-model-endpoint-status.js";import{atomicWriteFile}from"#shared/atomic-write-file.js";import{isModelConnection}from"#shared/model-connection.js";import{AI_GATEWAY_API_KEY_ENV_VAR}from"#setup/ai-gateway-api-key.js";import{findEnvFileWithKey}from"#setup/boxes/detect-ai-gateway.js";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 readProviderSettingsSync(e){try{let t=JSON.parse(readFileSync(providerSettingsPath(e),`utf8`));return!isObject(t)||!isProviderSelection(t.selected)?void 0:{selected:t.selected,...typeof t.teamId==`string`&&typeof t.teamName==`string`&&{teamId:t.teamId,teamName:t.teamName},...(t.keySource===`environment`||t.keySource===`secret`)&&{keySource:t.keySource}}}catch{return}}async function providerSettingsMatch(e,t){try{let n=JSON.parse(await readFile(providerSettingsPath(e),`utf8`));return isObject(n)&&n.selected===t.selected&&n.teamId===t.teamId&&n.teamName===t.teamName&&n.keySource===t.keySource}catch{return!1}}async function writeProviderSelection(e,t,n,r){await mkdir(join(e,`.eve`),{recursive:!0}),await atomicWriteFile(providerSettingsPath(e),`${JSON.stringify({selected:t,...n,keySource:r},null,2)}\n`)}function parseProviderSelection(e){return isObject(e)&&isProviderSelection(e.selected)?e.selected:void 0}function isProviderSelection(e){return isModelConnection(e)||e===`vercel-cli`||e===`ai-gateway-project`}function readProviderTeamSync(e){let t=readProviderSettingsSync(e);return t?.teamId&&t.teamName?{teamId:t.teamId,teamName:t.teamName}:void 0}function readProviderKeySourceSync(e){return readProviderSettingsSync(e)?.keySource}export{providerSettingsMatch,providerSettingsPath,readProviderKeySourceSync,readProviderSelection,readProviderSettingsSync,readProviderTeamSync,resolveAvailableProviders,writeProviderSelection};