mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-18 18:27:27 +00:00
refactor(shared): share requirements eval for remote context
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import path from "node:path";
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import { resolveEmojiAndHomepage } from "../shared/entry-metadata.js";
|
||||
import { evaluateRequirementsFromMetadata } from "../shared/requirements.js";
|
||||
import { evaluateRequirementsFromMetadataWithRemote } from "../shared/requirements.js";
|
||||
import { CONFIG_DIR } from "../utils.js";
|
||||
import {
|
||||
hasBinary,
|
||||
@@ -198,14 +198,12 @@ function buildSkillStatus(
|
||||
missing,
|
||||
eligible: requirementsSatisfied,
|
||||
configChecks,
|
||||
} = evaluateRequirementsFromMetadata({
|
||||
} = evaluateRequirementsFromMetadataWithRemote({
|
||||
always,
|
||||
metadata: entry.metadata,
|
||||
hasLocalBin: hasBinary,
|
||||
hasRemoteBin: eligibility?.remote?.hasBin,
|
||||
hasRemoteAnyBin: eligibility?.remote?.hasAnyBin,
|
||||
localPlatform: process.platform,
|
||||
remotePlatforms: eligibility?.remote?.platforms,
|
||||
remote: eligibility?.remote,
|
||||
isEnvSatisfied: (envName) =>
|
||||
Boolean(
|
||||
process.env[envName] ||
|
||||
|
||||
@@ -2,7 +2,7 @@ import path from "node:path";
|
||||
import type { OpenClawConfig } from "../config/config.js";
|
||||
import type { HookEligibilityContext, HookEntry, HookInstallSpec } from "./types.js";
|
||||
import { resolveEmojiAndHomepage } from "../shared/entry-metadata.js";
|
||||
import { evaluateRequirementsFromMetadata } from "../shared/requirements.js";
|
||||
import { evaluateRequirementsFromMetadataWithRemote } from "../shared/requirements.js";
|
||||
import { CONFIG_DIR } from "../utils.js";
|
||||
import { hasBinary, isConfigPathTruthy, resolveHookConfig } from "./config.js";
|
||||
import { loadWorkspaceHookEntries } from "./workspace.js";
|
||||
@@ -112,14 +112,12 @@ function buildHookStatus(
|
||||
missing,
|
||||
eligible: requirementsSatisfied,
|
||||
configChecks,
|
||||
} = evaluateRequirementsFromMetadata({
|
||||
} = evaluateRequirementsFromMetadataWithRemote({
|
||||
always,
|
||||
metadata: entry.metadata,
|
||||
hasLocalBin: hasBinary,
|
||||
hasRemoteBin: eligibility?.remote?.hasBin,
|
||||
hasRemoteAnyBin: eligibility?.remote?.hasAnyBin,
|
||||
localPlatform: process.platform,
|
||||
remotePlatforms: eligibility?.remote?.platforms,
|
||||
remote: eligibility?.remote,
|
||||
isEnvSatisfied: (envName) => Boolean(process.env[envName] || hookConfig?.env?.[envName]),
|
||||
isConfigSatisfied: (pathStr) => isConfigPathTruthy(config, pathStr),
|
||||
});
|
||||
|
||||
@@ -185,3 +185,34 @@ export function evaluateRequirementsFromMetadata(params: {
|
||||
});
|
||||
return { required, ...result };
|
||||
}
|
||||
|
||||
export function evaluateRequirementsFromMetadataWithRemote(params: {
|
||||
always: boolean;
|
||||
metadata?: RequirementsMetadata;
|
||||
hasLocalBin: (bin: string) => boolean;
|
||||
localPlatform: string;
|
||||
remote?: {
|
||||
hasBin?: (bin: string) => boolean;
|
||||
hasAnyBin?: (bins: string[]) => boolean;
|
||||
platforms?: string[];
|
||||
};
|
||||
isEnvSatisfied: (envName: string) => boolean;
|
||||
isConfigSatisfied: (pathStr: string) => boolean;
|
||||
}): {
|
||||
required: Requirements;
|
||||
missing: Requirements;
|
||||
eligible: boolean;
|
||||
configChecks: RequirementConfigCheck[];
|
||||
} {
|
||||
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,
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user