grix-connector
Version:
Connect local AI coding agents (Claude, Codex, Gemini, Qwen, DeepSeek, Cursor, OpenCode, Pi, OpenHuman, Reasonix) to the Grix scheduling platform. Also serves as an OpenClaw plugin for Grix channel transport.
4 lines (3 loc) • 2.75 kB
JavaScript
import{execFile as p}from"node:child_process";import{existsSync as l,readFileSync as f}from"node:fs";import{join as i}from"node:path";import{promisify as h}from"node:util";import{detectPlatformOS as c}from"./registry.js";const r=h(p),o=5e3;async function V(){const t=c(),n=process.arch,e=process.env.SHELL??process.env.ComSpec??null,s=!!(process.env.CI||process.env.GITHUB_ACTIONS||process.env.JENKINS_URL),u=w(),[a,m,d]=await Promise.all([y(t),g(),v()]);return{platform:t,osVersion:a,arch:n,shell:e,nodeVersion:m,npmVersion:d,isDocker:u,isCI:s}}function C(t){const n=[`Platform: ${t.platform} (${t.osVersion})`,`Arch: ${t.arch}`,`Shell: ${t.shell??"unknown"}`,`Node.js: ${t.nodeVersion??"not installed"}`,`npm: ${t.npmVersion??"not installed"}`];return t.isDocker&&n.push("Running in: Docker container"),t.isCI&&n.push("CI environment: yes"),n.join(`
`)}function I(t){return t.platform==="windows"?{supported:!0}:t.platform==="macos"?t.shell?{supported:!0}:{supported:!1,reason:"No SHELL environment variable detected"}:t.platform==="linux"?t.shell?{supported:!0}:{supported:!1,reason:"No SHELL environment variable detected"}:{supported:!0}}function w(){if(l("/.dockerenv"))return!0;try{const t=f("/proc/1/cgroup","utf-8");if(t.includes("/docker/")||t.includes("/kubepods")||t.includes("containerd"))return!0}catch{}return!1}async function y(t){try{if(t==="macos"){const{stdout:n}=await r("sw_vers",["-productVersion"],{timeout:o,encoding:"utf-8"});return`macOS ${n.trim()}`}if(t==="linux"){try{const{stdout:n}=await r("sh",["-c",`cat /etc/os-release 2>/dev/null | grep PRETTY_NAME | cut -d= -f2 | tr -d '"'`],{timeout:o,encoding:"utf-8"}),e=n.trim();if(e)return e}catch{}try{const{stdout:n}=await r("uname",["-sr"],{timeout:o,encoding:"utf-8"});return n.trim()}catch{}return"Linux (unknown distro)"}if(t==="windows"){const{stdout:n}=await r("cmd.exe",["/c","ver"],{timeout:o,encoding:"utf-8"});return n.trim()}}catch{}return`${t} (version unknown)`}async function g(){try{const{stdout:t}=await r("node",["--version"],{timeout:o,encoding:"utf-8"});return t.trim().replace(/^v/,"")}catch{return null}}async function v(){if(c()==="windows"){const n=["npm",i(process.env.ProgramFiles||"C:\\Program Files","nodejs","npm.cmd"),i(process.env.APPDATA||"","npm","npm.cmd")];try{const{stdout:e}=await r("where.exe",["node"],{timeout:o,encoding:"utf-8"}),s=i(e.trim().split(`
`)[0],"..");n.push(i(s,"npm.cmd"))}catch{}for(const e of n)try{const{stdout:s}=await r("cmd.exe",["/c",e,"--version"],{timeout:o,encoding:"utf-8"});return s.trim()}catch{}return null}try{const{stdout:n}=await r("npm",["--version"],{timeout:o,encoding:"utf-8"});return n.trim()}catch{return null}}export{V as detectEnvironment,C as formatEnvironmentInfo,I as isEnvironmentSupported};