Skip to content

Integration/all features#26

Merged
oso95 merged 75 commits intomainfrom
integration/all-features
Mar 18, 2026
Merged

Integration/all features#26
oso95 merged 75 commits intomainfrom
integration/all-features

Conversation

@oso95
Copy link
Owner

@oso95 oso95 commented Mar 18, 2026

  • Fix fnm compatible issue
  • Support various coloring in the terminal
  • Session persistent toggle option
  • Fix screen freeze on notifications
  • Hotkey improvements
  • Session mapping improvement
  • More bugs are fixed with performance enahncement!

oso95 and others added 30 commits March 15, 2026 12:42
Add impl_shortcuts_recording module with format_keystroke_as_binding()
and normalise_key_name() helpers. Wire recording capture into
handle_key_down: intercepts keypresses when recording_shortcut is Some,
saves the binding or cancels on Escape. Guards the general Escape-closes-
settings path so it does not fire while recording is active.
Add focused_shortcut_row field to SettingsPage and impl_shortcuts_nav
module with navigate_shortcuts_focus(). Tab/ArrowDown/ArrowUp move row
focus; Enter/Space starts recording for the focused row. Focus highlight
rendered as a subtle background on the active row in the shortcuts table.
State is preserved across background settings reloads.
…keybindings

Add ToggleTaskBoard and QuickSwitch GPUI actions covering the two entries in
default_keybindings() that previously had no registered action and were silently
skipped in keybindings_to_gpui_list.

- ToggleTaskBoard (Ctrl+B): calls toggle_task_board(); replaces old hardcoded
  secondary-b → ToggleSidebar binding, which conflicted with the default keymap
- QuickSwitch (Ctrl+K): calls toggle_sidebar() as a stand-in (no dedicated
  session-picker UI exists yet, matching original manual Ctrl+K behaviour)
- ToggleSidebar rebinds to secondary-e (Ctrl+E / Cmd+E) to free Ctrl+B
- Both actions get global fallbacks in register_actions and .on_action wiring
  in WorkspaceView's render setup
- keybindings_to_gpui_list now covers toggle_task_board and quick_switch so
  user-edited bindings take effect via live reload
- Two new unit tests confirm the mappings survive the filter
- Restore ToggleSidebar to Ctrl+B; move ToggleTaskBoard to Ctrl+T
- Remove quick_switch from user-visible settings (no real UI yet)
- Expose all app actions as rebindable in settings panel
- Extract handle_settings_key helper from handle_key_down
- Clear focused_shortcut_row on settings category switch
- Add Ctrl guard in handle_key_down for Windows defence-in-depth
- Re-register full binding set on save to prevent stale bindings
- Clear focused_shortcut_row when Escape cancels recording
- Document Enter/Space deliberate swallow when no row focused
- Restore quick_switch to default_keybindings and live-reload list
- Fix handle_toggle_task_board doc comment (Cmd+B -> Ctrl+T / Cmd+T)
- Guard empty key in binding_to_gpui_string to prevent KeyBinding panic
- Add precondition doc and debug_assert to handle_settings_key
- Rename _cx to cx in settings save closure
- Remove meaningless canary test
- Rename and clarify test_format_keystroke_ctrl_n_windows
- Block PTY text input via replace_text_in_range when settings is open
- Clear focused_shortcut_row on successful shortcut recording
- Sync focused_shortcut_row with mouse-click recording in settings panel
- Validate preserved recording state after background settings reload
- Add sync test between default_gpui_keybindings and default_keybindings
- Clear keymap before re-registering on save (prevents unbounded growth)
- Sync KeybindingManager::with_defaults with new key assignments
- Add PageUp/Down/Home/End/Insert/F1-F12 to normalise_key_name
- Cache sorted shortcut keys on SettingsPage; remove per-frame sort
- Remove -NoProfile from PowerShell so user PATH additions load
- Add display_offset() getter on TerminalView
- Snap scroll to bottom when within one viewport of live view
oso95 added 28 commits March 16, 2026 23:58
- Add missing EventBus trait import in gpui.rs so subscribe() compiles
- Fix double-wrapping of cx.listener() in toast button callbacks
- Persist expected_sha256 in StagedUpdateState for re-verification after restart
- Block restart when sessions are actively working (with TODO for modal)
- Validate artifact filenames contain only safe characters
When user clicks "Later" on an update toast, the staged update now
auto-applies on next app launch instead of showing the toast again.
Also removes the working-session guard on "Restart Now" — if the user
clicks it, just proceed.
Move status dot from pane header into session tabs with three
configurable styles (dot, badge, glow) and flash animation for
NeedsAttention/ResponseReady states.
Disambiguate tab animation from StatusIndicator::animated, specify
settings access path, use TabStatusDecoration struct for glow style,
clarify timer-driven animation approach, and fix pattern references.
Piggyback on the 250ms maintenance polling loop instead of adding
a new background timer. Explicit threading model for all UI work.
Replaces NotificationManager with NotificationHandle on the UI thread.
All blocking Toast::show() (Windows) and osascript (macOS) calls now
execute on a dedicated notification-actor thread via std::sync::mpsc.

