87 Commits
Author SHA1 Message Date
zeekay 21c825e4ff cleanup: remove AI-slop summary / status / plan / report files
Reverts violations of the durable rule that current-state docs belong
in LLM.md and history belongs in git log. Removed files were session
handoffs, agent-style "complete success" / "1000%" reports, dated
audit dumps, and stub NOTES.
2026-06-07 13:34:06 -07:00
zeekay ae2f901ec0 merge: just-every/code upstream/main (preserve Hanzo brand)
# Conflicts:
#	.github/pull_request_template.md
#	.github/workflows/Dockerfile.bazel
#	.github/workflows/bazel.yml
#	.github/workflows/cargo-deny.yml
#	.github/workflows/ci.yml
#	.github/workflows/close-stale-contributor-prs.yml
#	.github/workflows/codespell.yml
#	.github/workflows/issue-deduplicator.yml
#	.github/workflows/issue-labeler.yml
#	.github/workflows/rust-ci-full.yml
#	.github/workflows/rust-ci.yml
#	.github/workflows/rust-release-prepare.yml
#	.github/workflows/rust-release-windows.yml
#	.github/workflows/rust-release-zsh.yml
#	.github/workflows/rust-release.yml
#	.github/workflows/sdk.yml
#	.vscode/extensions.json
#	.vscode/settings.json
#	AGENTS.md
#	AGENTS.md~upstream_main
#	NOTICE
#	code-rs/app-server-protocol/schema/json/DynamicToolCallParams.json
#	code-rs/app-server-protocol/schema/json/v2/ErrorNotification.json
#	code-rs/app-server-protocol/schema/json/v2/ItemCompletedNotification.json
#	code-rs/app-server-protocol/schema/json/v2/ItemStartedNotification.json
#	code-rs/app-server-protocol/schema/json/v2/ReviewStartResponse.json
#	code-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json
#	code-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json
#	code-rs/app-server-protocol/schema/json/v2/ThreadRollbackResponse.json
#	code-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json
#	code-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json
#	code-rs/app-server-protocol/schema/json/v2/TurnCompletedNotification.json
#	code-rs/app-server-protocol/schema/json/v2/TurnStartResponse.json
#	code-rs/app-server-protocol/schema/json/v2/TurnStartedNotification.json
#	code-rs/app-server-protocol/schema/typescript/CodexErrorInfo.ts
#	code-rs/app-server-protocol/schema/typescript/DynamicToolCallRequest.ts
#	code-rs/app-server-protocol/schema/typescript/TurnItem.ts
#	code-rs/app-server-protocol/schema/typescript/v2/CodexErrorInfo.ts
#	code-rs/app-server-protocol/schema/typescript/v2/DynamicToolCallParams.ts
#	code-rs/app-server-protocol/schema/typescript/v2/DynamicToolSpec.ts
#	code-rs/app-server-protocol/schema/typescript/v2/ThreadItem.ts
#	code-rs/app-server-protocol/schema/typescript/v2/ToolsV2.ts
#	code-rs/app-server-protocol/src/protocol/thread_history.rs
#	code-rs/code-version/Cargo.toml
#	code-rs/core/src/http_client.rs
#	code-rs/tui/src/bottom_pane/auto_drive_settings_view.rs
#	codex-cli/scripts/build_npm_package.py
#	docs/contributing.md
#	hanzo-dev/chatgpt/src/chatgpt_token.rs
#	hanzo-dev/tui/src/clipboard_copy.rs
#	scripts/codex_package/archive.py
#	scripts/codex_package/cargo.py
#	scripts/codex_package/cli.py
#	scripts/codex_package/layout.py
#	scripts/codex_package/test_cargo.py
#	scripts/codex_package/v8.py
#	scripts/stage_npm_packages.py
2026-06-01 18:52:56 -07:00
zeekay 6925a2f794 fix: revert release to hanzo-dev workspace + disable upgrade banner
codex-rs depends on v8 (via code-mode) which has no musl prebuilt,
breaking CI builds. Revert release workflow to hanzo-dev workspace
which doesn't have this dependency.

