- postinstall.mjs: fix alias package detection - migrate-legacy-plugin-entry: dedupe + regression tests - task_system: default consistency across runtime paths - task() contract: consistent tool behavior - runtime model selection, tool cap, stale-task cancellation - recovery sanitization, context-limit gating - Ralph semantic DONE hardening, Atlas fallback persistence - native-skill description/content, skill path traversal guard - publish workflow: platform awaited via reusable workflow job - release: version edits reapplied before commit/tag - JSONC plugin migration: top-level plugin key safety - cold-cache: user fallback models skip disconnected providers - docs/version/release framing updates Verified: bun test (4599 pass), tsc --noEmit clean, bun run build clean
72 lines
1.7 KiB
JavaScript
72 lines
1.7 KiB
JavaScript
// postinstall.mjs
|
|
// Runs after npm install to verify platform binary is available
|
|
|
|
import { readFileSync } from "node:fs";
|
|
import { createRequire } from "node:module";
|
|
import { getPlatformPackageCandidates, getBinaryPath } from "./bin/platform.js";
|
|
|
|
const require = createRequire(import.meta.url);
|
|
|
|
/**
|
|
* Detect libc family on Linux
|
|
*/
|
|
function getLibcFamily() {
|
|
if (process.platform !== "linux") {
|
|
return undefined;
|
|
}
|
|
|
|
try {
|
|
const detectLibc = require("detect-libc");
|
|
return detectLibc.familySync();
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
function getPackageBaseName() {
|
|
try {
|
|
const packageJson = JSON.parse(readFileSync(new URL("./package.json", import.meta.url), "utf8"));
|
|
return packageJson.name || "oh-my-opencode";
|
|
} catch {
|
|
return "oh-my-opencode";
|
|
}
|
|
}
|
|
|
|
function main() {
|
|
const { platform, arch } = process;
|
|
const libcFamily = getLibcFamily();
|
|
const packageBaseName = getPackageBaseName();
|
|
|
|
try {
|
|
const packageCandidates = getPlatformPackageCandidates({
|
|
platform,
|
|
arch,
|
|
libcFamily,
|
|
packageBaseName,
|
|
});
|
|
|
|
const resolvedPackage = packageCandidates.find((pkg) => {
|
|
try {
|
|
require.resolve(getBinaryPath(pkg, platform));
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
});
|
|
|
|
if (!resolvedPackage) {
|
|
throw new Error(
|
|
`No platform binary package installed. Tried: ${packageCandidates.join(", ")}`
|
|
);
|
|
}
|
|
|
|
console.log(`✓ oh-my-opencode binary installed for ${platform}-${arch} (${resolvedPackage})`);
|
|
} catch (error) {
|
|
console.warn(`⚠ oh-my-opencode: ${error.message}`);
|
|
console.warn(` The CLI may not work on this platform.`);
|
|
// Don't fail installation - let user try anyway
|
|
}
|
|
}
|
|
|
|
main();
|