Skip to content

feat: center tabs, docked settings, centralized API keys#13

Merged
iptoux merged 48 commits into
mainfrom
feature/center-multiview-tabs
May 22, 2026
Merged

feat: center tabs, docked settings, centralized API keys#13
iptoux merged 48 commits into
mainfrom
feature/center-multiview-tabs

Conversation

@iptoux
Copy link
Copy Markdown
Contributor

@iptoux iptoux commented May 22, 2026

Summary

  • Center multi-view tabs: VS Code-style tab strip above the terminal grid (pinned Terminals tab; dynamic Settings and file-preview tabs). PTY sessions stay mounted while switching tabs; state persists per workspace in the snapshot.
  • File preview tab: Project Explorer opens a sandboxed UTF-8 preview (read_workspace_text_file, 512 KiB cap, backend tests).
  • Docked settings revamp: Settings open in a center tab (singleton per workspace) instead of a modal. Sidebar: App, Appearance (stub), API Keys, Workspace, BLXCode Agent. Legacy categories (Image, Voice, Memory) route to the correct pane.
  • Centralized API Keys: batch Save/Discard pane (api_keys_status / api_keys_apply); LLM, Tavily, Brave, fal.ai, AWS Polly; keyring-first with BLX_* env fallback. Agent/image/voice panes show muted status hints only.
  • BLXCode Agent grid: Text (provider, thinking, AgentModelPicker), Image (provider, quality, models, auto-save), Voice (OpenAI/OpenRouter/AWS, STT/TTS models, fixed voice catalog, behavior). Web Tools footer with text provider. STT language + PTT live under App.
  • Workspace settings: paths, sandbox, embedded browser (one Save footer) plus Category colors (moved from removed Memory settings tab).

Test plan

  • Terminals tab fixed; Settings from palette reuses/focuses singleton tab
  • Text file in Explorer → preview tab; close/reopen dedupes path
  • Settings → API Keys: batch save OpenRouter + Tavily; agent turn + web tools work
  • Settings → BLXCode Agent: text/image/voice providers; API hints point to API Keys
  • Settings → Workspace: paths + browser Save; category colors edit/reset
  • No separate Image / Voice / Memory entries in settings nav
  • cargo check -p blxcode-ui --target wasm32-unknown-unknown
  • cargo test --workspace

iptoux added 14 commits May 22, 2026 02:35
…ctionality

- Added support for center tabs in the workspace, including dynamic tab creation and management.
- Introduced `CenterTab` and `CenterTabKind` structures to represent different types of tabs.
- Implemented functions to handle opening, closing, and switching between center tabs.
- Enhanced the workspace layout to accommodate center tabs and their respective content panels.
- Added a file preview feature that allows users to view file contents directly within the workspace.
- Updated styles for the new center tab interface and file preview components.
- Refactored existing workspace and terminal management code to integrate with the new tab system.
- Added a new plan for the centralized management of API keys under Settings → API Keys.
- Outlined decisions regarding the UI structure, backend catalog, and key management processes.
- Included tasks for implementation across various modules, ensuring a streamlined approach to API key handling.
- Revised the summary to clarify the centralized API key management under Settings → API Keys, emphasizing a unified save button and backend improvements.
- Adjusted decisions and tasks to reflect changes in UI design, batch processing, and the removal of individual save actions.
- Enhanced task descriptions for better clarity on implementation across various modules.
- Added a new module `api_keys` to handle API key management.
- Introduced `ApiKeyEntry`, `ApiKeysStatus`, and related enums for API key actions.
- Created commands `api_keys_status` and `api_keys_apply` for fetching and applying API keys.
- Developed a new UI component `ApiKeysPane` for displaying and managing API keys.
- Implemented CSS styles for the API keys pane layout.
- Removed legacy API key handling code from the agent provider pane.
- Updated the main application structure to include the new API keys pane.
…ences

- Introduced new localization keys for API keys management, including subheadings, status messages, and hints in multiple languages.
- Updated UI components to utilize the new localization keys for better internationalization support in the API keys management pane.
…variable handling