Fixes UI freeze on Windows Surface when two sessions hit permission
prompts simultaneously.
- Log warnings on all swallowed file removal and state save errors
- Use $TMPDIR with /tmp fallback for macOS DMG mount point
- Derive Windows exe name from current_exe() instead of hardcoding
- Warn when SHA256 verification is skipped due to missing hash
- Log warning when browser open command fails
The test expected normalize_keybinding_display("Ctrl+N") to return
"Cmd+N" on macOS, but Ctrl and Cmd are distinct physical keys.
parse_binding correctly distinguishes them, and format_binding only
maps the cmd modifier to "Cmd" on macOS. Ctrl stays as Ctrl on all
platforms.

Changed the macOS assertion to test "Cmd+N" → "Cmd+N" (passthrough)
instead of the incorrect "Ctrl+N" → "Cmd+N" conversion.
6-task plan with verification matrix per task. Addresses
reviewer feedback: pulse modulus alignment, existing test
fixup, GPUI element test caveats, explicit tab restructuring.
# Conflicts:
#	crates/codirigent-ui/src/workspace/gpui.rs
Add configurable tab status indicator style with 'dot' default.
Supports 'dot', 'badge', and 'glow' variants.
TabStatusDecoration struct, status_color mapping, pulse logic,
and render_tab_status function for dot/badge/glow styles.
Piggybacks on existing 250ms maintenance loop. No new timer.
Each tab now displays a status dot/badge/glow based on the
tab_status_style setting. Pulse animation for NeedsAttention
and ResponseReady on background tabs.
Users can choose between dot, badge, and glow styles.
Users don't need a post-update toast with release notes — they just
got the update. Also removes unused thiserror dependency from
codirigent-updater.
Eliminate color duplication by delegating to the canonical
StatusIndicator::for_status() mapping instead of repeating
hex values in tab_status_render.
The status field was only consumed by the now-removed header dot.
Tab status rendering reads directly from session state instead.
Replace binary 1.0/0.4 step with a 6-step curve
[1.0, 0.85, 0.55, 0.4, 0.55, 0.85] for smoother pulsing.
Merge feature/tab-status-indicator into integration/all-features.
Resolved conflicts in gpui.rs and impl_output_polling.rs by
keeping both auto-update fields and pulse_counter additions.
When a shell emits OSC 7 after `cd`, the session manager's
working_directory was updated in memory but save_state_to_disk was
never called, so the new CWD was lost on app restart. Add the
missing save call (already debounced) after CWD change detection.
…edless_return

Replace all Mutex::lock().unwrap() calls in codirigent-updater production
code with .unwrap_or_else(|p| p.into_inner()) to match codebase convention
and pass the CI unwrap gate. Also remove needless return in platform/mod.rs
that fails Windows clippy. Add .superpowers/ and docs/superpowers/ to
.gitignore.
@oso95 oso95 merged commit 05af125 into main Mar 18, 2026
5 checks passed
@oso95 oso95 deleted the integration/all-features branch March 21, 2026 06:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant