UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

191 lines (190 loc) 6.88 kB
import { c as normalizeOptionalString } from "./string-coerce-mnp54Vah.js"; //#region src/shared/entry-metadata.ts /** Resolves entry emoji/homepage with metadata taking precedence over frontmatter aliases. */ function resolveEmojiAndHomepage(params) { const emoji = params.metadata?.emoji ?? params.frontmatter?.emoji; const homepage = normalizeOptionalString(params.metadata?.homepage ?? params.frontmatter?.homepage ?? params.frontmatter?.website ?? params.frontmatter?.url); return { ...emoji ? { emoji } : {}, ...homepage ? { homepage } : {} }; } //#endregion //#region src/shared/requirements.ts /** Returns required binaries absent from both the local host and optional remote target. */ function resolveMissingBins(params) { const remote = params.hasRemoteBin; return params.required.filter((bin) => { if (params.hasLocalBin(bin)) return false; if (remote?.(bin)) return false; return true; }); } /** Treats an any-bin requirement as satisfied when any listed binary exists locally or remotely. */ function resolveMissingAnyBins(params) { if (params.required.length === 0) return []; if (params.required.some((bin) => params.hasLocalBin(bin))) return []; if (params.hasRemoteAnyBin?.(params.required)) return []; return params.required; } /** Resolves OS requirements against local and remote platforms, accepting macos as darwin. */ function resolveMissingOs(params) { if (params.required.length === 0) return []; const localPlatform = normalizeOsRequirementPlatform(params.localPlatform); const requiredPlatforms = new Set(params.required.map((platform) => normalizeOsRequirementPlatform(platform))); if (requiredPlatforms.has(localPlatform)) return []; if (params.remotePlatforms?.some((platform) => requiredPlatforms.has(normalizeOsRequirementPlatform(platform)))) return []; return params.required; } function normalizeOsRequirementPlatform(platform) { const normalized = platform.trim().toLowerCase(); return normalized === "macos" ? "darwin" : normalized; } /** Returns environment variable names whose caller-provided satisfaction check fails. */ function resolveMissingEnv(params) { const missing = []; for (const envName of params.required) { if (params.isSatisfied(envName)) continue; missing.push(envName); } return missing; } /** Builds per-config-path status while preserving every declared path for UI diagnostics. */ function buildConfigChecks(params) { return params.required.map((pathStr) => { return { path: pathStr, satisfied: params.isSatisfied(pathStr) }; }); } /** Evaluates normalized requirements and returns missing categories plus config diagnostics. */ function evaluateRequirements(params) { const missingBins = resolveMissingBins({ required: params.required.bins, hasLocalBin: params.hasLocalBin, hasRemoteBin: params.hasRemoteBin }); const missingAnyBins = resolveMissingAnyBins({ required: params.required.anyBins, hasLocalBin: params.hasLocalBin, hasRemoteAnyBin: params.hasRemoteAnyBin }); const missingOs = resolveMissingOs({ required: params.required.os, localPlatform: params.localPlatform, remotePlatforms: params.remotePlatforms }); const missingEnv = resolveMissingEnv({ required: params.required.env, isSatisfied: params.isEnvSatisfied }); const configChecks = buildConfigChecks({ required: params.required.config, isSatisfied: params.isConfigSatisfied }); const missingConfig = configChecks.filter((check) => !check.satisfied).map((check) => check.path); const missing = params.always ? { bins: [], anyBins: [], env: [], config: [], os: [] } : { bins: missingBins, anyBins: missingAnyBins, env: missingEnv, config: missingConfig, os: missingOs }; return { missing, eligible: params.always || missing.bins.length === 0 && missing.anyBins.length === 0 && missing.env.length === 0 && missing.config.length === 0 && missing.os.length === 0, configChecks }; } /** Converts entry metadata into the canonical requirement shape before evaluation. */ function evaluateRequirementsFromMetadata(params) { const required = { bins: params.metadata?.requires?.bins ?? [], anyBins: params.metadata?.requires?.anyBins ?? [], env: params.metadata?.requires?.env ?? [], config: params.metadata?.requires?.config ?? [], os: params.metadata?.os ?? [] }; return { required, ...evaluateRequirements({ always: params.always, required, hasLocalBin: params.hasLocalBin, hasRemoteBin: params.hasRemoteBin, hasRemoteAnyBin: params.hasRemoteAnyBin, localPlatform: params.localPlatform, remotePlatforms: params.remotePlatforms, isEnvSatisfied: params.isEnvSatisfied, isConfigSatisfied: params.isConfigSatisfied }) }; } /** Convenience wrapper for callers that receive remote capability checks as one object. */ function evaluateRequirementsFromMetadataWithRemote(params) { return evaluateRequirementsFromMetadata({ always: params.always, metadata: params.metadata, hasLocalBin: params.hasLocalBin, hasRemoteBin: params.remote?.hasBin, hasRemoteAnyBin: params.remote?.hasAnyBin, localPlatform: params.localPlatform, remotePlatforms: params.remote?.platforms, isEnvSatisfied: params.isEnvSatisfied, isConfigSatisfied: params.isConfigSatisfied }); } //#endregion //#region src/shared/entry-status.ts /** Resolves entry presentation metadata and requirement eligibility in one shared shape. */ function evaluateEntryMetadataRequirements(params) { const { emoji, homepage } = resolveEmojiAndHomepage({ metadata: params.metadata, frontmatter: params.frontmatter }); const { required, missing, eligible, configChecks } = evaluateRequirementsFromMetadataWithRemote({ always: params.always, metadata: params.metadata ?? void 0, hasLocalBin: params.hasLocalBin, localPlatform: params.localPlatform, remote: params.remote, isEnvSatisfied: params.isEnvSatisfied, isConfigSatisfied: params.isConfigSatisfied }); return { ...emoji ? { emoji } : {}, ...homepage ? { homepage } : {}, required, missing, requirementsSatisfied: eligible, configChecks }; } /** Evaluates entry metadata requirements against the current Node platform. */ function evaluateEntryMetadataRequirementsForCurrentPlatform(params) { return evaluateEntryMetadataRequirements({ ...params, localPlatform: process.platform }); } /** Evaluates an entry object's metadata/frontmatter requirements on the current platform. */ function evaluateEntryRequirementsForCurrentPlatform(params) { return evaluateEntryMetadataRequirementsForCurrentPlatform({ always: params.always, metadata: params.entry.metadata, frontmatter: params.entry.frontmatter, hasLocalBin: params.hasLocalBin, remote: params.remote, isEnvSatisfied: params.isEnvSatisfied, isConfigSatisfied: params.isConfigSatisfied }); } //#endregion export { evaluateEntryRequirementsForCurrentPlatform as t };