refactor(cli): reuse install safety overrides

This commit is contained in:
Peter Steinberger
2026-04-04 12:35:46 +09:00
parent 406f06dcc5
commit 6b003a7f2b
2 changed files with 57 additions and 11 deletions

View File

@@ -42,6 +42,12 @@ function resolveInstallMode(force?: boolean): "install" | "update" {
return force ? "update" : "install";
}
function resolveInstallSafetyOverrides(overrides: InstallSafetyOverrides): InstallSafetyOverrides {
return {
dangerouslyForceUnsafeInstall: overrides.dangerouslyForceUnsafeInstall,
};
}
async function installBundledPluginSource(params: {
config: OpenClawConfig;
rawSpec: string;
@@ -76,7 +82,7 @@ async function tryInstallHookPackFromLocalPath(params: {
config: OpenClawConfig;
resolvedPath: string;
installMode: "install" | "update";
dangerouslyForceUnsafeInstall?: boolean;
safetyOverrides?: InstallSafetyOverrides;
link?: boolean;
}): Promise<{ ok: true } | { ok: false; error: string }> {
if (params.link) {
@@ -89,7 +95,7 @@ async function tryInstallHookPackFromLocalPath(params: {
}
const probe = await installHooksFromPath({
dangerouslyForceUnsafeInstall: params.dangerouslyForceUnsafeInstall,
...resolveInstallSafetyOverrides(params.safetyOverrides ?? {}),
path: params.resolvedPath,
dryRun: true,
});
@@ -128,7 +134,7 @@ async function tryInstallHookPackFromLocalPath(params: {
}
const result = await installHooksFromPath({
dangerouslyForceUnsafeInstall: params.dangerouslyForceUnsafeInstall,
...resolveInstallSafetyOverrides(params.safetyOverrides ?? {}),
path: params.resolvedPath,
mode: params.installMode,
logger: createHookPackInstallLogger(),
@@ -307,10 +313,11 @@ export async function runPluginInstallCommand(params: {
return defaultRuntime.exit(1);
}
const installMode = resolveInstallMode(opts.force);
const safetyOverrides = resolveInstallSafetyOverrides(opts);
if (opts.marketplace) {
const result = await installPluginFromMarketplace({
dangerouslyForceUnsafeInstall: opts.dangerouslyForceUnsafeInstall,
...safetyOverrides,
marketplace: opts.marketplace,
mode: installMode,
plugin: raw,
@@ -344,16 +351,16 @@ export async function runPluginInstallCommand(params: {
const existing = cfg.plugins?.load?.paths ?? [];
const merged = Array.from(new Set([...existing, resolved]));
const probe = await installPluginFromPath({
dangerouslyForceUnsafeInstall: opts.dangerouslyForceUnsafeInstall,
...safetyOverrides,
path: resolved,
dryRun: true,
});
if (!probe.ok) {
const hookFallback = await tryInstallHookPackFromLocalPath({
config: cfg,
dangerouslyForceUnsafeInstall: opts.dangerouslyForceUnsafeInstall,
installMode,
resolvedPath: resolved,
safetyOverrides,
link: true,
});
if (hookFallback.ok) {
@@ -389,7 +396,7 @@ export async function runPluginInstallCommand(params: {
}
const result = await installPluginFromPath({
dangerouslyForceUnsafeInstall: opts.dangerouslyForceUnsafeInstall,
...safetyOverrides,
mode: installMode,
path: resolved,
logger: createPluginInstallLogger(),
@@ -397,9 +404,9 @@ export async function runPluginInstallCommand(params: {
if (!result.ok) {
const hookFallback = await tryInstallHookPackFromLocalPath({
config: cfg,
dangerouslyForceUnsafeInstall: opts.dangerouslyForceUnsafeInstall,
installMode,
resolvedPath: resolved,
safetyOverrides,
});
if (hookFallback.ok) {
return;
@@ -463,7 +470,7 @@ export async function runPluginInstallCommand(params: {
const clawhubSpec = parseClawHubPluginSpec(raw);
if (clawhubSpec) {
const result = await installPluginFromClawHub({
dangerouslyForceUnsafeInstall: opts.dangerouslyForceUnsafeInstall,
...safetyOverrides,
mode: installMode,
spec: raw,
logger: createPluginInstallLogger(),
@@ -499,7 +506,7 @@ export async function runPluginInstallCommand(params: {
const preferredClawHubSpec = buildPreferredClawHubSpec(raw);
if (preferredClawHubSpec) {
const clawhubResult = await installPluginFromClawHub({
dangerouslyForceUnsafeInstall: opts.dangerouslyForceUnsafeInstall,
...safetyOverrides,
mode: installMode,
spec: preferredClawHubSpec,
logger: createPluginInstallLogger(),
@@ -534,7 +541,7 @@ export async function runPluginInstallCommand(params: {
}
const result = await installPluginFromNpmSpec({
dangerouslyForceUnsafeInstall: opts.dangerouslyForceUnsafeInstall,
...safetyOverrides,
mode: installMode,
spec: raw,
logger: createPluginInstallLogger(),