Also disable the ★ Upgrade Available ★ banner — updates are handled
via CI/CD releases, not in-TUI upgrade prompts.
2026-03-31 19:32:10 -07:00
zeekay 418706435a Merge remote-tracking branch 'just-every-local/main'
# Conflicts:
#	.github/workflows/bazel.yml
#	.github/workflows/cargo-deny.yml
#	.github/workflows/ci.yml
#	.github/workflows/cla.yml
#	.github/workflows/close-stale-contributor-prs.yml
#	.github/workflows/codespell.yml
#	.github/workflows/issue-deduplicator.yml
#	.github/workflows/issue-labeler.yml
#	.github/workflows/rust-ci-full.yml
#	.github/workflows/rust-ci.yml
#	.github/workflows/rust-release-prepare.yml
#	.github/workflows/rust-release-windows.yml
#	.github/workflows/rust-release.yml
#	.github/workflows/sdk.yml
#	AGENTS.md
#	codex-cli/package.json
#	codex-rs/core/src/tools/handlers/multi_agents.rs
#	docs/config.md
#	docs/prompts.md
#	docs/release-notes/RELEASE_NOTES.md
#	hanzo-dev/backend-client/src/client.rs
#	hanzo-dev/core/src/codex.rs
#	hanzo-dev/core/src/codex/streaming.rs
#	hanzo-dev/core/src/default_client.rs
#	hanzo-dev/core/src/http_client.rs
#	hanzo-dev/core/src/model_provider_info.rs
#	justfile
#	package.json
#	sdk/python/src/codex_app_server/generated/v2_all.py
#	sdk/typescript/README.md
#	sdk/typescript/src/exec.ts
#	sdk/typescript/tests/run.test.ts
#	sdk/typescript/tests/runStreamed.test.ts
2026-03-30 21:28:11 -07:00
zeekay 1324ddfe32 fix: post-merge fixes + native HanzoId login support
Post-merge fixes after upstream 319-commit merge (tui consolidation,
core extraction):

- Fix from_api_key_with_client → from_api_key (login crate)
- Restore explicit_env_overrides parameter in shell snapshot wrapper
- Fix multi_agents → collab module rename in TUI chatwidget
- Update all snapshot tests for branding changes

Add native HanzoId login as first-class sign-in option alongside
ChatGPT and API key:

- Add HanzoId variant to SignInOption, LoginAccountParams, LoginAccountResponse
- HanzoId is the default highlighted option in onboarding
- Route HanzoId login through hanzo.id OAuth (browser flow)
- Update IAM client ID from hanzo-app to hanzo-dev (<org>-<app> convention)
- Brand all login error pages as "Hanzo Dev"
2026-03-29 15:04:37 -07:00
zeekay 56abc532f1 fix: replace silent native-tls fallbacks with expect()
Review finding: unwrap_or_else(|_| reqwest::Client::new()) silently
reverts to native-tls if rustls builder fails, defeating the TLS fix.
Replace with expect() since rustls builder should never fail in
practice. Also includes linter cleanups.
2026-03-21 01:16:50 -07:00
zeekay 4e0eda644f fix: comprehensive branding cleanup, TUI warnings, CI modernization
Branding (39 files):
- Remove all remaining "Codex" product references in user-facing strings
- "Codex Cloud" → "Hanzo Cloud" in TUI, MCP server, cloud-tasks
- "codex login/cloud" → "hanzo login/cloud" in CLI, error messages
- "Dark - Codex" theme → "Dark - Hanzo"
- MCP tool descriptions: "Codex conversation" → "Hanzo Dev conversation"

TUI warnings (10 files):
- Remove unused imports, unreachable match arms
- Add #[allow(dead_code)] for brand assets and future-use utilities
- hanzo-tui now compiles with zero warnings

CI modernization (6 workflows):
- actions/checkout v4 → v6 (Node.js 24)
- actions/setup-node v4 → v6
- actions/upload-artifact v4 → v7
- actions/download-artifact v4 → v7
- softprops/action-gh-release v1 → v2
- Node.js 20 → 22 in workflow runners
2026-03-21 01:09:50 -07:00
zeekay b9ad991340 fix: extend assistant message background to full terminal width
The assistant bg tint was only painted within the content area (minus
padding), leaving 1-column gaps on the left and right edges. Now paints
the tint across the full history_area width so assistant messages have
edge-to-edge background color.
2026-03-18 02:28:31 -07:00
zeekay 779853542c fix: strip <think> tags from zen model output + boost assistant bg contrast
Zen models (qwen3-based) emit <think>...</think> blocks inline in the
answer stream. These were rendered as raw text in both the TUI and CLI.

