UNPKG

eve

Version:

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

4 lines 5.11 kB
const CSI_FINAL=/[\u0040-\u007e]/u,PASTE_START=`\x1B[200~`,PASTE_END=`\x1B[201~`;function sanitizePastedText(e){let t=``;for(let n of e.replace(/\r\n?/gu,` `)){if(n===` `||n===` `){t+=n;continue}let e=n.codePointAt(0);e!==void 0&&(e<32||e===127||e>=128&&e<=159||(t+=n))}return t}function isIncompletePaste(e){return e.startsWith(PASTE_START)&&!e.includes(PASTE_END,6)}function stripPasteStart(e){return e.startsWith(PASTE_START)?e.slice(6):e}function isIncompleteOsc(e){return e.startsWith(`\x1B]`)&&!e.includes(`\x07`,2)&&!e.includes(`\x1B\\`,2)}function stripPromptControlCharacters(e){let t=``;for(let n of e)n>=` `&&n!==``&&(t+=n);return t}function nextKey(e){let t=e[0];if(t===void 0)return{consumed:0,incomplete:!0};if(t===`\x1B`){if(e.length===1)return{consumed:0,incomplete:!0};let t=e[1];if(t===`O`)return e.length<3?{consumed:0,incomplete:!0}:{key:parseKey(Buffer.from(e.slice(0,3))),consumed:3};if(t===`[`){if(e.startsWith(PASTE_START)){let t=e.indexOf(PASTE_END,6);return t===-1?{consumed:0,incomplete:!0}:{key:{type:`text`,value:sanitizePastedText(e.slice(6,t)),framing:`bracketed-paste`},consumed:t+6}}for(let t=2;t<e.length;t+=1)if(CSI_FINAL.test(e[t]))return{key:parseKey(Buffer.from(e.slice(0,t+1))),consumed:t+1};return{consumed:0,incomplete:!0}}if(t===`]`){let t=e.indexOf(`\x07`,2),n=e.indexOf(`\x1B\\`,2);if(t===-1&&n===-1)return{consumed:0,incomplete:!0};let r=t===-1?n:n===-1?t:Math.min(t,n);return{key:{type:`osc`,value:e.slice(2,r)},consumed:r+(r===t?1:2)}}return t===`b`||t===`B`?{key:{type:`alt-b`},consumed:2}:t===`f`||t===`F`?{key:{type:`alt-f`},consumed:2}:t===`y`||t===`Y`?{key:{type:`alt-y`},consumed:2}:t===``||t===`\b`?{key:{type:`alt-backspace`},consumed:2}:{key:{type:`escape`},consumed:1}}if(t<` `||t===``)return{key:parseKey(Buffer.from(t)),consumed:1};let n=1;for(;n<e.length;){let t=e[n];if(t===`\x1B`||t<` `||t===``)break;n+=1}return{key:parseKey(Buffer.from(e.slice(0,n))),consumed:n}}const SGR_MOUSE=RegExp(`^\x1B\\[<(\\d+);(\\d+);(\\d+)([Mm])$`,`u`);function parseKey(e){let t=e.toString(`utf8`),n=SGR_MOUSE.exec(t);if(n!==null)return{type:`mouse`,action:n[4]===`M`?`press`:`release`,button:Number(n[1]),x:Number(n[2]),y:Number(n[3])};switch(t){case``:return{type:`ctrl-a`};case``:return{type:`ctrl-b`};case``:return{type:`ctrl-e`};case``:return{type:`ctrl-f`};case``:return{type:`ctrl-d`};case`\v`:return{type:`ctrl-k`};case``:return{type:`ctrl-n`};case``:return{type:`ctrl-p`};case`\f`:return{type:`ctrl-l`};case``:return{type:`ctrl-r`};case``:return{type:`ctrl-u`};case``:return{type:`ctrl-w`};case``:return{type:`ctrl-y`};case``:return{type:`ctrl-c`};case`\r`:case` `:return{type:`enter`};case`\x1B[27;2;13~`:case`\x1B[13;2u`:return{type:`newline`};case``:case`\b`:return{type:`backspace`};case`\x1B[A`:case`\x1BOA`:return{type:`up`};case`\x1B[B`:case`\x1BOB`:return{type:`down`};case`\x1B[C`:case`\x1BOC`:return{type:`right`};case`\x1B[D`:case`\x1BOD`:return{type:`left`};case`\x1B[1;3C`:case`\x1B[1;5C`:case`\x1B[5C`:return{type:`alt-f`};case`\x1B[1;3D`:case`\x1B[1;5D`:case`\x1B[5D`:return{type:`alt-b`};case`\x1B[H`:case`\x1BOH`:case`\x1B[1~`:return{type:`home`};case`\x1B[F`:case`\x1BOF`:case`\x1B[4~`:return{type:`end`};case`\x1B[3~`:return{type:`delete`};case`\x1B[127;3u`:case`\x1B[8;3u`:case`\x1B[27;3;127~`:case`\x1B[27;3;8~`:return{type:`alt-backspace`};case` `:return{type:`tab`};case`\x1B`:return{type:`escape`};default:{let e=stripPromptControlCharacters(t);return e.length>0?{type:`text`,value:e,framing:`unframed`}:{type:`ignore`}}}}async function*takeUntil(e,t){let n=e[Symbol.asyncIterator](),r=t.then(()=>({done:!0,value:void 0}));try{for(;;){let e=n.next();e.catch(()=>{});let t=await Promise.race([e,r]);if(t.done)break;yield t.value}}finally{n.return?.()?.catch(()=>{})}}function formatCompactTokenCount(e){if(e<1e3)return`${e}`;let t=e<1e6?e/1e3:e/1e6,n=e<1e6?`K`:`M`;return`${t.toFixed(1).replace(/\.0$/,``)}${n}`}function formatTurnDuration(e){let t=Math.max(1,Math.round(e/1e3)),n=t%60,r=Math.floor(t/60);if(r===0)return`${n}s`;let i=r%60,a=Math.floor(r/60);return a===0?n===0?`${i}min`:`${i}min ${n}s`:i===0?`${a}h`:`${a}h ${i}min`}function formatTokenFlow(e,t){let n=formatCompactTokenCount(e.inputTokens),r=formatCompactTokenCount(e.outputTokens),i=`${t.arrowUp} ${n} ${t.arrowDown} ${r}`,a=formatContextPercentage(e.inputTokens,e.contextSize);return a==null?i:`${i} ${a}`}function formatContextPercentage(e,t){if(!(t==null||t<=0||!Number.isFinite(t)))return`${Math.round(e/t*100).toLocaleString()}%`}function formatAssistantResponseStats(e,t){if(t===`tokensPerSecond`)return formatTokensPerSecond(e.tokensPerSecond);if(e.outputTokens!=null)return`${e.outputTokens.toLocaleString()} output tokens`}function formatTokensPerSecond(e){if(e!=null)return`${formatNumber(e)} tok/s`}function formatNumber(e){return Number.isInteger(e)?e.toLocaleString():e.toLocaleString(void 0,{maximumFractionDigits:1})}export{formatAssistantResponseStats,formatCompactTokenCount,formatTokenFlow,formatTurnDuration,isIncompleteOsc,isIncompletePaste,nextKey,parseKey,sanitizePastedText,stripPasteStart,stripPromptControlCharacters,takeUntil};