From 4d5d44d8df7d712f8f79e30724ac1ee19c23a84b Mon Sep 17 00:00:00 2001 From: Arjun Vijay Date: Tue, 26 May 2026 10:35:11 -0400 Subject: [PATCH 1/4] Rename Librechat to Jarvis Chat --- package.json | 2 +- public/clickhouse-dark.svg | 1 - public/clickhouse-light.svg | 1 - public/favicon-32x32.png | Bin 0 -> 1749 bytes public/favicon.ico | Bin 15086 -> 0 bytes public/librechat-logo.svg | 29 ------------------ public/manifest.json | 4 +-- src/assets/jarvis.svg | 50 ++++++++++++++++++++++++++++++++ src/components/Sidebar.tsx | 4 +-- src/locales/en/translation.json | 12 ++++---- src/routes/__root.tsx | 5 ++-- 11 files changed, 64 insertions(+), 44 deletions(-) delete mode 100644 public/clickhouse-dark.svg delete mode 100644 public/clickhouse-light.svg create mode 100644 public/favicon-32x32.png delete mode 100644 public/favicon.ico delete mode 100644 public/librechat-logo.svg create mode 100644 src/assets/jarvis.svg diff --git a/package.json b/package.json index b28deed4..566b0583 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "librechat-admin-panel", + "name": "jarvis-chat-admin-panel", "private": true, "type": "module", "imports": { diff --git a/public/clickhouse-dark.svg b/public/clickhouse-dark.svg deleted file mode 100644 index d3a8e478..00000000 --- a/public/clickhouse-dark.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/clickhouse-light.svg b/public/clickhouse-light.svg deleted file mode 100644 index 6543c1d6..00000000 --- a/public/clickhouse-light.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..c55272f02e1f5ed0a289bc79330cb87f411421e4 GIT binary patch literal 1749 zcmV;`1}gc9P)Px*k4Z#9R9HvFmV0nj)fL8n>zs2Rxp@#m5+DsoA|@eF0tFKcm4Vtq&CsV6BvPG@ zeNfc4Q(F6&{?V}yD3p%+huG;%ADMG^hF2<=WHj@n4 z)FjzR?knK?BC`2mO3QeZ_H?3IakwV8pgw)|)FuMEj0u*94%H z(wBS;sJPxq#@Ig%%o35L}l$6~gkH>}XbIw@PQ5{|C}>qO**;W0*pR7%|iH1&s-=gC)xIM5y= zoFp&TCoC!R@Yy*&vOJlQ^o13Fd}WA39Wi3bv-&Kko#x>SbA3z-7&_WLBBB{_?P?^Y z)Lh`jj(*3#u_egBkYYipMP-qtrN!%S+33nI$us!&k^rxC#CW62Mwfds+)>Ma_-qh;k_}6;s4Px2 znv@;si1X;bLO2d?;%O5MSNrGt9QP=i@~_rq@zJtGe@NM>?l@cbh4EXksUZiSCC`h9 zR#$=nrPOrb?EbScv6<#gTauGR~0x}dJmxm~wU~uR{oKIK# zxUfVZnzi+WQ>$z85FEWD1RD=NnHA5{fBmrdoXEmcZ(OC4Y7S1fy!* z*Z(rG%~lCoH#X#?onlLCh_*}rn>9;s^zh}{Ecd(ZhlhCPji^hfzM8TElb@`}PK)vI z^Fg;Jw5^%vyMJZ1|M3(9jej^a)ZBVHiq}jqFj{giosYQ;=psDcW%Ic?KJNH%f`O-x zN7!*B!u%48Gd(t|=lNMuKC%up1K-*`i0+`(lP&JA53J4cNplK7C2)N2>8SkX;1CZi z&SKH@kpWW2*`2I`hgW2~C)M`mWt$&87vxjbURKv+t^uu}Eqg<5jWkqwHBq`lo)|8} z7o)bS{lPOqeI-1!EI@fO!BrJpjPvOJ5I2{4SYMx@KV@6@hB$gD?ylF30)L^;b|o6M zVe85qa(r^|of%PgRRu{UECv2?uGcmk`|+XwvC$Y!Mb z#?Sv5q@&+)C!_xJ8gR1P=HKUH==yqaaTW_pJz4>`iAd`R07($v(GQBApd&lmBItXM zB?cb(eqlwWmxd}|nnF@6XwZLsEyBJtF_%Scx|U`Zn%q_6*9}WAKJ?C;;+H9(Otawb zxWgl+L18qm=(^ c^;%_-BEhA=*#Rgh>HIQ?8p-j|krsk>=r7m$9jDd|FNHat8lC zW1>|%v(Vs%d{a%yGcV?6NvA1j9ci7G0(r?`1Hc8~ipwMzJwd0WW5Ahu@@-pA_1K-g zgZ9$RpUFEhTALXGtlbg(2u^IKLVgO|G|Z{%<2QMG8|V9GdQC}4AZbxs+0BO|r}mtT zYHgMvcu;Pq?lCYw*3_7Dbae8x8qf=CoBJP7!ehxctvk=ifdJf)Z}4Efm%?lV%d+ST z#o78ogtM1Nj{ATm;YiF{+H`l|V5a100KVANSEej!Q;<8BLu!3e-(gnG^-^41MALy@ z-ZaYb`@EDF7|bfRm_5aEf18GT=U)?%;58Xovwfh-z}W>dC-q^TPuv31)6r`}QI5fs zT!ZQPCWWzfrcchJ^HL`lE{C~!;X(>?%&{IV`VsO;5ea3ifyU`G8t27`~vC rT9#}y9|VRgBGPhA03SrwYsLI8yi|HWNFfp(00000NkvXXu0mjf*Y{p` literal 0 HcmV?d00001 diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index f8fced3458a7aefa507926f6d87ccbadbb6b03c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 zcmeHOU2IfE6dq{PKdLm8s7b4CVmGNzZb|HePxS}3#6&T{2dkn$LNQX>0)_atPd@pm zt>}aCP2-y(zP2D@G-3j^#s{HWC6bt!kQ7Q=yL(^cV^C< zZ_b`Ob7tmLscou3B@zm0Onnhos$VG;i`nlTO5H?R2U6A_Z&d1iH0VVeu&B2|EZ0wu zl@$7WM%KDP?}4s@?t!FEh**e;*t-4jqkI5#1+)gL7u;SP#72w*xntlvC=K$quh(~C z)nhy#ItT+%0T78JQ4~vo=jg#x*W?UDi{V z&EeaqPF#G2vG{(Q8)6?_yd!U1xhzAMW@PBwi}LQ@w;{_K!>QH#a_H)hsGF9di_^f^_fMBM#u``R-6yLVgoF^2u0o?plR$GkjZ@B?Qa{=wure&qA;gNOLp$1wVe@Vmcn z$9^LHOFXillINz#exmuOlJzXIpK|TTTBEs6TmFdKXDs$N2}1u|gWvq&d+8q=)$2L^ zB>H;gtj$5-r_90gQ`$G8e?%XTek#k0)w^jI6n^?xZSb||Gw#INPaiVE5C6Fa{wMVu z>EH50gR=iHf4_e7C->E1nLn+$FTCrQnY*iz24Vlzz-{`7@R#eqx%c5lpQWae{v-XD zYBRa*Bm1cn`w8j!ZP?GxdDdOZ{RQ`_=5C|L_ZJ)9!MN{;+-CvqI`{npeMZg!B(MMI zt}A_Sn={W4JMX|s-XGTqkGYc%^ZhCBfJ1wK%{T(!4{iK_iG#4m5X$(CoH5Xr%$Twy(YaczodzI z`ctf98@6RkjCD`5p?nV}D@LPd?+enTlsr9hLdzdsxG4|CXDsP7@pK^Eg@cn?8h zo@G4aWE-|6kJrER>N)@2juFAVcuPZr9eW`Gjl}so?eA5rO|`ebtX_ls&Kmq}pxXBDKKt;OX}&$Ck^E@=S(M=XuQj3X zTVwyz*9WE@)X4u1djAph{wvV^r@aSm$K1$0an1MNX`C9Qa6~{NmRdY1TV5Knc}~G& zi5SQ^r@;T3c^~NJdCpwXnB<>@-5{ZI)N6kM4{=q@;|BC-{=)>M`TJIC-XENW_*H;mLx6Myk-u-hi^2vW} z{&zY2%QficPnRBw;>VacHty}s|0Pg&j{Y_oKXpE*rO;s>Ek@r8<@TL<0 diff --git a/public/librechat-logo.svg b/public/librechat-logo.svg deleted file mode 100644 index b455209c..00000000 --- a/public/librechat-logo.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/manifest.json b/public/manifest.json index 52708d81..932db358 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,6 +1,6 @@ { - "short_name": "LibreChat Admin", - "name": "LibreChat Admin Panel", + "short_name": "Jarvis Chat Admin", + "name": "Jarvis Chat Admin Panel", "icons": [ { "src": "favicon.ico", diff --git a/src/assets/jarvis.svg b/src/assets/jarvis.svg new file mode 100644 index 00000000..d9879632 --- /dev/null +++ b/src/assets/jarvis.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index 98f6d770..b75f7cde 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -3,7 +3,7 @@ import { Icon, Dropdown } from '@clickhouse/click-ui'; import { Link, useRouter } from '@tanstack/react-router'; import type * as t from '@/types'; import { useStripAriaExpanded, useCapabilities, useLocalize } from '@/hooks'; -import libreChatLogo from '@/assets/librechat.svg'; +import jarvisLogo from '@/assets/jarvis.svg'; import { SettingsDialog } from './SettingsDialog'; import { SystemCapabilities } from '@/constants'; import { getInitials, cn } from '@/utils'; @@ -84,7 +84,7 @@ export function Sidebar({ user, collapsed, onToggle }: t.SidebarProps) { >
- {localize('com_a11y_logo_alt')} + {localize('com_a11y_logo_alt')} {localize('com_auth_title')} diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index 9719e257..0dd70ab4 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -730,7 +730,7 @@ "com_ui_active": "Active", "com_ui_paused": "Paused", "com_users_title": "User management", - "com_users_subtitle": "Manage users, roles, and permissions for LibreChat", + "com_users_subtitle": "Manage users, roles, and permissions for Jarvis Chat", "com_users_add": "Add user", "com_users_total": "Total users", "com_users_admins": "Admins", @@ -882,7 +882,7 @@ "com_help_subtitle": "Documentation, guides, and support resources", "com_help_resources": "Resources", "com_help_docs_title": "Documentation", - "com_help_docs_desc": "Comprehensive guides for configuring and running LibreChat", + "com_help_docs_desc": "Comprehensive guides for configuring and running Jarvis Chat", "com_help_api_title": "Configuration reference", "com_help_api_desc": "Detailed reference for librechat.yaml and environment setup", "com_help_community_title": "Community", @@ -890,7 +890,7 @@ "com_help_discord_title": "Discord", "com_help_discord_desc": "Chat with the community and get support on Discord", "com_help_support": "Support", - "com_help_support_text": "Need help? Contact your system administrator or visit the LibreChat documentation for troubleshooting guides.", + "com_help_support_text": "Need help? Contact your system administrator or visit the Jarvis Chat documentation for troubleshooting guides.", "com_a11y_results_found": "{{count}} results found", "com_a11y_filter_changed": "Filter updated, {{count}} results", "com_a11y_value_hidden": "{{key}} value hidden", @@ -995,12 +995,12 @@ "com_nav_collapse_sidebar": "Collapse sidebar", "com_nav_dashboard": "Dashboard", "com_dash_title": "Welcome!", - "com_dash_subtitle": "Here's everything you need to manage your LibreChat instance.", + "com_dash_subtitle": "Here's everything you need to manage your Jarvis Chat instance.", "com_dash_quick_links": "Quick links", "com_dash_config_desc": "View and manage instance configuration settings.", "com_dash_access_desc": "Create and manage groups, assign roles, and fine-tune member permissions across your organization.", "com_dash_grants_desc": "Control which capabilities each role has access to, from reading configs to managing users.", - "com_dash_help_desc": "Links to documentation, community resources, and support channels to help you get the most out of LibreChat.", + "com_dash_help_desc": "Links to documentation, community resources, and support channels to help you get the most out of Jarvis Chat.", "com_dash_nav_tips": "Getting around", "com_dash_tip_sidebar": "The sidebar gives you access to every page: Configuration, Access, Grants, and Help. Toggle it open to see labels or collapse it down to just icons.", "com_dash_tip_cmdk": "The command menu lets you search for and jump to any page, configuration section, or config tab. You can also switch between light, dark, and system themes within the menu.", @@ -1027,5 +1027,5 @@ "com_kv_type_number": "123", "com_kv_type_boolean": "T/F", "com_kv_type_json": "{ }", - "com_a11y_logo_alt": "LibreChat logo" + "com_a11y_logo_alt": "Jarvis Chat logo" } diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx index fcc82e70..fd50eb45 100644 --- a/src/routes/__root.tsx +++ b/src/routes/__root.tsx @@ -36,7 +36,7 @@ export const Route = createRootRoute({ content: 'width=device-width, initial-scale=1', }, { - title: 'LibreChat Admin Panel', + title: 'Jarvis Chat Admin Panel', }, ], links: [ @@ -46,7 +46,8 @@ export const Route = createRootRoute({ }, { rel: 'icon', - href: '/favicon.ico', + type: 'image/png', + href: '/favicon-32x32.png', }, ], }), From 37468689bfa3894b74cb0934351ee393e3109d87 Mon Sep 17 00:00:00 2001 From: Arjun Vijay Date: Tue, 26 May 2026 11:59:17 -0400 Subject: [PATCH 2/4] Add CI/CD Pipeline --- .github/config/applications.json | 14 +++ .github/workflows/deploy.yaml | 155 +++++++++++++++++++++++++++ .github/workflows/docker-publish.yml | 49 --------- README.md | 20 ++-- 4 files changed, 179 insertions(+), 59 deletions(-) create mode 100644 .github/config/applications.json create mode 100644 .github/workflows/deploy.yaml delete mode 100644 .github/workflows/docker-publish.yml diff --git a/.github/config/applications.json b/.github/config/applications.json new file mode 100644 index 00000000..39d33855 --- /dev/null +++ b/.github/config/applications.json @@ -0,0 +1,14 @@ +{ + "jarvis": { + "eks_cluster_name": "ascending-s-api-cluster", + "aws_deploy_role": "SAAS_AWS_DEPLOY_ROLE_ARN" + }, + "jarvis-demo": { + "eks_cluster_name": "ascending-s-api-cluster", + "aws_deploy_role": "SAAS_AWS_DEPLOY_ROLE_ARN" + }, + "askcto": { + "eks_cluster_name": "ascending-askcto-cluster", + "aws_deploy_role": "AWS_DEPLOY_ROLE_ARN" + } +} diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml new file mode 100644 index 00000000..4e097735 --- /dev/null +++ b/.github/workflows/deploy.yaml @@ -0,0 +1,155 @@ +name: Deploy Admin Panel + +on: + push: + branches: + - main + paths: + - 'src/**' + - 'server.ts' + - 'package.json' + - 'bun.lock' + - 'Dockerfile' + - '.github/workflows/deploy.yaml' + workflow_dispatch: + inputs: + application: + description: 'Application to deploy to' + type: choice + required: true + default: jarvis + options: + - jarvis + - askcto + - jarvis-demo + region: + description: 'AWS Region to deploy to' + type: string + required: true + default: us-east-1 + +permissions: + id-token: write + contents: read + +run-name: Deploy Admin Panel for ${{ inputs.application }} + +jobs: + test: + name: Lint, Type Check & Tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - uses: oven-sh/setup-bun@v2 + + - name: Install dependencies + run: bun install --frozen-lockfile + + - name: ESLint + run: bunx eslint src/ --max-warnings 0 + + - name: TypeScript + run: bunx tsc --noEmit + + - name: Vitest + run: bun run test + env: + NODE_ENV: development + SESSION_SECRET: ci-test-secret-do-not-use-in-production + + build-and-push: + name: Build & Push to ECR + runs-on: ubuntu-latest + needs: test + outputs: + image: ${{ steps.tags.outputs.ecr_image }} + steps: + - uses: actions/checkout@v6 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Assume IAM role + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.SAAS_AWS_DEPLOY_ROLE_ARN }} + role-session-name: deployment-role-session + aws-region: ${{ inputs.region || 'us-east-1' }} + + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v2 + with: + registries: "897729109735" + + - name: Determine image tags + id: tags + run: | + ECR_IMAGE="${{ steps.login-ecr.outputs.registry }}/jarvis/admin-panel" + echo "ecr_image=${ECR_IMAGE}:${{ github.sha }}" >> $GITHUB_OUTPUT + echo "tags=${ECR_IMAGE}:${{ github.sha }},${ECR_IMAGE}:latest" >> $GITHUB_OUTPUT + + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: . + file: ./Dockerfile + platforms: linux/amd64 + push: true + tags: ${{ steps.tags.outputs.tags }} + provenance: false + + deploy: + name: Deploy to EKS + runs-on: ubuntu-latest + needs: build-and-push + if: github.event_name == 'workflow_dispatch' + env: + DEPLOYMENT_NAME: jarvis-admin-panel + steps: + - uses: actions/checkout@v6 + + - name: Load Application Configuration + id: config + run: | + CONFIG=$(cat .github/config/applications.json | jq -r --arg app "${{ inputs.application }}" '.[$app]') + echo "eks_cluster_name=$(echo $CONFIG | jq -r '.eks_cluster_name')" >> $GITHUB_OUTPUT + echo "aws_deploy_role=$(echo $CONFIG | jq -r '.aws_deploy_role')" >> $GITHUB_OUTPUT + + - name: Install kubectl + uses: azure/setup-kubectl@v3 + with: + version: latest + + - name: Set IAM role to assume + id: set-role + run: echo "role=${{ secrets[steps.config.outputs.aws_deploy_role] }}" >> $GITHUB_OUTPUT + + - name: Assume IAM role + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ steps.set-role.outputs.role }} + role-session-name: deployment-role-session + aws-region: ${{ inputs.region }} + + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v2 + with: + registries: "897729109735" + + - name: Update kubeconfig + run: aws eks update-kubeconfig --name ${{ steps.config.outputs.eks_cluster_name }} --region ${{ inputs.region }} + + - name: Update image on EKS + run: | + kubectl set image deploy/${{ env.DEPLOYMENT_NAME }} \ + jarvis-admin-panel=${{ needs.build-and-push.outputs.image }} \ + -n ${{ inputs.application }} + + - name: Restart pods + run: kubectl rollout restart deploy/${{ env.DEPLOYMENT_NAME }} -n ${{ inputs.application }} + + - name: Check pod status + run: kubectl rollout status deploy/${{ env.DEPLOYMENT_NAME }} -n ${{ inputs.application }} diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml deleted file mode 100644 index 96a21d1f..00000000 --- a/.github/workflows/docker-publish.yml +++ /dev/null @@ -1,49 +0,0 @@ -name: Docker Image Publish - -on: - workflow_dispatch: - push: - branches: - - main - paths: - - 'src/**' - - 'server.ts' - - 'package.json' - - 'bun.lock' - - 'Dockerfile' - - '.github/workflows/docker-publish.yml' - -jobs: - build: - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Build and push - uses: docker/build-push-action@v6 - with: - context: . - file: Dockerfile - push: true - tags: | - ghcr.io/clickhouse/librechat-admin-panel:${{ github.sha }} - ghcr.io/clickhouse/librechat-admin-panel:latest - platforms: linux/amd64,linux/arm64 diff --git a/README.md b/README.md index df3bf999..7f238214 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ -# LibreChat Admin Panel +# Jarvis Chat Admin Panel -A browser-based management interface for [LibreChat](https://github.com/danny-avila/LibreChat). It connects to the same database as the main application and provides a GUI for tasks that would otherwise require editing `librechat.yaml` directly. +A browser-based management interface for [Jarvis Chat](https://github.com/ascending-llc/jarvis-api). It connects to the same database as the main application and provides a GUI for tasks that would otherwise require editing `librechat.yaml` directly. ## Features -- **Configuration management** — View and edit all LibreChat settings through a dynamic, schema-driven form. New fields added to the schema appear automatically. +- **Configuration management** — View and edit all Jarvis Chat settings through a dynamic, schema-driven form. New fields added to the schema appear automatically. - **Role and group overrides** — Apply configuration overrides scoped to specific roles or groups, with a priority-based cascade that determines the final resolved value for each user. - **User and group administration** — Create and manage groups, assign roles, and control access. -- **Authentication** — Supports username/password login and OpenID SSO when enabled on the LibreChat instance. +- **Authentication** — Supports username/password login and OpenID SSO when enabled on the Jarvis Chat instance. - **Localization** — Full multi-language support for all UI strings. - **Accessibility** — Keyboard navigable with ARIA regions, focus management, and screen reader support. @@ -34,7 +34,7 @@ docker compose down # stop > **Note:** Inside Docker, `localhost` refers to the container, not your machine. > Use `http://host.docker.internal:3080` for `VITE_API_BASE_URL` to reach -> LibreChat running on the host. +> Jarvis Chat running on the host. #### Environment variables @@ -42,28 +42,28 @@ docker compose down # stop | ------------------------------- | ----------------------------------- | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | | `PORT` | No | `3000` | Port the admin panel listens on | | `SESSION_SECRET` | **Yes** (always required in Docker) | Dev fallback only when running `bun dev` locally; no default in the Docker image | Encryption key for sessions (min 32 chars) | -| `VITE_API_BASE_URL` | **Yes** (Docker) | `http://localhost:3080` (local dev only) | LibreChat API server URL; use `http://host.docker.internal:` in Docker | +| `VITE_API_BASE_URL` | **Yes** (Docker) | `http://localhost:3080` (local dev only) | Jarvis Chat API server URL; use `http://host.docker.internal:` in Docker | | `API_SERVER_URL` | No | Falls back to `VITE_API_BASE_URL` | Server-side LibreChat API URL when the container reaches LibreChat differently than the browser | | `ADMIN_SSO_ONLY` | No | `false` | Hide email/password form, SSO only | | `ADMIN_SESSION_IDLE_TIMEOUT_MS` | No | `1800000` (30 min) | Session idle timeout in ms | | `SESSION_COOKIE_SECURE` | No | `true` in production, `false` otherwise | Set `false` only for plain-HTTP deployments so the browser keeps the admin session cookie | For OpenID SSO, the admin panel stores a short-lived PKCE verifier in the -`admin-session` cookie before redirecting to LibreChat. If the admin panel is +`admin-session` cookie before redirecting to Jarvis Chat. If the admin panel is served over plain HTTP while running in production mode, browsers reject a `Secure` session cookie and the callback cannot complete the PKCE exchange. In that deployment shape, set `SESSION_COOKIE_SECURE=false` on the admin panel. -Set the same override on LibreChat itself when LibreChat is also reached over +Set the same override on Jarvis Chat itself when Jarvis Chat is also reached over plain HTTP, so its OAuth and auth cookies are not dropped either. #### Standalone Docker build ```bash -docker build -t librechat-admin-panel . +docker build -t jarvis-chat-admin-panel . docker run -p 3000:3000 \ --add-host=host.docker.internal:host-gateway \ -e SESSION_SECRET=your-secret-here-at-least-32-characters \ -e VITE_API_BASE_URL=http://host.docker.internal:3080 \ -e SESSION_COOKIE_SECURE=false \ - librechat-admin-panel + jarvis-chat-admin-panel ``` From ba4faf8837039964c2c4bc85cf26bb4c0492c4ed Mon Sep 17 00:00:00 2001 From: Arjun Vijay Date: Tue, 26 May 2026 13:54:06 -0400 Subject: [PATCH 3/4] Revert extraneous files --- README.md | 22 +++++++++++----------- package.json | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 7f238214..bedaba45 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ -# Jarvis Chat Admin Panel +# LibreChat Admin Panel -A browser-based management interface for [Jarvis Chat](https://github.com/ascending-llc/jarvis-api). It connects to the same database as the main application and provides a GUI for tasks that would otherwise require editing `librechat.yaml` directly. +A browser-based management interface for [LibreChat](https://github.com/danny-avila/LibreChat). It connects to the same database as the main application and provides a GUI for tasks that would otherwise require editing `librechat.yaml` directly. ## Features -- **Configuration management** — View and edit all Jarvis Chat settings through a dynamic, schema-driven form. New fields added to the schema appear automatically. +- **Configuration management** — View and edit all LibreChat settings through a dynamic, schema-driven form. New fields added to the schema appear automatically. - **Role and group overrides** — Apply configuration overrides scoped to specific roles or groups, with a priority-based cascade that determines the final resolved value for each user. - **User and group administration** — Create and manage groups, assign roles, and control access. -- **Authentication** — Supports username/password login and OpenID SSO when enabled on the Jarvis Chat instance. +- **Authentication** — Supports username/password login and OpenID SSO when enabled on the LibreChat instance. - **Localization** — Full multi-language support for all UI strings. - **Accessibility** — Keyboard navigable with ARIA regions, focus management, and screen reader support. @@ -34,7 +34,7 @@ docker compose down # stop > **Note:** Inside Docker, `localhost` refers to the container, not your machine. > Use `http://host.docker.internal:3080` for `VITE_API_BASE_URL` to reach -> Jarvis Chat running on the host. +> LibreChat running on the host. #### Environment variables @@ -42,28 +42,28 @@ docker compose down # stop | ------------------------------- | ----------------------------------- | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | | `PORT` | No | `3000` | Port the admin panel listens on | | `SESSION_SECRET` | **Yes** (always required in Docker) | Dev fallback only when running `bun dev` locally; no default in the Docker image | Encryption key for sessions (min 32 chars) | -| `VITE_API_BASE_URL` | **Yes** (Docker) | `http://localhost:3080` (local dev only) | Jarvis Chat API server URL; use `http://host.docker.internal:` in Docker | +| `VITE_API_BASE_URL` | **Yes** (Docker) | `http://localhost:3080` (local dev only) | LibreChat API server URL; use `http://host.docker.internal:` in Docker | | `API_SERVER_URL` | No | Falls back to `VITE_API_BASE_URL` | Server-side LibreChat API URL when the container reaches LibreChat differently than the browser | | `ADMIN_SSO_ONLY` | No | `false` | Hide email/password form, SSO only | | `ADMIN_SESSION_IDLE_TIMEOUT_MS` | No | `1800000` (30 min) | Session idle timeout in ms | | `SESSION_COOKIE_SECURE` | No | `true` in production, `false` otherwise | Set `false` only for plain-HTTP deployments so the browser keeps the admin session cookie | For OpenID SSO, the admin panel stores a short-lived PKCE verifier in the -`admin-session` cookie before redirecting to Jarvis Chat. If the admin panel is +`admin-session` cookie before redirecting to LibreChat. If the admin panel is served over plain HTTP while running in production mode, browsers reject a `Secure` session cookie and the callback cannot complete the PKCE exchange. In that deployment shape, set `SESSION_COOKIE_SECURE=false` on the admin panel. -Set the same override on Jarvis Chat itself when Jarvis Chat is also reached over +Set the same override on LibreChat itself when LibreChat is also reached over plain HTTP, so its OAuth and auth cookies are not dropped either. #### Standalone Docker build ```bash -docker build -t jarvis-chat-admin-panel . +docker build -t librechat-admin-panel . docker run -p 3000:3000 \ --add-host=host.docker.internal:host-gateway \ -e SESSION_SECRET=your-secret-here-at-least-32-characters \ -e VITE_API_BASE_URL=http://host.docker.internal:3080 \ -e SESSION_COOKIE_SECURE=false \ - jarvis-chat-admin-panel -``` + librechat-admin-panel +``` \ No newline at end of file diff --git a/package.json b/package.json index 566b0583..b28deed4 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "jarvis-chat-admin-panel", + "name": "librechat-admin-panel", "private": true, "type": "module", "imports": { From 0868d2514e57e23ac8fe84e3677587f44a03b533 Mon Sep 17 00:00:00 2001 From: Arjun Vijay Date: Tue, 26 May 2026 14:05:09 -0400 Subject: [PATCH 4/4] Fix newline --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bedaba45..df3bf999 100644 --- a/README.md +++ b/README.md @@ -66,4 +66,4 @@ docker run -p 3000:3000 \ -e VITE_API_BASE_URL=http://host.docker.internal:3080 \ -e SESSION_COOKIE_SECURE=false \ librechat-admin-panel -``` \ No newline at end of file +```