eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 2.33 kB
JavaScript
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{PROGRESS_PULSE_DURATION_MS,PROGRESS_PULSE_GLYPH,PROGRESS_PULSE_SEQUENCE}from"#cli/ui/progress-pulse.js";import{sliceVisible,visibleLength}from"#cli/dev/tui/terminal-text.js";var import_picocolors=__toESM(require_picocolors(),1);const REDRAW_PROGRESS_ROW=`\r\x1B[K`;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!==``,a=`${e} ${t}${i?``:`...`}`,o=Math.max(0,(r??80)-1),s=visibleLength(a);if(s>=o){let t=fitProgressText(a,o);return t.startsWith(e)?`${import_picocolors.default.green(e)}${t.slice(e.length)}`:t}let u=i?fitProgressText(` ${n}`,o-s):``,d=u===``?``:import_picocolors.default.dim(u);return`${import_picocolors.default.green(e)}${a.slice(e.length)}${d}`}function startCliLiveRow(e,t={}){let r=t.output??process.stdout,i=t.pulseSequence??PROGRESS_PULSE_SEQUENCE;validatePulseSequence(i);let s=r.isTTY===!0&&!isLogLevelEnabled(`debug`),c=0,l=i[0]===`1`,d,f=!1,p=!1,m=!1,h,paint=()=>{if(d===void 0)return;let e=renderProgressRow(l?PROGRESS_PULSE_GLYPH:` `,d.message,d.detail,r.columns);r.write(`${f?REDRAW_PROGRESS_ROW:``}${e}`),f=!0},schedulePulseStep=()=>{h=setTimeout(()=>{if(m)return;c=(c+1)%i.length;let e=i[c]===`1`;e!==l&&(l=e,paint()),schedulePulseStep()},pulseStepDurationMs(c,i.length)),h.unref?.()};return{update(t,n=``){if(!m){if(d={detail:sanitizeProgressText(n),message:sanitizeProgressText(t)},!s){p||=(e.log(`${d.message}...`),!0);return}paint(),h===void 0&&schedulePulseStep()}},stop(){m||(m=!0,h!==void 0&&clearTimeout(h),s&&f&&r.write(REDRAW_PROGRESS_ROW))}}}export{startCliLiveRow};