yynxxxxx/Codex-X
OpenAI Codex 桌面端/CLI 的可视化管理工具,具有Provider/API 切换、会话同步、提示词注入、Skills/MCP 管理、TOML 配置可视化的跨平台工具。
Rust★ 3,747+50 that day#10 on trending
D54.2/100
Duplication84
2.1% in rust, tsx, javascript, typescript, bash, python, perlDead code96
0.1%Complexity31
86.9% The score is jscpd's own --health model: markup, data and text left out, tests kept. The numbers below are the trending scan's.
2.4%duplicated code · 1,569 of 65,354 lines
158clones in code
122code files of 184 scanned
3.18%duplicated over all files · 188 clones
Most complex files
- apps/desktop/src/main.tsx1178 cx
- apps/desktop/tests/fixtures/ui-runtime.js490 cx
- apps/desktop/src-tauri/src/providers/live.rs466 cx
- apps/desktop/src-tauri/src/lib.rs465 cx
- apps/desktop/src-tauri/src/failover/controller.rs439 cx
- apps/desktop/src-tauri/src/sessions/storage.rs432 cx
- apps/desktop/src-tauri/src/failover/proxy.rs430 cx
- apps/desktop/src-tauri/src/usage.rs346 cx
- apps/desktop/src-tauri/src/providers/store.rs309 cx
- apps/desktop/src-tauri/src/platform.rs296 cx
Dead code 0.07% unused · 1 findings
- apps/desktop/public/theme-init.jsunused-file
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code.
Largest clones in the code
- 11 lines in 5 placesrust82 tokensapps/desktop/src-tauri/src/tests.rs:1922–1932apps/desktop/src-tauri/src/tests.rs:1980–1990apps/desktop/src-tauri/src/tests.rs:2354–2364apps/desktop/src-tauri/src/tests.rs:2676–2686apps/desktop/src-tauri/src/tests.rs:2952–2962
1922assert!(!snapshot_path.exists()); 1923 1924switch_provider_inner(ProviderInput { 1925 config_dir: Some(codex_dir.display().to_string()), 1926 provider_id: Some("proxy".to_string()), 1927 provider_name: "Proxy".to_string(), 1928 base_url: "https://proxy.example.com/v1".to_string(), 1929 model: "proxy-model".to_string(), 1930 api_key: Some("sk-proxy".to_string()), 1931 wire_api: Some("responses".to_string()),First 10 of 11 lines.
- 36 lines in 2 placesrust175 tokensapps/desktop/src-tauri/src/sessions/catalog.rs:955–990apps/desktop/src-tauri/src/sessions/sync.rs:565–600
955conn.execute_batch( 956 "CREATE TABLE local_thread_catalog ( 957 host_id TEXT NOT NULL, 958 thread_id TEXT NOT NULL, 959 display_title TEXT NOT NULL, 960 source_created_at REAL NOT NULL, 961 source_updated_at REAL NOT NULL, 962 cwd TEXT NOT NULL, 963 source_kind TEXT NOT NULL, 964 source_detail TEXT,First 10 of 36 lines.
- 8 lines in 4 placesrust57 tokensapps/desktop/src-tauri/src/tests.rs:1985–1992apps/desktop/src-tauri/src/tests.rs:2359–2366apps/desktop/src-tauri/src/tests.rs:2681–2688apps/desktop/src-tauri/src/tests.rs:2957–2964
1985 provider_name: "Proxy".to_string(), 1986 base_url: "https://proxy.example.com/v1".to_string(), 1987 model: "proxy-model".to_string(), 1988 api_key: Some("sk-proxy".to_string()), 1989 wire_api: Some("responses".to_string()), 1990 requires_openai_auth: Some(true), 1991}) 1992.expect("switch away from polluted official state");2359 provider_name: "Proxy".to_string(), 2360 base_url: "https://proxy.example.com/v1".to_string(), 2361 model: "proxy-model".to_string(), 2362 api_key: Some("sk-proxy".to_string()), 2363 wire_api: Some("responses".to_string()), 2364 requires_openai_auth: Some(true), 2365}) 2366.expect("switch to proxy");
7 more
- 9 lines in 3 placesrust80 tokens
- 8 lines in 3 placesrust74 tokens
- 14 lines in 2 placesrust142 tokens
- 14 lines in 2 placesrust139 tokens
- 21 lines in 2 placesrust128 tokens
- 17 lines in 2 placesrust126 tokens
- 7 lines in 3 placesrust61 tokens
Largest clones over all files, tests and data included
- 806 lines in 2 placesmarkupdocs and examples7,495 tokens
1<!DOCTYPE html> 2 3<html class="dark" lang="zh-CN"> <!-- 默认开启深色模式 --> 4<head> 5<meta charset="utf-8"/> 6<meta content="width=device-width, initial-scale=1.0" name="viewport"/> 7<title>Codex-X 逆向 Skills 导航 | 破甲指南</title> 8<script src="https://cdn.tailwindcss.com"></script> 9<script src="https://unpkg.com/lucide@latest"></script> 10<!-- 配置 Tailwind 以支持基于 class 的暗黑模式 -->First 10 of 806 lines.
- 11 lines in 5 placesrust82 tokensapps/desktop/src-tauri/src/tests.rs:1922–1932apps/desktop/src-tauri/src/tests.rs:1980–1990apps/desktop/src-tauri/src/tests.rs:2354–2364apps/desktop/src-tauri/src/tests.rs:2676–2686apps/desktop/src-tauri/src/tests.rs:2952–2962
1922assert!(!snapshot_path.exists()); 1923 1924switch_provider_inner(ProviderInput { 1925 config_dir: Some(codex_dir.display().to_string()), 1926 provider_id: Some("proxy".to_string()), 1927 provider_name: "Proxy".to_string(), 1928 base_url: "https://proxy.example.com/v1".to_string(), 1929 model: "proxy-model".to_string(), 1930 api_key: Some("sk-proxy".to_string()), 1931 wire_api: Some("responses".to_string()),First 10 of 11 lines.
- 7 lines in 6 placescssstyles52 tokensapps/desktop/src/styles/dark-theme.css:305–311apps/desktop/src/styles/dark-theme.css:327–333apps/desktop/src/styles/dark-theme.css:550–556apps/desktop/src/styles/dark-theme.css:902–908apps/desktop/src/styles/dark-theme.css:1071–1077and 1 more
305:root[data-theme="dark"] .cx-overview-status-card--success .cx-overview-status-icon { 306 color: var(--cx-dark-green); 307 background: var(--cx-dark-green-surface); 308 border-color: #4f7767; 309} 310 311:root[data-theme="dark"] .cx-overview-status-card--active .cx-overview-status-icon {327:root[data-theme="dark"] .cx-overview-instruction-pill--active { 328 color: var(--cx-dark-green); 329 background: var(--cx-dark-green-surface); 330 border-color: #4f7767; 331} 332 333:root[data-theme="dark"] .cx-overview-config-row { - 7 lines in 5 placescssstyles59 tokens
- 7 lines in 4 placesmarkupdocs and examples72 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| rust | 63 | 52,044 | 152 | 1,532 | 2.94% |
| tsx | 25 | 9,587 | 5 | 31 | 0.32% |
| typescript | 18 | 1,681 | 1 | 6 | 0.36% |
| bash | 10 | 725 | 0 | 0 | 0% |
| javascript | 3 | 685 | 0 | 0 | 0% |
| python | 2 | 458 | 0 | 0 | 0% |
| perl | 1 | 174 | 0 | 0 | 0% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| rust | 63 | 52,044 | 152 | 1,532 | 2.94% |
| css | 16 | 8,069 | 18 | 122 | 1.51% |
| markup | 3 | 1,629 | 6 | 851 | 52.24% |
| tsx | 25 | 9,587 | 5 | 31 | 0.32% |
| javascript | 16 | 3,177 | 3 | 31 | 0.98% |
| markdown | 20 | 3,573 | 2 | 30 | 0.84% |
| typescript | 18 | 1,681 | 1 | 6 | 0.36% |
| text | 3 | 21 | 1 | 6 | 28.57% |
| bash | 10 | 725 | 0 | 0 | 0% |
| python | 3 | 594 | 0 | 0 | 0% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Sep 22, 2026 | #10 | 3,747 (+50) | 184 | 82,004 | 188 | 3.18% | 2.4% | D 54.2 | fb9048f |
| Sep 20, 2026 | #12 | 3,458 (+32) | 184 | 82,004 | 188 | 3.18% | 2.4% | C 57.4 | fb9048f |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.