From 0d3582266505bf45970f4a33b6e0f18ca6b5362e Mon Sep 17 00:00:00 2001 From: Charles Morman Date: Thu, 26 Feb 2026 13:33:33 -0700 Subject: [PATCH 1/3] feat: update slot to include "content" value --- templates/plugin-template/src/ui/plugin.tsx | 5 ++++- templates/ui-plugin-template/src/plugin.tsx | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/templates/plugin-template/src/ui/plugin.tsx b/templates/plugin-template/src/ui/plugin.tsx index 3cc5c8b49..923e37c29 100644 --- a/templates/plugin-template/src/ui/plugin.tsx +++ b/templates/plugin-template/src/ui/plugin.tsx @@ -5,7 +5,10 @@ import { App } from "./app"; * Export the plugin component. */ export default function TEMPLATE__PluginComponentName({ slot }: { slot: string }) { - if (slot === "page") { + // Render the plugin component based on the slot. + // Slot "page" is used in the App Portal + // Slot "content" is used in the Composite App + if (slot === "page" || slot === "content") { return ( diff --git a/templates/ui-plugin-template/src/plugin.tsx b/templates/ui-plugin-template/src/plugin.tsx index 3cc5c8b49..923e37c29 100644 --- a/templates/ui-plugin-template/src/plugin.tsx +++ b/templates/ui-plugin-template/src/plugin.tsx @@ -5,7 +5,10 @@ import { App } from "./app"; * Export the plugin component. */ export default function TEMPLATE__PluginComponentName({ slot }: { slot: string }) { - if (slot === "page") { + // Render the plugin component based on the slot. + // Slot "page" is used in the App Portal + // Slot "content" is used in the Composite App + if (slot === "page" || slot === "content") { return ( From 47dfcb242da40879d14fd4ff7c0dc0ff44998e3e Mon Sep 17 00:00:00 2001 From: Charles Morman Date: Thu, 26 Feb 2026 13:33:57 -0700 Subject: [PATCH 2/3] feat: update api endpoint to pass composite app configs --- .../plugin-template/src/tool-server/config.ts | 3 +++ .../src/tool-server/ui-nav-items.ts | 14 ++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 templates/plugin-template/src/tool-server/ui-nav-items.ts diff --git a/templates/plugin-template/src/tool-server/config.ts b/templates/plugin-template/src/tool-server/config.ts index f6cc0743b..81ed1e4e7 100644 --- a/templates/plugin-template/src/tool-server/config.ts +++ b/templates/plugin-template/src/tool-server/config.ts @@ -5,6 +5,7 @@ import { skills } from "./skills/index.js"; import { tools } from "./tools/index.js"; import { types } from "./types/index.js"; import settingsSchema from "./settings.js"; +import uiNavItems from "./ui-nav-items.js"; const CONFIG__SERVER_TITLE = "Tool Server Template"; export const ServerConfig = { @@ -19,6 +20,8 @@ export const ServerConfig = { uiConfig: { isolation: "shadow", src: "/lib//plugin.js", + available_in: ["app_portal", "composite_app"], + navigation: uiNavItems, // optional navigation configuration for the Composite App sidebar }, settings: settingsSchema, // change this to point to your settings JSON schema } satisfies ToolServerConfig; diff --git a/templates/plugin-template/src/tool-server/ui-nav-items.ts b/templates/plugin-template/src/tool-server/ui-nav-items.ts new file mode 100644 index 000000000..242738282 --- /dev/null +++ b/templates/plugin-template/src/tool-server/ui-nav-items.ts @@ -0,0 +1,14 @@ +import { AppUINavItem } from "@vertesia/common"; + +/** + * Optional App UI Navigation configuration + * Used to configure the optional navigation subitems that you want to display within the Composite App sidebar + * Icons can be any of the icons from https://lucide.dev/icons, or an SVG element as a string + * Route is the subpath to navigate to when the item is clicked, relative to the plugin's base URL + * If your plugin does not have a UI, or you do not want to add additional navigation items, you can set this to an empty array + * Note: this does not create the actual UI routes -- it is a map of existing routes you wish to expose as subitems in the Composite App. + */ +export default [ + { label: "Home Page", icon: "Star", route: "/" }, + { label: "Next Page", icon: "Square", route: "/next" }, +] satisfies AppUINavItem[]; From 9d7737ac0c61a3e8cbf1f9842fbfe7908d184a51 Mon Sep 17 00:00:00 2001 From: Charles Morman Date: Thu, 26 Feb 2026 18:02:38 -0700 Subject: [PATCH 3/3] fix: remove extra "/" from plugin UI src --- templates/plugin-template/src/tool-server/config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/plugin-template/src/tool-server/config.ts b/templates/plugin-template/src/tool-server/config.ts index 81ed1e4e7..9d72ebaba 100644 --- a/templates/plugin-template/src/tool-server/config.ts +++ b/templates/plugin-template/src/tool-server/config.ts @@ -19,7 +19,7 @@ export const ServerConfig = { mcpProviders, uiConfig: { isolation: "shadow", - src: "/lib//plugin.js", + src: "/lib/plugin.js", available_in: ["app_portal", "composite_app"], navigation: uiNavItems, // optional navigation configuration for the Composite App sidebar },