klaude-code 1.2.28__py3-none-any.whl → 1.2.29__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -167,7 +167,8 @@ class ActivityState:
167
167
  return activity_text
168
168
  if self._composing:
169
169
  # Main status text with creative verb
170
- text = Text("Composing", style=ThemeKey.STATUS_TEXT_BOLD)
170
+ text = Text()
171
+ text.append("Composing", style=ThemeKey.STATUS_TEXT_BOLD)
171
172
  if self._buffer_length > 0:
172
173
  text.append(f" ({self._buffer_length:,})", style=ThemeKey.STATUS_TEXT)
173
174
  return text
@@ -363,6 +364,7 @@ class DisplayEventHandler:
363
364
  emit_osc94(OSC94States.INDETERMINATE)
364
365
  self.renderer.display_turn_start(event)
365
366
  self.spinner_status.clear_for_new_turn()
367
+ self.spinner_status.set_reasoning_status(None)
366
368
  self._update_spinner()
367
369
 
368
370
  async def _on_thinking(self, event: events.ThinkingEvent) -> None:
@@ -1,12 +1,14 @@
1
1
  from rich.console import RenderableType
2
2
  from rich.padding import Padding
3
+ from rich.text import Text
3
4
 
4
5
  from klaude_code import const
5
6
  from klaude_code.ui.renderers.common import create_grid
6
7
  from klaude_code.ui.rich.markdown import NoInsetMarkdown
8
+ from klaude_code.ui.rich.theme import ThemeKey
7
9
 
8
10
  # UI markers
9
- ASSISTANT_MESSAGE_MARK = ""
11
+ ASSISTANT_MESSAGE_MARK = ""
10
12
 
11
13
 
12
14
  def render_assistant_message(content: str, *, code_theme: str) -> RenderableType | None:
@@ -20,7 +22,7 @@ def render_assistant_message(content: str, *, code_theme: str) -> RenderableType
20
22
 
21
23
  grid = create_grid()
22
24
  grid.add_row(
23
- ASSISTANT_MESSAGE_MARK,
25
+ Text(ASSISTANT_MESSAGE_MARK, style=ThemeKey.ASSISTANT_MESSAGE_MARK),
24
26
  Padding(NoInsetMarkdown(stripped, code_theme=code_theme), (0, const.MARKDOWN_RIGHT_MARGIN, 0, 0)),
25
27
  )
26
28
  return grid
@@ -9,6 +9,8 @@ from klaude_code.ui.renderers.tools import render_path
9
9
  from klaude_code.ui.rich.markdown import NoInsetMarkdown
10
10
  from klaude_code.ui.rich.theme import ThemeKey
11
11
 
12
+ REMINDER_BULLET = " ⧉"
13
+
12
14
 
13
15
  def need_render_developer_message(e: events.DeveloperMessageEvent) -> bool:
14
16
  return bool(
@@ -32,7 +34,7 @@ def render_developer_message(e: events.DeveloperMessageEvent) -> RenderableType:
32
34
  if mp := e.item.memory_paths:
33
35
  grid = create_grid()
34
36
  grid.add_row(
35
- Text(" +", style=ThemeKey.REMINDER),
37
+ Text(REMINDER_BULLET, style=ThemeKey.REMINDER),
36
38
  Text.assemble(
37
39
  ("Load memory ", ThemeKey.REMINDER),
38
40
  Text(", ", ThemeKey.REMINDER).join(
@@ -46,7 +48,7 @@ def render_developer_message(e: events.DeveloperMessageEvent) -> RenderableType:
46
48
  grid = create_grid()
47
49
  for file_path in fc:
48
50
  grid.add_row(
49
- Text(" +", style=ThemeKey.REMINDER),
51
+ Text(REMINDER_BULLET, style=ThemeKey.REMINDER),
50
52
  Text.assemble(
51
53
  ("Read ", ThemeKey.REMINDER),
52
54
  render_path(file_path, ThemeKey.REMINDER_BOLD),
@@ -58,7 +60,7 @@ def render_developer_message(e: events.DeveloperMessageEvent) -> RenderableType:
58
60
  if e.item.todo_use:
59
61
  grid = create_grid()
60
62
  grid.add_row(
61
- Text(" +", style=ThemeKey.REMINDER),
63
+ Text(REMINDER_BULLET, style=ThemeKey.REMINDER),
62
64
  Text("Todo hasn't been updated recently", ThemeKey.REMINDER),
63
65
  )
64
66
  parts.append(grid)
@@ -68,7 +70,7 @@ def render_developer_message(e: events.DeveloperMessageEvent) -> RenderableType:
68
70
  for at_file in e.item.at_files:
69
71
  if at_file.mentioned_in:
70
72
  grid.add_row(
71
- Text(" +", style=ThemeKey.REMINDER),
73
+ Text(REMINDER_BULLET, style=ThemeKey.REMINDER),
72
74
  Text.assemble(
73
75
  (f"{at_file.operation} ", ThemeKey.REMINDER),
74
76
  render_path(at_file.path, ThemeKey.REMINDER_BOLD),
@@ -78,7 +80,7 @@ def render_developer_message(e: events.DeveloperMessageEvent) -> RenderableType:
78
80
  )
79
81
  else:
80
82
  grid.add_row(
81
- Text(" +", style=ThemeKey.REMINDER),
83
+ Text(REMINDER_BULLET, style=ThemeKey.REMINDER),
82
84
  Text.assemble(
83
85
  (f"{at_file.operation} ", ThemeKey.REMINDER),
84
86
  render_path(at_file.path, ThemeKey.REMINDER_BOLD),
@@ -89,7 +91,7 @@ def render_developer_message(e: events.DeveloperMessageEvent) -> RenderableType:
89
91
  if uic := e.item.user_image_count:
90
92
  grid = create_grid()
91
93
  grid.add_row(
92
- Text(" +", style=ThemeKey.REMINDER),
94
+ Text(REMINDER_BULLET, style=ThemeKey.REMINDER),
93
95
  Text(f"Attached {uic} image{'s' if uic > 1 else ''}", style=ThemeKey.REMINDER),
94
96
  )
95
97
  parts.append(grid)
@@ -97,7 +99,7 @@ def render_developer_message(e: events.DeveloperMessageEvent) -> RenderableType:
97
99
  if sn := e.item.skill_name:
98
100
  grid = create_grid()
99
101
  grid.add_row(
100
- Text(" +", style=ThemeKey.REMINDER),
102
+ Text(REMINDER_BULLET, style=ThemeKey.REMINDER),
101
103
  Text.assemble(
102
104
  ("Activated skill ", ThemeKey.REMINDER),
103
105
  (sn, ThemeKey.REMINDER_BOLD),
@@ -0,0 +1,58 @@
1
+ from __future__ import annotations
2
+
3
+ import html
4
+ import importlib.resources
5
+ from functools import lru_cache
6
+ from pathlib import Path
7
+
8
+ from klaude_code import const
9
+
10
+
11
+ def artifacts_dir() -> Path:
12
+ return Path(const.TOOL_OUTPUT_TRUNCATION_DIR) / "mermaid"
13
+
14
+
15
+ @lru_cache(maxsize=1)
16
+ def load_template() -> str:
17
+ template_file = importlib.resources.files("klaude_code.session.templates").joinpath("mermaid_viewer.html")
18
+ return template_file.read_text(encoding="utf-8")
19
+
20
+
21
+ def ensure_viewer_file(*, code: str, link: str, tool_call_id: str) -> Path | None:
22
+ """Create a local HTML viewer with large preview + editor."""
23
+
24
+ if not tool_call_id:
25
+ return None
26
+
27
+ safe_id = tool_call_id.replace("/", "_")
28
+ path = artifacts_dir() / f"mermaid-viewer-{safe_id}.html"
29
+ if path.exists():
30
+ return path
31
+
32
+ try:
33
+ path.parent.mkdir(parents=True, exist_ok=True)
34
+
35
+ escaped_code = html.escape(code)
36
+ escaped_view_link = html.escape(link, quote=True)
37
+ escaped_edit_link = html.escape(link.replace("/view#pako:", "/edit#pako:"), quote=True)
38
+
39
+ template = load_template()
40
+ content = (
41
+ template.replace("__KLAUDE_VIEW_LINK__", escaped_view_link)
42
+ .replace("__KLAUDE_EDIT_LINK__", escaped_edit_link)
43
+ .replace("__KLAUDE_CODE__", escaped_code)
44
+ )
45
+ path.write_text(content, encoding="utf-8")
46
+ except OSError:
47
+ return None
48
+
49
+ return path
50
+
51
+
52
+ def build_viewer(*, code: str, link: str, tool_call_id: str) -> Path | None:
53
+ """Create a local Mermaid viewer HTML file.
54
+ """
55
+
56
+ if not code:
57
+ return None
58
+ return ensure_viewer_file(code=code, link=link, tool_call_id=tool_call_id)
@@ -6,12 +6,14 @@ from rich import box
6
6
  from rich.console import Group, RenderableType
7
7
  from rich.padding import Padding
8
8
  from rich.panel import Panel
9
+ from rich.style import Style
9
10
  from rich.text import Text
10
11
 
11
12
  from klaude_code import const
12
13
  from klaude_code.protocol import events, model, tools
13
14
  from klaude_code.protocol.sub_agent import is_sub_agent_tool as _is_sub_agent_tool
14
15
  from klaude_code.ui.renderers import diffs as r_diffs
16
+ from klaude_code.ui.renderers import mermaid_viewer as r_mermaid_viewer
15
17
  from klaude_code.ui.renderers.common import create_grid, truncate_display
16
18
  from klaude_code.ui.rich.markdown import NoInsetMarkdown
17
19
  from klaude_code.ui.rich.theme import ThemeKey
@@ -19,13 +21,13 @@ from klaude_code.ui.rich.theme import ThemeKey
19
21
  # Tool markers (Unicode symbols for UI display)
20
22
  MARK_GENERIC = "⚒"
21
23
  MARK_BASH = "$"
22
- MARK_PLAN = "Ξ"
23
- MARK_READ = ""
24
+ MARK_PLAN = ""
25
+ MARK_READ = ""
24
26
  MARK_EDIT = "±"
25
27
  MARK_WRITE = "+"
26
28
  MARK_MERMAID = "⧉"
27
- MARK_WEB_FETCH = ""
28
- MARK_WEB_SEARCH = ""
29
+ MARK_WEB_FETCH = ""
30
+ MARK_WEB_SEARCH = ""
29
31
  MARK_DONE = "✔"
30
32
  MARK_SKILL = "✪"
31
33
 
@@ -351,6 +353,36 @@ def _truncate_url(url: str, max_length: int = 400) -> str:
351
353
  return display_url[: max_length - 3] + "..."
352
354
 
353
355
 
356
+ def _render_mermaid_viewer_link(
357
+ tr: events.ToolResultEvent,
358
+ link_info: model.MermaidLinkUIExtra,
359
+ *,
360
+ use_osc8: bool,
361
+ ) -> RenderableType:
362
+ viewer_path = r_mermaid_viewer.build_viewer(code=link_info.code, link=link_info.link, tool_call_id=tr.tool_call_id)
363
+ if viewer_path is None:
364
+ return Text(link_info.link, style=ThemeKey.TOOL_PARAM_FILE_PATH, overflow="fold")
365
+
366
+ display_path = str(viewer_path)
367
+
368
+ file_url = ""
369
+ if use_osc8:
370
+ try:
371
+ file_url = viewer_path.resolve().as_uri()
372
+ except ValueError:
373
+ file_url = f"file://{viewer_path.as_posix()}"
374
+
375
+ rendered = Text.assemble(("saved in:", ThemeKey.TOOL_PARAM), " ")
376
+ start = len(rendered)
377
+ rendered.append(display_path, ThemeKey.TOOL_PARAM_FILE_PATH)
378
+ end = len(rendered)
379
+
380
+ if use_osc8 and file_url:
381
+ rendered.stylize(Style(link=file_url), start, end)
382
+
383
+ return rendered
384
+
385
+
354
386
  def render_web_fetch_tool_call(arguments: str) -> RenderableType:
355
387
  grid = create_grid()
356
388
  tool_name_column = Text.assemble((MARK_WEB_FETCH, ThemeKey.TOOL_MARK), " ", ("Fetch", ThemeKey.TOOL_NAME))
@@ -411,17 +443,9 @@ def render_mermaid_tool_result(tr: events.ToolResultEvent) -> RenderableType:
411
443
  if link_info is None:
412
444
  return render_generic_tool_result(tr.result, is_error=tr.status == "error")
413
445
 
414
- if supports_osc8_hyperlinks():
415
- link_text = Text.from_markup(f"[blue u][link={link_info.link}]Command+click to view[/link][/blue u]")
416
- return Padding.indent(link_text, level=2)
417
-
418
- # For terminals that don't support OSC 8, show a hint to use /export
419
- hint_text = Text.assemble(
420
- ("Use ", ThemeKey.TOOL_RESULT),
421
- ("/export", ThemeKey.TOOL_RESULT_BOLD),
422
- (" to view the diagram.", ThemeKey.TOOL_RESULT),
423
- )
424
- return Padding.indent(hint_text, level=2)
446
+ use_osc8 = supports_osc8_hyperlinks()
447
+ viewer = _render_mermaid_viewer_link(tr, link_info, use_osc8=use_osc8)
448
+ return Padding.indent(viewer, level=2)
425
449
 
426
450
 
427
451
  def _extract_truncation(
@@ -139,6 +139,8 @@ class ThemeKey(str, Enum):
139
139
  USER_INPUT_AT_PATTERN = "user.at_pattern"
140
140
  USER_INPUT_SLASH_COMMAND = "user.slash_command"
141
141
  USER_INPUT_SKILL = "user.skill"
142
+ # ASSISTANT
143
+ ASSISTANT_MESSAGE_MARK = "assistant.message_mark"
142
144
  # REMINDER
143
145
  REMINDER = "reminder"
144
146
  REMINDER_BOLD = "reminder.bold"
@@ -179,6 +181,7 @@ class ThemeKey(str, Enum):
179
181
  RESUME_FLAG = "resume.flag"
180
182
  RESUME_INFO = "resume.info"
181
183
  # CONFIGURATION DISPLAY
184
+ CONFIG_PROVIDER = "config.provider"
182
185
  CONFIG_TABLE_HEADER = "config.table.header"
183
186
  CONFIG_STATUS_OK = "config.status.ok"
184
187
  CONFIG_STATUS_PRIMARY = "config.status.primary"
@@ -228,6 +231,8 @@ def get_theme(theme: str | None = None) -> Themes:
228
231
  ThemeKey.USER_INPUT_AT_PATTERN.value: palette.purple,
229
232
  ThemeKey.USER_INPUT_SLASH_COMMAND.value: "bold reverse " + palette.blue,
230
233
  ThemeKey.USER_INPUT_SKILL.value: "bold reverse " + palette.green,
234
+ # ASSISTANT
235
+ ThemeKey.ASSISTANT_MESSAGE_MARK.value: "bold",
231
236
  # METADATA
232
237
  ThemeKey.METADATA.value: palette.lavender,
233
238
  ThemeKey.METADATA_DIM.value: "dim " + palette.lavender,
@@ -285,6 +290,7 @@ def get_theme(theme: str | None = None) -> Themes:
285
290
  ThemeKey.CONFIG_ITEM_NAME.value: palette.cyan,
286
291
  ThemeKey.CONFIG_PARAM_LABEL.value: palette.grey1,
287
292
  ThemeKey.CONFIG_PANEL_BORDER.value: palette.grey3,
293
+ ThemeKey.CONFIG_PROVIDER.value: palette.cyan + " bold",
288
294
  }
289
295
  ),
290
296
  markdown_theme=Theme(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: klaude-code
3
- Version: 1.2.28
3
+ Version: 1.2.29
4
4
  Summary: Minimal code agent CLI
5
5
  Requires-Dist: anthropic>=0.66.0
6
6
  Requires-Dist: chardet>=5.2.0
@@ -7,9 +7,9 @@ klaude_code/auth/codex/oauth.py,sha256=4hAGZ2Dv87NC3loEws7U5yNyPyIrryGm5YXY2FkHe
7
7
  klaude_code/auth/codex/token_manager.py,sha256=F4xH5PhE9cksqTiWsU_YAboNe284VgUFWF2VY1sZV9U,2720
8
8
  klaude_code/cli/__init__.py,sha256=YzlAoWAr5rx5oe6B_4zPxRFS4QaZauuy1AFwampP5fg,45
9
9
  klaude_code/cli/auth_cmd.py,sha256=UWMHjn9xZp2o8OZc-x8y9MnkZgRWOkFXk05iKJYcySE,2561
10
- klaude_code/cli/config_cmd.py,sha256=-DILuXlGbCP2WBXBVxOTVEjCej7z9CWQYO1CBN4dCJA,2783
10
+ klaude_code/cli/config_cmd.py,sha256=hlvslLNgdRHkokq1Pnam0XOdR3jqO3K0vNLqtWnPa6Q,3261
11
11
  klaude_code/cli/debug.py,sha256=cPQ7cgATcJTyBIboleW_Q4Pa_t-tGG6x-Hj3woeeuHE,2669
12
- klaude_code/cli/list_model.py,sha256=5_LJoNgVLRUQaQyT5jNr-WcNEFAaFohFRYk5fE85nRg,9248
12
+ klaude_code/cli/list_model.py,sha256=uA0PNR1RjUK7BCKu2Q0Sh2xB9j9Gpwp_bsWhroTW6JY,9260
13
13
  klaude_code/cli/main.py,sha256=td_nMg0AyFDdyh3TLi7WCpi9DyAehduI4jZSOAaCNXI,12857
14
14
  klaude_code/cli/runtime.py,sha256=EGlfr839OWAJjLSfYHnTxwG7W-IxkmktgDOj8npKkFo,15219
15
15
  klaude_code/cli/self_update.py,sha256=iGuj0i869Zi0M70W52-VVLxZp90ISr30fQpZkHGMK2o,8059
@@ -32,11 +32,11 @@ klaude_code/command/release_notes_cmd.py,sha256=FIrBRfKTlXEp8mBh15buNjgOrl_GMX7F
32
32
  klaude_code/command/status_cmd.py,sha256=sYmzfex7RVhgrBCjRyD8fsZ6ioZvjVzQ_-FvmcsA7fo,5365
33
33
  klaude_code/command/terminal_setup_cmd.py,sha256=SivM1gX_anGY_8DCQNFZ5VblFqt4sVgCMEWPRlo6K5w,10911
34
34
  klaude_code/command/thinking_cmd.py,sha256=8EdSN6huXihM5NHJEryZLA7CkgRT7mZgMVTJsT1-x8U,9108
35
- klaude_code/config/__init__.py,sha256=ZZJfbchFHpkazsEk2MNxbsJUqcCwLG1LLoZVLj-R8nY,220
35
+ klaude_code/config/__init__.py,sha256=Qe1BeMekBfO2-Zd30x33lB70hdM1QQZGrp4DbWSQ-II,353
36
36
  klaude_code/config/assets/__init__.py,sha256=uMUfmXT3I-gYiI-HVr1DrE60mx5cY1o8V7SYuGqOmvY,32
37
37
  klaude_code/config/assets/builtin_config.yaml,sha256=8_ZFxtYirfDvZ5Za9mO7ukTjKjlApfxrdn26cwAiQmI,5352
38
38
  klaude_code/config/builtin_config.py,sha256=RgbawLV4yKk1IhJsQn04RkitDyLLhCwTqQ3nJkdvHGI,1113
39
- klaude_code/config/config.py,sha256=6eseVTYzpIOHnLHq--KcvFkbXgzNtfl5X2uVxZTY2SE,16195
39
+ klaude_code/config/config.py,sha256=rTMU-7IYl_fmthB4LsrCaSgUVttNSw7Agif8XRCmU1g,16331
40
40
  klaude_code/config/select_model.py,sha256=vj4Qs1cl9-u6ucAjDwDvoODmlplwdYo1U57jUcKPya4,7035
41
41
  klaude_code/const.py,sha256=Xc6UKku2sGQE05mvPNCpBbKK205vJrS9CaNAeKvu1AA,4612
42
42
  klaude_code/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -94,7 +94,7 @@ klaude_code/core/tool/tool_runner.py,sha256=A_RviRFr8kF6TjdGOzdgCIingeyJLBxNbZpc
94
94
  klaude_code/core/tool/truncation.py,sha256=YPKzelOM45rHW_OkcfX5_Ojg_pPi8yDZu7lSnwl9b_k,7334
95
95
  klaude_code/core/tool/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
96
  klaude_code/core/tool/web/mermaid_tool.md,sha256=vvPSWxbY3P_cBpHh6AM8Je9JJoMY4FBTJzoteEkwuDU,2095
97
- klaude_code/core/tool/web/mermaid_tool.py,sha256=w_YAWgUjtfhHlNfFmxsiC6gM2rHDVT-R-BcOYOg6o9c,2578
97
+ klaude_code/core/tool/web/mermaid_tool.py,sha256=Dbf9zjXCgQzwGNWC5EXE9Mt6ko5BZB6DN0Bc2r85sP8,2594
98
98
  klaude_code/core/tool/web/web_fetch_tool.md,sha256=jIrW-EAmfl50bBevcfioQ3Vrg8kWlHSut8ze_sRgRGw,486
99
99
  klaude_code/core/tool/web/web_fetch_tool.py,sha256=7WzOsAHdfijROOlk3JixtHUV1D2Cuwnf-AhoznrqATw,8551
100
100
  klaude_code/core/tool/web/web_search_tool.md,sha256=l5gGPx-fXHFel1zLBljm8isy9pwEYXGrq5cFzzw1VBw,1135
@@ -126,7 +126,7 @@ klaude_code/protocol/__init__.py,sha256=aGUgzhYqvhuT3Mk2vj7lrHGriH4h9TSbqV1RsRFA
126
126
  klaude_code/protocol/commands.py,sha256=RjeZYsHxanDaEdBGvw8xt1nBFLiqfXD7I-kPqKFjTdU,678
127
127
  klaude_code/protocol/events.py,sha256=KUMf1rLNdHQO9cZiQ9Pa1VsKkP1PTMbUkp18bu_jGy8,3935
128
128
  klaude_code/protocol/llm_param.py,sha256=cb4ubLq21PIsMOC8WJb0aid12z_sT1b7FsbNJMr-jLg,4255
129
- klaude_code/protocol/model.py,sha256=Dyp3KRPvwNd0MxJkxu0qIKMZpoPmgE79Gq5FsBJaHpU,14238
129
+ klaude_code/protocol/model.py,sha256=zz1DeSkpUWDT-OZBlypaGWA4z78TSeefA-Tj8mJMHp4,14257
130
130
  klaude_code/protocol/op.py,sha256=zG8AGFcTx1vIZFN0lNZjIjucjmDYM4eVOR7tRiLofF4,4589
131
131
  klaude_code/protocol/op_handler.py,sha256=feTMdrz2QBwnjdv6ndizTinbBA9HFeH4oiBDeQBRKoY,1749
132
132
  klaude_code/protocol/sub_agent/__init__.py,sha256=Abap5lPLgnSCQsVD3axfeqnj2UtxOcDLGX8e9HugfSU,3964
@@ -137,11 +137,12 @@ klaude_code/protocol/sub_agent/web.py,sha256=Z5vUM367kz8CIexN6UVPG4XxzVOaaRek-Ga
137
137
  klaude_code/protocol/tools.py,sha256=OpGCr47ARKaCHcIlljhEN-p-2h4djgbP5jtfTIoKB-A,359
138
138
  klaude_code/session/__init__.py,sha256=oXcDA5w-gJCbzmlF8yuWy3ezIW9DgFBNUs-gJHUJ-Rc,121
139
139
  klaude_code/session/codec.py,sha256=ummbqT7t6uHHXtaS9lOkyhi1h0YpMk7SNSms8DyGAHU,2015
140
- klaude_code/session/export.py,sha256=Ool-6mxesX_DedaJpGi_2r3HuB1VChr8KRXl4jwT6vQ,31128
140
+ klaude_code/session/export.py,sha256=dj-IRUNtXL8uONDj9bsEXcEHKyeHY7lIcXv80yP88h4,31022
141
141
  klaude_code/session/selector.py,sha256=uJQTQAw1ce9LzNOswSFEPkB7_PTzoJRXbA9rwK8hvdQ,2913
142
- klaude_code/session/session.py,sha256=P5FBbXJ9x_npBkSBD1c-QTcdamp1-4xBDfETgg5edEM,17030
142
+ klaude_code/session/session.py,sha256=otWpPnCk5LGS5IW_zTdeXBtLdxbBlEK2jH5FnrOIpF4,16969
143
143
  klaude_code/session/store.py,sha256=-e-lInCB3N1nFLlet7bipkmPk1PXmGthuMxv5z3hg5o,6953
144
144
  klaude_code/session/templates/export_session.html,sha256=bA27AkcC7DQRoWmcMBeaR8WOx1z76hezEDf0aYH-0HQ,119780
145
+ klaude_code/session/templates/mermaid_viewer.html,sha256=lOkETxlctX1C1WJtS1wFw6KhNQmemxwJZFpXDSjlMOk,27842
145
146
  klaude_code/skill/__init__.py,sha256=yeWeCfRGPOhT4mx_pjdo4fLondQ_Vx0edBtnFusLhls,839
146
147
  klaude_code/skill/assets/deslop/SKILL.md,sha256=XMBER6gOyYnZof_u7l30CZSzmDcINe8XP-n_loah0EQ,873
147
148
  klaude_code/skill/assets/dev-docs/SKILL.md,sha256=eHI9v44KZAOcptlnAVp2aq2Ms7WGhncm-zmGUPGmhU8,3810
@@ -167,20 +168,21 @@ klaude_code/ui/modes/repl/__init__.py,sha256=_0II73jlz5JUtvJsZ9sGRJzeHIQyJJpaI0e
167
168
  klaude_code/ui/modes/repl/clipboard.py,sha256=ZCpk7kRSXGhh0Q_BWtUUuSYT7ZOqRjAoRcg9T9n48Wo,5137
168
169
  klaude_code/ui/modes/repl/completers.py,sha256=AElBFnWculNsSadom7ScnKf-P_vilC4V5AUn2qpRkXE,30005
169
170
  klaude_code/ui/modes/repl/display.py,sha256=06wawOHWO2ItEA9EIEh97p3GDID7TJhAtpaA03nPQXs,2335
170
- klaude_code/ui/modes/repl/event_handler.py,sha256=iimcdcoEKJYOCYXoocYefNsSuRgbUvB85_1dspvh1F4,25694
171
+ klaude_code/ui/modes/repl/event_handler.py,sha256=ksQYSjHlTTAPfVdk6fGZLzRRKNozDUUg38c3Tgp3lWw,25775
171
172
  klaude_code/ui/modes/repl/input_prompt_toolkit.py,sha256=5OqFRphfTvy46M7lrX7CCLSYGRSmXAfJzGJnXQR-NX4,7748
172
173
  klaude_code/ui/modes/repl/key_bindings.py,sha256=gc7b0s5S_mYC-__OJMtNcx-JxSm1DKof-hodj2XKfiY,7896
173
174
  klaude_code/ui/modes/repl/renderer.py,sha256=7cum6SuKSuuBePDSyk4UvWs6q5dwgLA0NrJZ3eD9tHw,15902
174
175
  klaude_code/ui/renderers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
175
- klaude_code/ui/renderers/assistant.py,sha256=nO_QNJ2e9TwtU2IlojO9lCMWNFUNmcE9Ezz-WW748_w,743
176
+ klaude_code/ui/renderers/assistant.py,sha256=7iu5zlHR7JGviHs2eA25Dsbd7ZkzCR2_0XzkqMPVxDI,862
176
177
  klaude_code/ui/renderers/common.py,sha256=_EEgx7GTWk2eV8wEGcRcMmkeOBCMU9kjF2ZneM03V3s,2535
177
- klaude_code/ui/renderers/developer.py,sha256=e1oc5D9EbrWuUIGpTC3IHTgYdp1RZ5eJmaSK6hCW_UY,7679
178
+ klaude_code/ui/renderers/developer.py,sha256=RrJsZphGdjuphIuTDnU1ivJ6tc-a3ndBvuyU17MQSQs,7776
178
179
  klaude_code/ui/renderers/diffs.py,sha256=uLpgYTudH38wucozoUw4xbPWMC6uYTQTaDTHcg-0zvM,10418
179
180
  klaude_code/ui/renderers/errors.py,sha256=-geQA6neIkeQK_m0jaboSdVHmO61qd9620lo1a029bU,656
181
+ klaude_code/ui/renderers/mermaid_viewer.py,sha256=49ZiaR5sb1363PJMbbos5d7A2xH2RKVIS6zM24JIRVA,1696
180
182
  klaude_code/ui/renderers/metadata.py,sha256=_3OIAgnssoz05lq9t8Hm-3zlRWyfYzOTPSwG6guVKiE,8223
181
183
  klaude_code/ui/renderers/sub_agent.py,sha256=g8QCFXTtFX_w8oTaGMYGuy6u5KqbFMlvzWofER0hGKk,5946
182
184
  klaude_code/ui/renderers/thinking.py,sha256=nwKotPFS3WInsdrHFquqOHyvR8dTEKZ0JS5SMKJ_GgA,1946
183
- klaude_code/ui/renderers/tools.py,sha256=KFNawj2zP4X9KodWBLVIRF2o2U71Okw9FfmwA1sTgoU,23710
185
+ klaude_code/ui/renderers/tools.py,sha256=j-OEbmQPEGBxXNrRmhph23aRXsFR37YQHiLJUmXZMGU,24394
184
186
  klaude_code/ui/renderers/user_input.py,sha256=e2hZS7UUnzQuQ6UqzSKRDkFJMkKTLUoub1JclHMX40g,3941
185
187
  klaude_code/ui/rich/__init__.py,sha256=zEZjnHR3Fnv_sFMxwIMjoJfwDoC4GRGv3lHJzAGRq_o,236
186
188
  klaude_code/ui/rich/cjk_wrap.py,sha256=ncmifgTwF6q95iayHQyazGbntt7BRQb_Ed7aXc8JU6Y,7551
@@ -190,7 +192,7 @@ klaude_code/ui/rich/markdown.py,sha256=ltcm4qVX6fsqUNkPWeOwX636FsQ6-gST6uLLcXAl9
190
192
  klaude_code/ui/rich/quote.py,sha256=tZcxN73SfDBHF_qk0Jkh9gWBqPBn8VLp9RF36YRdKEM,1123
191
193
  klaude_code/ui/rich/searchable_text.py,sha256=DCVZgEFv7_ergAvT2v7XrfQAUXUzhmAwuVAchlIx8RY,2448
192
194
  klaude_code/ui/rich/status.py,sha256=QHg4oWmPSQH19H81vOFpImEqWyDtAbIXjuCGsuDjBPA,9278
193
- klaude_code/ui/rich/theme.py,sha256=eG69OjiTDjJxEXOgEli6EDm9S3djoAVfy_QPXLf-f3k,13391
195
+ klaude_code/ui/rich/theme.py,sha256=4y9suVR_ILx9w6iq8VYfPlCav1tFMqXlfbSH6sMotdA,13664
194
196
  klaude_code/ui/terminal/__init__.py,sha256=GIMnsEcIAGT_vBHvTlWEdyNmAEpruyscUA6M_j3GQZU,1412
195
197
  klaude_code/ui/terminal/color.py,sha256=jvVbuysf5pnI0uAjUVeyW2HwU58dutTg2msykbu2w4Y,7197
196
198
  klaude_code/ui/terminal/control.py,sha256=WhkqEWdtzUO4iWULp-iI9VazAWmzzW52qTQXk-4Dr4s,4922
@@ -198,7 +200,7 @@ klaude_code/ui/terminal/notifier.py,sha256=wkRM66d98Oh6PujnN4bB7NiQxIYEHqQXverMK
198
200
  klaude_code/ui/terminal/progress_bar.py,sha256=MDnhPbqCnN4GDgLOlxxOEVZPDwVC_XL2NM5sl1MFNcQ,2133
199
201
  klaude_code/ui/utils/__init__.py,sha256=YEsCLjbCPaPza-UXTPUMTJTrc9BmNBUP5CbFWlshyOQ,15
200
202
  klaude_code/ui/utils/common.py,sha256=tqHqwgLtAyP805kwRFyoAL4EgMutcNb3Y-GAXJ4IeuM,2263
201
- klaude_code-1.2.28.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
202
- klaude_code-1.2.28.dist-info/entry_points.txt,sha256=kkXIXedaTOtjXPr2rVjRVVXZYlFUcBHELaqmyVlWUFA,92
203
- klaude_code-1.2.28.dist-info/METADATA,sha256=YgDl2WjdndyfpyLcS70-1184bdcDCJqWaQ1eo8AUgfQ,9126
204
- klaude_code-1.2.28.dist-info/RECORD,,
203
+ klaude_code-1.2.29.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
204
+ klaude_code-1.2.29.dist-info/entry_points.txt,sha256=kkXIXedaTOtjXPr2rVjRVVXZYlFUcBHELaqmyVlWUFA,92
205
+ klaude_code-1.2.29.dist-info/METADATA,sha256=AM4qoSRDwJ6fZq7HRJ6a7wNuN_BjGdoUAm_0rVxr6i8,9126
206
+ klaude_code-1.2.29.dist-info/RECORD,,