Added ThinkTagFilter that handles streaming deltas where tags can span
multiple chunks. Applied to both:
- TUI streaming controller (push_and_maybe_commit + apply_final_answer)
- CLI event processor (AgentMessageDelta + AgentMessage)

Also increased assistant message background tint from 5% to 12% — the
original value was nearly invisible on dark/black terminals (resulted in
RGB ~(6,10,13) which looked identical to pure black).
2026-03-18 01:59:53 -07:00
zeekay eef31451ad fix: force rustls TLS backend on all reqwest clients
When both rustls-tls and native-tls features are compiled in (via
chromiumoxide → reqwest default features), reqwest silently defaults to
native-tls. On macOS this is SecureTransport, which fails TLS handshake
against Go crypto/tls servers (Traefik ingress) with "bad protocol
version".

Fix: explicitly call .use_rustls_tls() on every reqwest::Client::builder()
to ensure consistent TLS behavior across all platforms.

Also reverts the earlier native-tls experiment in Cargo.toml files back
to rustls-tls and removes temporary TLS diagnostic logging.
2026-03-17 12:17:25 -07:00
zeekay ec7c2b0ed7 Merge upstream openai/codex (152ac6d01): tui_app_server, realtime v2, plugin marketplace
Major upstream additions:
- New tui_app_server crate (complete TUI via app-server protocol)
- Realtime websocket v2 split (methods_v1/v2/common)
- Remote app-server client
- Plugin marketplace install/uninstall
- Windows sandbox refactor (conpty, elevated runners, IPC)
- Linux sandbox bwrap improvements
- Guardian approval system enhancements
- Argument comment lint improvements

Conflict resolution:
- Kept Hanzo branding in error.rs (401/403 messages)
- Kept hanzo-dev paths in CI/release workflows
- Adopted upstream's /*param_name*/ argument comments
- Adopted upstream's change-detection CI structure
- Kept dev-deduplicate label naming
2026-03-17 01:14:04 -07:00
zeekay 27d28e1551 fix(tui): anchor input box to bottom in zen mode
When footer_height is 0 (zen mode), the input area was stretching
to fill all available height. Now it uses input_height and anchors
to the bottom of the available area, giving a compact input bar.
2026-03-15 14:39:18 -07:00
zeekay 15c65df18c fix(tui): use input_background for textarea rendering
The textarea was painting its rows with the main background() color
instead of input_background(), causing the input area to show as
pure black instead of the subtle gray set by the Block. This broke
the contiguous background appearance of the input area.
2026-03-15 14:09:27 -07:00
zeekay 3c23177223 feat: multi-provider login (Hanzo ID, ChatGPT, Claude) + auth error handling
Login screen now offers 5 options:
1. Sign in with Hanzo ID (default, via hanzo.id OAuth)
2. Sign in with ChatGPT (OpenAI OAuth)
3. Sign in with Claude (keychain auto-detect + claude.ai OAuth fallback)
4. Provide your own API key
5. Sign in with Device Code (headless)

CLI: `hanzo login --provider hanzo|openai|claude`

Auth error handling:
- 401/403 responses are no longer retryable (stops "Reconnecting..." loop)
- Clear error message: "Authentication failed (401). Run `hanzo login` to sign in."
- Maps to CodexErrorInfo::Unauthorized for frontend handling

Fixes:
- Remove duplicate test functions from merge (chatwidget/tests.rs)
- Fix SessionTelemetry::new() calls missing originator parameter (otel tests)
2026-03-14 00:47:42 -07:00
zeekay e60ff6752d feat: Claude Code login support, zen theme refinements, security dep updates
- Add Claude Code OAuth login (issuer: claude.ai, token: platform.claude.com)
- Auto-detect Claude Code keychain tokens on macOS (sk-ant-oat01-* fallback)
- Claude client_id: 9d1c250a-e61b-44d9-88ed-5944d1962f5e
- Scopes: user:inference, user:profile, user:sessions:claude_code, user:mcp_servers
- Add CLI functions: run_login_with_claude_keychain, run_login_with_claude_browser
- ServerOptions.with_issuer() builder for custom OAuth issuers
- Fix quinn-proto HIGH severity DoS (RUSTSEC-2026-0037): 0.11.13 → 0.11.14
- Update 159 packages to latest compatible versions
- Zen theme: refine DarkMonochrome defaults, zen mode enabled by default
2026-03-13 17:16:16 -07:00
zeekay 51aea6411e feat: multi-provider auth (Hanzo, Claude, ChatGPT) + rebrand TUI to Hanzo Dev
Auth changes:
- HANZO_API_KEY has highest priority, then CODEX_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY
- Default OAuth issuer changed to hanzo.id (Casdoor)
- Skip API key exchange for non-OpenAI issuers (Casdoor uses access_token directly)
- RefreshRequest includes client_secret for Casdoor compat
- id_token_or_access() fallback for Casdoor token refresh
- Login status detects provider from key prefix (sk-hanzo-, sk-ant-, sk-)
- Hanzo client credentials (app-hanzo) for OAuth flow

Branding:
- Welcome screen: "Hanzo Dev — AI development in the terminal"
- All user-facing "Codex" → "Hanzo Dev"
- Update URLs point to github.com/hanzoai/dev
- npm package: @hanzo/dev
- Windows toast: "Hanzo Dev"
2026-03-13 02:50:33 -07:00
zeekay b79ca332e8 fix: add version to all path-only workspace deps for crates.io
Per-crate Cargo.toml files had path-only deps that get stripped
during publish. Added version = "0.6.74" to all workspace deps.
2026-03-09 19:09:47 -07:00
zeekay f5e97dea34 chore: add crates.io metadata to all workspace crates
Add description, license, and repository fields required for
publishing to crates.io.
2026-03-09 18:30:51 -07:00
zeekay 3a22216b47 fix: resolve all compile errors after upstream merge
- Remove McpServerTransportConfig::Zap (variant removed upstream)
- Fix ratatui 0.29 Color type conversions (ratatui::Color vs crossterm::Color)
- Fix Cell<u16> scroll_offset API in layout_scroll.rs
- Add missing modules (intro_art_variants, request_user_input_view, external_editor)
- Fix zen field type (bool → Option<ZenThemeConfig>)
- Add GutterMode::next() method
- Remove deleted SlashCommand::Rename, add Provider/Share stubs
- Fix schedule_cli_prompt signature (3 args, store overrides on controller)
- Fix ModelInfoUpgrade field access and default_reasoning_level Option handling
- Align cloud-tasks deps with workspace (ratatui 0.29, throbber-widgets-tui 0.8)
- Add missing auth constants and version functions
- Replace wire_api with dynamic_tools in ConfigOverrides
- Add end_turn/phase fields to ResponseItem::Message
- Fix format_with_separators to accept i64
2026-03-09 17:49:47 -07:00
zeekay 3247e56e84 Merge remote-tracking branch 'just-every-local/main'
# Conflicts:
#	.github/workflows/Dockerfile.bazel
#	.github/workflows/bazel.yml
#	.github/workflows/ci.yml
#	.github/workflows/issue-deduplicator.yml
#	.github/workflows/rust-ci.yml
#	.github/workflows/rust-release-windows.yml
#	.github/workflows/rust-release.yml
#	.github/workflows/shell-tool-mcp.yml
#	.vscode/settings.json
#	AGENTS.md
#	CHANGELOG.md
#	README.md
#	code-rs/app-server-protocol/schema/json/ClientRequest.json
#	code-rs/app-server-protocol/schema/json/CommandExecutionRequestApprovalParams.json
#	code-rs/app-server-protocol/schema/json/EventMsg.json
#	code-rs/app-server-protocol/schema/json/ExecCommandApprovalParams.json
#	code-rs/app-server-protocol/schema/json/ServerNotification.json
#	code-rs/app-server-protocol/schema/json/ServerRequest.json
#	code-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json
#	code-rs/app-server-protocol/schema/json/v1/ForkConversationParams.json
#	code-rs/app-server-protocol/schema/json/v1/ForkConversationResponse.json
#	code-rs/app-server-protocol/schema/json/v1/GetUserSavedConfigResponse.json
#	code-rs/app-server-protocol/schema/json/v1/NewConversationParams.json
#	code-rs/app-server-protocol/schema/json/v1/ResumeConversationParams.json
#	code-rs/app-server-protocol/schema/json/v1/ResumeConversationResponse.json
#	code-rs/app-server-protocol/schema/json/v1/SendUserTurnParams.json
#	code-rs/app-server-protocol/schema/json/v1/SessionConfiguredNotification.json
#	code-rs/app-server-protocol/schema/json/v2/ConfigReadResponse.json
#	code-rs/app-server-protocol/schema/json/v2/ConfigRequirementsReadResponse.json
#	code-rs/app-server-protocol/schema/json/v2/ModelListResponse.json
#	code-rs/app-server-protocol/schema/json/v2/RawResponseItemCompletedNotification.json
#	code-rs/app-server-protocol/schema/json/v2/ThreadForkParams.json
#	code-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json
#	code-rs/app-server-protocol/schema/json/v2/ThreadResumeParams.json
#	code-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json
#	code-rs/app-server-protocol/schema/json/v2/ThreadStartParams.json
#	code-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json
#	code-rs/app-server-protocol/schema/json/v2/TurnStartParams.json
#	code-rs/app-server-protocol/schema/typescript/AskForApproval.ts
#	code-rs/app-server-protocol/schema/typescript/ClientRequest.ts
#	code-rs/app-server-protocol/schema/typescript/EventMsg.ts
#	code-rs/app-server-protocol/schema/typescript/ExecApprovalRequestEvent.ts
#	code-rs/app-server-protocol/schema/typescript/ExecCommandApprovalParams.ts
#	code-rs/app-server-protocol/schema/typescript/FunctionCallOutputContentItem.ts
#	code-rs/app-server-protocol/schema/typescript/ResponseItem.ts
#	code-rs/app-server-protocol/schema/typescript/index.ts
#	code-rs/app-server-protocol/schema/typescript/v2/AskForApproval.ts
#	code-rs/app-server-protocol/schema/typescript/v2/CommandExecutionRequestApprovalParams.ts
#	code-rs/app-server-protocol/schema/typescript/v2/Model.ts
#	code-rs/app-server-protocol/schema/typescript/v2/index.ts
#	code-rs/app-server-protocol/src/protocol/common.rs
#	code-rs/app-server-protocol/src/protocol/v1.rs
#	code-rs/app-server-protocol/src/protocol/v2.rs
#	code-rs/app-server/src/code_message_processor.rs
#	code-rs/app-server/src/lib.rs
#	code-rs/app-server/src/message_processor.rs
#	code-rs/protocol/src/approvals.rs
#	code-rs/protocol/src/config_types.rs
#	code-rs/protocol/src/models.rs
#	code-rs/protocol/src/openai_models.rs
#	code-rs/protocol/src/prompts/permissions/approval_policy/on_request_rule.md
#	code-rs/protocol/src/protocol.rs
#	code-rs/tui/tests/snapshots/vt100_chatwidget_snapshot__settings_help_overlay_open.snap
#	code-rs/tui/tests/snapshots/vt100_chatwidget_snapshot__settings_help_overlay_section_open.snap
#	codex-cli/package.json
#	docs/agents.md
#	docs/config.md
#	docs/faq.md
#	docs/install.md
#	docs/release-notes/RELEASE_NOTES.md
#	docs/slash-commands.md
#	hanzo-dev/Cargo.lock
#	hanzo-dev/code-auto-drive-core/src/auto_compact.rs
#	hanzo-dev/code-auto-drive-core/src/auto_drive_history.rs
#	hanzo-dev/core/src/agent_tool.rs
#	hanzo-dev/core/src/chat_completions.rs
#	hanzo-dev/core/src/client.rs
#	hanzo-dev/core/src/client_common.rs
#	hanzo-dev/core/src/codex.rs
#	hanzo-dev/core/src/codex/compact.rs
#	hanzo-dev/core/src/codex/compact_remote.rs
#	hanzo-dev/core/src/codex/session.rs
#	hanzo-dev/core/src/codex/streaming.rs
#	hanzo-dev/core/src/config.rs
#	hanzo-dev/core/src/config/sources.rs
#	hanzo-dev/core/src/config/validation.rs
#	hanzo-dev/core/src/config_profile.rs
#	hanzo-dev/core/src/config_types.rs
#	hanzo-dev/core/src/event_mapping.rs
#	hanzo-dev/core/src/exec_command/exec_command_params.rs
#	hanzo-dev/core/src/external_agent_config.rs
#	hanzo-dev/core/src/memories/citations.rs
#	hanzo-dev/core/src/memories/mod.rs
#	hanzo-dev/core/src/memories/storage.rs
#	hanzo-dev/core/src/model_family.rs
#	hanzo-dev/core/src/openai_tools.rs
#	hanzo-dev/core/src/protocol.rs
#	hanzo-dev/core/src/remote_models/mod.rs
#	hanzo-dev/core/src/rollout/policy.rs
#	hanzo-dev/core/src/slash_commands.rs
#	hanzo-dev/exec/src/lib.rs
#	hanzo-dev/protocol/src/mcp_protocol.rs
#	hanzo-dev/tui/Cargo.toml
#	hanzo-dev/tui/src/app/events.rs
#	hanzo-dev/tui/src/app_event.rs
#	hanzo-dev/tui/src/bottom_pane/chat_composer.rs
#	hanzo-dev/tui/src/bottom_pane/memories_settings_view.rs
#	hanzo-dev/tui/src/bottom_pane/mod.rs
#	hanzo-dev/tui/src/bottom_pane/model_selection_view.rs
#	hanzo-dev/tui/src/bottom_pane/settings_overlay.rs
#	hanzo-dev/tui/src/chatwidget.rs
#	hanzo-dev/tui/src/chatwidget/agent_summary.rs
#	hanzo-dev/tui/src/chatwidget/settings_overlay.rs
#	hanzo-dev/tui/src/history_cell/plain.rs
#	hanzo-dev/tui/src/lib.rs
#	hanzo-dev/tui/src/memory_citation.rs
#	hanzo-dev/tui/src/streaming/controller.rs
#	hanzo-dev/tui/tests/snapshots/vt100_chatwidget_snapshot__settings_help_overlay_closed.snap
#	hanzo-dev/tui/tests/snapshots/vt100_chatwidget_snapshot__settings_help_overlay_section_closed.snap
#	hanzo-dev/tui/tests/snapshots/vt100_chatwidget_snapshot__settings_overlay_overview_layout.snap
#	hanzo-dev/tui/tests/snapshots/vt100_chatwidget_snapshot__settings_overlay_overview_truncates.snap
#	hanzo-dev/tui/tests/snapshots/vt100_chatwidget_snapshot__settings_overview_hints_clean.snap
#	hanzo-dev/tui/tests/ui_smoke.rs
2026-03-09 12:02:13 -07:00
zeekay 1f9149381d feat(zap): implement native ZAP binary transport in dev CLI
Real luxfi/zap wire protocol — no HTTP fallback, no stubs.
TLS 1.3 connect → ZAP handshake → MsgType 100 Call → parse response.

