Skip to content

bug: Error when trying delete with session picker — MissingStyle: Failed to get style 'b not dim $primary' #907

Description

@Daynvheur

Component

CLI

Summary

Lors de l'affichage de la liste des sessions (session picker), l'application plante avec l'erreur suivante :
MissingStyle: Failed to get style 'b not dim $primary'; unable to parse '$primary' as color; '$primary' is not a valid color
Traceback :
• Fichier concerné : vibe/cli/textual_ui/shortcut_hints.py, ligne 6
• Constante : SHORTCUT_STYLE = "b not dim $primary"
• Le style utilise $primary comme variable CSS Textual, mais ce token n'est pas reconnu par Rich lors du parsing du markup (Content.from_markup)
Version : mistral_vibe 2.19.1

Reproduction steps

  1. Run the /continue command, with existing sessions displayed
  2. Select one, and press 'd' (to delete)
  3. Mistral Vibe CLI crash

Versions / environment

mistral_vibe 2.19.1

Logs & screenshots

╭───────────────────────────────────────── Traceback (most recent call last) ──────────────────────────────────────────╮
│ %APPDATA%\uv\tools\mistral-vibe\Lib\site-packages\textual\widgets\_option_list.py:881  │
│ in render_lines                                                                                                      │
│                                                                                                                      │
│    878 │   │   return strips[line_offset]                                                                            │
│    879 │                                                                                                             │
│    880 │   def render_lines(self, crop: Region) -> list[Strip]:                                                      │
│ ❱  881 │   │   self._update_lines()                                                                                  │
│    882 │   │   return super().render_lines(crop)                                                                     │
│    883 │                                                                                                             │
│    884 │   def render_line(self, y: int) -> Strip:                                                                   │
│                                                                                                                      │
│ ╭──────────────────────── locals ────────────────────────╮                                                           │
│ │ crop = Region(x=0, y=0, width=116, height=15)          │                                                           │
│ │ self = NavigableOptionList(id='sessionpicker-options') │                                                           │
│ ╰────────────────────────────────────────────────────────╯                                                           │
│                                                                                                                      │
│ %APPDATA%\uv\tools\mistral-vibe\Lib\site-packages\textual\widgets\_option_list.py:826  │
│ in _update_lines                                                                                                     │
│                                                                                                                      │
│    823 │   │   │   for index, option in enumerate(self.options[next_index:], next_index):                            │
│    824 │   │   │   │   line_cache.index_to_line[index] = len(line_cache.lines)                                       │
│    825 │   │   │   │   line_count = (                                                                                │
│ ❱  826 │   │   │   │   │   get_visual(option).get_height(self.styles, width - padding.width)                         │
│    827 │   │   │   │   │   + option._divider                                                                         │
│    828 │   │   │   │   )                                                                                             │
│    829 │   │   │   │   line_cache.heights[index] = line_count                                                        │
│                                                                                                                      │
│ ╭───────────────────────────────────────────────────── locals ─────────────────────────────────────────────────────╮ │
│ │ get_visual = <bound method OptionList._get_visual of NavigableOptionList(id='sessionpicker-options')>            │ │
│ │      index = 1                                                                                                   │ │
│ │ line_cache = _LineCache(lines=[(0, 0)], heights={0: 1}, index_to_line={0: 0, 1: 1})                              │ │
│ │ line_count = 1                                                                                                   │ │
│ │      lines = [(0, 0)]                                                                                            │ │
│ │ next_index = 0                                                                                                   │ │
│ │     option = Option(                                                                                             │ │
│ │              │   <text '5d ago      5c72facb  Press d again to delete' [Span(0, 10, 'dim'), Span(12, 22, 'dim'), │ │
│ │              Span(28, 29, 'b not dim $primary')] ''>,                                                            │ │
│ │              │   id='5c72facb-0057-2d06-29db-e533f829cd3f'                                                       │ │
│ │              )                                                                                                   │ │
│ │    padding = Spacing(top=0, right=0, bottom=0, left=0)                                                           │ │
│ │       self = NavigableOptionList(id='sessionpicker-options')                                                     │ │
│ │      width = 113                                                                                                 │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                                      │
│ %APPDATA%\uv\tools\mistral-vibe\Lib\site-packages\textual\widgets\_option_list.py:763  │
│ in _get_visual                                                                                                       │
│                                                                                                                      │
│    760 │   │                                                                                                         │
│    761 │   │   """
│    762 │   │   if (visual := option._visual) is None:                                                                │
│ ❱  763 │   │   │   visual = visualize(self, option.prompt, markup=self._markup)                                      │
│    764 │   │   │   option._visual = visual                                                                           │
│    765 │   │   return visual                                                                                         │
│    766                                                                                                               │
│                                                                                                                      │
│ ╭───────────────────────────────────────────────────── locals ─────────────────────────────────────────────────────╮ │
│ │ option = Option(                                                                                                 │ │
│ │          │   <text '5d ago      5c72facb  Press d again to delete' [Span(0, 10, 'dim'), Span(12, 22, 'dim'),     │ │
│ │          Span(28, 29, 'b not dim $primary')] ''>,                                                                │ │
│ │          │   id='5c72facb-0057-2d06-29db-e533f829cd3f'                                                           │ │
│ │          )                                                                                                       │ │
│ │   self = NavigableOptionList(id='sessionpicker-options')                                                         │ │
│ │ visual = None                                                                                                    │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                                      │
│ %APPDATA%\uv\tools\mistral-vibe\Lib\site-packages\textual\content.py:341 in            │
│ from_rich_text                                                                                                       │
│                                                                                                                      │
│    338 │   │   │   │   │   start,                                                                                    │
│    339 │   │   │   │   │   end,                                                                                      │
│    340 │   │   │   │   │   (                                                                                         │
│ ❱  341 │   │   │   │   │   │   Style.from_rich_style(get_style(style), ansi_theme)                                   │
│    342 │   │   │   │   │   │   if isinstance(style, str)                                                             │
│    343 │   │   │   │   │   │   else Style.from_rich_style(style, ansi_theme)                                         │
│    344 │   │   │   │   │   ),                                                                                        │
│                                                                                                                      │
│ ╭───────────────────────────────────────────────────── locals ─────────────────────────────────────────────────────╮ │
│ │ ansi_theme = <rich.terminal_theme.TerminalTheme object at 0x0000021134193890>                                    │ │
│ │    console = <console width=120 ColorSystem.TRUECOLOR>                                                           │ │
│ │  get_style = <bound method Console.get_style of <console width=120 ColorSystem.TRUECOLOR>>                       │ │
│ │       text = <text '5d ago      5c72facb  Press d again to delete' [Span(0, 10, 'dim'), Span(12, 22, 'dim'),     │ │
│ │              Span(28, 29, 'b not dim $primary')] ''>                                                             │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                                      │
│ %APPDATA%\uv\tools\mistral-vibe\Lib\site-packages\rich\console.py:1496 in get_style    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
MissingStyle: Failed to get style 'b not dim $primary'; unable to parse '$primary' as color; '$primary' is not a valid
color

Metadata

Metadata

Assignees

No one assigned

    Labels

    CLIRelated to CLIbugSomething isn't working

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions