fix(branding): replace upstream logos, fix release version logic

- Replace EVERY CODE / CODE logo PNGs with Hanzo H logo and HANZO DEV banner
- Fix release.yml version determination to use package.json as authoritative
  source instead of chasing highest npm version (was auto-bumping to 3.0.x)
- Rename "Dark - Codex" theme to "Dark - Hanzo" in TUI and theme picker
- Update warning messages from "Codex home" to "config home"
- Handle "hanzo" segment in model name formatting
- Remove "OpenAI Codex" from README highlights
This commit is contained in:
2026-02-12 13:55:17 -08:00
parent b958c48d5b
commit dc6ffa7ab4
6 changed files with 13 additions and 27 deletions
+3 -17
View File
@@ -177,13 +177,13 @@ jobs:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
- name: Determine next version (across all npm packages; ensure unique)
- name: Determine next version (package.json is authoritative)
id: version
working-directory: codex-cli
shell: bash
run: |
set -euo pipefail
CURRENT_VERSION=$(node -p "require('./package.json').version")
CANDIDATE=$(node -p "require('./package.json').version")
PKGS=(
"@hanzo/dev"
"@hanzo/dev-darwin-arm64"
@@ -192,21 +192,7 @@ jobs:
"@hanzo/dev-linux-arm64-musl"
"@hanzo/dev-win32-x64"
)
# Find the highest published version across all packages
MAX_PUBLISHED="0.0.0"
for p in "${PKGS[@]}"; do
v=$(npm view "$p" version 2>/dev/null || echo "0.0.0")
if [ "$(printf '%s\n%s\n' "$MAX_PUBLISHED" "$v" | sort -V | tail -n1)" != "$MAX_PUBLISHED" ]; then
MAX_PUBLISHED="$v"
fi
done
# Start with whichever is higher: CURRENT_VERSION or MAX_PUBLISHED
CANDIDATE=$(printf '%s\n%s\n' "$CURRENT_VERSION" "$MAX_PUBLISHED" | sort -V | tail -n1)
# If equal to MAX_PUBLISHED, bump patch once
if [ "$CANDIDATE" = "$MAX_PUBLISHED" ]; then
IFS='.' read -ra V <<< "$CANDIDATE"; CANDIDATE="${V[0]}.${V[1]}.$((${V[2]} + 1))"
fi
# Ensure candidate is globally unused; keep bumping until unique
# Use package.json version as-is; only bump patch if already published
while :; do
used=false
for p in "${PKGS[@]}"; do
+1 -1
View File
@@ -14,7 +14,7 @@
- **Browser integration** — CDP support, headless browsing, screenshots captured inline.
- **MCP support** — 260+ tools via Model Context Protocol. Extend with filesystem, databases, APIs, or custom servers.
- **Skills system** — Dynamic tool injection with live reload. Define custom skills in `.agents/skills/`.
- **Upstream sync** — Automated 30-minute polling merges OpenAI Codex improvements while preserving Hanzo features.
- **Upstream sync** — Automated 30-minute polling merges upstream improvements while preserving Hanzo features.
[Full changelog](CHANGELOG.md) | [Release notes](docs/release-notes/RELEASE_NOTES.md)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 19 KiB

@@ -192,7 +192,7 @@ impl ThemeSelectionView {
),
(
ThemeName::DarkCodex,
"Dark - Codex",
"Dark - Hanzo",
"Terminal-adaptive warm (amber)",
),
];
+8 -8
View File
@@ -7707,8 +7707,8 @@ impl ChatWidget<'_> {
/// Format model name with proper capitalization (e.g., "gpt-4" -> "GPT-4")
fn format_model_name(&self, model_name: &str) -> String {
fn format_segment(segment: &str) -> String {
if segment.eq_ignore_ascii_case("codex") {
return "Codex".to_string();
if segment.eq_ignore_ascii_case("codex") || segment.eq_ignore_ascii_case("hanzo") {
return segment.to_uppercase();
}
let mut chars = segment.chars();
@@ -24242,7 +24242,7 @@ Have we met every part of this goal and is there no further work to do?"#
"Dark - Paper Light Pro".to_string()
}
hanzo_core::config_types::ThemeName::DarkCode => "Dark - Code".to_string(),
hanzo_core::config_types::ThemeName::DarkCodex => "Dark - Codex".to_string(),
hanzo_core::config_types::ThemeName::DarkCodex => "Dark - Hanzo".to_string(),
hanzo_core::config_types::ThemeName::DarkMonochrome => "Dark - Monochrome".to_string(),
hanzo_core::config_types::ThemeName::Custom => {
let mut label =
@@ -24410,7 +24410,7 @@ Have we met every part of this goal and is there no further work to do?"#
tracing::info!("Persisted TUI spinner selection to config.toml");
}
} else {
tracing::warn!("Could not locate Codex home to persist spinner selection");
tracing::warn!("Could not locate config home to persist spinner selection");
}
// Confirmation message (replaceable system notice)
@@ -24676,7 +24676,7 @@ Have we met every part of this goal and is there no further work to do?"#
}
}
Err(e) => {
tracing::warn!("Could not locate Codex home to persist theme: {}", e);
tracing::warn!("Could not locate config home to persist theme: {}", e);
}
}
}
@@ -34210,7 +34210,7 @@ impl ChatWidget<'_> {
}
}
} else {
tracing::warn!("Could not locate Codex home to persist review auto resolve toggle");
tracing::warn!("Could not locate config home to persist review auto resolve toggle");
if enabled {
"Auto Resolve enabled for this session."
} else {
@@ -34251,7 +34251,7 @@ impl ChatWidget<'_> {
}
}
} else {
tracing::warn!("Could not locate Codex home to persist auto review toggle");
tracing::warn!("Could not locate config home to persist auto review toggle");
if enabled {
"Auto Review enabled for this session."
} else {
@@ -35072,7 +35072,7 @@ impl ChatWidget<'_> {
}
}
} else {
tracing::warn!("Could not locate Codex home to persist auto resolve attempts");
tracing::warn!("Could not locate config home to persist auto resolve attempts");
format!("Max re-reviews set to {} for this session.", limit.get())
};