feat: Add i18n, file manager, MCP controls, display modes, and Docker packaging#76
Closed
LimLLL wants to merge 32 commits intofriuns2:mainfrom
Closed
feat: Add i18n, file manager, MCP controls, display modes, and Docker packaging#76LimLLL wants to merge 32 commits intofriuns2:mainfrom
LimLLL wants to merge 32 commits intofriuns2:mainfrom
Conversation
- Register vue-i18n in the app and add locale detection with localStorage persistence - Create English and Simplified Chinese locale files organized by feature area - Replace hardcoded UI strings across sidebar, composer, review, skills, and threads - Add a language selector in settings and localize dynamic labels, tooltips, and statuses
- Add a settings entry and modal to view and edit the Codex config file - Implement GET and PUT `/codex-api/config-file` routes for loading and saving content - Support `CODEX_HOME` fallback resolution and create the config directory on write - Add English and Chinese i18n strings plus dark mode styles for the editor modal
- Add a composer dropdown to list configured MCP servers and show the enabled count - Read MCP server state from config and update it through batch writes followed by reload - Handle loading, empty, and toggle-in-progress states with localized messages - Add dark mode styles and English/Chinese translations for the empty state
- Map known dictation error messages to localized feedback in the composer - Add English and Chinese translations for missing auth token errors - Add English and Chinese translations for transcription failure errors
- Implement file management API endpoints for listing, creating, moving, deleting, downloading, and uploading files - Enforce allowed-root path validation for write operations and handle common file system errors - Add reusable FileManager and FileManagerPanel components with breadcrumbs, context menu, uploads, and dark mode styles - Integrate file manager access through a new /files route and a thread composer side panel toggle - Add English and Chinese locale strings and include Tabler Vue icons for file type and action visuals
- Add inline preview support for images, PDF, video, audio, markdown, code, and text files - Introduce read, serve, and OfficeCLI-based office preview routes on the server - Open previews from double-click and the file context menu in FileManager - Add localized preview strings and modal styling for light and dark themes - Include markdown-it and highlight.js support for rendered markdown and syntax highlighting
- Create a multi-stage Dockerfile to build and run the app with pnpm - Install Codex CLI and OfficeCLI in the runtime image for full support - Add docker-compose configuration and example environment variables - Add a GitHub Actions workflow to build multi-arch images and push to GHCR
- Compute the full GHCR image name once in the metadata step - Export the normalized lowercase image as a job output for later jobs - Replace direct env-based tags and manifest references with the shared output - Avoid duplicated lowercase conversion logic in manifest creation and inspection
- Add pointer cursors and hover text states for composer and MCP triggers - Move search dropdown and skill picker styles out of scoped blocks to enable shared dark mode rules - Expand dark theme coverage for MCP, search dropdown, and skill picker components - Adjust MCP dropdown menu to use a minimum width for better content fit - Add interactive cursor styles for sidebar thread rows and thread buttons
- Stop ignoring pnpm-lock.yaml and add it to version control - Copy the lockfile into the Docker build context before installing deps - Use pnpm install --frozen-lockfile to ensure deterministic installs
- Copy pnpm-lock.yaml into the runtime image alongside package.json - Install production dependencies with --frozen-lockfile for reproducible builds
# Conflicts: # package.json # src/App.vue # src/server/codexAppServerBridge.ts
- Add English and Chinese locale strings for terminal and context labels - Replace hardcoded terminal and context text with i18n translations - Localize terminal exit status and toggle accessibility labels - Refine dark-mode terminal toggle styles and slightly reduce icon size
- Add a persisted conversation style setting with clean and developer options - Show reasoning and MCP tool call messages inline in developer mode - Hide internal steps in clean mode while keeping final replies prominent - Normalize reasoning and MCP tool call payloads for thread rendering
- Prevent message sending when Enter is used to confirm IME input such as Chinese pinyin
- Run `pnpm rebuild node-pty` after dependency installation in both stages - Install `python3`, `make`, and `g++` in the runtime stage for native module builds - Remove temporary build tools after production install to keep the image lean
- Add node-pty and esbuild to pnpm onlyBuiltDependencies - Ensure required postinstall build steps run for these packages
- Add common system packages needed for CLI usage and subprocess support - Configure mise activation in shell startup and expose shims in PATH - Keep build tools available at runtime for node-pty installation and rebuild - Add an entrypoint script to initialize mise and npm global binaries before launch - Update the container entrypoint to run through tini and the new startup script
- Expose `CODEXUI_PASSWORD` in `docker-compose.yaml` for container startup - Document the environment variable in `.env.example` - Allow users to set a fixed password instead of generating one on each start
- Read `CODEXUI_PASSWORD` from the environment when no string input is provided - Use the trimmed environment value before falling back to generated passwords
- Install ripgrep alongside existing build tools in the Dockerfile
- Map DOC and DOCX files to a document icon - Map XLS, XLSX, and CSV files to a spreadsheet icon - Map PPT and PPTX files to a presentation icon
- Parse MCP function calls and outputs from session logs and merge them into turns - Restore reasoning and command durations when rebuilding conversation items - Preserve existing recovered items while interleaving agent, tool, and file change entries - Surface duration metadata in normalizers and conversation UI for reasoning and commands - Strip console.debug in production builds and add Vue env typings for build stability
# Conflicts: # src/App.vue # src/components/content/ComposerRuntimeDropdown.vue # src/components/content/ComposerSearchDropdown.vue # src/components/content/ComposerSkillPicker.vue # src/components/content/QueuedMessages.vue # src/components/content/ReviewPane.vue # src/components/content/SkillCard.vue # src/components/content/SkillDetailModal.vue # src/components/content/SkillsHub.vue # src/components/content/ThreadComposer.vue # src/components/content/ThreadPendingRequestPanel.vue # src/components/content/ThreadTerminalPanel.vue # src/components/sidebar/SidebarThreadControls.vue # src/components/sidebar/SidebarThreadTree.vue
- Register vitest@4.1.5 as a project dependency - Update pnpm lock entries for Vitest packages and related test libs - Include resolved transitive dependencies required by the new test setup
- Replace nested translation keys across UI components with direct English strings - Simplify the English locale to rely on vue-i18n key fallback behavior - Expand Chinese translations to map the new English text keys - Remove useUiLanguage usage in favor of useI18n and silence missing key warnings
- Add live MCP tool call state handling for started, progress, and completed events - Merge recovered MCP tool call data into existing live items without downgrading richer records - Anchor live overlays to turn ids and indices so streamed messages stay in the correct turn - Track live message arrival order and project overlays into the persisted conversation backbone - Force message reload on turn completion and remove live tool calls once persisted data arrives
- Remove `ripgrep` from the earlier build-stage package list - Add `ripgrep` to the later image stage so it is available where needed
- Add a sample `SHELL` variable to `.env.example` - Explain recommended shell paths for Docker containers and macOS - Preserve existing optional Telegram configuration entries
- Intercept clicks on local message file links and launch FilePreviewModal - Derive file name, path, and extension from browse URLs for preview state - Treat files without extensions as text previews instead of unsupported files - Detect binary files on the server and return a user-friendly preview error
- Add a Docker deployment section with startup steps and key environment variables - Document i18n support, file manager capabilities, and multi-arch Docker images - Refresh recent product features and fix the "Can’t" wording in troubleshooting
Author
|
Since there hasn't been much activity on this PR and the code has moved on, I'll close it for now. |
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 join this conversation on GitHub.
Already have an account?
Sign in to comment
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
Adds i18n (English/Chinese), file manager, MCP server controls, conversation display modes, and Docker packaging to the Codex Web UI.
New Features
config.tomlfrom the web UIDocker & CI/CD
CODEXUI_PASSWORDenv support.env.examplewith all configurable environment variablesBug Fixes
SHELLenv var)Test Plan
.bashrc)docker-compose up