Skip to content

fix: prevent Emmet wrap abbreviation from affecting multiple open editors#208

Closed
lahcenelhadi2001-a11y wants to merge 383 commits intoCortexLM:mainfrom
lahcenelhadi2001-a11y:main
Closed

fix: prevent Emmet wrap abbreviation from affecting multiple open editors#208
lahcenelhadi2001-a11y wants to merge 383 commits intoCortexLM:mainfrom
lahcenelhadi2001-a11y:main

Conversation

@lahcenelhadi2001-a11y
Copy link

Fixes #24600. Added a focus check using editor.hasTextFocus() in EditorEmmet.tsx. This ensures that global Emmet events (wrap/balance) are only processed by the active, focused editor instance, preventing unintended modifications to other open tabs.

…ndexed

- Fix search_replace_preview to convert 1-indexed line numbers to 0-indexed
  array indices (line_num - 1), consistent with replace_in_file_internal
- Update 4 test cases from line: 0 to line: 1 to match 1-indexed convention
  used by search results and the backend conversion logic
…stration

TerminalGroupCommands was exported but never mounted in the component tree,
so all terminal group commands (split, navigate, group management) were
never registered with the command palette. Mount it alongside
TerminalToolsCommands in the terminal section of AppCore.
…mDialog and DeleteBranchDialog

- DeleteConfirmDialog: add aria-labelledby pointing to title element,
  add id to modal-title div
- DeleteBranchDialog: add aria-modal=true, aria-labelledby pointing to
  title element, add id to header span
The merge conflict resolution left duplicate Render Characters, Side,
Scale, and Show Slider controls. Deduplicated to a single clean set.
Extract TerminalPanel.tsx from 2465 lines to 296 lines (under 300 limit)
by splitting into focused modules:

- TerminalPanelTypes.ts: Types, constants, and utilities
- OutputStreamProcessor.ts: Chunked output processing with flow control
- FilePathLinkProvider.ts: Clickable file path links in terminal output
- TerminalInstanceManager.ts: Terminal lifecycle, xterm init, events, cleanup
- TerminalSuggestionHandler.ts: Suggestion selection logic
- TerminalPanelOverlays.tsx: Overlay JSX (dialogs, decorations, split toolbar)
- TerminalStyles.ts: CSS styles extracted from inline style block
- TerminalEventHandlers.ts: Keyboard and event handler factories

Integrate terminal split view using existing useTerminalSplits hook and
TerminalSplitView component. Supports horizontal/vertical splits,
resizable panes, and Ctrl+Shift+5 keyboard shortcut.

Update terminal/index.ts with all new module exports.
…iable definitions

Add three missing CSS variable definitions to the :root scope in
design-tokens.css:

- --jb-text-muted-size: var(--text-xs) — resolves to 11px, referenced
  52 times across 21 files for muted/small text sizing
- --jb-text-muted-weight: var(--font-normal) — resolves to 400,
  referenced 2 times alongside --jb-text-muted-size
- --jb-border-divider: var(--border-default) — resolves to #2E2F31,
  referenced 76 times across 27 files for divider borders

These variables were used extensively but never defined in the default
theme, causing them to fall back to browser defaults or inline fallback
values. The high-contrast theme override in high-contrast.css (line 117)
continues to work as expected.

Fixes #21585, #21543
…consistency

Audit all references to zen mode notification silencing across the codebase.
The canonical key is zenMode.silenceNotifications (as defined in types/settings.ts,
SettingsContext.tsx, SETTINGS_REGISTRY, and JsonSettingsEditor.tsx schema).

Fixed mismatches in:
- src/components/ZenMode.tsx (interface, default, usage)
- src/components/editor/ZenMode.tsx (interface, default, mapping)
- src/components/__tests__/ZenMode.test.tsx (interface, default, assertion)

