UNPKG

consortium

Version:

Remote control and session sharing CLI for AI coding agents

97 lines (93 loc) 3.07 kB
'use strict'; var node_child_process = require('node:child_process'); var persistence = require('./types-B_i6lpTn.cjs'); var constants = require('./constants-E1WsKKcj.cjs'); require('axios'); require('chalk'); require('fs'); require('node:fs'); require('node:os'); require('node:path'); require('node:events'); require('socket.io-client'); require('zod'); require('node:crypto'); require('tweetnacl'); require('child_process'); require('util'); require('fs/promises'); require('crypto'); require('path'); require('url'); require('os'); require('node:fs/promises'); require('node:module'); require('node:util'); require('expo-server-sdk'); const INSTALL_HINT = `pi is not installed. Install it with: npm install -g --ignore-scripts @earendil-works/pi-coding-agent`; function compareVersions(a, b) { const pa = a.replace(/^v/, "").split(".").map((s) => parseInt(s, 10) || 0); const pb = b.replace(/^v/, "").split(".").map((s) => parseInt(s, 10) || 0); const len = Math.max(pa.length, pb.length); for (let i = 0; i < len; i++) { const x = pa[i] ?? 0; const y = pb[i] ?? 0; if (x > y) return 1; if (x < y) return -1; } return 0; } function spawnVersion(binary) { return new Promise((resolve) => { let stdout = ""; let stderr = ""; let spawnError; const child = node_child_process.spawn(binary, ["--version"], { stdio: ["ignore", "pipe", "pipe"] }); child.stdout.on("data", (d) => stdout += d.toString("utf8")); child.stderr.on("data", (d) => stderr += d.toString("utf8")); child.on("error", (err) => { spawnError = err; resolve({ code: null, stdout, stderr, spawnError }); }); child.on("close", (code) => resolve({ code, stdout, stderr, spawnError })); }); } async function checkPiVersion(binary = constants.PI_BINARY) { const result = await spawnVersion(binary); if (result.spawnError) { persistence.logger.debug("[Pi] version check spawn error:", result.spawnError); return { installed: false, version: null, ok: false, message: INSTALL_HINT }; } if (result.code !== 0) { return { installed: false, version: null, ok: false, message: `${INSTALL_HINT} (pi --version exited with code ${result.code})` }; } const combined = `${result.stdout} ${result.stderr}`; const match = combined.match(/(\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?)/); if (!match) { return { installed: true, version: null, ok: false, message: `pi is installed but its version could not be parsed (output: ${combined.trim().slice(0, 120)}). Require >= ${constants.MIN_PI_VERSION}.` }; } const version = match[1]; const ok = compareVersions(version, constants.MIN_PI_VERSION) >= 0; return { installed: true, version, ok, message: ok ? `pi ${version} OK (>= ${constants.MIN_PI_VERSION})` : `pi ${version} is too old. Upgrade to >= ${constants.MIN_PI_VERSION}: npm install -g --ignore-scripts @earendil-works/pi-coding-agent` }; } exports.checkPiVersion = checkPiVersion; exports.compareVersions = compareVersions;