- Updated the status message in the API keys pane to ensure it is explicitly converted to a string.
- Refactored the environment variable handling in the API key row to improve readability and maintainability.
- Introduced a new `WorkspaceSettingsPane` component for managing workspace settings, including project directory and sandbox root configurations.
- Added localization keys for workspace settings in multiple languages to enhance internationalization support.
- Updated the main application structure to include the new workspace settings pane and corresponding CSS styles for consistent UI design.
- Restructured the Workspace settings layout to mirror the API Keys pane, enhancing consistency in UI design.
- Implemented a shared footer for Save/Discard actions and updated localization keys for the new layout.
- Improved the organization of workspace settings, including project directory and sandbox root configurations.
@iptoux iptoux added enhancement New feature or request review Ticket/Steps need to be review/tested labels May 22, 2026
@iptoux iptoux self-assigned this May 22, 2026
iptoux added 11 commits May 22, 2026 04:26
- Enhanced layout consistency between the Workspace settings and API Keys panes by adjusting spacing and padding.
- Improved visual hierarchy with updated margins and gaps for better user experience.
- Removed redundant CSS rules to streamline styles across both panes.
- Updated CSS for the Workspace settings pane to reuse styles from the API Keys pane, enhancing visual consistency.
- Refactored HTML structure to align with the API Keys layout, improving the user interface and experience.
- Removed redundant CSS rules to streamline styling across both panes.
- Added a margin-bottom to the API keys row to enhance visual separation between elements.
- This change contributes to a more consistent layout in the API keys pane.
- Added CSS styles for brand icons in the API keys row to improve visual representation.
- Implemented functions to retrieve brand SVG paths and fallback icons based on API key type.
- Updated the API key row structure to include brand icons alongside labels, enhancing the user interface.
…tributes

- Added new styles for disabled mini buttons to enhance visual feedback and user experience.
- Updated button attributes in the API Keys and Workspace Settings panes to use the standard `disabled` property for better accessibility and consistency.
- Introduced SVG icons for Brave, Google, Groq, Mistral, and Tavily to enhance visual representation in the API keys pane.
- Updated the API key brand icon retrieval function to include new icons, improving the user interface and experience.
- Added a new SVG icon for Grok and removed the old Groq icon to enhance brand representation.
- Updated the API key brand icon retrieval function to reflect the new icon name.
- Improved layout styles in the harness hooks section for better alignment and spacing.
- Enhanced the display of agent names and statuses with a new title row structure.
…ization support

- Introduced a new `AgentProviderPane` component for managing agent provider settings, including model selection and thinking levels.
- Added localization keys for the agent provider pane in multiple languages to enhance internationalization support.
- Updated the main application structure to include the new agent provider pane and corresponding CSS styles for consistent UI design.
- Enhanced the layout and styling of the agent provider settings for improved user experience.
…uctures and UI components

- Added `PartialEq` derive to `ProviderModelEntry` and `ModelPricing` structs for improved equality checks.
- Introduced a new function `hook_brand_icon` in `harness_ui.rs` to map agent names to their corresponding brand icons.
- Updated `AgentModelPicker` to use `Signal::derive` for selected entry, improving reactivity in the agent provider pane.
…icker

- Removed the unused `select_str` function to clean up the codebase.
- Updated event handling in `AgentModelPicker` to use cloned identifiers for improved clarity and maintainability.
- Enhanced the reactivity of the component by ensuring consistent usage of cloned variables for event actions.
…delPicker

- Replaced multiple cloned identifiers with a single `entry_id` variable for improved clarity.
- Enhanced event handling by ensuring consistent usage of cloned variables for button actions and keyboard events.
- Simplified the code structure to improve maintainability and readability.
iptoux and others added 23 commits May 22, 2026 05:15
…odelPicker