- zap_wire.rs: Builder, Message, Object, frame I/O, handshake helpers
- zap_client.rs: ZapCloudClient with TLS, Call RPC, stream_zap()
- client.rs: WireApi::Zap arm uses native binary transport
- model_provider_info.rs: WireApi::Zap variant added
- zap/transport: TLS 1.3 support via rustls
- All match arms updated across CLI, TUI, exec, MCP server
2026-03-03 23:25:04 -08:00
zeekay af234bc908 chore(release): 0.6.72 2026-02-16 12:39:34 -08:00
zeekay 18b2b56c2a chore(core): refine zen model wording and cleanup comments 2026-02-16 12:18:38 -08:00
zeekay b285fbce1e feat(core): add zen model presets and zap native tool bridging 2026-02-15 12:28:08 -08:00
zeekay d3be6f6871 feat(tui/auth): polish account flows and refresh zap integration 2026-02-14 12:33:54 -08:00
zeekay 2ca54aea60 fix(tui): update settings overlay snapshots for Chrome→Browser rename 2026-02-13 13:42:31 -08:00
zeekay 317c1d5c67 feat(tui): remove OpenAI migration prompts, rebrand browser UI, bump 0.6.67
- Disable OpenAI model upgrade prompts (GPT-5.2/5.3 migration banners)
  Users choose their own model via /model or config.toml
