Rebuild the workspace AI settings page into card-based "Endpoints"
(Chat / Embeddings / Voice) matching the new design, and split the
single connection test into independent per-endpoint Test buttons.
- server: testConnection(workspaceId, capability) probes only the
requested capability ('chat' | 'embeddings'); add TestAiConnectionDto
and wire it through the /workspace/ai-settings/test controller
- client: testAiConnection(capability) + capability-typed mutation; two
independent test mutation instances so Chat/Embeddings results are isolated
- client: full rewrite of ai-provider-settings into Endpoints section —
drop the provider dropdown (driver is always openai, base URL + key
always shown), move the "AI chat" and surface the "Semantic search"
feature toggles into card headers, system message behind an Edit modal,
pgvector/reindex footer, and a disabled Voice/STT stub
- client: restyle external MCP tools and the MCP server section; collapse
the AI sections in workspace-settings; remove the standalone
ai-chat-settings component
- toggles now surface the server error message (e.g. missing pgvector)
- i18n: add new English strings
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
import SettingsTitle from "@/components/settings/settings-title.tsx";
|
|
import WorkspaceNameForm from "@/features/workspace/components/settings/components/workspace-name-form";
|
|
import WorkspaceIcon from "@/features/workspace/components/settings/components/workspace-icon.tsx";
|
|
import McpSettings from "@/features/workspace/components/settings/components/mcp-settings.tsx";
|
|
import AiProviderSettings from "@/features/workspace/components/settings/components/ai-provider-settings.tsx";
|
|
import { useTranslation } from "react-i18next";
|
|
import { getAppName } from "@/lib/config.ts";
|
|
import { Helmet } from "react-helmet-async";
|
|
import { Divider } from "@mantine/core";
|
|
import useUserRole from "@/hooks/use-user-role.tsx";
|
|
|
|
export default function WorkspaceSettings() {
|
|
const { t } = useTranslation();
|
|
const { isAdmin } = useUserRole();
|
|
return (
|
|
<>
|
|
<Helmet>
|
|
<title>Workspace Settings - {getAppName()}</title>
|
|
</Helmet>
|
|
<SettingsTitle title={t("General")} />
|
|
<WorkspaceIcon />
|
|
<WorkspaceNameForm />
|
|
|
|
<Divider my="lg" />
|
|
|
|
<SettingsTitle title={t("AI")} />
|
|
{isAdmin && <AiProviderSettings />}
|
|
|
|
<Divider my="lg" />
|
|
|
|
<McpSettings />
|
|
</>
|
|
);
|
|
}
|