- Consolidated cloned identifiers for improved clarity and reduced redundancy.
- Enhanced event handling by ensuring consistent usage of identifiers for button actions and keyboard events.
- Streamlined the code structure to improve maintainability and readability.
- Introduced new keys for AgColumnText, AgColumnImage, AgColumnVoice, and AgColumnVoiceSoon in multiple languages to enhance internationalization support.
- Updated the I18nKey enum and corresponding localization files for German, English, Spanish, French, Hungarian, Italian, Japanese, Korean, Polish, Portuguese, Russian, Chinese (Simplified and Traditional) to include these new keys.
- Improved the user experience by providing localized text for new agent provider settings in the UI.
…lection

- Introduced a new `AgentModelPicker` component to facilitate model selection with a dropdown interface, enhancing user experience in the agent settings.
- Integrated the `AgentModelPicker` into the `AgentProviderPane` and `AgentImageColumn` components, replacing the previous model picker implementation.
- Improved reactivity and event handling for model selection, ensuring a seamless interaction for users.
- Updated relevant imports and removed deprecated code related to the old model picker.
… functionality

- Removed outdated CSS styles related to the image settings tab, streamlining the stylesheet for better maintainability.
- Updated the Rust module to include new functions for managing image providers, enhancing the user interface with improved dropdown functionality.
- Introduced a new `ImageProviderPicker` component for selecting image providers, improving user interaction and accessibility.
- Enhanced localization support by integrating internationalization keys for image provider labels and statuses.
…ization support

- Added a new `ImageQualityLevel` enum to define various quality tiers for image generation, with a default set to Medium.
- Updated `ImageSettings` to include a quality field, enhancing the configuration options for image generation.
- Integrated localization keys for image quality levels in multiple languages, improving internationalization support across the application.
- Enhanced image generation functions to utilize the new quality settings, ensuring better control over output resolution and quality.
- Introduced new SVG icons for fal.ai and AWS Polly, enhancing brand representation in the application.
- Updated the API key management system to include a new category for ImageVideo, allowing users to manage keys for image and voice media providers.
- Enhanced localization support by adding new keys for fal.ai and ImageVideo in multiple languages, improving internationalization across the application.
- Updated image generation functionality to support fal.ai, integrating it into the existing image provider framework for seamless user experience.
…ontrols

- Added new `VoiceSttLanguageControls` and `VoicePttControls` components for managing speech-to-text language settings and push-to-talk functionality within the app settings.
- Updated the `AppSettingsPane` to include these new components, enhancing user interaction for voice settings.
- Introduced responsive CSS styles for the new controls, ensuring a consistent layout across different screen sizes.
- Refactored existing voice settings code to streamline functionality and improve maintainability.
- Implemented `from_iso639_1` function to map ISO-639-1 codes to built-in UI locales, enhancing localization support.
- Added `SttManualLocalePicker` component for selecting STT languages, improving user interaction in voice settings.
- Introduced helper functions for navigating locale options and focusing on selected elements, streamlining the user experience.
- Enhanced unit tests to verify the new locale mapping functionality.
- Updated CSS for the agent provider pane to improve grid layout, allowing for better responsiveness and visual organization.
- Replaced the placeholder column with the new `AgentVoiceColumn` component, integrating voice settings directly into the agent provider pane.
- Introduced a new inner grid for voice settings, ensuring a structured layout for STT and TTS sections.
- Refactored the `VoicePane` component to accommodate the new structure and improve maintainability.
…r quality level pickers

