refactor(status): share emoji/homepage resolver

This commit is contained in:
Peter Steinberger
2026-02-15 13:01:39 +00:00
parent b9cbe71faa
commit b838429e2f
3 changed files with 28 additions and 14 deletions

View File

@@ -1,5 +1,6 @@
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 { CONFIG_DIR } from "../utils.js";
import {
@@ -183,13 +184,10 @@ function buildSkillStatus(
const allowBundled = resolveBundledAllowlist(config);
const blockedByAllowlist = !isBundledSkillAllowed(entry, allowBundled);
const always = entry.metadata?.always === true;
const emoji = entry.metadata?.emoji ?? entry.frontmatter.emoji;
const homepageRaw =
entry.metadata?.homepage ??
entry.frontmatter.homepage ??
entry.frontmatter.website ??
entry.frontmatter.url;
const homepage = homepageRaw?.trim() ? homepageRaw.trim() : undefined;
const { emoji, homepage } = resolveEmojiAndHomepage({
metadata: entry.metadata,
frontmatter: entry.frontmatter,
});
const bundled =
bundledNames && bundledNames.size > 0
? bundledNames.has(entry.skill.name)

View File

@@ -1,6 +1,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 { CONFIG_DIR } from "../utils.js";
import { hasBinary, isConfigPathTruthy, resolveHookConfig } from "./config.js";
@@ -100,13 +101,10 @@ function buildHookStatus(
const managedByPlugin = entry.hook.source === "openclaw-plugin";
const disabled = managedByPlugin ? false : hookConfig?.enabled === false;
const always = entry.metadata?.always === true;
const emoji = entry.metadata?.emoji ?? entry.frontmatter.emoji;
const homepageRaw =
entry.metadata?.homepage ??
entry.frontmatter.homepage ??
entry.frontmatter.website ??
entry.frontmatter.url;
const homepage = homepageRaw?.trim() ? homepageRaw.trim() : undefined;
const { emoji, homepage } = resolveEmojiAndHomepage({
metadata: entry.metadata,
frontmatter: entry.frontmatter,
});
const events = entry.metadata?.events ?? [];
const {

View File

@@ -0,0 +1,18 @@
export function resolveEmojiAndHomepage(params: {
metadata?: { emoji?: string; homepage?: string } | null;
frontmatter?: {
emoji?: string;
homepage?: string;
website?: string;
url?: string;
} | null;
}): { emoji?: string; homepage?: string } {
const emoji = params.metadata?.emoji ?? params.frontmatter?.emoji;
const homepageRaw =
params.metadata?.homepage ??
params.frontmatter?.homepage ??
params.frontmatter?.website ??
params.frontmatter?.url;
const homepage = homepageRaw?.trim() ? homepageRaw.trim() : undefined;
return { ...(emoji ? { emoji } : {}), ...(homepage ? { homepage } : {}) };
}