- Make migration prompt UI monochromatic (no blue/green accents)
- Rebrand /chrome and /browser: remove Chrome-specific strings,
  settings section now shows "Browser" instead of "Chrome"
- Add Enso browser recommendation to README
- Bump version to 0.6.67
2026-02-13 13:13:37 -08:00
zeekay 1bb486aa6f fix(tui): restore title-case for Codex model names, fix test
The format_segment function should return "Codex"/"Hanzo" (title case)
not uppercase, matching the existing test expectation.
2026-02-12 19:09:23 -08:00
zeekay 5a65a92086 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
2026-02-12 13:55:17 -08:00
zeekay a6949a37e9 fix(tui): update empty_chat snapshot for v0.6.66 version string 2026-02-12 13:08:35 -08:00
zeekay 11f5d73b77 fix(tui): dim error text and treat bare 429 as transient
Error cells now render in text_dim instead of the error() color so they
don't compete visually with user text for attention.

A bare 429 error (without retry-limit keywords) was incorrectly treated
as fatal, killing the session instead of letting the core retry loop
handle it. Now any 429 is classified as transient unless retries are
explicitly exhausted.
2026-02-11 21:31:58 -08:00
zeekay 5bc8aca27f fix(tui): update resume_replay tests for zen-mode bullet suppression
Replace bullet-prefix counting (assistant_cell_count) with content-based
assertions since zen mode no longer renders the "• " gutter prefix.
2026-02-11 18:24:09 -08:00
zeekay 68a7d8e38d fix(tui): update mid-turn styling tests for zen-mode bullet suppression
Zen mode suppresses the " • " bullet gutter on all assistant messages.
Update assertions to verify content rendering without requiring the gutter prefix.
2026-02-11 17:55:26 -08:00
zeekay 84e4a5d89d fix(tui): update VT100 snapshots for zen-mode theme changes
Accept 32 refreshed VT100 snapshots after zen-mode border, padding,
and theme-driven layout changes. Includes upstream merge artifacts
(workflows, codex-cli scripts, docs, MCP connection manager).