- Added CSS styles for the harness-level-picker, enhancing the visual design and interaction of quality level selection components.
- Updated the `agent_provider_pane` and `harness_image_pane` modules to include the new `harness-level-picker` class, improving consistency across the UI.
- Introduced hover and focus styles for better user feedback during interaction with quality level options.
- Deleted the `select_str` function from the `harness_ui` module as it was no longer needed, simplifying the codebase and improving maintainability.
- Introduced a new CSS class for voice provider layout in the agent provider pane, enhancing visual organization.
- Implemented a `VoiceProviderPicker` component for selecting between OpenAI and OpenRouter voice providers, improving user interaction.
- Updated the `AgentVoiceColumn` to integrate voice provider selection, ensuring a cohesive experience for managing voice settings.
- Refactored related components to accommodate the new voice provider functionality, enhancing maintainability and responsiveness.
- Updated the `AgentVoiceColumn` to set the voice provider when saving voice settings, ensuring the correct provider is applied.
- Enhanced the save functionality to reflect changes in the voice provider after settings are saved, improving user experience and consistency.
- Updated the `AgentVoiceColumn` to improve handling of STT and TTS model IDs, ensuring they are correctly set and saved.
- Refactored the speech section to separate STT and TTS model selection, enhancing clarity and user interaction.
- Introduced loading states for model fetching, improving user feedback during asynchronous operations.
- Adjusted CSS for the agent provider pane to refine layout and spacing, enhancing overall visual organization.
- Introduced AWS as a new voice provider in the `VoiceProviderKind` enum, enhancing the application's voice capabilities.
- Updated localization files to include AWS provider keys in multiple languages, improving internationalization support.
- Enhanced the `AgentVoiceColumn` and related components to handle AWS-specific voice settings and model management.
- Refactored voice provider functions to accommodate AWS, ensuring proper integration and user experience.
- Deleted the `model_picker` module and its associated CSS, streamlining the codebase and improving maintainability.
- Updated the `AgentVoiceColumn` and `VoicePicksGrid` components to integrate a custom field for voice selection, enhancing user interaction.
- Added localization support for AWS voice selection hints across multiple languages, improving user experience for international users.
- Refactored CSS for voice selection components to improve layout and responsiveness, ensuring a cohesive design.
… unused variables

- Replaced the `openai_voice_ids` function with `is_openai_voice_id` for improved clarity in voice ID validation.
- Introduced `fixed_aws_polly_voices` function to centralize AWS Polly voice entries, enhancing maintainability.
- Removed unused `voices` signals from the `AgentVoiceColumn` and related components, simplifying the state management.
- Updated `VoicePicksGrid` to utilize the new voice catalog, improving the voice selection UI.
… model picker

- Removed unnecessary lines and conditions for building the display lines for agent model details.
- Streamlined the pricing information retrieval and display, enhancing code clarity and maintainability.
- Updated the UI to directly show pricing information without intermediate variables, improving performance and readability.
…catalog functionality

- Updated localization files across multiple languages to reflect the inclusion of OpenAI as a voice provider alongside AWS.
- Enhanced the voice selection logic to accommodate both OpenAI and AWS, improving user experience and flexibility in voice options.
- Refactored voice catalog functions to streamline voice entry management for different providers, ensuring maintainability and clarity in the codebase.
…mline voice commands

- Deleted the `voice_provider_voices` function and associated structures, simplifying the voice command interface.
- Updated documentation to reflect the removal of the `voice_provider_voices` command, ensuring clarity for developers.
- Cleaned up related files by removing references to the deleted voice provider functionality, enhancing maintainability.
…e agent provider pane

- Removed the voice category button from the settings dock, streamlining the UI.
- Replaced the voice pane with the agent provider pane in the settings view, enhancing consistency.
- Updated CSS styles for the agent provider pane to improve visual clarity and maintainability.
- Cleaned up redundant classes in the agent provider pane across multiple components.
…tings

- Introduced a new section for managing category color presets in the workspace settings pane.
- Added localization support for category color features across multiple languages.
- Implemented functionality to add, update, and delete category color presets, enhancing user customization options.
- Refactored the workspace settings pane to integrate the new category colors section, improving overall UI organization.
Document docked center-tab settings, centralized API Keys, BLXCode Agent
grid (text/image/voice), Workspace category colors, and removed Image/Voice/
Memory nav entries. Mark api-keys-centralized plan done; refresh PR-facing
docs and Unreleased CHANGELOG from branch work.

Co-authored-by: Cursor <cursoragent@cursor.com>
@iptoux iptoux merged commit c58f11d into main May 22, 2026
1 check passed
@iptoux iptoux deleted the feature/center-multiview-tabs branch May 22, 2026 09:12
iptoux added a commit that referenced this pull request May 22, 2026
Bump patch by 2 merged PRs since v0.2.1 (#13, #14).

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request review Ticket/Steps need to be review/tested

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant