From d4b075ba5532b673a6bc242cb86531d8c3d2605c Mon Sep 17 00:00:00 2001 From: ajnart Date: Sun, 23 Aug 2026 23:11:16 +0200 Subject: [PATCH] chore: simplify assistant branding --- .../getting-started/after-the-installation.mdx | 2 +- apps/docs/docs/management/assistant.mdx | 6 +++--- apps/docs/docs/management/boards/index.mdx | 2 +- .../custom-widgets/agent-authoring.mdx | 2 +- .../docs/management/custom-widgets/index.mdx | 2 +- apps/docs/docs/management/mcp.mdx | 2 +- apps/nextjs/src/app/api/assistant/chat/route.ts | 6 +++--- .../assistant/assistant-conversation-export.ts | 4 ++-- apps/nextjs/src/components/user-avatar-menu.tsx | 4 +--- packages/api/src/router/assistant.ts | 8 ++++---- packages/translation/src/lang/en.json | 16 ++++++++-------- 11 files changed, 26 insertions(+), 28 deletions(-) diff --git a/apps/docs/docs/getting-started/after-the-installation.mdx b/apps/docs/docs/getting-started/after-the-installation.mdx index 6fbb301d0..695441dfd 100644 --- a/apps/docs/docs/getting-started/after-the-installation.mdx +++ b/apps/docs/docs/getting-started/after-the-installation.mdx @@ -55,7 +55,7 @@ The studio keeps related choices together: 2. **Discover** checks the actual database, Docker-compatible sockets, Kubernetes configuration, Workshop, and Assistant capabilities. Unavailable sources never block manual setup. 3. **Connect** shows detected integrations and apps first, identifying whether each app came from an explicit [`homarr.*` or Homepage Docker label](/docs/integrations/docker-labels) or image matching. Select several integrations and apps at once, review every URL, and use the service-specific link to open its API-key settings when one is available. If a container has no published port or URL label, add its HTTP or HTTPS address before importing it. 4. **Board** previews the Base layout, colors, widget radius, sidebars, selected apps, and widgets inferred from integrations or Docker labels. Choose 8 columns for a focused board, 10 for a balanced board, 12 for a wide board, or use the slider for a custom width up to 24 columns. Homarr still creates and reflows the protected Mobile layout automatically. A fast setup adds the integration-free Clock, Weather, and Bookmarks starter widgets. -5. **Extend** explains and optionally configures Homarr Assistant, the community Workshop, and the separate Homarr MCP endpoint. +5. **Extend** explains and optionally configures Assistant, the community Workshop, and the separate Homarr MCP endpoint. 6. **Review** tests the selected connections, then saves integrations, apps, widgets, settings, and the exact first board together. If any part fails, the database changes are rolled back and your form stays available to correct. Docker discovery reports each configured host separately. Results from reachable hosts remain selectable if another socket diff --git a/apps/docs/docs/management/assistant.mdx b/apps/docs/docs/management/assistant.mdx index aec1bde4e..57b6ec746 100644 --- a/apps/docs/docs/management/assistant.mdx +++ b/apps/docs/docs/management/assistant.mdx @@ -1,5 +1,5 @@ --- -description: Configure and use Homarr Assistant. +description: Configure and use Assistant. tags: - Assistant - AI @@ -8,10 +8,10 @@ tags: # Assistant -Homarr Assistant can answer questions and manage Homarr for you. It uses the signed-in user's permissions and asks for +Assistant can answer questions and manage Homarr for you. It uses the signed-in user's permissions and asks for approval before making changes. -![Homarr Assistant conversation with suggested prompts](/img/assistant/conversation.png) +![Assistant conversation with suggested prompts](/img/assistant/conversation.png) ## Set it up diff --git a/apps/docs/docs/management/boards/index.mdx b/apps/docs/docs/management/boards/index.mdx index 651cd6e7c..11d1ba271 100644 --- a/apps/docs/docs/management/boards/index.mdx +++ b/apps/docs/docs/management/boards/index.mdx @@ -317,7 +317,7 @@ Change the radius of your items and Containers. This is the field where you can enter custom CSS. The styling will only be applied on the respective board page. -When Homarr Assistant is enabled, users with modify permission can also ask it to edit the board's General, Background, +When Assistant is enabled, users with modify permission can also ask it to edit the board's General, Background, Appearance, Custom CSS, and app-status settings. The assistant reads the current stylesheet first and presents an editable review form before requesting approval to save the change. It does not edit responsive layouts, access control, or Danger zone actions. diff --git a/apps/docs/docs/management/custom-widgets/agent-authoring.mdx b/apps/docs/docs/management/custom-widgets/agent-authoring.mdx index 8d9380157..a33d1cf9b 100644 --- a/apps/docs/docs/management/custom-widgets/agent-authoring.mdx +++ b/apps/docs/docs/management/custom-widgets/agent-authoring.mdx @@ -125,7 +125,7 @@ model judges a result, the candidate must pass Homarr's real clipboard parser, c checks for documented endpoints, authentication, request triggers, query bindings, response fields, and essential runtime components. -To exercise the real Homarr Assistant lifecycle instead of accepting a returned JSON block, run: +To exercise the real Assistant lifecycle instead of accepting a returned JSON block, run: ```sh OPENROUTER_API_KEY=... pnpm --filter @homarr/custom-widgets test:assistant-ai diff --git a/apps/docs/docs/management/custom-widgets/index.mdx b/apps/docs/docs/management/custom-widgets/index.mdx index 80406808a..33dcfed89 100644 --- a/apps/docs/docs/management/custom-widgets/index.mdx +++ b/apps/docs/docs/management/custom-widgets/index.mdx @@ -43,7 +43,7 @@ interface HomarrCustomWidgetV2 { ### Design with AI The **Design with AI** action is available while creating or editing a custom widget. Describe what the widget should show and, -when [Homarr Assistant](../assistant) is enabled, send the request directly from the form. The generated prompt includes the +when [Assistant](../assistant) is enabled, send the request directly from the form. The generated prompt includes the widget schema and current non-secret configuration, but not the latest preview response. It proposes the matching create or update tool for your approval. diff --git a/apps/docs/docs/management/mcp.mdx b/apps/docs/docs/management/mcp.mdx index c0ed2e7b1..9deb3585f 100644 --- a/apps/docs/docs/management/mcp.mdx +++ b/apps/docs/docs/management/mcp.mdx @@ -17,7 +17,7 @@ remains available as a compatibility alias, but new clients should always use `/ With MCP, you can ask your AI assistant to manage apps, integrations, users, boards, Docker containers, media servers, DNS settings, and more - all through Homarr's existing tRPC API, now exposed as 50+ AI-callable tools. -The optional [Homarr Assistant](./assistant) uses these same tool definitions internally. +The optional [Assistant](./assistant) uses these same tool definitions internally. Unlike external MCP clients, it uses the current Homarr session directly and asks for in-conversation approval before running mutating procedures. diff --git a/apps/nextjs/src/app/api/assistant/chat/route.ts b/apps/nextjs/src/app/api/assistant/chat/route.ts index eb9cac440..c96b8d3e3 100644 --- a/apps/nextjs/src/app/api/assistant/chat/route.ts +++ b/apps/nextjs/src/app/api/assistant/chat/route.ts @@ -371,12 +371,12 @@ export async function POST(request: Request) { const session = await auth(); if (!session) { - return Response.json({ error: "Sign in to use Homarr Assistant." }, { status: 401 }); + return Response.json({ error: "Sign in to use Assistant." }, { status: 401 }); } const featureControls = await getServerSettingByKeyAsync(db, "featureControls"); if (!featureControls.assistantEnabled) { - return Response.json({ error: "Homarr Assistant is disabled." }, { status: 404 }); + return Response.json({ error: "Assistant is disabled." }, { status: 404 }); } const requestBody = await request.text(); @@ -420,7 +420,7 @@ export async function POST(request: Request) { const requiresApiKey = configuration ? assistantProviderRequiresApiKey(configuration.provider) : false; if (!configuration?.enabled || !configuration.modelId || (requiresApiKey && !configuration.encryptedApiKey)) { - return Response.json({ error: "Homarr Assistant is not configured." }, { status: 503 }); + return Response.json({ error: "Assistant is not configured." }, { status: 503 }); } let homarrProviderToken: string | null | undefined; diff --git a/apps/nextjs/src/components/assistant/assistant-conversation-export.ts b/apps/nextjs/src/components/assistant/assistant-conversation-export.ts index 9cd3e9de6..a1deab185 100644 --- a/apps/nextjs/src/components/assistant/assistant-conversation-export.ts +++ b/apps/nextjs/src/components/assistant/assistant-conversation-export.ts @@ -220,7 +220,7 @@ const renderMessage = (message: AssistantConversationExportMessage, index: numbe export const buildAssistantMessageMarkdown = (message: AssistantConversationExportMessage, exportedAt = new Date()) => { const title = `${roleLabel(getMessagePayload(message)?.role)} ${message.id}`; - return `# ${title}\n\n> Homarr Assistant debugging export. Secret-looking fields and embedded file data are redacted.\n\n- Exported: ${exportedAt.toISOString()}\n\n${renderMessage(message, 0)}\n`; + return `# ${title}\n\n> Assistant debugging export. Secret-looking fields and embedded file data are redacted.\n\n- Exported: ${exportedAt.toISOString()}\n\n${renderMessage(message, 0)}\n`; }; export const buildAssistantConversationMarkdown = ({ @@ -233,7 +233,7 @@ export const buildAssistantConversationMarkdown = ({ const header = [ `# ${title}`, "", - "> Homarr Assistant debugging export. Secret-looking fields and embedded file data are redacted.", + "> Assistant debugging export. Secret-looking fields and embedded file data are redacted.", "", `- Conversation ID: \`${thread.id}\``, `- Model: ${thread.modelId ? `\`${thread.modelId}\`` : "Not recorded"}`, diff --git a/apps/nextjs/src/components/user-avatar-menu.tsx b/apps/nextjs/src/components/user-avatar-menu.tsx index 6c3e44349..fba6f55a3 100644 --- a/apps/nextjs/src/components/user-avatar-menu.tsx +++ b/apps/nextjs/src/components/user-avatar-menu.tsx @@ -18,7 +18,6 @@ import type { RouterOutputs } from "@homarr/api"; import { signOut, useSession } from "@homarr/auth/client"; import { hotkeys, invariantTechnicalLabels } from "@homarr/definitions"; import { useModalAction } from "@homarr/modals"; -import { useSettings } from "@homarr/settings"; import { useI18n } from "@homarr/translation/client"; import { Link } from "@homarr/ui"; @@ -46,7 +45,6 @@ const formatHotkeyLabel = (hotkey: string, modifierLabel: string) => export const UserAvatarMenu = ({ children, availableUpdates, isDockerEnabled, boardSwitcher }: UserAvatarMenuProps) => { const t = useI18n("common.userAvatar.menu"); const tBoard = useI18n("board"); - const { branding } = useSettings(); const session = useSession(); const { logoutUrl } = useAuthContext(); @@ -111,7 +109,7 @@ export const UserAvatarMenu = ({ children, availableUpdates, isDockerEnabled, bo } onClick={assistant.open} > - {t("assistant", { app: branding.appName })} + {t("assistant")} )} { const featureControls = await getServerSettingByKeyAsync(ctx.db, "featureControls"); if (!featureControls.assistantEnabled) { - throw new TRPCError({ code: "NOT_FOUND", message: "Homarr Assistant is disabled." }); + throw new TRPCError({ code: "NOT_FOUND", message: "Assistant is disabled." }); } return next({ ctx }); }); @@ -505,7 +505,7 @@ export const assistantRouter = createTRPCRouter({ models: [ { id: "homarr-assistant", - name: "Homarr Assistant (Demo)", + name: "Assistant (Demo)", description: null, contextLength: null, promptPrice: null, @@ -517,7 +517,7 @@ export const assistantRouter = createTRPCRouter({ }; } if (!configuration?.enabled || !configuration.modelId) { - throw new TRPCError({ code: "PRECONDITION_FAILED", message: "Homarr Assistant is not configured." }); + throw new TRPCError({ code: "PRECONDITION_FAILED", message: "Assistant is not configured." }); } const discoveredModels = await getAssistantModelsAsync(configuration).catch(() => []); const resolvedDefaultId = resolveAssistantModelId(discoveredModels, configuration.modelId) ?? configuration.modelId; @@ -718,7 +718,7 @@ export const assistantRouter = createTRPCRouter({ getConfigurationAsync(ctx.db), ]); if (!configuration?.enabled || !configuration.modelId) { - throw new TRPCError({ code: "PRECONDITION_FAILED", message: "Homarr Assistant is not configured." }); + throw new TRPCError({ code: "PRECONDITION_FAILED", message: "Assistant is not configured." }); } const selectedModel = await getSelectedModelDetailsAsync(configuration, input.modelId).catch(() => null); if (input.modelId !== configuration.modelId && !selectedModel) { diff --git a/packages/translation/src/lang/en.json b/packages/translation/src/lang/en.json index 858c9eac7..8b9f8873e 100644 --- a/packages/translation/src/lang/en.json +++ b/packages/translation/src/lang/en.json @@ -1862,7 +1862,7 @@ "login": "Login", "homeBoard": "Your home board", "updateAvailable": "{countUpdates} updates available: {tag}", - "assistant": "{app} Assistant", + "assistant": "Assistant", "assistantThinking": "Thinking", "modifier": "Mod" } @@ -6467,7 +6467,7 @@ "toggleColorScheme": "Toggle light/dark mode", "saveNotebook": "Save notebook (only inside notebook widget)", "openSpotlight": "Open search", - "openAssistant": "Open Homarr Assistant" + "openAssistant": "Open Assistant" }, "note": "Tip: Mod refers to both Ctrl key and ⌘ key on macOS" } @@ -7611,11 +7611,11 @@ } }, "assistant": { - "title": "Homarr Assistant", - "open": "Open Homarr Assistant", + "title": "Assistant", + "open": "Open Assistant", "close": "Close assistant", "minimize": "Minimize assistant", - "spotlight": "Ask Homarr Assistant", + "spotlight": "Ask Assistant", "spotlightDescription": "Type and send a prompt without leaving the command menu.", "spotlightPrompt": { "title": "Ask Assistant", @@ -7625,10 +7625,10 @@ }, "unavailable": { "checking": "Checking whether the assistant is available…", - "disabledByServer": "An administrator has disabled Homarr Assistant for this server.", + "disabledByServer": "An administrator has disabled Assistant for this server.", "error": "The assistant's availability could not be checked. Try again.", "notConfigured": "An administrator must configure and enable the assistant first.", - "signIn": "Sign in to use Homarr Assistant." + "signIn": "Sign in to use Assistant." }, "newConversation": "New conversation", "conversations": "Conversations", @@ -7671,7 +7671,7 @@ "prompt": "Help me improve a board's appearance or custom CSS. Show me my boards first, then preserve my current settings while we make the change." } }, - "composerPlaceholder": "Ask Homarr Assistant…", + "composerPlaceholder": "Ask Assistant…", "runtime": { "model": "Model", "searchModels": "Search models",