mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-14 14:40:46 +00:00
fix(plugins): keep bare installs on npm for launch
This commit is contained in:
@@ -1,7 +1,4 @@
|
||||
import type { OpenClawConfig } from "../config/types.openclaw.js";
|
||||
import { fetchClawHubPackageReadiness, type ClawHubPackageReadiness } from "../infra/clawhub.js";
|
||||
import { parseRegistryNpmSpec } from "../infra/npm-registry-spec.js";
|
||||
import { CLAWHUB_INSTALL_ERROR_CODE } from "../plugins/clawhub.js";
|
||||
import type { PluginKind } from "../plugins/plugin-kind.types.js";
|
||||
import { loadPluginMetadataSnapshot } from "../plugins/plugin-metadata-snapshot.js";
|
||||
import { applyExclusiveSlotSelection } from "../plugins/slots.js";
|
||||
@@ -204,53 +201,6 @@ export function logSlotWarnings(warnings: string[], runtime: RuntimeEnv = defaul
|
||||
}
|
||||
}
|
||||
|
||||
export function buildPreferredClawHubSpec(raw: string): string | null {
|
||||
const parsed = parseRegistryNpmSpec(raw);
|
||||
if (!parsed) {
|
||||
return null;
|
||||
}
|
||||
return `clawhub:${parsed.name}${parsed.selector ? `@${parsed.selector}` : ""}`;
|
||||
}
|
||||
|
||||
function normalizeReadinessPhase(readiness: ClawHubPackageReadiness): string {
|
||||
return normalizeLowercaseStringOrEmpty(readiness.phase ?? readiness.status ?? "");
|
||||
}
|
||||
|
||||
export function isClawHubReadinessInstallReady(
|
||||
readiness: ClawHubPackageReadiness | null | undefined,
|
||||
): boolean {
|
||||
if (!readiness) {
|
||||
return false;
|
||||
}
|
||||
if (
|
||||
readiness.ready === true ||
|
||||
readiness.readyForOpenClaw === true ||
|
||||
readiness.installReady === true
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
const phase = normalizeReadinessPhase(readiness);
|
||||
return (
|
||||
phase === "ready-for-openclaw" || phase === "clawpack-ready" || phase === "legacy-zip-only"
|
||||
);
|
||||
}
|
||||
|
||||
export async function resolvePreferredClawHubSpec(raw: string): Promise<string | null> {
|
||||
const parsed = parseRegistryNpmSpec(raw);
|
||||
if (!parsed) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
const readiness = await fetchClawHubPackageReadiness({ name: parsed.name });
|
||||
if (!isClawHubReadinessInstallReady(readiness)) {
|
||||
return null;
|
||||
}
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
return `clawhub:${parsed.name}${parsed.selector ? `@${parsed.selector}` : ""}`;
|
||||
}
|
||||
|
||||
export function parseNpmPrefixSpec(raw: string): string | null {
|
||||
const trimmed = raw.trim();
|
||||
if (!normalizeLowercaseStringOrEmpty(trimmed).startsWith("npm:")) {
|
||||
@@ -258,23 +208,3 @@ export function parseNpmPrefixSpec(raw: string): string | null {
|
||||
}
|
||||
return trimmed.slice("npm:".length).trim();
|
||||
}
|
||||
|
||||
const PREFERRED_CLAWHUB_FALLBACK_DECISION = {
|
||||
FALLBACK_TO_NPM: "fallback_to_npm",
|
||||
STOP: "stop",
|
||||
} as const;
|
||||
|
||||
export type PreferredClawHubFallbackDecision =
|
||||
(typeof PREFERRED_CLAWHUB_FALLBACK_DECISION)[keyof typeof PREFERRED_CLAWHUB_FALLBACK_DECISION];
|
||||
|
||||
export function decidePreferredClawHubFallback(params: {
|
||||
code?: string;
|
||||
}): PreferredClawHubFallbackDecision {
|
||||
if (
|
||||
params.code === CLAWHUB_INSTALL_ERROR_CODE.PACKAGE_NOT_FOUND ||
|
||||
params.code === CLAWHUB_INSTALL_ERROR_CODE.VERSION_NOT_FOUND
|
||||
) {
|
||||
return PREFERRED_CLAWHUB_FALLBACK_DECISION.FALLBACK_TO_NPM;
|
||||
}
|
||||
return PREFERRED_CLAWHUB_FALLBACK_DECISION.STOP;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user