Skip to content

🔗 docs: Repair Dead Docs Routes and Close Verified Reference Gaps - #751

Merged
berry-13 merged 15 commits into
mainfrom
berry-13/auto-librechat-ai-address-feedbacks-run-2-20260902T2122
Sep 4, 2026
Merged

🔗 docs: Repair Dead Docs Routes and Close Verified Reference Gaps#751
berry-13 merged 15 commits into
mainfrom
berry-13/auto-librechat-ai-address-feedbacks-run-2-20260902T2122

Conversation

@berry-13

@berry-13 berry-13 commented Sep 2, 2026

Copy link
Copy Markdown
Member

Summary

Processes the pending Discord docs-feedback backlog (256 items). Most of it was already answered by the June docs overhaul (#530, #600, #660) and by changes that landed on main this week, so this PR is deliberately small: it fixes the reports that survived verification against the current repository and the current LibreChat schema.

Two of these are real broken routes. The rest are cases where the documented behaviour was verifiable from packages/data-provider/src/config.ts and the app source, and the page simply did not say it.

Every factual claim added here is taken from LibreChat origin/dev at the time of writing, cited in the commit messages. Where a claim could not be verified from source it was left out rather than guessed: the SearXNG instance-URL request path and the reported DeepSeek model deprecation are both noted as unverified below rather than written into the docs.

Feedback addressed

  • 1531982915729359019, 1491241561986564299: /docs/configuration/librechat_yaml

    • The "Object Structure" card linked to /docs/configuration/librechat_yaml/object_structure, a nav-only folder with no index page, so the card promising the "complete field reference" 404'd. A repo-wide internal link sweep found this was the only broken /docs target.
    • Card now points at the Config Structure page; the folder URL redirects there.
    • Classification: FIXED
  • (no single reporter; found while fixing the above): legacy /toolkit URLs

    • next.config.mjs redirected /toolkit/yaml_checker to /toolkit/yaml-checker, and neither route exists since the toolkit moved under /docs/toolkit. In-page links were unaffected because lib/localize-href.ts canonicalizes them at render time, but direct hits and the one absolute toolkit URL in the Linux guide landed on a 404.
    • Redirect targets now match the canonical map in localize-href.ts.
    • Classification: FIXED
  • 1543536529195012169: /docs/configuration/stt_tts

    • The speechTab example showed eleven keys and explained none.
    • Added the field reference from the schema, including the two settings whose meaning is not guessable: decibelValue is a silence threshold in dB (-100 to -30, default -45) and autoSendText is a delay in seconds where -1 disables auto-send. Also documented allowedAddresses, which both speech.stt and speech.tts accept and which every self-hosted example on the page needs.
    • Classification: FIXED
  • 1506499310035140753: .../object_structure/custom_params

    • "What are the acceptable values for defaultParamsEndpoint?" The page only ever showed 'google'.
    • It is z.string().default('custom'), not an enum, and the panel resolves it via paramSettings[key] ?? [], so an unrecognized value passes validation and renders an empty parameter panel. Listed the keys that resolve and documented that failure mode.
    • Classification: FIXED
  • 1539423034283393146, 1529194857564995645, 1528452749685952575: .../ai_endpoints/ollama

    • Added troubleshooting: container-vs-host baseURL, Ollama's default 127.0.0.1 bind, and the name-prefix rule behind model fetching (models.ts only calls /api/tags when the endpoint name starts with ollama, so renaming it silently empties the model list). The stop-sequence screenshot had image as its alt text and no caption.
    • Classification: FIXED
  • 1494744632884596746: /docs/configuration/banner

    • "How do you remove a banner? What happens if you schedule two banners at the same time?"
    • update-banner does findOne() then findByIdAndUpdate, so there is only ever one banner and a second run overwrites the first. Two overlapping windows are therefore impossible; documented that and the early-takedown path.
    • Classification: FIXED
  • 1528752311281647727: /docs/features/import_convos

    • "How do I export from LibreChat?" The page's "Export your conversations" heading was about exporting from ChatGPT and Claude, so the search landed on the wrong section.
    • Renamed that section and documented the real export flow, its five formats, and the branch/option rules that vary by format.
    • Classification: FIXED
  • 1508348821095059487, 1508345688273191073: /docs/features/search, /docs/features

    • "Explain why vector search is not supported" / "Tell me if the search is semantic, or keyword-based."
    • Stated plainly that conversation search is keyword-based via Meilisearch and that semantic retrieval applies to uploaded files through the RAG API.
    • Classification: FIXED
  • 1522687279234289807: .../object_structure/transactions

    • "still dont see token information". The setting only controls whether records are written, so enabling it surfaces nothing. Added a pointer to interface.contextUsage / contextCost.
    • Classification: FIXED
  • 1486774904136269884: /docs/configuration/authentication/SAML/auth0

    • "Does not explain where to find the LibreChat entity ID or metadata." Investigation found something worse: the page had the value backwards. It told readers to copy Auth0's Issuer into SAML_ISSUER, but samlStrategy.js:315 passes that as the strategy's own issuer, i.e. the entity ID LibreChat asserts about itself and which must match the Audience set in Auth0. The IdP's issuer belongs in SAML_IDP_ISSUER (samlStrategy.js:185).
    • Corrected the steps and the example, and stated that LibreChat publishes no SP metadata document.
    • Classification: FIXED
  • 1532228462868168886: /docs/features/agents, /docs/features/code_interpreter

  • 1528641958187106465, 1477743384113447032, 1526344941800919159, 1477745639617073208, 1507234635573104813, 1481873299515506808: custom endpoints

    • Seven reports of "the provider never appeared", against pages whose advice was "check the logs". That advice is wrong for the common case: packages/api/src/endpoints/custom/config.ts:21-28 drops any endpoint missing name, baseURL, apiKey or models (or whose models has neither fetch: true nor a non-empty default) and logs nothing at all.
    • Rewrote the troubleshooting callout around inspecting the block itself, noted that a duplicate name silently replaces the earlier entry and that one schema error stops the whole server, and gave groq.mdx the enablement steps it never had.
    • Classification: FIXED
  • 1496108363296018513: /docs/local

  • 1488860965666816060, 1500577570784149656: /docs/configuration/pre_configured_ai/openai

    • "Explain where in the UI the user can enter their own API KEY." user_provided was mentioned with no follow-up. Documented the Set API Key gear in the endpoint menu, the expiry choices, per-user encrypted server-side storage, and the revoke path.
    • Classification: FIXED
  • 1517360828762947625: /docs/features/authentication

    • "no mention of usage without login or login length." Added the verified SESSION_EXPIRY (15m) and REFRESH_TOKEN_EXPIRY (7d) defaults, explained that the short token renews silently, and stated plainly that there is no anonymous mode.
    • Classification: FIXED
  • 1482888861599399978: /docs/configuration/cdn/s3

    • S3_REFRESH_EXPIRY_MS was the one env var the storage code reads that the page never listed.
    • Classification: FIXED
  • 1512086950859767868: /docs/configuration/cdn/azure

    • "this page doesn't say WHY you'd want to set this up. What features are using this??" Storage strategy is not a feature toggle: it decides where avatars, chat uploads, image-generation output, and Code Interpreter files go. Named those consumers and the reason to move off the default local disk.
    • Classification: FIXED

Validation

  • pnpm lint:prettier: passed
  • pnpm typecheck: passed
  • pnpm lint: passed
  • pnpm test: passed (391 tests, 33 files)
  • pnpm build: passed (three times: initial, after rebasing onto main, and after the second batch)
  • Redirects verified against a production server (next start): /toolkit/yaml_checker, /toolkit/creds_generator and /docs/configuration/librechat_yaml/object_structure all return 307 to targets that return 200. Every edited page verified 200.
  • Repo-wide internal link sweep of all 180 English pages: one broken /docs target before this change, zero after. All 63 referenced images verified present.

Playwright E2E was not run locally (no browser install in this environment). CI ran it on both batches and it passed each time, along with Format/types/lint and the Vercel preview build.

Not changed

Investigated and deliberately left alone:

Review round

Rebased onto current main (the v0.8.8-rc2 docs drop), then worked through four rounds of review until Codex returned no findings on the head commit. Detail in the first and second summary comments and in the individual threads. Sixteen findings addressed, one rejected with evidence.

Three of them were reports that this PR contradicted an existing page. In two cases the existing page was the incorrect one, so it is corrected here:

  • speech.mdx: autoSendText is seconds with -1 disabling, not milliseconds with 0 disabling (useSpeechToTextBrowser.ts:78-82).
  • speech.mdx: autoTranscribeAudio is continuous listening plus silence detection, not transcription of audio messages (useSpeechToTextBrowser.ts:126, useSpeechToTextExternal.ts:186).
  • ollama.mdx: the stop-sequence examples still carried a stale "fetching list of models is not supported" comment, contradicting the page's own primary example.

Review also caught three factual errors in my own first pass, all corrected: local file storage is not ephemeral under the standard compose deployment (docker-compose.yml:35-36 bind-mounts ./images and ./uploads); a renamed Ollama endpoint does not come back with an empty model list, because the generic /v1/models path is a fallback; and the Object Structure card fix only covered the unprefixed URL, leaving the card a 404 in all thirteen non-English locales. That last one is now fixed in lib/localize-href.ts, before locale prefixing, with a unit test.

One finding was not accepted. REFRESH_TOKEN_EXPIRY was reported as a rolling window; setAuthTokens reuses session.expiration and only createSession applies expiresIn, so it is absolute from login. Documented the distinction rather than changing the claim, and separately scoped the whole section to LibreChat-issued tokens, since OPENID_REUSE_TOKENS does hand session lifetime to the provider.

@vercel

vercel Bot commented Sep 2, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
librechat-ai Ready Ready Preview Sep 4, 2026 12:57am UTC

Request Review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 2, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-04T01:03:27.761424Z cf2a3ad Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

📦 Next.js Bundle Analysis for librechat.ai

This analysis was generated by the Next.js Bundle Analysis action. 🤖

This PR introduced no changes to the JavaScript bundle! 🙌

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 65d9202a7e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread content/docs/configuration/stt_tts.mdx
Comment thread content/docs/configuration/stt_tts.mdx Outdated
Comment thread content/docs/configuration/librechat_yaml/object_structure/transactions.mdx Outdated
Comment thread content/docs/configuration/stt_tts.mdx Outdated
Comment thread content/docs/configuration/stt_tts.mdx Outdated
Comment thread content/docs/configuration/librechat_yaml/object_structure/custom_params.mdx Outdated
Comment thread content/docs/configuration/librechat_yaml/ai_endpoints/ollama.mdx
Comment thread content/docs/configuration/librechat_yaml/ai_endpoints/ollama.mdx Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2d6c67db73

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread content/docs/features/authentication.mdx Outdated
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

📦 Next.js Bundle Analysis for librechat.ai

This analysis was generated by the Next.js Bundle Analysis action. 🤖

This PR introduced no changes to the JavaScript bundle! 🙌

1 similar comment
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

📦 Next.js Bundle Analysis for librechat.ai

This analysis was generated by the Next.js Bundle Analysis action. 🤖

This PR introduced no changes to the JavaScript bundle! 🙌

Comment thread content/docs/configuration/librechat_yaml/ai_endpoints/groq.mdx Outdated
Comment thread content/docs/configuration/banner.mdx Outdated
… real pages

The Object Structure card on the librechat.yaml page linked to
/docs/configuration/librechat_yaml/object_structure, a nav-only folder with
no index page, so the one card promising the "complete field reference"
404'd. Point it at the Config Structure page the section actually opens
with, and redirect the folder URL there for anyone who typed or bookmarked
it.

The legacy /toolkit redirects pointed one dead spelling at another
(/toolkit/yaml_checker -> /toolkit/yaml-checker); neither exists since the
toolkit moved under /docs/toolkit. In-page links survive because
lib/localize-href.ts canonicalizes them at render time, so this only bit
direct hits, including the one absolute toolkit URL in the Linux guide
that skipped canonicalization for being external-shaped. Redirect targets
now match the canonical map in localize-href.ts.

Feedback: 1531982915729359019, 1491241561986564299
… values

The speechTab section showed an example with eleven keys and explained
none of them. Add the field reference from the schema: accepted engine
values for STT and TTS, and the two settings whose meaning is not
guessable: decibelValue is a silence threshold in dB (-100 to -30,
default -45) and autoSendText is a delay in seconds where -1 disables
auto-send.

Neither speech page mentioned allowedAddresses, though speech.stt and
speech.tts both take one and every self-hosted example we ship
(host.docker.internal, localhost) is inside the private address space the
connect-time guard blocks.

defaultParamsEndpoint is z.string().default('custom'), not an enum, and
the page only showed 'google' as an example. The panel resolves it via
paramSettings[key] ?? [], so an unrecognized value passes validation and
renders an empty parameter panel instead of reporting an error. List the
keys that resolve and describe that failure mode.

Feedback: 1543536529195012169, 1506499310035140753
…nshot

The Ollama reports were about diagnosis rather than the sample config. Add
the checks that resolve most failures: container-vs-host baseURL, Ollama's
default 127.0.0.1 bind, and the name-prefix rule behind model fetching:
models.ts reaches for /api/tags first only when the endpoint name starts
with "ollama". Also
note that a remote or hosted server differs only in baseURL and apiKey.

The stop-sequence screenshot had "image" as its alt text and no caption
saying which panel it shows.

Feedback: 1539423034283393146, 1529194857564995645, 1528452749685952575
…arch

Banner: update-banner does findOne() then findByIdAndUpdate, so there is
only ever one banner and running it again overwrites the previous message
and schedule. Two overlapping windows are therefore not possible, and
delete-banner is the only way to take one down early.

Import Conversations: the "Export your conversations" heading covered
exporting *from* ChatGPT and Claude, so readers looking for LibreChat's own
export found the wrong thing. Rename that section and document the real
export flow, its five formats, and the branch and option rules that vary
by format.

Message Search: say plainly that conversation search is keyword-based and
that semantic retrieval applies to uploaded files through the RAG API,
rather than leaving readers to infer it from "Meilisearch".

Transactions: the setting only controls whether records are written, which
is why enabling it does not make token counts appear anywhere. Point at
interface.contextUsage and contextCost for the display.

Feedback: 1494744632884596746, 1528752311281647727, 1508348821095059487,
1508345688273191073, 1522687279234289807
#699 removed the pasted video description from artifacts.mdx but the same
boilerplate survived on two other feature pages: a trailing hashtag line on
agents.mdx (plus the horizontal rule left orphaned above it) and on
code_interpreter.mdx. Both had already been machine-translated into every
locale.

Feedback: 1532228462868168886
The Auth0 SAML guide told readers to copy Auth0's Issuer into SAML_ISSUER,
and its example set it to `urn:dev-xxxxx.us.auth0.com`. That is backwards.
samlStrategy.js:315 passes SAML_ISSUER as the strategy's `issuer`, which is
the entity ID LibreChat asserts about *itself* in outbound AuthnRequests and
must match the Audience configured on the Auth0 side. The identity
provider's own issuer belongs in SAML_IDP_ISSUER, used at
samlStrategy.js:185 to verify incoming assertions.

Following the page as written produced a mismatched audience on both sides.
Also states that LibreChat publishes no SP metadata document, which is what
the reporter went looking for, and fixes three typos on the lines touched.

Feedback: 1486774904136269884
Seven reports say a provider never showed up after following the guide, and
the troubleshooting advice was to check the logs. That advice is misleading:
loadCustomEndpointsConfig (packages/api/src/endpoints/custom/config.ts:21-28)
filters out any endpoint missing `name`, `baseURL`, `apiKey` or `models`, or
whose `models` has neither `fetch: true` nor a non-empty `default`, and the
filter emits nothing at all. A typo or a mis-indented block therefore removes
the endpoint while the logs stay clean.

Rewrites the "Not Seeing Your Endpoint?" callout around inspecting the block
itself, notes that a duplicate name silently replaces the earlier entry, and
that a schema error anywhere in librechat.yaml stops the server rather than
disabling one section. Gives groq.mdx the enablement steps it never had:
its example uses `fetch: false`, so its `models.default` list is load-bearing
in exactly the way the filter punishes.

Also extends defaultParamsEndpoint with the four values that resolve during
schema lookup (parsers.ts:38-50) but map to no renderable parameter set.

Feedback: 1528641958187106465, 1477743384113447032, 1526344941800919159,
1477745639617073208, 1507234635573104813, 1481873299515506808
/docs/local: the desktop-installer callout added by #600 only ever landed on
/docs, and /docs/local is the page the "where's the Windows installer"
report was actually filed against. It rendered as a bare install-options
grid with nothing saying LibreChat is not a downloadable app.

pre_configured_ai/openai: `user_provided` was mentioned with no explanation
of what users then do. Documents the Set API Key gear in the endpoint menu,
the expiry choices (30m/2h/12h default/1d/7d/30d/never), that the key is
encrypted per user server-side, and the revoke path.

features/authentication: no mention of session length, so "I keep getting
logged out" had nowhere to land. Adds the SESSION_EXPIRY (15m) and
REFRESH_TOKEN_EXPIRY (7d) defaults, explains that the short token renews
silently, and states plainly that there is no anonymous mode.

cdn/s3: S3_REFRESH_EXPIRY_MS was the one env var the storage code reads that
the page never listed.

Feedback: 1496108363296018513, 1488860965666816060, 1500577570784149656,
1517360828762947625, 1482888861599399978
The Azure page described the service but never what LibreChat stores in it,
which was the reported complaint. Storage strategy is not a feature toggle:
it decides where avatars, chat uploads, image-generation output, and Code
Interpreter files all go. Names those consumers and the reason to move off
the default local disk, which does not survive container recreation and
cannot be shared across replicas.

Feedback: 1512086950859767868
…vior

autoSendText is seconds, not milliseconds, and -1 is what disables
auto-send; 0 sends immediately. autoTranscribeAudio controls continuous
listening (and silence detection on external engines), not transcription
of audio messages. The reference table and the STT/TTS guide disagreed
with each other and both disagreed with the client.

Also note that privately resolved cloud endpoints are not exempt from the
SSRF guard, and that browser TTS voices come from the OS rather than a
configured voice list.
- Drop the Groq enable-the-endpoint section; the custom endpoints guide
  already covers it.
- contextUsage draws the gauge and is on by default; contextCost only
  adds pricing and is off by default. Don't present both as required.
- An account is required to chat, but ALLOW_SHARED_LINKS_PUBLIC lets
  anonymous visitors read a shared conversation.
- defaultParamsEndpoint is filled in from provider when omitted, so
  'custom' is not the effective default for a provider-backed endpoint.
- Warn that OLLAMA_HOST=0.0.0.0 exposes an unauthenticated API on every
  interface, and explain that apiKey is only the Bearer fallback.
- Replace double hyphens used as pauses.
@berry-13
berry-13 force-pushed the berry-13/auto-librechat-ai-address-feedbacks-run-2-20260902T2122 branch from 92d12cf to 2447073 Compare September 3, 2026 23:31
@berry-13

berry-13 commented Sep 3, 2026

Copy link
Copy Markdown
Member Author

Addressed every review finding. Rebased onto current main (the v0.8.8-rc2 docs drop) first, so search.mdx now builds on main's rewritten intro rather than replacing it.

Review comments

  • groq.mdx: removed the whole ## Enable the Endpoint section.
  • banner.mdx: removed the double hyphens. Swept the rest of the branch for the same pattern; there were nine more, all replaced with real punctuation.

Codex findings

Two of these were reported as conflicts between this PR and the canonical speech.mdx. Checking the client, the canonical page was the one that was wrong, so I fixed it here rather than aligning to it:

  • autoSendText units: it is seconds, not milliseconds, and -1 is what disables auto-send, not 0. useSpeechToTextBrowser.ts:78-82 gates on autoSendText > -1 and schedules setTimeout(..., autoSendText * 1000); the slider in AutoSendTextSelector.tsx runs 0-60 and renders ${delayValue} s. Corrected speech.mdx:277.
  • autoTranscribeAudio: it is not audio-message transcription. useSpeechToTextBrowser.ts:126 passes it as continuous, and useSpeechToTextExternal.ts:186 uses it to gate monitorSilence. So it means "keep listening past the first pause, and on external engines detect silence via decibelValue". Corrected on both pages; my original wording was wrong too, since you still start the recording yourself.

The rest I confirmed and fixed as reported:

  • contextCost: contextUsage defaults to true and draws the gauge; contextCost defaults to false and only adds pricing (config.ts:1863-1864). No longer presented as required.
  • Private-link cloud endpoints: the guard resolves the IP, so a cloud endpoint behind Private Link or private DNS does need an allowedAddresses entry. Qualified.
  • Browser TTS voices: come from the browser and OS; the speech.tts voice list requirement now applies only to external engines.
  • provider implies defaultParamsEndpoint: confirmed at packages/api/src/endpoints/custom/config.ts:49-57: the provider is substituted when the field is absent or left at custom. Added a callout.
  • OLLAMA_HOST=0.0.0.0: added a warning that this exposes an unauthenticated API on every interface. I did not suggest a specific bridge IP, since LibreChat's compose network gateway is not the default 172.17.0.1.
  • Non-Bearer hosted Ollama: apiKey is only sent as Authorization: Bearer, and only when headers has not already set an Authorization (packages/api/src/endpoints/models.ts:267-274). Documented, with an X-API-Key example.
  • Public shared links: ALLOW_SHARED_LINKS_PUBLIC=true does let anonymous visitors read a shared conversation. Narrowed the claim to chatting.

Validation

pnpm lint:prettier, pnpm typecheck, pnpm lint, pnpm test (391 passed), pnpm build, plus a running-server check: all changed pages return 200, all six redirects return 307 to a live target, and the nested callout in the Ollama numbered list renders without breaking the list. Also caught and fixed backticks in two Callout titles, which render literally rather than as code.

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

📦 Next.js Bundle Analysis for librechat.ai

This analysis was generated by the Next.js Bundle Analysis action. 🤖

This PR introduced no changes to the JavaScript bundle! 🙌

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2447073ce8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread content/docs/configuration/cdn/azure.mdx Outdated
Comment thread content/docs/configuration/authentication/SAML/auth0.mdx
Comment thread content/docs/configuration/librechat_yaml/ai_endpoints/ollama.mdx Outdated
Comment thread content/docs/configuration/pre_configured_ai/openai.mdx
…paths

- Compose bind-mounts ./images and ./uploads to the host, so local file
  storage is not lost when the API container is recreated. Scope the
  warning to multi-instance and no-persistent-volume deployments.
- A renamed Ollama endpoint does not come back with an empty model list.
  The native /api/tags call is tried only for names starting with ollama,
  but any other name, or a failure, falls through to /v1/models, which
  Ollama serves at the documented /v1/ base URL.
- Auth0's Settings JSON needs an audience matching SAML_ISSUER, otherwise
  Auth0 asserts its default audience and login fails on a mismatch.
- Provider keys can also be set from Settings, Data controls, API keys,
  which is the only path when a model spec hides the endpoint menu.
@berry-13

berry-13 commented Sep 3, 2026

Copy link
Copy Markdown
Member Author

Second round of Codex findings addressed. All four were correct.

  • Local storage is not ephemeral by default. docker-compose.yml:35-36 bind-mounts ./images and ./uploads to the host, so a single-instance compose deployment already keeps those files across container recreation. Rewrote the paragraph: local storage is non-shared, and only loses data where nothing persistent is mounted behind those paths.
  • A renamed Ollama endpoint does not empty the model list. models.ts:214-234 only tries /api/tags first when the name starts with ollama, and falls through to the generic /v1/models request on any other name or on failure. Ollama serves /v1/models at the documented /v1/ base URL, so my original claim was wrong in both directions, including for hosted proxies that expose /v1/models but not /api/tags. Rewritten.
  • Auth0 Audience. Correct: the Step 2 Settings JSON had no audience, so a reader following the guide would hit an audience mismatch against the SAML_ISSUER I told them to choose. Added audience to the example with a callout tying the two together.
  • Set API Key with the endpoint menu hidden. Confirmed at registry.tsx:632-641: providerApiKeys is registered under the Data tab, apiKeys section, gated on hasUserProvidedEndpoints, and renders the same SetKeyDialog. Documented Settings → Data controls → API keys as the alternative path.

pnpm lint:prettier, pnpm typecheck, pnpm lint, pnpm test (391 passed) and pnpm build all pass; the four changed pages render 200 with the new callouts intact.

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

📦 Next.js Bundle Analysis for librechat.ai

This analysis was generated by the Next.js Bundle Analysis action. 🤖

This PR introduced no changes to the JavaScript bundle! 🙌

@berry-13
berry-13 force-pushed the berry-13/auto-librechat-ai-address-feedbacks-run-2-20260902T2122 branch from 7d786ea to 3cfa883 Compare September 3, 2026 23:53

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3cfa883959

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread content/docs/features/authentication.mdx
Comment thread next.config.mjs
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

📦 Next.js Bundle Analysis for librechat.ai

This analysis was generated by the Next.js Bundle Analysis action. 🤖

This PR introduced no changes to the JavaScript bundle! 🙌

…cale

The next.config redirect only covers the unprefixed URL. Translated
index pages still carry the nav-only folder as the Object Structure card
target, and TrackedLink prefixes it with the active locale, so the card
stayed a 404 for all thirteen non-English readers.

Canonicalize the path in localize-href alongside the legacy /toolkit
aliases, which happens before locale prefixing and so fixes every locale
at render time. Verified against a production server: no locale emits
the bare folder href any more.

Also note that a refresh inherits the session's original expiry rather
than restarting it, so REFRESH_TOKEN_EXPIRY is measured from login.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 722c276777

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread content/docs/features/authentication.mdx
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

📦 Next.js Bundle Analysis for librechat.ai

This analysis was generated by the Next.js Bundle Analysis action. 🤖

This PR introduced no changes to the JavaScript bundle! 🙌

With OPENID_REUSE_TOKENS=true the refresh cookie holds the provider's
token, so the IdP's lifetime, rotation, and revocation policy end the
session and raising REFRESH_TOKEN_EXPIRY cannot extend it.
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

📦 Next.js Bundle Analysis for librechat.ai

This analysis was generated by the Next.js Bundle Analysis action. 🤖

This PR introduced no changes to the JavaScript bundle! 🙌

@berry-13

berry-13 commented Sep 4, 2026

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c12abdf58f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread content/docs/configuration/librechat_yaml/ai_endpoints/ollama.mdx
The page's primary example already uses fetch: true, and models.ts has a
dedicated Ollama fetch path, so the two examples in the stop-sequence
callout contradicted the rest of the page. Say why the list is pinned
instead, and let the hosted-proxy example fetch, which is the point of
the /v1/models fallback described above it.
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

📦 Next.js Bundle Analysis for librechat.ai

This analysis was generated by the Next.js Bundle Analysis action. 🤖

This PR introduced no changes to the JavaScript bundle! 🙌

@berry-13

berry-13 commented Sep 4, 2026

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Keep it up!

Reviewed commit: cf2a3ad514

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@berry-13
berry-13 merged commit c245873 into main Sep 4, 2026
6 checks passed
@berry-13
berry-13 deleted the berry-13/auto-librechat-ai-address-feedbacks-run-2-20260902T2122 branch September 4, 2026 14:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant