Repository navigation
🧾 feat: Write Reports, Profile Priority, Pre-Auth Sign-In and Per-Field Titles from the Config Contract - #174
danny-avila wants to merge 3 commits into
Conversation
…ld Titles from the Config Contract Shows what a save skipped or ignored and why, maps issues by segments and params, edits profile priority and creates profiles create-only, makes the pre-auth Base fields editable, and resolves titles per field — each gated on the server contract with today's behaviour as the fallback.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 696595c7cf
ℹ️ 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".
…aths in Profile Merges, Count Partial Reports Apart
|
Codex Review: Didn't find any major issues. 🚀 Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
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". |
…Imported Record
Pull Request Template
Summary
Builds on the admin config contract (
GET /api/admin/config/meta) from the previous PR. Newer LibreChat servers now report what they do on writes, how profiles are ordered, which settings apply before sign-in and howendpoints.alltitle settings resolve. This PR uses each of those behaviours where the server reports it. A server that does not report a flag (or has no meta route) keeps today's behaviour, and every change below was checked against both kinds of server.Write rules from the server (
rules.baseOnlySections,baseOnlyPaths,deploymentOnlyPaths)filteredTools,includedTools) andskillDeletionread-only. The base-only pull request fields (endpoints.agents.pullRequests.provider, …) are shown read-only on any server that lists them. A field the server no longer lists becomes editable.Write reports (
writeReport,secretRebinding) and error codesskippedandignored, and each item is shown in the save toast with the panel's wording: base-only, read from librechat.yaml only, a role permission, a dedicated section, a local-process MCP server, or a credential LibreChat won't send.secretRebinding), a profile that changes an inherited endpoint's base URL now gets "API key: not sent: where it goes changed without the credential being entered again". A reply'signoreddescribes the whole stored document, so a dropped credential is only shown when the save changed what it belongs to: its custom endpoint, its MCP server, the Azure groups, or the object that holds it (OCR, a speech provider). A later save of another setting, even another endpoint's, does not repeat it.codeare worded by the panel: a missing principal, a profile that no longer exists, a version conflict, a section the admin may not manage, an invalid priority, a local-process MCP server, a key the database can't store, or an ended session. Other errors keep the server's text.Structured issues (
issueParams,dottedKeys)segments, so a dotted record key (a Bedrock inference profile, a dotted header) stays one key. The issue shows on its record or entry, and an entry is still named by its identity.issueParams, an issue is worded with its bounds, options and expected type, as the panel words its own checks. For example "must be at least 1" instead of "is too small", "must be at least 20 characters", "must be one of …", "must be a whole number".allowedAddressesrefinements are worded by their reason (missing port, public IP, …).Web search keys (
webSearchStoredKeys)Profile order and priority (
deterministicPrecedence,priorityRoute,expectedRevision,principalCheck)manage:configscan change a profile's priority from the profile bar ("Change"), on a server with the priority-only route. Only the priority changes: the profile's overrides, hidden settings and active state stay as stored. A value that is not a whole number from 0 to 1,000,000 is refused inline. A refused change is reported and the field stays open.expectedRevision: 'absent'), without reading it first:PRINCIPAL_NOT_FOUND) is reported, e.g.There is no role named "X".Pre-auth settings in Base (
preAuthBaseOverrides)Global title settings per field (
rules.titleResolution: 'field')endpoints.alltitle settings per field:Ollamaisollama):Ollamareference never matches, and shows it as the configured endpoint.Not in this PR: moving saves to
POST …/changeswith revisions (the next PR), and theignoredlist a profile read returns.Change Type
Testing
Unit and component tests, with the bundled contract and with a server contract:
secretRebindingand only for what the save changed: the custom endpoint or MCP server entry, a field beside the credential (OCR's base URL), the Azure groups, or a whole section. Another endpoint's setting, or another endpoint in the same list, does not show them. The plan names its changes by entry.issueParams, and coded errors.PRINCIPAL_NOT_FOUND, the role lookup without the principal check). The priority route and its error wording.Live, with Playwright and MongoDB checks, against three LibreChat backends:
dev(every flag above except the write report and issue params):GET /api/configservedopenid, apple. A YAML import ofregistration.socialLoginswas written to Base.-3and an empty value inline, then saved 10. MongoDB kept the overrides and active state.endpoints.anthropic.vertex, inserted in MongoDB, read as "Vertex AI is not configured" in that profile.devwith the open write report change (🧾 feat: Admin Config Write Report, Structured Issues and Deployment-Only Paths LibreChat#17395):PROCESS_MCP_SERVER_OVERRIDEmessage.There is no role named "TEMPROLE".Test Configuration:
dev,devplus the write report change, and an older LibreChat withoutGET /api/admin/config/meta.librechat.yaml.npx tsc --noEmit,npx eslint src/ e2e/,npx prettier --checkon the changed files,bun run test:lint-rules,npx vitest run(2646 tests).Checklist