UNPKG

eve

Version:

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

1 lines 1.86 kB
import{EMPTY_LINE}from"./line-editor.js";import{initialSelectState,reduceSelect,selectValueAtCursor}from"#setup/cli/select-state.js";function keyPhase(e,t){return selectValueAtCursor(t,e.cursor)===`ai-gateway-key`?{kind:`editing`,editor:EMPTY_LINE}:{kind:`inactive`}}function initialProviderPickerState(e,t){let n=initialSelectState({options:e,defaultValue:t});return{select:n,phase:keyPhase(n,e)}}function ignore(e){return{kind:`ignore`,state:e}}function transitionProviderPicker(e,t,n){if(t.type===`cancel`)return e.phase.kind!==`inactive`&&e.phase.editor.text.length>0?{kind:`clear`,state:{select:e.select,phase:{kind:`editing`,editor:EMPTY_LINE}}}:{kind:`cancel`};if(e.phase.kind===`validating`)return t.type===`validated`?t.validation.kind===`invalid`?{kind:`render`,state:{select:e.select,phase:{kind:`invalid`,editor:e.phase.editor,message:t.validation.message}}}:{kind:`settle`,result:{kind:`ai-gateway-key`,key:e.phase.key,validation:t.validation}}:ignore(e);switch(t.type){case`move`:{let r=reduceSelect(e.select,{type:t.direction},{options:n});return r===e.select?ignore(e):{kind:`render`,state:{select:r,phase:keyPhase(r,n)}}}case`edit`:return e.phase.kind===`inactive`?ignore(e):{kind:`render`,state:{select:e.select,phase:{kind:`editing`,editor:t.editor}}};case`submit`:{let t=selectValueAtCursor(n,e.select.cursor);if(t===`ai-gateway-project`||t===`chatgpt`||t===`external`)return{kind:`settle`,result:{kind:t}};if(t!==`ai-gateway-key`||e.phase.kind===`inactive`)return ignore(e);let r=e.phase.editor.text.trim();return r.length===0?{kind:`render`,state:{select:e.select,phase:{kind:`invalid`,editor:e.phase.editor,message:`API key cannot be empty.`}}}:{kind:`validate`,state:{select:e.select,phase:{kind:`validating`,editor:e.phase.editor,key:r}},key:r}}case`validated`:return ignore(e)}}export{initialProviderPickerState,transitionProviderPicker};