From 7be8b00b05c1202625815cc1adf21b000458ec97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Kr=C3=BCger?= Date: Tue, 11 Nov 2025 15:03:50 +0100 Subject: [PATCH] Phase 6: Testing & Validation - Additional Fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed remaining references found during testing: Rust source code fixes: - Updated CLI bin_name and override_usage: codex → llmx - Updated test examples in wsl_paths.rs - Updated GitHub URLs: github.com/openai/codex → github.com/valknar/llmx - Updated directory references: ~/.codex/ → ~/.llmx/ - Updated documentation link: "Codex docs" → "LLMX docs" - Updated feedback URL to point to valknar/llmx repository Configuration files: - Regenerated llmx-cli/package-lock.json with updated package name - Updated pnpm-lock.yaml Test results: - TypeScript SDK build: ✓ Success - TypeScript lint: ✓ Pass - Rust tests: 12/13 passed (1 locale-specific test failure unrelated to rename) - Rust release build: In progress Files changed: 22 files (49 insertions, 46 deletions) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- llmx-cli/package-lock.json | 11 ++++++----- llmx-rs/arg0/src/lib.rs | 4 ++-- llmx-rs/cli/src/main.rs | 10 +++++----- llmx-rs/cli/src/mcp_cmd.rs | 4 ++-- llmx-rs/cli/src/wsl_paths.rs | 12 ++++++------ llmx-rs/common/src/config_override.rs | 2 +- llmx-rs/core/src/config/mod.rs | 12 ++++++------ llmx-rs/core/src/config/types.rs | 2 +- llmx-rs/core/src/default_client.rs | 2 +- llmx-rs/core/src/llmx.rs | 2 +- llmx-rs/core/src/message_history.rs | 4 ++-- llmx-rs/core/src/model_provider_info.rs | 2 +- llmx-rs/core/src/rollout/list.rs | 2 +- llmx-rs/core/src/rollout/recorder.rs | 6 +++--- llmx-rs/core/src/tools/context.rs | 2 +- llmx-rs/core/tests/suite/deprecation_notice.rs | 2 +- llmx-rs/tui/src/bottom_pane/feedback_view.rs | 2 +- llmx-rs/tui/src/clipboard_paste.rs | 2 +- llmx-rs/tui/src/history_cell.rs | 6 +++--- llmx-rs/tui/src/onboarding/auth.rs | 2 +- llmx-rs/tui/src/update_prompt.rs | 2 +- pnpm-lock.yaml | 2 ++ 22 files changed, 49 insertions(+), 46 deletions(-) diff --git a/llmx-cli/package-lock.json b/llmx-cli/package-lock.json index 58ee8463..186ff536 100644 --- a/llmx-cli/package-lock.json +++ b/llmx-cli/package-lock.json @@ -1,14 +1,15 @@ { - "name": "@openai/codex", - "version": "0.0.0-dev", + "name": "@llmx/llmx", + "version": "0.1.0", "lockfileVersion": 3, + "requires": true, "packages": { "": { - "name": "@openai/codex", - "version": "0.0.0-dev", + "name": "@llmx/llmx", + "version": "0.1.0", "license": "Apache-2.0", "bin": { - "codex": "bin/codex.js" + "llmx": "bin/llmx.js" }, "engines": { "node": ">=16" diff --git a/llmx-rs/arg0/src/lib.rs b/llmx-rs/arg0/src/lib.rs index bf5a8694..a5dbc269 100644 --- a/llmx-rs/arg0/src/lib.rs +++ b/llmx-rs/arg0/src/lib.rs @@ -72,7 +72,7 @@ pub fn arg0_dispatch() -> Option { /// `codex-linux-sandbox` we *directly* execute /// [`llmx_linux_sandbox::run_main`] (which never returns). Otherwise we: /// -/// 1. Load `.env` values from `~/.codex/.env` before creating any threads. +/// 1. Load `.env` values from `~/.llmx/.env` before creating any threads. /// 2. Construct a Tokio multi-thread runtime. /// 3. Derive the path to the current executable (so children can re-invoke the /// sandbox) when running on Linux. @@ -109,7 +109,7 @@ where const ILLEGAL_ENV_VAR_PREFIX: &str = "CODEX_"; -/// Load env vars from ~/.codex/.env. +/// Load env vars from ~/.llmx/.env. /// /// Security: Do not allow `.env` files to create or modify any variables /// with names starting with `CODEX_`. diff --git a/llmx-rs/cli/src/main.rs b/llmx-rs/cli/src/main.rs index 07fd0ec3..eef194fa 100644 --- a/llmx-rs/cli/src/main.rs +++ b/llmx-rs/cli/src/main.rs @@ -36,7 +36,7 @@ use llmx_core::config::Config; use llmx_core::config::ConfigOverrides; use llmx_core::features::is_known_feature_key; -/// Codex CLI +/// LLMX CLI /// /// If no subcommand is specified, options will be forwarded to the interactive CLI. #[derive(Debug, Parser)] @@ -46,10 +46,10 @@ use llmx_core::features::is_known_feature_key; // If a sub‑command is given, ignore requirements of the default args. subcommand_negates_reqs = true, // The executable is sometimes invoked via a platform‑specific name like - // `codex-x86_64-unknown-linux-musl`, but the help output should always use - // the generic `codex` command name that users run. - bin_name = "codex", - override_usage = "codex [OPTIONS] [PROMPT]\n codex [OPTIONS] [ARGS]" + // `llmx-x86_64-unknown-linux-musl`, but the help output should always use + // the generic `llmx` command name that users run. + bin_name = "llmx", + override_usage = "llmx [OPTIONS] [PROMPT]\n llmx [OPTIONS] [ARGS]" )] struct MultitoolCli { #[clap(flatten)] diff --git a/llmx-rs/cli/src/mcp_cmd.rs b/llmx-rs/cli/src/mcp_cmd.rs index 8bab51ed..0e2c01ae 100644 --- a/llmx-rs/cli/src/mcp_cmd.rs +++ b/llmx-rs/cli/src/mcp_cmd.rs @@ -27,7 +27,7 @@ use llmx_rmcp_client::supports_oauth_login; /// - `serve` — run the MCP server on stdio /// - `list` — list configured servers (with `--json`) /// - `get` — show a single server (with `--json`) -/// - `add` — add a server launcher entry to `~/.codex/config.toml` +/// - `add` — add a server launcher entry to `~/.llmx/config.toml` /// - `remove` — delete a server entry #[derive(Debug, clap::Parser)] pub struct McpCli { @@ -354,7 +354,7 @@ async fn run_login(config_overrides: &CliConfigOverrides, login_args: LoginArgs) if !config.features.enabled(Feature::RmcpClient) { bail!( - "OAuth login is only supported when [features].rmcp_client is true in config.toml. See https://github.com/openai/codex/blob/main/docs/config.md#feature-flags for details." + "OAuth login is only supported when [features].rmcp_client is true in config.toml. See https://github.com/valknar/llmx/blob/main/docs/config.md#feature-flags for details." ); } diff --git a/llmx-rs/cli/src/wsl_paths.rs b/llmx-rs/cli/src/wsl_paths.rs index 56ce8668..273c1d7d 100644 --- a/llmx-rs/cli/src/wsl_paths.rs +++ b/llmx-rs/cli/src/wsl_paths.rs @@ -2,7 +2,7 @@ use std::ffi::OsStr; /// WSL-specific path helpers used by the updater logic. /// -/// See https://github.com/openai/codex/issues/6086. +/// See https://github.com/valknar/llmx/issues/6086. pub fn is_wsl() -> bool { #[cfg(target_os = "linux")] { @@ -59,14 +59,14 @@ mod tests { #[test] fn win_to_wsl_basic() { assert_eq!( - win_path_to_wsl(r"C:\Temp\codex.zip").as_deref(), - Some("/mnt/c/Temp/codex.zip") + win_path_to_wsl(r"C:\Temp\llmx.zip").as_deref(), + Some("/mnt/c/Temp/llmx.zip") ); assert_eq!( - win_path_to_wsl("D:/Work/codex.tgz").as_deref(), - Some("/mnt/d/Work/codex.tgz") + win_path_to_wsl("D:/Work/llmx.tgz").as_deref(), + Some("/mnt/d/Work/llmx.tgz") ); - assert!(win_path_to_wsl("/home/user/codex").is_none()); + assert!(win_path_to_wsl("/home/user/llmx").is_none()); } #[test] diff --git a/llmx-rs/common/src/config_override.rs b/llmx-rs/common/src/config_override.rs index 597ec11c..6555555e 100644 --- a/llmx-rs/common/src/config_override.rs +++ b/llmx-rs/common/src/config_override.rs @@ -18,7 +18,7 @@ use toml::Value; #[derive(Parser, Debug, Default, Clone)] pub struct CliConfigOverrides { /// Override a configuration value that would otherwise be loaded from - /// `~/.codex/config.toml`. Use a dotted path (`foo.bar.baz`) to override + /// `~/.llmx/config.toml`. Use a dotted path (`foo.bar.baz`) to override /// nested values. The `value` portion is parsed as TOML. If it fails to /// parse as TOML, the raw string is used as a literal. /// diff --git a/llmx-rs/core/src/config/mod.rs b/llmx-rs/core/src/config/mod.rs index b153dd58..bc920c9f 100644 --- a/llmx-rs/core/src/config/mod.rs +++ b/llmx-rs/core/src/config/mod.rs @@ -142,7 +142,7 @@ pub struct Config { /// appends one extra argument containing a JSON payload describing the /// event. /// - /// Example `~/.codex/config.toml` snippet: + /// Example `~/.llmx/config.toml` snippet: /// /// ```toml /// notify = ["notify-send", "Codex"] @@ -178,7 +178,7 @@ pub struct Config { /// Preferred store for MCP OAuth credentials. /// keyring: Use an OS-specific keyring service. /// Credentials stored in the keyring will only be readable by Codex unless the user explicitly grants access via OS-level keyring access. - /// https://github.com/openai/codex/blob/main/codex-rs/rmcp-client/src/oauth.rs#L2 + /// https://github.com/valknar/llmx/blob/main/codex-rs/rmcp-client/src/oauth.rs#L2 /// file: CODEX_HOME/.credentials.json /// This file will be readable to Codex and other applications running as the same user. /// auto (default): keyring if available, otherwise file. @@ -197,7 +197,7 @@ pub struct Config { /// overridden by the `CODEX_HOME` environment variable). pub codex_home: PathBuf, - /// Settings that govern if and what will be written to `~/.codex/history.jsonl`. + /// Settings that govern if and what will be written to `~/.llmx/history.jsonl`. pub history: History, /// Optional URI-based file opener. If set, citations to files in the model @@ -504,7 +504,7 @@ fn apply_toml_override(root: &mut TomlValue, path: &str, value: TomlValue) { } } -/// Base config deserialized from ~/.codex/config.toml. +/// Base config deserialized from ~/.llmx/config.toml. #[derive(Deserialize, Debug, Clone, Default, PartialEq)] pub struct ConfigToml { /// Optional override of model selection. @@ -571,7 +571,7 @@ pub struct ConfigToml { /// Preferred backend for storing MCP OAuth credentials. /// keyring: Use an OS-specific keyring service. - /// https://github.com/openai/codex/blob/main/codex-rs/rmcp-client/src/oauth.rs#L2 + /// https://github.com/valknar/llmx/blob/main/codex-rs/rmcp-client/src/oauth.rs#L2 /// file: Use a file in the Codex home directory. /// auto (default): Use the OS-specific keyring service if available, otherwise use a file. #[serde(default)] @@ -594,7 +594,7 @@ pub struct ConfigToml { #[serde(default)] pub profiles: HashMap, - /// Settings that govern if and what will be written to `~/.codex/history.jsonl`. + /// Settings that govern if and what will be written to `~/.llmx/history.jsonl`. #[serde(default)] pub history: Option, diff --git a/llmx-rs/core/src/config/types.rs b/llmx-rs/core/src/config/types.rs index fcb6ae55..572db80c 100644 --- a/llmx-rs/core/src/config/types.rs +++ b/llmx-rs/core/src/config/types.rs @@ -250,7 +250,7 @@ impl UriBasedFileOpener { } } -/// Settings that govern if and what will be written to `~/.codex/history.jsonl`. +/// Settings that govern if and what will be written to `~/.llmx/history.jsonl`. #[derive(Deserialize, Debug, Clone, PartialEq, Default)] pub struct History { /// If true, history entries will not be written to disk. diff --git a/llmx-rs/core/src/default_client.rs b/llmx-rs/core/src/default_client.rs index 8e463546..68a9ee49 100644 --- a/llmx-rs/core/src/default_client.rs +++ b/llmx-rs/core/src/default_client.rs @@ -20,7 +20,7 @@ use std::sync::OnceLock; /// However, future users of this should use this with caution as a result. /// In addition, we want to be confident that this value is used for ALL clients and doing that requires a /// lot of wiring and it's easy to miss code paths by doing so. -/// See https://github.com/openai/codex/pull/3388/files for an example of what that would look like. +/// See https://github.com/valknar/llmx/pull/3388/files for an example of what that would look like. /// Finally, we want to make sure this is set for ALL mcp clients without needing to know a special env var /// or having to set data that they already specified in the mcp initialize request somewhere else. /// diff --git a/llmx-rs/core/src/llmx.rs b/llmx-rs/core/src/llmx.rs index dc045745..072c3c21 100644 --- a/llmx-rs/core/src/llmx.rs +++ b/llmx-rs/core/src/llmx.rs @@ -552,7 +552,7 @@ impl Session { None } else { Some(format!( - "Enable it with `--enable {canonical}` or `[features].{canonical}` in config.toml. See https://github.com/openai/codex/blob/main/docs/config.md#feature-flags for details." + "Enable it with `--enable {canonical}` or `[features].{canonical}` in config.toml. See https://github.com/valknar/llmx/blob/main/docs/config.md#feature-flags for details." )) }; post_session_configured_events.push(Event { diff --git a/llmx-rs/core/src/message_history.rs b/llmx-rs/core/src/message_history.rs index 6513dcbf..f5c614bc 100644 --- a/llmx-rs/core/src/message_history.rs +++ b/llmx-rs/core/src/message_history.rs @@ -1,6 +1,6 @@ //! Persistence layer for the global, append-only *message history* file. //! -//! The history is stored at `~/.codex/history.jsonl` with **one JSON object per +//! The history is stored at `~/.llmx/history.jsonl` with **one JSON object per //! line** so that it can be efficiently appended to and parsed with standard //! JSON-Lines tooling. Each record has the following schema: //! @@ -75,7 +75,7 @@ pub(crate) async fn append_entry( // TODO: check `text` for sensitive patterns - // Resolve `~/.codex/history.jsonl` and ensure the parent directory exists. + // Resolve `~/.llmx/history.jsonl` and ensure the parent directory exists. let path = history_filepath(config); if let Some(parent) = path.parent() { tokio::fs::create_dir_all(parent).await?; diff --git a/llmx-rs/core/src/model_provider_info.rs b/llmx-rs/core/src/model_provider_info.rs index 297a6c66..993091e9 100644 --- a/llmx-rs/core/src/model_provider_info.rs +++ b/llmx-rs/core/src/model_provider_info.rs @@ -2,7 +2,7 @@ //! //! Providers can be defined in two places: //! 1. Built-in defaults compiled into the binary so Codex works out-of-the-box. -//! 2. User-defined entries inside `~/.codex/config.toml` under the `model_providers` +//! 2. User-defined entries inside `~/.llmx/config.toml` under the `model_providers` //! key. These override or extend the defaults at runtime. use crate::CodexAuth; diff --git a/llmx-rs/core/src/rollout/list.rs b/llmx-rs/core/src/rollout/list.rs index 52af3ce8..cabc0a12 100644 --- a/llmx-rs/core/src/rollout/list.rs +++ b/llmx-rs/core/src/rollout/list.rs @@ -150,7 +150,7 @@ pub(crate) async fn get_conversation(path: &Path) -> io::Result { /// Load conversation file paths from disk using directory traversal. /// -/// Directory layout: `~/.codex/sessions/YYYY/MM/DD/rollout-YYYY-MM-DDThh-mm-ss-.jsonl` +/// Directory layout: `~/.llmx/sessions/YYYY/MM/DD/rollout-YYYY-MM-DDThh-mm-ss-.jsonl` /// Returned newest (latest) first. async fn traverse_directories_for_paths( root: PathBuf, diff --git a/llmx-rs/core/src/rollout/recorder.rs b/llmx-rs/core/src/rollout/recorder.rs index 80bcbb63..bd2098e6 100644 --- a/llmx-rs/core/src/rollout/recorder.rs +++ b/llmx-rs/core/src/rollout/recorder.rs @@ -40,8 +40,8 @@ use llmx_protocol::protocol::SessionSource; /// Rollouts are recorded as JSONL and can be inspected with tools such as: /// /// ```ignore -/// $ jq -C . ~/.codex/sessions/rollout-2025-05-07T17-24-21-5973b6c0-94b8-487b-a530-2aeb6098ae0e.jsonl -/// $ fx ~/.codex/sessions/rollout-2025-05-07T17-24-21-5973b6c0-94b8-487b-a530-2aeb6098ae0e.jsonl +/// $ jq -C . ~/.llmx/sessions/rollout-2025-05-07T17-24-21-5973b6c0-94b8-487b-a530-2aeb6098ae0e.jsonl +/// $ fx ~/.llmx/sessions/rollout-2025-05-07T17-24-21-5973b6c0-94b8-487b-a530-2aeb6098ae0e.jsonl /// ``` #[derive(Clone)] pub struct RolloutRecorder { @@ -312,7 +312,7 @@ fn create_log_file( config: &Config, conversation_id: ConversationId, ) -> std::io::Result { - // Resolve ~/.codex/sessions/YYYY/MM/DD and create it if missing. + // Resolve ~/.llmx/sessions/YYYY/MM/DD and create it if missing. let timestamp = OffsetDateTime::now_local() .map_err(|e| IoError::other(format!("failed to get local time: {e}")))?; let mut dir = config.codex_home.clone(); diff --git a/llmx-rs/core/src/tools/context.rs b/llmx-rs/core/src/tools/context.rs index 08d8bd1e..e2b0754f 100644 --- a/llmx-rs/core/src/tools/context.rs +++ b/llmx-rs/core/src/tools/context.rs @@ -256,7 +256,7 @@ pub(crate) struct ExecCommandContext { pub(crate) tool_name: String, pub(crate) otel_event_manager: OtelEventManager, // TODO(abhisek-oai): Find a better way to track this. - // https://github.com/openai/codex/pull/2471/files#r2470352242 + // https://github.com/valknar/llmx/pull/2471/files#r2470352242 pub(crate) is_user_shell_command: bool, } diff --git a/llmx-rs/core/tests/suite/deprecation_notice.rs b/llmx-rs/core/tests/suite/deprecation_notice.rs index d065220d..6002f226 100644 --- a/llmx-rs/core/tests/suite/deprecation_notice.rs +++ b/llmx-rs/core/tests/suite/deprecation_notice.rs @@ -42,7 +42,7 @@ async fn emits_deprecation_notice_for_legacy_feature_flag() -> anyhow::Result<() assert_eq!( details.as_deref(), Some( - "Enable it with `--enable unified_exec` or `[features].unified_exec` in config.toml. See https://github.com/openai/codex/blob/main/docs/config.md#feature-flags for details." + "Enable it with `--enable unified_exec` or `[features].unified_exec` in config.toml. See https://github.com/valknar/llmx/blob/main/docs/config.md#feature-flags for details." ), ); diff --git a/llmx-rs/tui/src/bottom_pane/feedback_view.rs b/llmx-rs/tui/src/bottom_pane/feedback_view.rs index 36642b5f..2caab67d 100644 --- a/llmx-rs/tui/src/bottom_pane/feedback_view.rs +++ b/llmx-rs/tui/src/bottom_pane/feedback_view.rs @@ -26,7 +26,7 @@ use super::popup_consts::standard_popup_hint_line; use super::textarea::TextArea; use super::textarea::TextAreaState; -const BASE_ISSUE_URL: &str = "https://github.com/openai/codex/issues/new?template=2-bug-report.yml"; +const BASE_ISSUE_URL: &str = "https://github.com/valknar/llmx/issues/new?template=2-bug-report.yml"; /// Minimal input overlay to collect an optional feedback note, then upload /// both logs and rollout with classification + metadata. diff --git a/llmx-rs/tui/src/clipboard_paste.rs b/llmx-rs/tui/src/clipboard_paste.rs index 4945eea3..0ffa1295 100644 --- a/llmx-rs/tui/src/clipboard_paste.rs +++ b/llmx-rs/tui/src/clipboard_paste.rs @@ -159,7 +159,7 @@ pub fn normalize_pasted_path(pasted: &str) -> Option { } // TODO: We'll improve the implementation/unit tests over time, as appropriate. - // Possibly use typed-path: https://github.com/openai/codex/pull/2567/commits/3cc92b78e0a1f94e857cf4674d3a9db918ed352e + // Possibly use typed-path: https://github.com/valknar/llmx/pull/2567/commits/3cc92b78e0a1f94e857cf4674d3a9db918ed352e // // Detect unquoted Windows paths and bypass POSIX shlex which // treats backslashes as escapes (e.g., C:\Users\Alice\file.png). diff --git a/llmx-rs/tui/src/history_cell.rs b/llmx-rs/tui/src/history_cell.rs index 5c5fccb2..c7a60d9f 100644 --- a/llmx-rs/tui/src/history_cell.rs +++ b/llmx-rs/tui/src/history_cell.rs @@ -306,7 +306,7 @@ impl HistoryCell for UpdateAvailableHistoryCell { } else { line![ "See ", - "https://github.com/openai/codex".cyan().underlined(), + "https://github.com/valknar/llmx".cyan().underlined(), " for installation options." ] }; @@ -321,7 +321,7 @@ impl HistoryCell for UpdateAvailableHistoryCell { update_instruction, "", "See full release notes:", - "https://github.com/openai/codex/releases/latest" + "https://github.com/valknar/llmx/releases/latest" .cyan() .underlined(), ]; @@ -1065,7 +1065,7 @@ pub(crate) fn empty_mcp_output() -> PlainHistoryCell { " • No MCP servers configured.".italic().into(), Line::from(vec![ " See the ".into(), - "\u{1b}]8;;https://github.com/openai/codex/blob/main/docs/config.md#mcp_servers\u{7}MCP docs\u{1b}]8;;\u{7}".underlined(), + "\u{1b}]8;;https://github.com/valknar/llmx/blob/main/docs/config.md#mcp_servers\u{7}MCP docs\u{1b}]8;;\u{7}".underlined(), " to configure them.".into(), ]) .style(Style::default().add_modifier(Modifier::DIM)), diff --git a/llmx-rs/tui/src/onboarding/auth.rs b/llmx-rs/tui/src/onboarding/auth.rs index fea65a5b..d119552d 100644 --- a/llmx-rs/tui/src/onboarding/auth.rs +++ b/llmx-rs/tui/src/onboarding/auth.rs @@ -291,7 +291,7 @@ impl AuthModeWidget { " Decide how much autonomy you want to grant Codex".into(), Line::from(vec![ " For more details see the ".into(), - "\u{1b}]8;;https://github.com/openai/codex\u{7}Codex docs\u{1b}]8;;\u{7}".underlined(), + "\u{1b}]8;;https://github.com/valknar/llmx\u{7}LLMX docs\u{1b}]8;;\u{7}".underlined(), ]) .dim(), "".into(), diff --git a/llmx-rs/tui/src/update_prompt.rs b/llmx-rs/tui/src/update_prompt.rs index 17035d02..2b255947 100644 --- a/llmx-rs/tui/src/update_prompt.rs +++ b/llmx-rs/tui/src/update_prompt.rs @@ -204,7 +204,7 @@ impl WidgetRef for &UpdatePromptScreen { column.push( Line::from(vec![ "Release notes: ".dim(), - "https://github.com/openai/codex/releases/latest" + "https://github.com/valknar/llmx/releases/latest" .dim() .underlined(), ]) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8d944a66..522ce7c2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,8 @@ importers: specifier: ^3.5.3 version: 3.5.3 + llmx-cli: {} + sdk/typescript: devDependencies: '@modelcontextprotocol/sdk':