UNPKG

eve

Version:

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

1 lines • 3.97 kB
import{PlannerNavigationError}from"#setup/prompter.js";import{WizardCancelledError}from"#setup/step.js";import{searchActionQuery}from"#setup/cli/select-state.js";import{createSelectOptionCodec}from"#setup/cli/select-option-codec.js";function setupSelectRequest(e,t,n,r){let i={message:e.message,options:t};e.description!==void 0&&(i.description=e.description),e.metadata!==void 0&&(i.metadata=e.metadata);let withContext=t=>(e.notices!==void 0&&(t.notices=e.notices),e.navigation!==void 0&&(t.navigation=e.navigation),t);if(e.multiple===!0){let t;if(e.search===!0){if(t={...i,kind:`searchable-multi`,required:e.required??!1},e.hintLayout===`stacked`&&(t.layout=`stacked`),e.hintLayout===`inline`)throw Error(`Multi-select setup questions do not support inline hint layout.`);e.placeholder!==void 0&&(t.placeholder=e.placeholder)}else t={...i,kind:`multi`,required:e.required??!1};return e.initialValues!==void 0&&(t.initialValues=e.initialValues.map(n)),withContext(t)}if(e.search===!0&&e.hintLayout===`stacked`)throw Error(`Searchable setup questions do not support a stacked hint layout.`);let a;if(e.search===!0){if(a={...i,kind:`search`},e.hintLayout===`inline`&&(a.layout=`task-list`),e.placeholder!==void 0&&(a.placeholder=e.placeholder),e.searchAction!==void 0){a.searchAction={label:e.searchAction.label};let t=e.searchAction.load;t!==void 0&&(a.searchAction.load=async e=>r(await t(e)))}}else{let t=e.hintLayout===`inline`?`task-list`:e.hintLayout??`single`;a={...i,kind:t}}return e.initialValue!==void 0&&(a.initialValue=n(e.initialValue)),withContext(a)}function createTuiPrompter(e){function guardCancel(e){if(e===void 0)throw new WizardCancelledError;return e}async function select(t){let n=createSelectOptionCodec(t.options),r=setupSelectRequest(t,n.options,n.encode,n.encodeOptions),i=guardCancel(await e.readSelect(r));if(`kind`in i)throw new PlannerNavigationError(i.direction,i.values.map(n.decode));let a=i.map(e=>{let r=searchActionQuery(e);return r!==void 0&&t.multiple!==!0&&t.searchAction!==void 0?t.searchAction.value(r):n.decode(e)});if(t.multiple===!0)return a;let o=a[0];if(o===void 0)throw Error(`Single-select returned no option.`);return o}function line(t){return n=>e.renderLine(n,t)}return{async text(t){let n={message:t.message};return t.placeholder!==void 0&&(n.placeholder=t.placeholder),t.defaultValue!==void 0&&(n.defaultValue=t.defaultValue),t.validate!==void 0&&(n.validate=t.validate),t.notices!==void 0&&(n.notices=t.notices),guardCancel(await e.readText(n))},async password(t){let n={message:t.message,mask:!0};return t.validate!==void 0&&(n.validate=t.validate),guardCancel(await e.readText(n))},select,async selectEditable(t){let n=createSelectOptionCodec(t.options),r={value:n.encode(t.editable.value),defaultValue:t.editable.defaultValue,formatHint:t.editable.formatHint};t.editable.validate!==void 0&&(r.validate=t.editable.validate);let i={message:t.message,options:n.options,editable:r};t.initialValue!==void 0&&(i.initialValue=n.encode(t.initialValue));let a=guardCancel(await e.readEditableSelect(i)),o=n.decode(a.value);return a.kind===`edited`?{kind:`edited`,value:o,text:a.text}:{kind:`selected`,value:o}},async acknowledge(t){await e.readAcknowledge({message:t.message,lines:t.lines??[]})},awaitChoice(t){return e.readChoice(t)},note(t,n,r){let i=r?.tone===`success`?`success`:`warning`;n&&e.renderLine(n,i),e.renderLine(t,i)},intro(){},outro(){},replaceContent:t=>e.replaceContent?.(t),withInheritedStdio:t=>e.withInheritedStdio(t),withExclusiveTerminal:t=>e.withExclusiveTerminal?.(t)??t(),log:{message:line(`info`),info:line(`info`),success:line(`success`),warning:line(`warning`),error:line(`error`),commandOutput:t=>e.renderOutput(t),section(t,n){e.renderLine(t,`info`);for(let t of n)e.renderLine(` ${t}`,`info`)},spinner(t,n){e.setStatus(n?.kind===`external-action`?{kind:`external-action`,text:t,emphasis:n.emphasis}:t);let r=!1;return{stop(){r||(r=!0,e.setStatus(void 0))}}}}}}export{createTuiPrompter};