feat: add plugin worker protocol, bootstrap and plugin_storage table

Worker-side ctx proxy plus the message envelope it talks over, and the
per-plugin key/value table behind ctx.storage with migrations for all
three dialects. Rows cascade with the plugin so uninstalling leaves
nothing behind.
This commit is contained in:
LukeGus committed 2026-09-21 07:19:01 -05:00
1 parent a1805cb7ae
commit 248698f62d
19 files changed
+30035

No files matched your search

+23
View File
@@ -2280,4 +2280,27 @@ export const pluginInstallCounts = pgTable(
],
);
/**
* Per-plugin key/value state, written through ctx.storage. Rows are always
* scoped to the calling plugin by the broker, so a plugin cannot name another
* plugin's scope. Cascades with the plugin so uninstalling leaves nothing.
*/
export const pluginStorage = pgTable(
"plugin_storage",
{
id: serial("id").primaryKey(),
pluginId: varchar("plugin_id", { length: 255 })
.notNull()
.references(() => plugins.id, { onDelete: "cascade" }),
key: varchar("key", { length: 255 }).notNull(),
value: text("value").notNull(),
updatedAt: varchar("updated_at", { length: 255 })
.notNull()
.default(sql`CURRENT_TIMESTAMP`),
},
(table) => [
uniqueIndex("idx_plugin_storage_plugin_key").on(table.pluginId, table.key),
],
);
// --- plugins end ---