openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
112 lines (111 loc) • 3.9 kB
JavaScript
import { p as resolveUserPath } from "./utils-CCC-BEJH.js";
import { t as loadInstalledPluginIndexInstallRecords } from "./installed-plugin-index-record-reader-CPHayOZI.js";
import "./installed-plugin-index-records-DXbAzXDd.js";
import { n as enablePluginInConfig } from "./enable-DXODwa0_.js";
import { existsSync } from "node:fs";
import path from "node:path";
//#region src/commands/runtime-plugin-install.ts
/**
* Runtime plugin install helpers for model selection.
*
* Model choices can require runtime plugins such as Codex or Copilot; this
* module installs, enables, or repairs those plugins from a shared descriptor.
*/
function isInstalledRecordPresentOnDisk(record, env) {
const installPath = record?.installPath?.trim();
if (!installPath) return false;
return existsSync(path.join(resolveUserPath(installPath, env), "package.json"));
}
/** Ensures the runtime plugin required by the selected model is installed and enabled. */
async function ensureRuntimePluginForModelSelection(params) {
if (!params.shouldEnsure({
cfg: params.cfg,
model: params.model
})) return {
cfg: params.cfg,
required: false,
installed: false
};
if (isInstalledRecordPresentOnDisk((await loadInstalledPluginIndexInstallRecords({ env: process.env }))[params.descriptor.pluginId], process.env)) {
const repair = await repairRuntimePluginInstallForModelSelection({
cfg: params.cfg,
model: params.model,
env: process.env,
descriptor: params.descriptor,
shouldEnsure: params.shouldEnsure
});
for (const change of repair.changes) params.runtime.log?.(change);
for (const warning of repair.warnings) params.runtime.log?.(`${params.descriptor.warningLabel} update warning: ${warning}`);
const enableResult = enablePluginInConfig(params.cfg, params.descriptor.pluginId);
return {
cfg: enableResult.enabled ? enableResult.config : params.cfg,
required: true,
installed: true,
status: "installed"
};
}
const { ensureOnboardingPluginInstalled } = await import("./onboarding-plugin-install-BUxF5iVm.js");
const result = await ensureOnboardingPluginInstalled({
cfg: params.cfg,
entry: {
pluginId: params.descriptor.pluginId,
label: params.descriptor.label,
install: {
npmSpec: params.descriptor.npmSpec,
defaultChoice: "npm"
},
trustedSourceLinkedOfficialInstall: true,
preferRemoteInstall: true
},
prompter: params.prompter,
runtime: params.runtime,
...params.workspaceDir !== void 0 ? { workspaceDir: params.workspaceDir } : {},
promptInstall: false,
autoConfirmSingleSource: true
});
return {
cfg: result.cfg,
required: true,
installed: result.installed,
status: result.status
};
}
/** Repairs missing install records for runtime plugins required by model selection. */
async function repairRuntimePluginInstallForModelSelection(params) {
if (!params.shouldEnsure({
cfg: params.cfg,
model: params.model
})) return {
required: false,
changes: [],
warnings: []
};
const { repairMissingPluginInstallsForIds } = await import("./missing-configured-plugin-install-B8wYYqzq.js");
const result = await repairMissingPluginInstallsForIds({
cfg: params.cfg,
pluginIds: [params.descriptor.pluginId],
...params.env !== void 0 ? { env: params.env } : {}
});
return {
required: true,
changes: result.changes,
warnings: result.warnings
};
}
/** Creates ensure/repair helpers pre-bound to a runtime plugin descriptor. */
function createRuntimePluginModelSelectionHelpers(params) {
return {
ensure: (ensureParams) => ensureRuntimePluginForModelSelection({
...ensureParams,
descriptor: params.descriptor,
shouldEnsure: params.shouldEnsure
}),
repair: (repairParams) => repairRuntimePluginInstallForModelSelection({
...repairParams,
descriptor: params.descriptor,
shouldEnsure: params.shouldEnsure
})
};
}
//#endregion
export { createRuntimePluginModelSelectionHelpers as t };