- Change if let Some() to if let Ok() for capture_browser_screenshot calls
- Remove orphaned else block after match statement at line 3300
- Fix type mismatches expecting Result instead of Option
These changes fix the build errors that were causing the GitHub Actions
release workflow to fail.
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
- Replace basic harness with comprehensive error handling and normalization
- Add proper console capture for log, warn, error, and debug
- Implement smart value normalization for complex objects and DOM elements
- Add metadata tracking (URL changes, execution time)
- Include sourceURL for better debugging
- Capture window errors and unhandled promise rejections
- Use eval() within AsyncFunction for proper scope handling
This improved harness provides much better debugging capabilities and
handles edge cases like circular references, DOM elements, and BigInt values.
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
- Improved duplicate detection in AgentMessage event handler
- Check against both last_assistant_message and answer_buffer to prevent duplicates
- Added safeguard in add_to_history to skip duplicate StyledText cells
- Properly cache messages after finalization to prevent re-processing
- Fixes issue where assistant messages were being sent to LLM twice
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
- Add #[allow(dead_code)] for intentionally unused fields and functions
- Fix unused method warning in chatwidget.rs
- Clean build with no warnings
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
- Use Paragraph line_count for StyledText to properly calculate wrapped height
- Ensures proper vertical spacing for content that wraps across lines
- Fixes display layout issues with long text content
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
- Added .wrap(Wrap { trim: false }) to BackgroundEvent, StyledText, and DimmedReasoning cells
- Now content flows naturally during streaming but wraps properly in history
- Text uses full terminal width and wraps at word boundaries
- Fixes issue where long lines would extend beyond terminal width
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
- Completely removed DEFAULT_WRAP_COLS constant
- RowBuilder now uses usize::MAX to disable wrapping during streaming
- Text flows naturally and is only wrapped when displayed based on terminal width
- Fixed issue where AI responses were being hard-wrapped at 80 characters
- Fixed styling of thinking content during streaming (uses StyledText)
- Prevented duplicate content in reasoning sections
The function was expecting '/browser' to be in the command text and
looking at parts[1], but /chrome passes just 'chrome' or 'chrome [port]',
so we need to look at parts[0] instead.
- Changed index from parts[1] to parts[0] for first argument
- Fixed port parsing to use parts[1] instead of parts[2]
- Updated condition from parts.len() > 1 to \!parts.is_empty()
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
Resolved conflicts by keeping the feature-browser-upgrade connection
setup code but removing the Browser Status panel UI as requested.
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
Removed dead code that was causing compilation warnings. The background
strategy was replaced by the regular strategy as noted in comments.
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
- Update GitHub Actions workflow for version handling
- Change command references from 'codex' to 'coder'
- Improve release script with better version validation
- Update browser mode UI displays
- Update repository references and branding
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
- Fix reasoning text dimming and markdown formatting
- Preserve empty lines in markdown processing
- Add smart spacing between messages
- Implement weighted random spinner selection (stars, diamonds, rare sparkle)
- Use secondary color for spinners and model names throughout UI
- Remove compilation warnings and unused code
- Clean up StatusIndicatorWidget and related unused functions
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
- Fix missing semicolon in cdp_page initialization
- Move apply_page_overrides outside of else block to correct scope
- Fix Headers type usage for SetExtraHttpHeadersParams
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
- Add animated sparkline visualization to agent panel showing activity levels
- Implement dynamic sparkline height based on agent count (1-4 lines)
- Add color coding: border color for active, green for completed tasks
- Fix sparkline visibility during planning/preparing phase with better scaling
- Add space prefix to all agent HUD lines for consistent indentation
- Change "Preparing agents..." text to dim color for subtler appearance
- Simplify agent status display to show just model name and status
- Auto-hide agent HUD when tasks complete or fail
- Replace eprintln\! debug logging with proper tracing macros
- Add comprehensive debug logging for sparkline rendering
The sparkline now provides visual feedback during all agent phases:
- Planning: 1 line with high variation (Β±50%) for visibility
- Running: 2-4 lines based on agent count with standard variation (Β±30%)
- Activity levels scale from low (planning) to high (multiple agents)
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
- Remove duplicate shlex_join_safe function definition in history_cell.rs
- Fix padded_area reference by using area parameter in chatwidget.rs:1900
- Add missing Modifier import to chatwidget.rs
- Replace undefined LIGHT_BLUE with Color::LightBlue in history_cell.rs:426
- Fix trailing whitespace in openai_tools.rs:958
- Apply cargo fmt to all modified files
These changes fix the build errors that were causing the GitHub Actions release workflow to fail.
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
- Restore emoji characters in README.md for better visual appeal
- Remove Table of Contents markers requirement
- Disable ASCII-only and ToC validation for root README in CI
- Keep validation for codex-cli/README.md (maintains upstream compatibility)
This allows the fork to have a more modern, visually appealing README
while still maintaining compatibility where needed.
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
Add missing 'Why Coder' and 'Environment variables' sections to ToC to pass CI checks
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
Add required <!-- Begin ToC --> and <!-- End ToC --> markers to pass CI workflow checks
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
- Remove emoji characters from README.md to pass ASCII check
- Fix typo in chatwidget.rs: numer -> number for codespell check
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
</details>
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Moves `use codex_core::protocol::EventMsg` inside the block annotated
with `#[cfg(debug_assertions)]` since that was the only place in the
file that was using it.
This eliminates the `warning: unused import:` when building with `cargo
build --release` in `cargo-rs/tui`.
Note this was not breaking CI because we do not build release builds on
CI since we're impatient :P
## Summary
Our current approach to prompt caching is fragile! The current approach
works, but we are planning to update to a more resilient system (storing
them in the rollout file). Let's start adding some integration tests to
ensure stability while we migrate it.
## Testing
- [x] These are the tests π
The .coder/branches/ directory was incorrectly tracked in git. This commit:
- Confirms .coder/ is already in .gitignore
- Removes all .coder/ files from git tracking
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
- Fix scroll overflow issue where scrolling past bottom would require extra input to start moving again
- Add fade-out animation for CODER title when first user message is submitted
- Title fades to background color over 0.8 seconds with alpha blending
- Completely remove faded-out title from history to prevent scrolling artifacts
- Improve unified scrollable container with proper bottom alignment
- Refactor streaming content integration into main chat area
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
- Consolidated all chat content into a single scrollable view
- Removed complex manual scroll calculations and separate rendering
- Fixed padding consistency throughout the chat area
- All content (welcome, history, streaming) now in one unified container
- Simplified scroll position calculation for better performance
- Eliminated overlapping elements and inconsistent spacing
The chat history now behaves as a single cohesive scrollable area
instead of multiple independently positioned elements.
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
- Removed manual word wrapping logic from text processing
- Text is now only split by existing newlines, preserving structure
- Markdown parsing remains for bold text support
- UI widgets handle text wrapping automatically as designed
This fixes the issue where agent messages were being split with
unexpected line breaks. The UI already handles text wrapping properly,
so manual wrapping was unnecessary and causing problems.
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>
- Fixed text tokenization to not create separate space tokens
- Words are now properly joined with single spaces during rendering
- Updated tests to reflect the corrected token count
The issue was that spaces were being treated as individual tokens,
causing double spacing when tokens were joined with spaces between them.
π€ Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <[email protected]>