UNPKG

paqad-ai

Version:

Spec-driven development framework — AI agents that think before they type

261 lines (258 loc) • 7.89 kB
import { createRequire as __paqadCreateRequire } from 'module'; const require = __paqadCreateRequire(import.meta.url); import { frameworkLinkHome } from "./chunk-THDANA7U.js"; import { getPackageRoot } from "./chunk-YWAORJG6.js"; import { init_esm_shims } from "./chunk-IDFRWBMN.js"; // src/core/optional-package.ts init_esm_shims(); import { execFileSync, spawn } from "child_process"; import { appendFileSync, existsSync, mkdirSync, readFileSync, realpathSync, writeFileSync } from "fs"; import { createRequire } from "module"; import { dirname, isAbsolute, join, relative } from "path"; function alternateBases(env) { const bases = []; const pluginData = env.CLAUDE_PLUGIN_DATA; if (pluginData) { bases.push(join(pluginData, "package.json")); } try { const runtimeReal = realpathSync(frameworkLinkHome(env)); bases.push(join(dirname(runtimeReal), "package.json")); } catch { } const globalRoot = npmGlobalRoot(); if (globalRoot) { bases.push(join(globalRoot, "paqad-ai", "package.json")); } return bases; } function npmGlobalRoot() { try { const out = execFileSync("npm", ["root", "-g"], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim(); return out.length > 0 ? out : null; } catch { return null; } } function resolveOptionalPackage(name, env = process.env) { for (const base of [import.meta.url, ...alternateBases(env)]) { try { return createRequire(base).resolve(name); } catch { } } return null; } async function loadOptionalPackage(name, env = process.env) { try { return await import(name); } catch { } for (const base of alternateBases(env)) { let loaded; try { loaded = createRequire(base)(name); } catch { continue; } kickOffEngineInstall(env); return loaded; } kickOffEngineInstall(env); throw new Error(`optional package ${name} is not installed`); } function kickOffEngineInstall(env) { try { maybeStartOptionalEngineInstall(env); } catch { } } var OPTIONAL_ENGINES = ["@huggingface/transformers", "openai"]; var PRIMARY_ENGINE = "@huggingface/transformers"; var INSTALL_RETRY_INTERVAL_MS = 24 * 60 * 60 * 1e3; var EXACT_VERSION = /^\d+\.\d+\.\d+$/; var ENGINE_INSTALL_NETWORK_HINT = "If this machine is offline or behind a proxy, install the engine manually: run `npm install @huggingface/transformers` inside the CLAUDE_PLUGIN_DATA directory."; function engineInstallNetworkHint(env = process.env) { const specs = readEngineSpecs(env); if (specs.length === 0) { return ENGINE_INSTALL_NETWORK_HINT; } return `If this machine is offline or behind a proxy, install the engine manually: run \`npm install ${specs.join(" ")} --save-exact\` inside the CLAUDE_PLUGIN_DATA directory.`; } function engineInstallArguments() { return [join(getPackageRoot(), "runtime", "scripts", "install-engine.mjs")]; } function enginePaths(pluginData) { return { marker: join(pluginData, ".paqad-engine-install.json"), lock: join(pluginData, ".paqad-engine-install.lock"), log: join(pluginData, ".paqad-engine-install.log") }; } function readInstallMarker(markerPath) { try { return JSON.parse(readFileSync(markerPath, "utf8")); } catch { return null; } } function pinnedEngineSpecs(pins) { if (typeof pins !== "object" || pins === null) { return []; } const specs = []; for (const name of OPTIONAL_ENGINES) { const version = pins[name]; if (typeof version !== "string" || !EXACT_VERSION.test(version)) { return []; } specs.push(`${name}@${version}`); } return specs; } function readEngineSpecs(env) { try { const pkgRoot = dirname(realpathSync(frameworkLinkHome(env))); const pkg = JSON.parse(readFileSync(join(pkgRoot, "package.json"), "utf8")); if ("paqadEngines" in pkg) { return pinnedEngineSpecs(pkg.paqadEngines); } const deps = pkg.dependencies ?? {}; const specs = []; for (const name of OPTIONAL_ENGINES) { const range = deps[name]; if (typeof range === "string" && range.length > 0) { specs.push(`${name}@${range}`); } } return specs; } catch { return []; } } function isWithin(dir, file) { const rel = relative(dir, file); return rel.length > 0 && !rel.startsWith("..") && !isAbsolute(rel); } function resolvesFromPluginData(resolved, pluginData) { if (isWithin(pluginData, resolved)) { return true; } try { return isWithin(realpathSync(pluginData), resolved); } catch { return false; } } function installedSpecsMatch(marker, declared) { const installed = marker?.status === "ready" ? marker.specs : void 0; return Array.isArray(installed) && [...installed].sort().join(" ") === [...declared].sort().join(" "); } function maybeStartOptionalEngineInstall(env = process.env, deps = {}, options = {}) { const pluginData = env.CLAUDE_PLUGIN_DATA; if (!pluginData) { return "no-plugin-data"; } const resolve = deps.resolve ?? resolveOptionalPackage; const resolved = resolve(PRIMARY_ENGINE, env); if (resolved !== null && !resolvesFromPluginData(resolved, pluginData)) { return "already-present"; } const paths = enginePaths(pluginData); const marker = readInstallMarker(paths.marker); const specs = (deps.readSpecs ?? readEngineSpecs)(env); if (resolved !== null && (specs.length === 0 || installedSpecsMatch(marker, specs))) { return "already-present"; } if (marker?.status === "installing" && existsSync(paths.lock)) { return "in-progress"; } const now = deps.now ?? Date.now; if (marker && now() - Date.parse(marker.attempted_at) < INSTALL_RETRY_INTERVAL_MS) { return "throttled"; } if (specs.length === 0) { return "no-pinned-range"; } const installScript = deps.installScript ?? engineInstallArguments()[0]; mkdirSync(pluginData, { recursive: true }); if (!existsSync(installScript)) { appendFileSync(paths.log, `The engine install script is missing: ${installScript} `); return "install-script-missing"; } writeFileSync( join(pluginData, "package.json"), `${JSON.stringify({ private: true }, null, 2)} ` ); writeFileSync(paths.lock, String(process.pid)); writeFileSync( paths.marker, JSON.stringify({ status: "installing", attempted_at: new Date(now()).toISOString(), specs }) ); (deps.startInstall ?? spawnEngineInstall)(specs, pluginData, paths, options.projectRoot); return "started"; } function spawnEngineInstall(specs, dir, paths, projectRoot) { const child = spawn(process.execPath, engineInstallArguments(), { detached: true, stdio: "ignore", windowsHide: true, env: { ...process.env, PAQAD_ENGINE_SPECS: specs.join(" "), PAQAD_ENGINE_DIR: dir, PAQAD_ENGINE_LOG: paths.log, PAQAD_ENGINE_MARKER: paths.marker, PAQAD_ENGINE_LOCK: paths.lock, ...projectRoot ? { PAQAD_ENGINE_REBUILD_ROOT: projectRoot, PAQAD_ENGINE_CLI: join(getPackageRoot(), "dist", "cli", "index.js") } : {} } }); child.unref(); } function describeOptionalEngine(env = process.env, deps = {}) { const resolve = deps.resolve ?? resolveOptionalPackage; if (resolve(PRIMARY_ENGINE, env) !== null) { return { state: "ready" }; } const pluginData = env.CLAUDE_PLUGIN_DATA; if (pluginData) { const marker = readInstallMarker(enginePaths(pluginData).marker); if (marker?.status === "installing") { return { state: "installing" }; } if (marker?.status === "failed") { return { state: "install failed", detail: (marker.error ?? "").split("\n")[0], hint: engineInstallNetworkHint(env) }; } } return { state: "not installed" }; } export { loadOptionalPackage, engineInstallNetworkHint, maybeStartOptionalEngineInstall, describeOptionalEngine };