feat(codex): create and customize Codex config from /settings

Adds the Codex config panel (skills/agents/rules/memory/config editing,
mcp/plugins/marketplaces add-remove via the codex CLI) as the last piece
of parity with the Claude Code settings tab, plus the codex_config_changed
WebSocket type the client was missing, and docs for the new
/api/codex-config surface.
This commit is contained in:
2026-09-08 21:09:28 +07:00
parent f6973d24d6
commit 8015730adf
9 changed files with 1856 additions and 6 deletions
+5
View File
@@ -83,6 +83,8 @@ import updates_en from "./locales/en/updates.json";
import updates_vi from "./locales/vi/updates.json";
import ccConfig_en from "./locales/en/ccConfig.json";
import ccConfig_vi from "./locales/vi/ccConfig.json";
import codexConfig_en from "./locales/en/codexConfig.json";
import codexConfig_vi from "./locales/vi/codexConfig.json";
import run_en from "./locales/en/run.json";
import run_vi from "./locales/vi/run.json";
import alerts_en from "./locales/en/alerts.json";
@@ -110,6 +112,7 @@ i18n
errors: errors_en,
updates: updates_en,
ccConfig: ccConfig_en,
codexConfig: codexConfig_en,
run: run_en,
alerts: alerts_en,
splash: splash_en,
@@ -128,6 +131,7 @@ i18n
errors: errors_vi,
updates: updates_vi,
ccConfig: ccConfig_vi,
codexConfig: codexConfig_vi,
run: run_vi,
alerts: alerts_vi,
splash: splash_vi,
@@ -150,6 +154,7 @@ i18n
"errors",
"updates",
"ccConfig",
"codexConfig",
"run",
"alerts",
"splash",
+100
View File
@@ -0,0 +1,100 @@
{
"title": "Codex Config Explorer",
"subtitle": "Your Codex CLI setup at a glance - skills, agents, rules, AGENTS.md memory, config.toml, MCP servers, plugins and marketplaces.",
"refresh": "Refresh",
"refreshing": "Refreshing…",
"lastUpdated": "Last updated {{time}}",
"loadError": "Failed to load: {{message}}",
"scope": {
"all": "All scopes",
"user": "User",
"project": "Project"
},
"tabs": {
"overview": "Overview",
"skills": "Skills",
"agents": "Agents",
"rules": "Rules",
"memory": "Memory",
"config": "Config",
"mcp": "MCP servers",
"plugins": "Plugins"
},
"overview": {
"rootsTitle": "Roots",
"codexHome": "Codex home",
"projectCodexDir": "Project .codex",
"projectRoot": "Project root",
"summary": "Quick summary",
"user": "user",
"project": "project"
},
"common": {
"search": "Search by name…",
"clearSearch": "Clear search",
"empty": "Nothing here yet."
},
"list": {
"newButton": "New",
"viewButton": "View source",
"editButton": "Edit",
"deleteButton": "Delete"
},
"edit": {
"saveSuccess": "Saved · {{path}}",
"saveSuccessNew": "Created.",
"deleteSuccess": "Deleted · {{path}}",
"deleteError": "Delete failed: {{message}}",
"templates": {
"skills": "---\nname: my-skill\ndescription: One-line description (shown when Codex picks the skill)\n---\n\nBody - what the skill does, when to use it, examples.\n",
"agents": "name = \"my-agent\"\ndescription = \"When to invoke this agent\"\n\ninstructions = \"\"\"\nSystem prompt for the agent.\n\"\"\"\n",
"rules": "# Rules\n\nCodex follows these rules for this scope.\n",
"memory": "# Project memory\n\nCodex reads this on session start.\n",
"config": "# config.toml\n"
}
},
"memory": {
"userScope": "User memory",
"projectScope": "Project memory",
"missing": "No AGENTS.md found."
},
"config": {
"userScope": "User config",
"projectScope": "Project config",
"missing": "No config.toml found."
},
"mcp": {
"addTitle": "Add an MCP server",
"nameLabel": "Name",
"modeCommand": "Command",
"modeUrl": "URL",
"commandLabel": "Command",
"argsLabel": "Args (space-separated)",
"urlLabel": "URL",
"bearerLabel": "Bearer token env var (optional)",
"addButton": "Add",
"removeButton": "Remove",
"noServers": "No MCP servers found.",
"added": "Added {{name}}.",
"removed": "Removed {{name}}."
},
"plugins": {
"installTitle": "Install a plugin",
"installPlaceholder": "name or name@marketplace",
"installButton": "Add",
"removeButton": "Remove",
"installed": "Installed {{name}}.",
"removed": "Removed {{name}}.",
"noPlugins": "No plugins installed.",
"marketplacesTitle": "Marketplaces",
"addMarketplaceTitle": "Add a marketplace",
"addMarketplacePlaceholder": "https://github.com/owner/repo",
"addMarketplaceButton": "Add",
"marketplaceAdded": "Added marketplace.",
"marketplaceRemoved": "Removed marketplace {{name}}.",
"noMarketplaces": "No marketplaces registered."
},
"manage": {
"working": "Working…"
}
}
+100
View File
@@ -0,0 +1,100 @@
{
"title": "Trình khám phá cấu hình Codex",
"subtitle": "Toàn cảnh thiết lập Codex CLI của bạn - skill, agent, rule, bộ nhớ AGENTS.md, config.toml, máy chủ MCP, plugin và marketplace.",
"refresh": "Làm mới",
"refreshing": "Đang làm mới…",
"lastUpdated": "Cập nhật lần cuối {{time}}",
"loadError": "Tải thất bại: {{message}}",
"scope": {
"all": "Tất cả phạm vi",
"user": "Người dùng",
"project": "Dự án"
},
"tabs": {
"overview": "Tổng quan",
"skills": "Skill",
"agents": "Agent",
"rules": "Rule",
"memory": "Bộ nhớ",
"config": "Cấu hình",
"mcp": "Máy chủ MCP",
"plugins": "Plugin"
},
"overview": {
"rootsTitle": "Thư mục gốc",
"codexHome": "Thư mục Codex",
"projectCodexDir": "Thư mục .codex của dự án",
"projectRoot": "Thư mục gốc dự án",
"summary": "Tóm tắt nhanh",
"user": "người dùng",
"project": "dự án"
},
"common": {
"search": "Tìm theo tên…",
"clearSearch": "Xóa tìm kiếm",
"empty": "Chưa có gì ở đây."
},
"list": {
"newButton": "Mới",
"viewButton": "Xem nguồn",
"editButton": "Sửa",
"deleteButton": "Xóa"
},
"edit": {
"saveSuccess": "Đã lưu · {{path}}",
"saveSuccessNew": "Đã tạo.",
"deleteSuccess": "Đã xóa · {{path}}",
"deleteError": "Xóa thất bại: {{message}}",
"templates": {
"skills": "---\nname: my-skill\ndescription: Mô tả một dòng (hiển thị khi Codex chọn skill)\n---\n\nNội dung - skill làm gì, khi nào dùng, ví dụ.\n",
"agents": "name = \"my-agent\"\ndescription = \"Khi nào gọi agent này\"\n\ninstructions = \"\"\"\nSystem prompt cho agent.\n\"\"\"\n",
"rules": "# Rules\n\nCodex tuân theo các quy tắc này ở phạm vi này.\n",
"memory": "# Bộ nhớ dự án\n\nCodex đọc tệp này khi bắt đầu phiên làm việc.\n",
"config": "# config.toml\n"
}
},
"memory": {
"userScope": "Bộ nhớ người dùng",
"projectScope": "Bộ nhớ dự án",
"missing": "Không tìm thấy AGENTS.md."
},
"config": {
"userScope": "Cấu hình người dùng",
"projectScope": "Cấu hình dự án",
"missing": "Không tìm thấy config.toml."
},
"mcp": {
"addTitle": "Thêm máy chủ MCP",
"nameLabel": "Tên",
"modeCommand": "Lệnh",
"modeUrl": "URL",
"commandLabel": "Lệnh",
"argsLabel": "Tham số (cách nhau bằng dấu cách)",
"urlLabel": "URL",
"bearerLabel": "Biến môi trường bearer token (tùy chọn)",
"addButton": "Thêm",
"removeButton": "Gỡ bỏ",
"noServers": "Không tìm thấy máy chủ MCP nào.",
"added": "Đã thêm {{name}}.",
"removed": "Đã gỡ bỏ {{name}}."
},
"plugins": {
"installTitle": "Cài đặt plugin",
"installPlaceholder": "tên hoặc tên@marketplace",
"installButton": "Thêm",
"removeButton": "Gỡ bỏ",
"installed": "Đã cài đặt {{name}}.",
"removed": "Đã gỡ bỏ {{name}}.",
"noPlugins": "Chưa cài đặt plugin nào.",
"marketplacesTitle": "Marketplace",
"addMarketplaceTitle": "Thêm marketplace",
"addMarketplacePlaceholder": "https://github.com/owner/repo",
"addMarketplaceButton": "Thêm",
"marketplaceAdded": "Đã thêm marketplace.",
"marketplaceRemoved": "Đã gỡ bỏ marketplace {{name}}.",
"noMarketplaces": "Chưa đăng ký marketplace nào."
},
"manage": {
"working": "Đang xử lý…"
}
}