openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
134 lines (133 loc) • 6.09 kB
JavaScript
import { t as safeParseJson } from "./json-coercion-AulM0PZ6.js";
import { At as boolean, Et as array, Nn as record, Rn as string, Tn as object, Xn as union, Zn as unknown, dn as literal, wn as number } from "./schemas-zxit8y5H.js";
import { f as extractPluginInstallRecordsFromInstalledPluginIndex } from "./installed-plugin-index-wrDsjyMD.js";
import { n as recordInstalledPluginIndexInstallOwner } from "./installed-plugin-index-install-owner-Bd-Byre8.js";
import { s as parsePluginInstallRecordMap, t as PluginInstallRecordSchema } from "./plugin-install-record-map-B44vZyl2.js";
import { c as getPersistedInstalledPluginIndexCacheEntry } from "./installed-plugin-index-record-reader-SXWwf_BU.js";
import { n as safeParseWithSchema } from "./zod-parse-Bip-sZi_.js";
//#region src/plugins/installed-plugin-index-store.ts
const StringArraySchema = array(string());
const INSTALLED_PLUGIN_INDEX_STATE_KEY = "plugins.installedIndex";
const InstalledPluginIndexStartupSchema = object({
sidecar: boolean(),
memory: boolean(),
agentHarnesses: StringArraySchema,
configPaths: StringArraySchema.optional()
});
const InstalledPluginIndexContributionSchema = object({
channels: StringArraySchema,
channelConfigs: StringArraySchema,
providers: StringArraySchema,
modelCatalogProviders: StringArraySchema,
modelSupportPrefixes: StringArraySchema,
modelSupportPatterns: StringArraySchema,
autoEnableProviderIds: StringArraySchema,
commandAliases: StringArraySchema,
contracts: record(string(), StringArraySchema)
});
const InstalledPluginFileSignatureSchema = object({
size: number(),
mtimeMs: number(),
ctimeMs: number().optional()
});
const InstalledPluginIndexRecordSchema = object({
pluginId: string(),
installOwner: string().optional(),
installOwnerAmbiguous: literal(true).optional(),
packageName: string().optional(),
packageVersion: string().optional(),
installRecord: PluginInstallRecordSchema.optional(),
installRecordHash: string().optional(),
packageInstall: unknown().optional(),
packageChannel: unknown().optional(),
packageBuild: object({ bundledDist: boolean().optional() }).optional(),
manifestPath: string(),
manifestHash: string(),
doctorContractHash: string().optional(),
doctorContractFile: InstalledPluginFileSignatureSchema.optional(),
manifestFile: InstalledPluginFileSignatureSchema.optional(),
format: string().optional(),
bundleFormat: string().optional(),
source: string().optional(),
setupSource: string().optional(),
packageJson: object({
path: string(),
hash: string(),
fileSignature: InstalledPluginFileSignatureSchema.optional()
}).optional(),
rootDir: string(),
origin: string(),
enabled: boolean(),
enabledByDefault: boolean().optional(),
enabledByDefaultOnPlatforms: StringArraySchema.optional(),
syntheticAuthRefs: StringArraySchema.optional(),
startup: InstalledPluginIndexStartupSchema,
contributions: InstalledPluginIndexContributionSchema.optional(),
compat: array(string())
});
const PluginDiagnosticSchema = object({
level: union([literal("warn"), literal("error")]),
message: string(),
pluginId: string().optional(),
source: string().optional(),
code: string().optional()
});
const InstalledPluginIndexSchema = object({
version: literal(1),
warning: string().optional(),
hostContractVersion: string(),
compatRegistryVersion: string(),
migrationVersion: literal(1),
policyHash: string(),
generatedAtMs: number(),
workspaceDir: string().optional(),
refreshReason: string().optional(),
installRecords: unknown().optional(),
plugins: array(InstalledPluginIndexRecordSchema),
diagnostics: array(PluginDiagnosticSchema)
});
function parseInstalledPluginIndex(value) {
const parsed = safeParseWithSchema(InstalledPluginIndexSchema, value);
if (!parsed) return null;
const installRecords = Object.hasOwn(parsed, "installRecords") ? parsePluginInstallRecordMap(parsed.installRecords) : extractPluginInstallRecordsFromInstalledPluginIndex(parsed);
if (!installRecords) return null;
return {
version: parsed.version,
...parsed.warning ? { warning: parsed.warning } : {},
hostContractVersion: parsed.hostContractVersion,
compatRegistryVersion: parsed.compatRegistryVersion,
migrationVersion: parsed.migrationVersion,
policyHash: parsed.policyHash,
generatedAtMs: parsed.generatedAtMs,
...parsed.workspaceDir !== void 0 ? { workspaceDir: parsed.workspaceDir } : {},
...parsed.refreshReason ? { refreshReason: parsed.refreshReason } : {},
installRecords,
plugins: parsed.plugins.map(({ installOwner, installOwnerAmbiguous, ...plugin }) => recordInstalledPluginIndexInstallOwner(plugin, installOwner, installOwnerAmbiguous === true)),
diagnostics: parsed.diagnostics
};
}
function parseInstalledPluginIndexSqliteRow(value) {
return value ? parseInstalledPluginIndex(value.index) : null;
}
function readInstalledPluginIndexRow(database) {
return parsePersistedInstalledPluginIndexRow(database.prepare("SELECT value_json FROM config_machine_state WHERE state_key = ?").get(INSTALLED_PLUGIN_INDEX_STATE_KEY));
}
function parsePersistedInstalledPluginIndexRow(row) {
if (!row) return;
const value = safeParseJson(row.value_json);
if (!value || typeof value !== "object" || typeof value.revision !== "number") return;
return value;
}
async function readPersistedInstalledPluginIndex(options = {}) {
return readPersistedInstalledPluginIndexSync(options);
}
function readPersistedInstalledPluginIndexSync(options = {}) {
const entry = getPersistedInstalledPluginIndexCacheEntry(options);
if (entry.index === void 0) {
const value = entry.state.status === "present" ? entry.state.value : void 0;
entry.index = value && typeof value === "object" && "revision" in value && typeof value.revision === "number" ? parseInstalledPluginIndex("index" in value ? value.index : void 0) : null;
}
return entry.index;
}
//#endregion
export { readPersistedInstalledPluginIndex as a, readInstalledPluginIndexRow as i, parseInstalledPluginIndex as n, readPersistedInstalledPluginIndexSync as o, parseInstalledPluginIndexSqliteRow as r, INSTALLED_PLUGIN_INDEX_STATE_KEY as t };