All 39 snapshot tests now pass locally.
2026-02-11 14:35:50 -08:00
zeekay 3cf4dd5a4b fix(tui): fix 429 retry detection after message rewrite, brighten user text
The 429+retry-limit handler rewrote the error message to a
human-friendly string but then re-checked the rewritten text for
"retry limit" keywords, causing retries_exhausted to be false and the
app to get stuck showing the error without properly recovering. Now
track exhaustion state before the rewrite.

User messages now render in text_bright() so they visually stand out
from assistant text (text_dim) and status text (text_dim), giving
clear human / robot / status differentiation.
2026-02-10 22:12:41 -08:00
zeekay 2459c9d131 fix(tui): zen-guard remaining hardcoded borders, remove cursor overlay
Replace last 3 hardcoded Borders::ALL with zen_borders() in Chrome
settings dialog, help text box, and auto-drive composer input.
Remove painted cursor overlay (contrast_ratio/relative_luminance) —
the terminal's native cursor is sufficient.
2026-02-10 22:05:18 -08:00
zeekay 963600c21f fix(tui): remove hardcoded border offsets from composer height/width calcs
Three locations in chat_composer.rs always subtracted border+padding from
width and added +2 height for borders, even when zen mode has no borders.
This caused:
- Overestimated composer height (extra grey space below text)
- Cursor off-by-one from width mismatch between render and cursor_pos

Now all three (desired_height, cursor_pos, render_ref) conditionally skip
the offsets when show_borders() is false.
2026-02-10 21:54:01 -08:00
zeekay cf95ff4c17 fix(tui): use theme-driven padding for composer width and bottom pane
Content width calculation now uses show_borders() instead of hardcoded
4-char border+padding offset, and bottom pane horizontal padding uses
content_padding() so both respect zen mode's flush-left layout.
2026-02-10 21:48:42 -08:00
zeekay 4bb5148389 fix(tui): remove hardcoded composer padding in zen mode
The bottom pane's compute_composer_rect() and render method both
had horizontal_padding hardcoded to 1, causing a 1-column left
inset on the input area even when zen mode was active. Use
theme::content_padding() (0 in zen) instead.
2026-02-10 21:39:25 -08:00
zeekay 5858d96656 refactor(tui): migrate is_zen_mode() to theme engine accessors
Replace 71 scattered is_zen_mode() calls with data-driven theme
accessors: show_borders(), show_gutter(), gutter_width(),
content_padding(), zen_borders(), zen_left_borders().

Layout decisions now flow through the Theme struct properties
(show_borders, show_gutter, content_padding) set by apply_zen(),
so each dimension is independently configurable.

