From c16e00f94cf158bdbae0576eb230b37350c1a0bd Mon Sep 17 00:00:00 2001 From: ajnart Date: Wed, 12 Aug 2026 12:51:15 +0200 Subject: [PATCH] fix: address provider review feedback --- apps/docs/docs/management/assistant.mdx | 9 ++- apps/docs/docs/workshop/development.mdx | 3 +- apps/docs/package.json | 1 - .../open-collective-link.tsx | 4 +- .../components/pages/home/hero/hero-cards.tsx | 43 +++++++----- .../src/components/pages/home/hero/hero.tsx | 6 +- .../pages/home/hero/widgets/app-widget.tsx | 2 +- .../home/hero/widgets/downloads-widget.tsx | 46 +++++++------ apps/docs/src/css/custom.css | 2 +- apps/docs/src/pages/index.module.css | 8 +-- apps/docs/src/tools/math.ts | 3 - apps/workshop/homarr_provider.go | 69 +++++++++++++------ apps/workshop/homarr_provider_test.go | 13 +++- e2e/assistant-docs-screenshots.spec.ts | 32 +++++---- pnpm-lock.yaml | 8 --- 15 files changed, 154 insertions(+), 95 deletions(-) delete mode 100644 apps/docs/src/tools/math.ts diff --git a/apps/docs/docs/management/assistant.mdx b/apps/docs/docs/management/assistant.mdx index eda61c6d7..5c624b961 100644 --- a/apps/docs/docs/management/assistant.mdx +++ b/apps/docs/docs/management/assistant.mdx @@ -50,7 +50,8 @@ Homarr includes presets for OpenRouter, OpenAI, Claude, Gemini, xAI, Groq, Mistr LM Studio. Use **Custom endpoint** for another OpenAI-compatible Chat Completions service. The [Homarr provider](../workshop/homarr-provider) does not require an administrator API key. Each user signs in to the -Community Workshop and receives a separate daily allowance. +Community Workshop and receives a separate daily allowance. A shared Workshop daily quota also applies, so requests +can be rejected after that shared quota is exhausted. :::info Local model servers @@ -78,5 +79,7 @@ and delete conversations. - **A model stops during a tool call:** use a model that supports streaming and structured tool calls. - **A local endpoint cannot be reached:** check container networking and the endpoint's listen address. -Homarr exposes the same tool set to external clients through the [MCP server](./mcp). Custom Widget authors can find -the full workflow in [Agent authoring](./custom-widgets/agent-authoring). +Homarr exposes its MCP-enabled procedures to external clients through the [MCP server](./mcp). MCP omits +`customWidget_*` tools for non-admin API keys, while the built-in assistant adds browser actions and optional +OpenRouter web search. Custom Widget authors can find the full workflow in +[Agent authoring](./custom-widgets/agent-authoring). diff --git a/apps/docs/docs/workshop/development.mdx b/apps/docs/docs/workshop/development.mdx index 2e705e446..f61ef55db 100644 --- a/apps/docs/docs/workshop/development.mdx +++ b/apps/docs/docs/workshop/development.mdx @@ -41,7 +41,8 @@ WORKSHOP_API_URL=http://127.0.0.1:8090 WORKSHOP_WEB_URL=http://127.0.0.1:3003/workshop ``` -Restart `pnpm dev` after changing `.env`. GitHub OAuth is optional locally. See +Restart `pnpm dev:docs` after changing the Docusaurus URL variables. If Homarr is also running, restart its `pnpm dev` +process after changing the Workshop URLs. GitHub OAuth is optional locally. See [`apps/workshop/README.md`](https://github.com/homarr-labs/homarr/blob/HEAD/apps/workshop/README.md) for OAuth, Workshop moderator promotion, logs, tests, backup, restore, stopping, and intentional volume reset. diff --git a/apps/docs/package.json b/apps/docs/package.json index bec22d5ea..ce8dd21ca 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -51,7 +51,6 @@ "postcss": "^8.5.16", "posthog-docusaurus": "^2.0.5", "prism-react-renderer": "^2.4.1", - "random-word-slugs": "^0.1.7", "react": "catalog:", "react-day-picker": "catalog:", "react-dom": "catalog:", diff --git a/apps/docs/src/components/assistant-provider/open-collective-link.tsx b/apps/docs/src/components/assistant-provider/open-collective-link.tsx index 866e0841a..75499850f 100644 --- a/apps/docs/src/components/assistant-provider/open-collective-link.tsx +++ b/apps/docs/src/components/assistant-provider/open-collective-link.tsx @@ -1,8 +1,10 @@ +import Translate from "@docusaurus/Translate"; + import styles from "./open-collective-link.module.css"; export const OpenCollectiveLink = () => ( - Donate to Homarr on OpenCollective + Donate to Homarr on OpenCollective ); diff --git a/apps/docs/src/components/pages/home/hero/hero-cards.tsx b/apps/docs/src/components/pages/home/hero/hero-cards.tsx index a61f8b54e..e76da2c24 100644 --- a/apps/docs/src/components/pages/home/hero/hero-cards.tsx +++ b/apps/docs/src/components/pages/home/hero/hero-cards.tsx @@ -1,3 +1,4 @@ +import { translate } from "@docusaurus/Translate"; import { IconBrandDocker, IconCpu, IconDeviceDesktopAnalytics } from "@tabler/icons-react"; import styles from "../../../../pages/index.module.css"; @@ -30,18 +31,31 @@ export const HeroCards = () => { ); }; +const heroLabels = { + systemResources: translate({ id: "homepage.preview.systemResources", message: "System resources" }), + online: translate({ id: "homepage.preview.online", message: "Online" }), + cpu: translate({ id: "homepage.preview.cpu", message: "CPU" }), + memory: translate({ id: "homepage.preview.memory", message: "Memory" }), + disk: translate({ id: "homepage.preview.disk", message: "Disk" }), + docker: translate({ id: "homepage.preview.docker", message: "Docker" }), + dockerSummary: translate({ id: "homepage.preview.dockerSummary", message: "2 running · 1 failed" }), + healthy: translate({ id: "homepage.preview.healthy", message: "Healthy" }), + running: translate({ id: "homepage.preview.running", message: "Running" }), + exited: translate({ id: "homepage.preview.exited", message: "Exited" }), +}; + const SystemResourcesWidget = () => (
- Online + {heroLabels.online}
-
); @@ -63,23 +77,20 @@ const DockerWidget = () => (
- 2 running · 1 failed + {heroLabels.dockerSummary}
{[ - ["immich", "Healthy"], - ["jellyfin", "Running"], - ["paperless", "Exited"], - ].map(([name, status]) => ( -
+ { name: "immich", status: heroLabels.healthy, failed: false }, + { name: "jellyfin", status: heroLabels.running, failed: false }, + { name: "paperless", status: heroLabels.exited, failed: true }, + ].map(({ name, status, failed }) => ( +
{name} -
diff --git a/apps/docs/src/components/pages/home/hero/hero.tsx b/apps/docs/src/components/pages/home/hero/hero.tsx index 5b119f44b..61128c23f 100644 --- a/apps/docs/src/components/pages/home/hero/hero.tsx +++ b/apps/docs/src/components/pages/home/hero/hero.tsx @@ -1,4 +1,5 @@ import Link from "@docusaurus/Link"; +import { translate } from "@docusaurus/Translate"; import { IconDownload, IconExternalLink } from "@tabler/icons-react"; import clsx from "clsx"; import styles from "../../../../pages/index.module.css"; @@ -57,7 +58,10 @@ export default function HomeHero() {
-
+
diff --git a/apps/docs/src/components/pages/home/hero/widgets/app-widget.tsx b/apps/docs/src/components/pages/home/hero/widgets/app-widget.tsx index a1c224039..ce5158711 100644 --- a/apps/docs/src/components/pages/home/hero/widgets/app-widget.tsx +++ b/apps/docs/src/components/pages/home/hero/widgets/app-widget.tsx @@ -14,7 +14,7 @@ export const AppWidget = ({ name, label, className }: AppWidgetProps) => { return ( {label ?? app.name} - {`${label +