UNPKG

eve

Version:

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

1 lines 2.37 kB
import{__toESM}from"../../_virtual/_rolldown/runtime.js";import{require_picocolors}from"../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js";import{isLogLevelEnabled}from"#internal/logging.js";import{sanitizeForTerminal}from"#cli/ui/output.js";import{sliceVisible,visibleLength}from"#cli/ui/terminal-text.js";import{LiveRegion}from"#cli/ui/live-region.js";import{PROGRESS_PULSE_DURATION_MS,PROGRESS_PULSE_GLYPH,PROGRESS_PULSE_SEQUENCE}from"#cli/ui/progress-pulse.js";var import_picocolors=__toESM(require_picocolors(),1);function validatePulseSequence(e){if(e.length!==8&&e.length!==16)throw RangeError(`Pulse sequence must contain 8 or 16 steps.`);if(/[^01]/u.test(e))throw RangeError(`Pulse sequence steps must be "0" or "1".`)}function pulseStepDurationMs(e,t){let n=Math.round(e*PROGRESS_PULSE_DURATION_MS/t);return Math.round((e+1)*PROGRESS_PULSE_DURATION_MS/t)-n}function sanitizeProgressText(e){return sanitizeForTerminal(e).replaceAll(/\s+/gu,` `).trim()}function fitProgressText(e,t){return t<=0?``:visibleLength(e)<=t?e:t===1?`…`:`${sliceVisible(e,t-1)}…`}function renderProgressRow(e,t,n,r){let i=n!==``,o=`${e} ${t}${i?``:`...`}`,s=Math.max(0,(r??80)-1),c=visibleLength(o);if(c>=s){let t=fitProgressText(o,s);return t.startsWith(e)?`${import_picocolors.default.green(e)}${t.slice(e.length)}`:t}let l=i?fitProgressText(` ${n}`,s-c):``,d=l===``?``:import_picocolors.default.dim(l);return`${import_picocolors.default.green(e)}${o.slice(e.length)}${d}`}function startCliLiveRow(e,t={}){let r=t.output??process.stdout,i=t.pulseSequence??PROGRESS_PULSE_SEQUENCE;validatePulseSequence(i);let a=r.isTTY===!0&&!isLogLevelEnabled(`debug`),s=a?new LiveRegion({write:e=>(r.write(e),!0)}):void 0,u=0,d=i[0]===`1`,f,p=!1,m=!1,h=!1,g,paint=()=>{if(f===void 0||s===void 0)return;let e=renderProgressRow(d?PROGRESS_PULSE_GLYPH:` `,f.message,f.detail,r.columns);s.update([e]),p=!0},schedulePulseStep=()=>{g=setTimeout(()=>{if(h)return;u=(u+1)%i.length;let e=i[u]===`1`;e!==d&&(d=e,paint()),schedulePulseStep()},pulseStepDurationMs(u,i.length)),g.unref?.()};return{update(t,n=``){if(!h){if(f={detail:sanitizeProgressText(n),message:sanitizeProgressText(t)},!a){m||=(e.log(`${f.message}...`),!0);return}paint(),g===void 0&&schedulePulseStep()}},stop(){h||(h=!0,g!==void 0&&clearTimeout(g),s!==void 0&&p&&s.clear())}}}export{startCliLiveRow};