fix(cli): restore Serve UI labels, unify sidebar i18n, correct capabilities transport#78
Merged
Merged
Conversation
…es transport Serve UI is the one layer untouched since March; bring it in line with July. - Regenerate the committed #contentrain client: it had drifted 40 keys behind the serve-ui-texts source dictionary (blank Doctor/Format nav labels + entire Doctor page copy + branch-detail preview + Format page), and also re-syncs the docs/marketing content the same client mirrors via content_path (now current with this session's docs edits — 24-tool / media surface). - Unify PrimarySidebar: all 8 nav items now use one primary-sidebar.* namespace (was 6 hardcoded + 2 via a primary-nav.* namespace missing from the built bundle). Source dictionary keys moved accordingly. - /api/capabilities: transport 'stdio' -> 'http' — the web dashboard is reached over HTTP; the MCP engine is embedded in-process. 'stdio' only applies to 'serve --stdio', which does not serve this UI. Coverage checked against product philosophy and deliberately left as-is: read-only dashboard with agent-delegated mutations, and media staying Studio-only (LocalProvider has no media facet, so no media UI). No stale tool-count/feature copy found in the dictionary. serve-ui build (vue-tsc + vite) passes; oxlint clean.
✅ Deploy Preview for contentrain-ai ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The Serve UI (
contentrain servedashboard) is the one layer untouched since March. Two sidebar labels (Doctor, Format) render blank in the shipped UI; this brings the layer in line with July while respecting its product philosophy (read-only dashboard, agent-delegated mutations, media = Studio-only).The blank labels — root cause (deeper than it looks)
PrimarySidebarreads labels from adictionary('serve-ui-texts')via the committed#contentrainclient. That client was last generated in March and drifted 40 keys behind the source dictionary — the two nav labels are just the visible tip:doctor.*branch-detail.*format.*layout.*/common.*primary-nav.*Because the client is committed and Vite bundles it into
dist/serve-ui(shipped in thecontentrainnpm package), the blank labels reach released users, not just local dev.Fixes (scope: items 1–3 from the analysis; media browser deliberately excluded)
#contentrainclient. Restores all 40 keys. The same client also mirrors the repodocs/content viacontent_path, so the regen re-syncs the docs/marketing data files too — now current with this session's docs edits (24-tool / media surface). 32 of the 33 changed files are this regenerated artifact.PrimarySidebarwas half-migrated: 6 items hardcoded English, 2 via aprimary-nav.*namespace that wasn't even in the built bundle. All 8 now use the single completeprimary-sidebar.*namespace (matchingMobileNav); source keys moved fromprimary-nav.*→primary-sidebar.doctor/format./api/capabilitiestransport. Reportedtransport: "stdio"in Web-UI mode; the dashboard is reached over HTTP (MCP engine embedded in-process). Badge now readslocal · http.stdiostays correct only forserve --stdio, which doesn't serve this UI. (No capability gating added — serve is always a full-capability LocalProvider, so there's nothing to gate.)Coverage check vs July (per product philosophy)
Verified and deliberately left as-is: read-only + agent-delegated mutation model intact; media stays Studio-only (LocalProvider exposes no media facet → media tools never register → no media UI, by design — item 4 excluded per request); no stale tool-count/feature copy in the dictionary. The backend covers 9 of 24 MCP tools by REST and reimplements branch ops with direct git helpers — an intentional boundary, unchanged here.
Verification
serve-uibuild (vue-tsc --noEmit && vite build) passes; regenerated bundle confirmed to containprimary-sidebar.doctor/format.oxlintclean on the serve backend;transportis display-only in the UI (no logic branches on it)..contentrain/client/**+ exactly 3 source files (serve-ui-texts/en.json,PrimarySidebar.vue,serve/server.ts).🤖 Generated with Claude Code