Resolves #21917
…ng (#21723, #21683)

Fix #21723: Rewrite parseShortcut to split on space first (chord groups),
then on + (keys within group). E.g. 'Ctrl+K Ctrl+S' now correctly renders
as two separate chord groups instead of merging keys across the space.

Fix #21683: Always compute label highlights from the label's own fuzzy
match result, even when the category match drives the overall score.
Previously, label highlights were set to empty when category scored higher.
…, and workbench

- theme.theme: expand enum to include 'high-contrast' and 'high-contrast-light' (#21474)
- theme.activityBarPosition: add enum property with 'side', 'top', 'hidden' (#21473)
- theme.titleBarStyle: add enum property with 'native', 'custom' (#21483)
- theme.auxiliaryBarVisible: add boolean property (#21482)
- theme.wrapTabs: add boolean property (#21916)
- workbench.editor.wrapTabs: add boolean property in new workbench section (#21916)
- terminal.wordSeparators: add string property (#21545)

All schema definitions now match runtime types in SettingsContext.tsx.
…h, and terminal

- Expand theme.theme enum to include 'high-contrast' and 'high-contrast-light' (#21474)
- Add theme.activityBarPosition enum with 'side', 'top', 'hidden' (#21473)
- Add theme.titleBarStyle enum with 'native', 'custom' (#21483)
- Add theme.auxiliaryBarVisible boolean property (#21482)
- Add theme.wrapTabs and workbench.editor.wrapTabs boolean properties (#21916)
- Add terminal.wordSeparators string property (#21545)

All schema definitions match runtime types in SettingsContext.tsx.
…ent path matching

The handleReveal function was normalizing all paths to forward slashes
before adding them to expandedPaths and checking directoryCache. However,
flattenedItems uses entry.path with native separators (from the Rust
backend). On Windows, this caused a mismatch where 'C:/foo' would never
match 'C:\foo', so directories wouldn't appear expanded after reveal.

Fix: Keep native separators when building paths for expandedPaths and
directoryCache lookups. Only use forward-slash normalization for the
startsWith comparison and relative path splitting logic. Detect the
native separator from rootPath and use it when constructing intermediate
directory paths.

Also simplified the scroll-to-item findIndex to use direct path equality
instead of normalizing both sides, since targetPath now uses native
separators matching entry.path.
…-select cut/copy

- Fix #21783: Move isSelected, gitDecoration, and isEntering computations
  from const variables inside the For callback to inline expressions in
  JSX props, preserving SolidJS reactivity tracking.

- Fix #21770: Add a renameCancelled flag in VirtualItem. Set it in the
  Escape keydown handler before calling onRename, and check it in onBlur
  to skip the duplicate rename call when Escape was pressed. Reset the
  flag when entering rename mode and after the blur guard fires.

- Fix #21711: Change context menu Cut and Copy handlers to operate on
  the full selection set (props.selectedPaths) when the right-clicked
  file is part of the selection, instead of only the single
  contextMenuTarget path.
Remove duplicate wrapTabs properties that were introduced by parallel
batch-1 changes during rebase. Keeps the first occurrence of each.
… theme settings at runtime

Issue #21896: Replace all hardcoded hex colors (#141415, #1C1C1D, #2E2F31)
in shell layout components with corresponding CSS variables from
cortex-tokens.css:
- #141415 → var(--cortex-bg-primary)
- #1C1C1D → var(--cortex-bg-secondary)
- #2E2F31 → var(--cortex-border-default)

Affected components:
- CortexDesktopLayout.tsx
- CortexSidebarContainer.tsx
- EditorTabBar.tsx
- CortexTitleBar.tsx
- CortexEditorTabs.tsx
- TitleBarDropdownMenu.tsx
- CortexActivityBar.tsx
- CortexCodeEditor.tsx
- CortexFileExplorer.tsx
- ExplorerHeader.tsx
- EditorBreadcrumbs.tsx
- CortexIDELayout.tsx
- EnhancedStatusBar.tsx
- CortexNotifications.tsx

Issue #21897: Add createEffect in AppCore.tsx AppContent that reads
settings.theme.uiFontFamily, settings.theme.uiFontSize, and
settings.theme.zoomLevel from SettingsContext and applies them to
document.documentElement.style at runtime.
Fix #21906: Add Array.isArray() guards for extension data from invoke()
calls in ExtensionsContext.checkForUpdates() and loadExtensions(), and
in AppCore's ExtensionCommandRegistrar. Wrap flatMap in try-catch to
prevent TypeError from bubbling to users when extensions data is
unexpectedly null/undefined.

Fix #21908: Move activeSection/activeTab signals to module level in
SettingsEditor and SettingsDialog so the selected TOC section persists
across component re-mounts caused by editor focus changes. The
initialSection prop is only applied on explicit first mount.
…h, and terminal

- Expand theme.theme enum to include 'high-contrast' and 'high-contrast-light' (#21474)
- Add theme.activityBarPosition enum with 'side', 'top', 'hidden' (#21473)
- Add theme.titleBarStyle enum with 'native', 'custom' (#21483)
- Add theme.auxiliaryBarVisible boolean property (#21482)
- Add theme.wrapTabs and workbench.editor.wrapTabs boolean properties (#21916)
- Add terminal.wordSeparators string property (#21545)

All schema definitions match runtime types in SettingsContext.tsx.
…terminal.autoReply, and security.trustedWorkspaces

- terminal.bell: enum property with values ['none','audible','visual'],
  default 'none' (#21542)
- terminal.autoReply: object property with enabled (boolean) and rules
  (array of auto-reply rule objects) subproperties matching runtime
  defaults (#21530)
- security.trustedWorkspaces: array property with items of type string,
  default [] (#21529)

All additions cross-referenced with default values in SettingsContext.tsx.
- Document complete project structure with all frontend and backend modules
- Verify build baseline: npm install, typecheck, build, cargo check all pass
- Catalog 691 component files, 99 context providers, 37 hooks, 231 Rust files
- Map all 48+ Rust backend modules with file counts and descriptions
- Document pre-existing test failures (3 of 9917 tests)
- Record tech stack versions and build/test commands
- Note: npm run check does not exist; use npm run typecheck instead
…and fix encoding event name mismatch

- Fix #21785: Move useCommands() call from inside createEffect to the
  JournalProvider component body for proper SolidJS scope. Register
  commands in onMount and add onCleanup to unregister them, preventing
  duplicate registrations.

- Fix #21680: Change StatusBarContext event listener from
  'editor:encoding-change' to 'encoding:changed' to match the event
  dispatched by EncodingContext. Also update EditorStatusBarItems to
  dispatch 'encoding:changed' for consistency across the codebase.
- Fix #21560: Parent category shows active highlight when collapsed and
  a child is the active tab
- Fix #21547: Add 'git' to TREE_ID_TO_SECTION mapping for modification
  detection
- Fix #21918: Fix Modified filter by directly comparing effective
  settings values against defaults with JSON.stringify deep equality,
  bypassing potential SolidJS store proxy issues
Update PROJECT_STRUCTURE.md to accurately report 2 pre-existing
TypeScript errors (duplicate wrapTabs properties in JsonSettingsEditor.tsx)
introduced by prior commits.
… theme settings at runtime

- Replace #141415 with var(--cortex-bg-primary) across layout components
- Replace #1C1C1D with var(--cortex-bg-secondary) across layout components
- Replace #2E2F31 with var(--cortex-border-default) across layout components
- Replace hardcoded icon/text colors with semantic CSS variables
- Add createEffect in AppCore to apply uiFontFamily, uiFontSize, and
  zoomLevel from SettingsContext to document.documentElement.style
- Update tests to match new CSS variable output

Closes #21896, #21897
… (#21919, #21719)

- Add 'docs' as valid SidebarTab type in layout/types.tsx and types/layout.ts
- Create CortexDocumentationPanel component with guides and shortcuts tabs
- Wire docs panel into CortexSidebarContainer with lazy loading
- Add 'docs' to VALID_SIDEBAR_TABS in CortexDesktopLayout
- Add 'Snippets: Open Snippet Manager' command (Ctrl+Alt+S) that dispatches
  snippets:open event, making SnippetsPanel reachable via command palette
- Register Ctrl+Alt+S keybinding in CommandContext keydown handler
Implement a global modal-active state that prevents keyboard shortcuts
from firing behind modal dialogs. Escape key is always allowed through
so modals can still be closed.

Changes:
- Add ModalActiveContext with counter-based tracking for multiple modals
- CortexModal registers/unregisters with the context on open/close
- CommandContext handler skips all shortcuts (except Escape) when modal active
- useKeyboard and createKeyboardShortcut check modal state before firing
- ModalActiveProvider added as Tier 1 provider in OptimizedProviders
… terminal.autoReply schema

These subproperties were present in the TerminalAutoReplySettings
interface and DEFAULT_TERMINAL defaults in SettingsContext.tsx but
were missing from the JSON schema.
Add AppCore.tsx duplicate identifier errors and note that the error
set may shift as concurrent tasks commit to main.
…fix failing tests

- CortexHeaderItem: #1C1C1D → var(--cortex-bg-secondary)
- CortexDropdown: #1C1C1D/#2E2F31 → var(--cortex-bg-secondary)/var(--cortex-border-default)
- CortexSeparator: #2E2F31 → var(--cortex-border-default)
- CortexSmallButton: remove fallback #141415
- CortexOpenProjectDropdown: remove fallback #1C1C1D
- CortexHeaderItem.test.tsx: update assertions to expect CSS variables
- CortexSeparator.test.tsx: update assertion to expect CSS variable
- cov-CortexDiffEditor.test.tsx: add missing getProjectPath mock
- Add FactoryManager::initialize() to set persistence base dir and
  load previously saved workflows from disk into the in-memory HashMap,
  reconciling next_id to avoid ID collisions.
- In factory command handlers (create, update, delete, import), call
  persistence().save_workflow() / delete_workflow() after modifying
  the in-memory state. Persistence errors are logged as warnings
  (non-fatal) to avoid blocking the user.
- In Phase B deferred initialization (app/mod.rs), initialize the
  factory persistence with dirs::data_dir().join("Cortex"), consistent
  with the rest of the codebase's data directory convention.

Closes #21476
…(#21455, #21454)

Issue #21455: Add file save listeners to MultiRepoContext that trigger
debounced git status refresh. Listen for both cortex:file-saved DOM events
and git:repository-changed Tauri backend events. Uses 1500ms debounce to
avoid excessive refreshes.

Issue #21454: Add workspace folder selector dropdown to CortexAgentSidebar
in Vibe mode. When multiple workspace folders exist, renders a <select>
dropdown that allows switching the active project. Reuses WorkspaceContext
data source, same as IDE mode.
echobt added 25 commits March 7, 2026 08:37
Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your free trial has ended. If you'd like to continue receiving code reviews, you can add a payment method here.

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.

2 participants