feat(plugins): add theme contributions
Adds plugin-contributed light and dark app themes, including persistence, host-aware coalescing, fallback behavior, documentation, examples, and browser/iOS QA.
This commit is contained in:
@@ -115,6 +115,28 @@ describe("plugin protocol compatibility", () => {
|
||||
expect(current.payload.features?.pluginLogs).toBe(true);
|
||||
});
|
||||
|
||||
it("keeps the plugin themes capability optional for older server info", () => {
|
||||
const older = StatusMessageSchema.parse({
|
||||
type: "status",
|
||||
payload: {
|
||||
status: "server_info",
|
||||
serverId: "older-host",
|
||||
features: { plugins: true },
|
||||
},
|
||||
});
|
||||
const current = StatusMessageSchema.parse({
|
||||
type: "status",
|
||||
payload: {
|
||||
status: "server_info",
|
||||
serverId: "current-host",
|
||||
features: { plugins: true, pluginThemes: true },
|
||||
},
|
||||
});
|
||||
|
||||
expect(older.payload.features?.pluginThemes).toBeUndefined();
|
||||
expect(current.payload.features?.pluginThemes).toBe(true);
|
||||
});
|
||||
|
||||
it("keeps the catalog change notification safe for older clients", () => {
|
||||
expect(
|
||||
StatusMessageSchema.parse({
|
||||
|
||||
@@ -3324,6 +3324,10 @@ export const ServerInfoStatusPayloadSchema = z
|
||||
pluginManagement: z.boolean().optional(),
|
||||
// COMPAT(pluginLogs): added in v0.4.0, remove gate after 2027-08-16.
|
||||
pluginLogs: z.boolean().optional(),
|
||||
// COMPAT(pluginThemes): added in v0.5.0, remove gate after 2027-08-20.
|
||||
// A daemon that predates this flag keeps `addTheme` in the server bundle it compiles,
|
||||
// so a theme plugin cannot start there at all.
|
||||
pluginThemes: z.boolean().optional(),
|
||||
// COMPAT(skillManagement): added in v0.4.0, remove gate after 2027-08-16.
|
||||
skillManagement: z.boolean().optional(),
|
||||
// COMPAT(terminalRestoreModes): added in v0.1.81, remove gate after 2026-11-23.
|
||||
|
||||
Reference in New Issue
Block a user