UNPKG

relaycode

Version:

A developer assistant that automates applying code changes from LLMs.

2 lines 2.93 kB
import g from'clipboardy';import {logger,getErrorMessage}from'../utils/logger';import o from'fs';import c from'path';import {exec}from'child_process';import {executeShellCommand}from'../utils/shell';import {FALLBACKS_DIR,WINDOWS_DIR,WINDOWS_CLIPBOARD_EXE_NAME}from'../utils/constants';import {fileURLToPath}from'url';const W=c.dirname(fileURLToPath(import.meta.url)),D=c.join(W,".."),d=c.join(D,FALLBACKS_DIR,WINDOWS_DIR,WINDOWS_CLIPBOARD_EXE_NAME),R=async()=>{if(process.platform==="linux"){logger.debug("Checking for clipboard dependencies on Linux (xsel or xclip)...");try{const{exitCode:r}=await executeShellCommand("command -v xsel >/dev/null 2>&1 || command -v xclip >/dev/null 2>&1");r!==0?(logger.error("-----------------------------------------------------------------------"),logger.error("ACTION REQUIRED: Clipboard support on Linux requires `xsel` or `xclip`."),logger.error("Please install one of these tools to enable clipboard monitoring."),logger.error("Example on Debian/Ubuntu: sudo apt install xsel"),logger.error("Example on Fedora/CentOS: sudo dnf install xsel"),logger.error("Example on Arch Linux: sudo pacman -S xsel"),logger.error("-----------------------------------------------------------------------")):logger.debug("Linux clipboard dependency check passed.");}catch(r){logger.warn(`An error occurred while checking for clipboard dependencies: ${getErrorMessage(r)}`);}}},m=c.join(process.cwd(),FALLBACKS_DIR,WINDOWS_DIR),a=c.join(m,WINDOWS_CLIPBOARD_EXE_NAME),I=()=>()=>new Promise(r=>{try{if(!o.existsSync(a))return logger.error("Windows clipboard executable not found. Cannot watch clipboard on Windows."),r("");const t=`"${a}" --paste`;exec(t,{encoding:"utf8"},(p,u,l)=>{p?(logger.debug(`Windows clipboard read command failed (this is often normal): ${l.trim()}`),r("")):r(u);});}catch(t){logger.error(`A synchronous error occurred while setting up clipboard reader: ${getErrorMessage(t)}`),r("");}}),A=()=>{if(process.platform==="win32")try{if(o.existsSync(m)||o.mkdirSync(m,{recursive:!0}),o.existsSync(d)){let r=!0;o.existsSync(a)&&o.statSync(d).size===o.statSync(a).size&&(r=!1),r&&(o.copyFileSync(d,a),logger.info("Copied Windows clipboard executable to local fallbacks directory"));}else logger.error(`Windows clipboard executable not found in package at: ${d}`);}catch(r){logger.warn("Error ensuring clipboard executable: "+getErrorMessage(r));}},j=(r,t,p)=>{A(),R();const u=process.platform==="win32"?I():p||g.read;let l="",i=null;const b=async()=>{try{const n=await u();n&&n!==l&&(l=n,t(n));}catch(n){logger.warn("Could not read from clipboard: "+getErrorMessage(n));}},y=()=>{i||(logger.info(`Starting clipboard watcher (polling every ${r}ms)`),b(),i=setInterval(b,r));},h=()=>{i&&(clearInterval(i),i=null,logger.info("Clipboard watcher stopped."));};return y(),{stop:h}};export{j as createClipboardWatcher};//# sourceMappingURL=clipboard.js.map //# sourceMappingURL=clipboard.js.map