feat(plugins): add memory slot plugin

This commit is contained in:
Peter Steinberger
2026-01-18 02:12:01 +00:00
parent 005b831023
commit 9fd9f4c896
15 changed files with 244 additions and 14 deletions

View File

@@ -277,6 +277,8 @@ const FIELD_LABELS: Record<string, string> = {
"plugins.allow": "Plugin Allowlist",
"plugins.deny": "Plugin Denylist",
"plugins.load.paths": "Plugin Load Paths",
"plugins.slots": "Plugin Slots",
"plugins.slots.memory": "Memory Plugin",
"plugins.entries": "Plugin Entries",
"plugins.entries.*.enabled": "Plugin Enabled",
"plugins.entries.*.config": "Plugin Config",
@@ -413,6 +415,9 @@ const FIELD_HELP: Record<string, string> = {
"plugins.allow": "Optional allowlist of plugin ids; when set, only listed plugins load.",
"plugins.deny": "Optional denylist of plugin ids; deny wins over allowlist.",
"plugins.load.paths": "Additional plugin files or directories to load.",
"plugins.slots": "Select which plugins own exclusive slots (memory, etc.).",
"plugins.slots.memory":
'Select the active memory plugin by id, or "none" to disable memory plugins.',
"plugins.entries": "Per-plugin settings keyed by plugin id (enable/disable + config payloads).",
"plugins.entries.*.enabled": "Overrides plugin enable/disable for this entry (restart required).",
"plugins.entries.*.config": "Plugin-defined config payload (schema is provided by the plugin).",

View File

@@ -3,6 +3,11 @@ export type PluginEntryConfig = {
config?: Record<string, unknown>;
};
export type PluginSlotsConfig = {
/** Select which plugin owns the memory slot ("none" disables memory plugins). */
memory?: string;
};
export type PluginsLoadConfig = {
/** Additional plugin/extension paths to load. */
paths?: string[];
@@ -25,6 +30,7 @@ export type PluginsConfig = {
/** Optional plugin denylist (plugin ids). */
deny?: string[];
load?: PluginsLoadConfig;
slots?: PluginSlotsConfig;
entries?: Record<string, PluginEntryConfig>;
installs?: Record<string, PluginInstallRecord>;
};

View File

@@ -324,6 +324,11 @@ export const ClawdbotSchema = z
paths: z.array(z.string()).optional(),
})
.optional(),
slots: z
.object({
memory: z.string().optional(),
})
.optional(),
entries: z
.record(
z.string(),