Also persists zen preference to config.toml on Alt+G toggle.
2026-02-10 21:33:38 -08:00
zeekay a4e86143d8 fix(tui): hide spinner frames in zen mode for exec overlay and auto view
Spinner animation characters were rendering in the exec overlay header
and auto coordinator approval view even when zen mode was active. Wrap
both render paths with is_zen_mode() checks so they show nothing in zen.
2026-02-10 21:14:00 -08:00
zeekay f45d7c0de3 feat(tui): theme-driven layout, flush-left zen, better 429 retries
- Add show_borders, show_gutter, content_padding to Theme struct
- Theme.apply_zen() sets layout properties; toggle_zen_mode updates them
- Content area uses theme.content_padding (0 in zen, 1 otherwise)
- Gutter width uses theme.show_gutter
- Status indicator: no leading space in zen mode
- 429 rate limit: minimum 5s backoff, default max retries 4→8
2026-02-10 21:10:56 -08:00
zeekay f5e9fdd45e feat(tui): show MCP server names during connect and after connected
- new_connecting_mcp_status() now accepts server names and shows them:
  "Connecting MCP servers: hanzo-mcp, filesystem…"
- When MCP finishes, replace with "MCP connected: hanzo-mcp, filesystem"
  instead of silently removing the cell
- new_connected_mcp_status() for the replacement cell
- Needle match updated to prefix-based for robustness
2026-02-10 21:10:39 -08:00
zeekay e49d47c008 Update indicator 2026-02-10 20:53:15 -08:00
zeekay 118dfd3503 feat(tui): default zen mode on, dim assistant text
- Zen mode now defaults to true for clean minimal UI out of the box
- Users can toggle with Alt+G if they want gutter icons/borders back
- Assistant text uses text_dim color to contrast with brighter human input
2026-02-10 18:48:55 -08:00
zeekay 053744d901 fix(tui): shimmer status line, red error text, consistent zen gutter
- Replace rotating spinner (✧) with Codex-style shimmer animation on
  status header text (sweeping brightness band via cosine interpolation)
- Simple • bullet with blink (accent/dim at 600ms), hidden in zen mode
- Fix wait_status cell leaking ◓ gutter symbol in zen mode
- Make exec overlay error/success/warning status text match icon color
  (was always text_dim, now red for errors, green for success, etc.)
- 30fps animation redraws via ScheduleFrameIn for smooth shimmer
2026-02-10 18:46:29 -08:00
zeekay 2df905de9a feat(tui): add Alt+G keybinding to toggle zen mode at runtime
Toggle zen mode on/off without restarting. Invalidates height cache
since gutter width changes (2→0) affect layout calculations.
Shows in help panel as "Alt+G: Toggle zen mode (gutter/borders)".
2026-02-10 18:15:27 -08:00
zeekay 55ba86f7e3 feat(tui): hide all gutter icons and status symbols in zen mode
Strip ▶ ⏺ ✖ ✔ ⚙ ◓ and other decorative glyphs from every
gutter_symbol() override, streaming preview, status title,
agent status indicators, chevrons, and auto-review footer.
In zen mode: just text, no bullets or icons on the side.
2026-02-10 18:04:09 -08:00
zeekay 7ba0f0530f feat(tui): zen-ify all remaining border locations
Hide borders and titles in zen mode for every remaining overlay,
settings panel, history cell, and popup across the TUI. Covers
18 files including agent editor, undo timeline, cloud tasks,
theme/skills/prompts/verbosity selectors, login accounts, exec
cells, assistant code blocks, image placeholders, upgrade banner,
and all chatwidget command windows/dialogs/tab rules.
2026-02-10 17:57:40 -08:00
zeekay 0fbaa3b0e5 feat(tui): animated status line, ? shortcut, zen borders
- Status indicator now uses spinner animation from spinner system instead
  of static bullet, with descriptive activity text ("Using read_file",
  "Agents coordinating", etc.) and Codex-style format with • separators
- ? as first char in empty composer opens help popup (like / for commands)
- Zen mode hides borders on all settings panels, overlays, and modals
- Hide "Ctrl+A to close" and "Ctrl+B to close" hints from overlay titles
- Improve map_status_message to capitalize multi-word statuses and
  simplify tool names ("using tool: X" → "Using X")
2026-02-10 17:49:23 -08:00