diff --git a/client/index.html b/client/index.html index ad8df9e..6a23045 100644 --- a/client/index.html +++ b/client/index.html @@ -3,7 +3,7 @@ - Liquio QA Bot + Liqa +
diff --git a/client/package.json b/client/package.json index d04f5ed..e311f5e 100644 --- a/client/package.json +++ b/client/package.json @@ -1,5 +1,5 @@ { - "name": "liquio-qa-bot-client", + "name": "liqa-client", "private": true, "type": "module", "scripts": { diff --git a/client/public/favicon.svg b/client/public/favicon.svg new file mode 100644 index 0000000..0cab1a2 --- /dev/null +++ b/client/public/favicon.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + diff --git a/client/src/App.module.css b/client/src/App.module.css index 52a644b..ded25a4 100644 --- a/client/src/App.module.css +++ b/client/src/App.module.css @@ -15,10 +15,12 @@ } .brand { - font-weight: 700; - font-size: 1rem; - color: var(--color-primary); - letter-spacing: 0.02em; + height: 28px; + width: auto; + display: block; + background: #E6EDEA; + border-radius: 6px; + padding: 3px 6px; } .nav { diff --git a/client/src/App.tsx b/client/src/App.tsx index e5f5eee..c659af2 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,5 +1,10 @@ +import { NavLink, Navigate, Route, Routes } from 'react-router-dom'; +import { useTranslation } from 'react-i18next'; +import { Globe, KeyRound, Monitor, ClipboardList } from 'lucide-react'; +import type { LucideIcon } from 'lucide-react'; import styles from './App.module.css'; import { SidePanel, ThemeSwitcher } from './ui'; +import liqaLogo from './assets/liqa.svg'; import { EnvironmentsPage } from './pages/EnvironmentsPage'; import { EnvironmentDetailPage } from './pages/EnvironmentDetailPage'; import { CreateEnvironmentPage } from './pages/CreateEnvironmentPage'; @@ -9,10 +14,6 @@ import { SessionsPage } from './pages/SessionsPage'; import { SessionDetailPage } from './pages/SessionDetailPage'; import { ScenariosPage } from './pages/ScenariosPage'; import { ScenarioDetailPage } from './pages/ScenarioDetailPage'; -import { NavLink, Navigate, Route, Routes } from 'react-router-dom'; -import { useTranslation } from 'react-i18next'; -import { Globe, KeyRound, Monitor, ClipboardList } from 'lucide-react'; -import type { LucideIcon } from 'lucide-react'; const NAV: { path: string; labelKey: string; Icon: LucideIcon }[] = [ { path: '/environments', labelKey: 'nav.environments', Icon: Globe }, @@ -29,7 +30,7 @@ export default function App() { - QA Bot + Liqa } diff --git a/client/src/assets/liqa-mini.svg b/client/src/assets/liqa-mini.svg new file mode 100644 index 0000000..0cab1a2 --- /dev/null +++ b/client/src/assets/liqa-mini.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + diff --git a/client/src/assets/liqa.svg b/client/src/assets/liqa.svg new file mode 100644 index 0000000..66c71be --- /dev/null +++ b/client/src/assets/liqa.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + diff --git a/client/src/ui/DescriptionList/DescriptionList.tsx b/client/src/ui/DescriptionList/DescriptionList.tsx index 45c532c..bd25985 100644 --- a/client/src/ui/DescriptionList/DescriptionList.tsx +++ b/client/src/ui/DescriptionList/DescriptionList.tsx @@ -4,7 +4,8 @@ import styles from './DescriptionList.module.css'; function extractText(node: React.ReactNode): string { if (typeof node === 'string' || typeof node === 'number') return String(node); if (Array.isArray(node)) return node.map(extractText).join(''); - if (React.isValidElement(node)) return extractText(node.props.children); + if (React.isValidElement<{ children?: React.ReactNode }>(node)) + return extractText(node.props.children); return ''; } diff --git a/package.json b/package.json index cd8941e..c7dcdf8 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "liquio-qa-bot", + "name": "liqa", "version": "1.2.0", "private": true, "workspaces": [ diff --git a/server/eslint.config.mjs b/server/eslint.config.mjs index ff13b74..5baa58e 100644 --- a/server/eslint.config.mjs +++ b/server/eslint.config.mjs @@ -5,4 +5,12 @@ export default tseslint.config( { ignores: ['dist/**', 'node_modules/**'] }, ...tseslint.configs.recommended, eslintConfigPrettier, + { + rules: { + '@typescript-eslint/no-unused-vars': [ + 'error', + { argsIgnorePattern: '^_', varsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_' }, + ], + }, + }, ); diff --git a/server/package.json b/server/package.json index c37546e..253ce9d 100644 --- a/server/package.json +++ b/server/package.json @@ -1,7 +1,6 @@ { - "name": "liquio-qa-bot", - "version": "1.2.0", - "description": "", + "name": "liqa-server", + "version": "1.0.0", "main": "index.js", "scripts": { "build": "nest build", diff --git a/server/src/main.ts b/server/src/main.ts index dacb35e..ba3a007 100644 --- a/server/src/main.ts +++ b/server/src/main.ts @@ -8,7 +8,7 @@ import { AppModule } from "./app.module"; import { HttpExceptionFilter } from "./filters/http-exception.filter"; import { TraceInterceptor } from "./interceptors/trace.interceptor"; import { LoggingInterceptor } from "./interceptors/logging.interceptor"; -import { name as pkgName, version as pkgVersion } from "../package.json"; +import { name as pkgName, version as pkgVersion } from "../../package.json"; async function bootstrap() { const logger = new TraceLogger("Bootstrap"); diff --git a/server/src/mcp/mcp.service.ts b/server/src/mcp/mcp.service.ts index ad88d36..084312f 100644 --- a/server/src/mcp/mcp.service.ts +++ b/server/src/mcp/mcp.service.ts @@ -12,7 +12,7 @@ import { BrowserService } from "../browser/browser.service"; import { CodeExecutorService } from "../code-executor/code-executor.service"; import { ScenarioService } from "../scenario/scenario.service"; -import pkg from "../../package.json"; +import pkg from "../../../package.json"; @Injectable() export class McpService { diff --git a/server/src/session/session.controller.ts b/server/src/session/session.controller.ts index 34cf581..5c65895 100644 --- a/server/src/session/session.controller.ts +++ b/server/src/session/session.controller.ts @@ -41,7 +41,12 @@ export class SessionController { async findOne(@Param("id", ParseIntPipe) id: number) { const session = await this.sessionService.findById(id); if (!session) throw new NotFoundException(`Session ${id} not found`); - const { token, cookies, localStorage, ...rest } = session; + const { + token, + cookies: _cookies, + localStorage: _localStorage, + ...rest + } = session; return { ...rest, token: maskToken(token), diff --git a/server/test/session.controller.spec.ts b/server/test/session.controller.spec.ts index e96e82d..22d5b56 100644 --- a/server/test/session.controller.spec.ts +++ b/server/test/session.controller.spec.ts @@ -125,11 +125,11 @@ describe("SessionController", () => { // ── DELETE /sessions/:id ─────────────────────────────────────────────────── describe("DELETE /sessions/:id", () => { - it("deletes an existing session and returns 200", async () => { + it("deletes an existing session and returns 204", async () => { const s = await seedSession("delete-me-session"); await request(app.getHttpServer()) .delete(`/sessions/${s.id}`) - .expect(200); + .expect(204); const res = await request(app.getHttpServer()) .get("/sessions")