klaude-code 1.2.27__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.
Files changed (39) hide show
  1. klaude_code/cli/config_cmd.py +13 -6
  2. klaude_code/cli/debug.py +9 -1
  3. klaude_code/cli/list_model.py +1 -1
  4. klaude_code/cli/main.py +39 -14
  5. klaude_code/cli/runtime.py +11 -5
  6. klaude_code/command/__init__.py +3 -0
  7. klaude_code/command/export_online_cmd.py +15 -12
  8. klaude_code/command/fork_session_cmd.py +42 -0
  9. klaude_code/config/__init__.py +11 -1
  10. klaude_code/config/config.py +21 -17
  11. klaude_code/config/select_model.py +1 -0
  12. klaude_code/core/executor.py +2 -1
  13. klaude_code/core/reminders.py +52 -16
  14. klaude_code/core/tool/web/mermaid_tool.md +17 -0
  15. klaude_code/core/tool/web/mermaid_tool.py +2 -2
  16. klaude_code/llm/openai_compatible/tool_call_accumulator.py +17 -1
  17. klaude_code/protocol/commands.py +1 -0
  18. klaude_code/protocol/model.py +2 -0
  19. klaude_code/session/export.py +61 -17
  20. klaude_code/session/session.py +23 -1
  21. klaude_code/session/templates/mermaid_viewer.html +926 -0
  22. klaude_code/trace/log.py +7 -1
  23. klaude_code/ui/modes/repl/__init__.py +3 -44
  24. klaude_code/ui/modes/repl/completers.py +35 -3
  25. klaude_code/ui/modes/repl/event_handler.py +9 -5
  26. klaude_code/ui/modes/repl/input_prompt_toolkit.py +32 -65
  27. klaude_code/ui/modes/repl/renderer.py +1 -6
  28. klaude_code/ui/renderers/assistant.py +4 -2
  29. klaude_code/ui/renderers/common.py +11 -4
  30. klaude_code/ui/renderers/developer.py +26 -7
  31. klaude_code/ui/renderers/errors.py +10 -5
  32. klaude_code/ui/renderers/mermaid_viewer.py +58 -0
  33. klaude_code/ui/renderers/tools.py +46 -18
  34. klaude_code/ui/rich/markdown.py +4 -4
  35. klaude_code/ui/rich/theme.py +12 -2
  36. {klaude_code-1.2.27.dist-info → klaude_code-1.2.29.dist-info}/METADATA +1 -1
  37. {klaude_code-1.2.27.dist-info → klaude_code-1.2.29.dist-info}/RECORD +39 -36
  38. {klaude_code-1.2.27.dist-info → klaude_code-1.2.29.dist-info}/entry_points.txt +1 -0
  39. {klaude_code-1.2.27.dist-info → klaude_code-1.2.29.dist-info}/WHEEL +0 -0
@@ -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
 
@@ -205,9 +207,13 @@ def render_write_tool_call(arguments: str) -> RenderableType:
205
207
  grid = create_grid()
206
208
  try:
207
209
  json_dict = json.loads(arguments)
208
- file_path = json_dict.get("file_path")
210
+ file_path = json_dict.get("file_path", "")
209
211
  tool_name_column = Text.assemble((MARK_WRITE, ThemeKey.TOOL_MARK), " ", ("Write", ThemeKey.TOOL_NAME))
210
- arguments_column = render_path(file_path, ThemeKey.TOOL_PARAM_FILE_PATH)
212
+ # Markdown files show path in result panel, skip here to avoid duplication
213
+ if file_path.endswith(".md"):
214
+ arguments_column = Text("")
215
+ else:
216
+ arguments_column = render_path(file_path, ThemeKey.TOOL_PARAM_FILE_PATH)
211
217
  except json.JSONDecodeError:
212
218
  tool_name_column = Text.assemble((MARK_WRITE, ThemeKey.TOOL_MARK), " ", ("Write", ThemeKey.TOOL_NAME))
213
219
  arguments_column = Text(
@@ -347,6 +353,36 @@ def _truncate_url(url: str, max_length: int = 400) -> str:
347
353
  return display_url[: max_length - 3] + "..."
348
354
 
349
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
+
350
386
  def render_web_fetch_tool_call(arguments: str) -> RenderableType:
351
387
  grid = create_grid()
352
388
  tool_name_column = Text.assemble((MARK_WEB_FETCH, ThemeKey.TOOL_MARK), " ", ("Fetch", ThemeKey.TOOL_NAME))
@@ -407,17 +443,9 @@ def render_mermaid_tool_result(tr: events.ToolResultEvent) -> RenderableType:
407
443
  if link_info is None:
408
444
  return render_generic_tool_result(tr.result, is_error=tr.status == "error")
409
445
 
410
- if supports_osc8_hyperlinks():
411
- link_text = Text.from_markup(f"[blue u][link={link_info.link}]Command+click to view[/link][/blue u]")
412
- return Padding.indent(link_text, level=2)
413
-
414
- # For terminals that don't support OSC 8, show a hint to use /export
415
- hint_text = Text.assemble(
416
- ("Use ", ThemeKey.TOOL_RESULT),
417
- ("/export", ThemeKey.TOOL_RESULT_BOLD),
418
- (" to view the diagram.", ThemeKey.TOOL_RESULT),
419
- )
420
- 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)
421
449
 
422
450
 
423
451
  def _extract_truncation(
@@ -569,7 +597,7 @@ def render_tool_result(e: events.ToolResultEvent, *, code_theme: str = "monokai"
569
597
  # Handle error case
570
598
  if e.status == "error" and e.ui_extra is None:
571
599
  error_msg = truncate_display(e.result)
572
- return r_errors.render_error(error_msg)
600
+ return r_errors.render_tool_error(error_msg)
573
601
 
574
602
  # Render multiple ui blocks if present
575
603
  if isinstance(e.ui_extra, model.MultiUIExtra) and e.ui_extra.items:
@@ -54,11 +54,11 @@ class Divider(MarkdownElement):
54
54
  yield Rule(style=style, characters="-")
55
55
 
56
56
 
57
- class MinimalHeavyHeadTable(TableElement):
57
+ class MarkdownTable(TableElement):
58
58
  """A table element with MINIMAL_HEAVY_HEAD box style."""
59
59
 
60
60
  def __rich_console__(self, console: Console, options: ConsoleOptions) -> RenderResult:
61
- table = Table(box=box.MARKDOWN)
61
+ table = Table(box=box.MARKDOWN, border_style=console.get_style("markdown.table.border"))
62
62
 
63
63
  if self.header is not None and self.header.row is not None:
64
64
  for column in self.header.row.cells:
@@ -97,7 +97,7 @@ class NoInsetMarkdown(Markdown):
97
97
  "code_block": NoInsetCodeBlock,
98
98
  "heading_open": LeftHeading,
99
99
  "hr": Divider,
100
- "table_open": MinimalHeavyHeadTable,
100
+ "table_open": MarkdownTable,
101
101
  }
102
102
 
103
103
 
@@ -110,7 +110,7 @@ class ThinkingMarkdown(Markdown):
110
110
  "code_block": ThinkingCodeBlock,
111
111
  "heading_open": LeftHeading,
112
112
  "hr": Divider,
113
- "table_open": MinimalHeavyHeadTable,
113
+ "table_open": MarkdownTable,
114
114
  }
115
115
 
116
116
 
@@ -130,6 +130,7 @@ class ThemeKey(str, Enum):
130
130
  STATUS_SPINNER = "spinner.status"
131
131
  STATUS_TEXT = "spinner.status.text"
132
132
  STATUS_TEXT_BOLD = "spinner.status.text.bold"
133
+ STATUS_TEXT_BOLD_ITALIC = "spinner.status.text.bold_italic"
133
134
  # STATUS
134
135
  STATUS_HINT = "status.hint"
135
136
  # USER_INPUT
@@ -138,6 +139,8 @@ class ThemeKey(str, Enum):
138
139
  USER_INPUT_AT_PATTERN = "user.at_pattern"
139
140
  USER_INPUT_SLASH_COMMAND = "user.slash_command"
140
141
  USER_INPUT_SKILL = "user.skill"
142
+ # ASSISTANT
143
+ ASSISTANT_MESSAGE_MARK = "assistant.message_mark"
141
144
  # REMINDER
142
145
  REMINDER = "reminder"
143
146
  REMINDER_BOLD = "reminder.bold"
@@ -178,6 +181,7 @@ class ThemeKey(str, Enum):
178
181
  RESUME_FLAG = "resume.flag"
179
182
  RESUME_INFO = "resume.info"
180
183
  # CONFIGURATION DISPLAY
184
+ CONFIG_PROVIDER = "config.provider"
181
185
  CONFIG_TABLE_HEADER = "config.table.header"
182
186
  CONFIG_STATUS_OK = "config.status.ok"
183
187
  CONFIG_STATUS_PRIMARY = "config.status.primary"
@@ -222,11 +226,13 @@ def get_theme(theme: str | None = None) -> Themes:
222
226
  ThemeKey.ERROR_BOLD.value: "bold " + palette.red,
223
227
  ThemeKey.INTERRUPT.value: "reverse bold " + palette.red,
224
228
  # USER_INPUT
225
- ThemeKey.USER_INPUT.value: "bold " + palette.magenta,
229
+ ThemeKey.USER_INPUT.value: palette.magenta,
226
230
  ThemeKey.USER_INPUT_PROMPT.value: "bold " + palette.magenta,
227
231
  ThemeKey.USER_INPUT_AT_PATTERN.value: palette.purple,
228
232
  ThemeKey.USER_INPUT_SLASH_COMMAND.value: "bold reverse " + palette.blue,
229
233
  ThemeKey.USER_INPUT_SKILL.value: "bold reverse " + palette.green,
234
+ # ASSISTANT
235
+ ThemeKey.ASSISTANT_MESSAGE_MARK.value: "bold",
230
236
  # METADATA
231
237
  ThemeKey.METADATA.value: palette.lavender,
232
238
  ThemeKey.METADATA_DIM.value: "dim " + palette.lavender,
@@ -234,7 +240,8 @@ def get_theme(theme: str | None = None) -> Themes:
234
240
  # STATUS
235
241
  ThemeKey.STATUS_SPINNER.value: palette.blue,
236
242
  ThemeKey.STATUS_TEXT.value: palette.blue,
237
- ThemeKey.STATUS_TEXT_BOLD.value: "bold italic " + palette.blue,
243
+ ThemeKey.STATUS_TEXT_BOLD.value: "bold " + palette.blue,
244
+ ThemeKey.STATUS_TEXT_BOLD_ITALIC.value: "bold italic " + palette.blue,
238
245
  ThemeKey.STATUS_HINT.value: palette.grey2,
239
246
  # REMINDER
240
247
  ThemeKey.REMINDER.value: palette.grey1,
@@ -283,6 +290,7 @@ def get_theme(theme: str | None = None) -> Themes:
283
290
  ThemeKey.CONFIG_ITEM_NAME.value: palette.cyan,
284
291
  ThemeKey.CONFIG_PARAM_LABEL.value: palette.grey1,
285
292
  ThemeKey.CONFIG_PANEL_BORDER.value: palette.grey3,
293
+ ThemeKey.CONFIG_PROVIDER.value: palette.cyan + " bold",
286
294
  }
287
295
  ),
288
296
  markdown_theme=Theme(
@@ -299,6 +307,7 @@ def get_theme(theme: str | None = None) -> Themes:
299
307
  "markdown.item.number": palette.grey2,
300
308
  "markdown.link": "underline " + palette.blue,
301
309
  "markdown.link_url": "underline " + palette.blue,
310
+ "markdown.table.border": palette.grey2,
302
311
  }
303
312
  ),
304
313
  thinking_markdown_theme=Theme(
@@ -319,6 +328,7 @@ def get_theme(theme: str | None = None) -> Themes:
319
328
  "markdown.link": "underline " + palette.blue,
320
329
  "markdown.link_url": "underline " + palette.blue,
321
330
  "markdown.strong": "bold italic " + palette.grey1,
331
+ "markdown.table.border": palette.grey2,
322
332
  }
323
333
  ),
324
334
  code_theme=palette.code_theme,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: klaude-code
3
- Version: 1.2.27
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,19 +7,20 @@ 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
11
- klaude_code/cli/debug.py,sha256=vizBXc3648vBZQonreMqvv_b5UdRgcQoOIT-iEIx1G4,2318
12
- klaude_code/cli/list_model.py,sha256=5_LJoNgVLRUQaQyT5jNr-WcNEFAaFohFRYk5fE85nRg,9248
13
- klaude_code/cli/main.py,sha256=IeVzoZdbNBtJXxX2-hQ_aS4k_82rD4q2DoN_p0ORpBo,11851
14
- klaude_code/cli/runtime.py,sha256=nouK0H8IOxmbSHELikLz-QIHJg0HirVblCbHSRIZK1c,14891
10
+ klaude_code/cli/config_cmd.py,sha256=hlvslLNgdRHkokq1Pnam0XOdR3jqO3K0vNLqtWnPa6Q,3261
11
+ klaude_code/cli/debug.py,sha256=cPQ7cgATcJTyBIboleW_Q4Pa_t-tGG6x-Hj3woeeuHE,2669
12
+ klaude_code/cli/list_model.py,sha256=uA0PNR1RjUK7BCKu2Q0Sh2xB9j9Gpwp_bsWhroTW6JY,9260
13
+ klaude_code/cli/main.py,sha256=td_nMg0AyFDdyh3TLi7WCpi9DyAehduI4jZSOAaCNXI,12857
14
+ klaude_code/cli/runtime.py,sha256=EGlfr839OWAJjLSfYHnTxwG7W-IxkmktgDOj8npKkFo,15219
15
15
  klaude_code/cli/self_update.py,sha256=iGuj0i869Zi0M70W52-VVLxZp90ISr30fQpZkHGMK2o,8059
16
16
  klaude_code/cli/session_cmd.py,sha256=mVL2fDi76nmpK2bWYrU7Wh6jCi90A9YK8hv3UNo4GI0,2661
17
- klaude_code/command/__init__.py,sha256=B39fxrrvxb51B6qeQJoh3lXWCsPoI81BJvdSLb-8CYg,3117
17
+ klaude_code/command/__init__.py,sha256=8igz3QYo0lST-OSRQ4jwUvq1BRbj60OtRuNgL9ZrAqA,3255
18
18
  klaude_code/command/clear_cmd.py,sha256=DzCg6vQ5Eve7Rx4HdL-uta1pBDRQinOW6nwx5YlOA24,658
19
19
  klaude_code/command/command_abc.py,sha256=wUGE8NkCWWKy8lZXcW-UcQyMGnVikxTrCIycLlPU5dY,2350
20
20
  klaude_code/command/debug_cmd.py,sha256=9sBIAwHz28QoI-tHsU3ksQlDObF1ilIbtAAEAVMR0v0,2734
21
21
  klaude_code/command/export_cmd.py,sha256=Cs7YXWtos-ZfN9OEppIl8Xrb017kDG7R6hGiilqt2bM,1623
22
- klaude_code/command/export_online_cmd.py,sha256=kOVmFEW7gEEFvaKnXL8suNenktLyTW-13bT64NBGwUQ,5861
22
+ klaude_code/command/export_online_cmd.py,sha256=RYYLnkLtg6edsgysmhsfTw16ncFRIT6PqeTdWhWXLHE,6094
23
+ klaude_code/command/fork_session_cmd.py,sha256=t2viSAswSDnRjVdA3r40jN9uHHN4SNBe16fF7z2oeAo,1586
23
24
  klaude_code/command/help_cmd.py,sha256=yQJnVtj6sgXQdGsi4u9aS7EcjJLSrXccUA-v_bqmsRw,1633
24
25
  klaude_code/command/model_cmd.py,sha256=GmDln1N6u7eWLK15tm_lcdDJBY8qI0ih48h6AhijafI,1665
25
26
  klaude_code/command/prompt-init.md,sha256=a4_FQ3gKizqs2vl9oEY5jtG6HNhv3f-1b5RSCFq0A18,1873
@@ -31,16 +32,16 @@ klaude_code/command/release_notes_cmd.py,sha256=FIrBRfKTlXEp8mBh15buNjgOrl_GMX7F
31
32
  klaude_code/command/status_cmd.py,sha256=sYmzfex7RVhgrBCjRyD8fsZ6ioZvjVzQ_-FvmcsA7fo,5365
32
33
  klaude_code/command/terminal_setup_cmd.py,sha256=SivM1gX_anGY_8DCQNFZ5VblFqt4sVgCMEWPRlo6K5w,10911
33
34
  klaude_code/command/thinking_cmd.py,sha256=8EdSN6huXihM5NHJEryZLA7CkgRT7mZgMVTJsT1-x8U,9108
34
- klaude_code/config/__init__.py,sha256=ZZJfbchFHpkazsEk2MNxbsJUqcCwLG1LLoZVLj-R8nY,220
35
+ klaude_code/config/__init__.py,sha256=Qe1BeMekBfO2-Zd30x33lB70hdM1QQZGrp4DbWSQ-II,353
35
36
  klaude_code/config/assets/__init__.py,sha256=uMUfmXT3I-gYiI-HVr1DrE60mx5cY1o8V7SYuGqOmvY,32
36
37
  klaude_code/config/assets/builtin_config.yaml,sha256=8_ZFxtYirfDvZ5Za9mO7ukTjKjlApfxrdn26cwAiQmI,5352
37
38
  klaude_code/config/builtin_config.py,sha256=RgbawLV4yKk1IhJsQn04RkitDyLLhCwTqQ3nJkdvHGI,1113
38
- klaude_code/config/config.py,sha256=6eseVTYzpIOHnLHq--KcvFkbXgzNtfl5X2uVxZTY2SE,16195
39
- klaude_code/config/select_model.py,sha256=nNA2gsV8Bd2grCFBGFO_Z1-56rehD76s_bWUBwhQN1U,6958
39
+ klaude_code/config/config.py,sha256=rTMU-7IYl_fmthB4LsrCaSgUVttNSw7Agif8XRCmU1g,16331
40
+ klaude_code/config/select_model.py,sha256=vj4Qs1cl9-u6ucAjDwDvoODmlplwdYo1U57jUcKPya4,7035
40
41
  klaude_code/const.py,sha256=Xc6UKku2sGQE05mvPNCpBbKK205vJrS9CaNAeKvu1AA,4612
41
42
  klaude_code/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
43
  klaude_code/core/agent.py,sha256=bWm-UFX_0-KAy5j_YHH8X8o3MJT4-40Ni2EaDP2SL5k,5819
43
- klaude_code/core/executor.py,sha256=peSYJhYd5g85vFDrtSzO6HyMGNhCIZGcl-df7gDT-CQ,26841
44
+ klaude_code/core/executor.py,sha256=wykM6_lsumuJbVw0q4H9KdZ7nWWDR4RWSGr2dtqRYTw,26955
44
45
  klaude_code/core/manager/__init__.py,sha256=hdIbpnYj6i18byiWjtJIm5l7NYYDQMvafw8fePVPydc,562
45
46
  klaude_code/core/manager/llm_clients.py,sha256=X2oMFWgJcP0tK8GEtMMDYR3HyR6_H8FuyCqpzWF5x2k,871
46
47
  klaude_code/core/manager/llm_clients_builder.py,sha256=vvNV6hSpWtUCMZORQN6OfFWyA_3OAOGS5SFGy6oaKMs,1641
@@ -56,7 +57,7 @@ klaude_code/core/prompts/prompt-sub-agent-explore.md,sha256=21kFodjhvN0L-c_ZFo4y
56
57
  klaude_code/core/prompts/prompt-sub-agent-oracle.md,sha256=1PLI3snvxnenCOPVrL0IxZnBl5b2xxGhlufHAyLyf60,1376
57
58
  klaude_code/core/prompts/prompt-sub-agent-web.md,sha256=ewS7-h8_u4QZftFpqrZWpht9Ap08s7zF9D4k4md8oD8,2360
58
59
  klaude_code/core/prompts/prompt-sub-agent.md,sha256=dmmdsOenbAOfqG6FmdR88spOLZkXmntDBs-cmZ9DN_g,897
59
- klaude_code/core/reminders.py,sha256=ivY7k2Iw9XVgsWfMDckSGsbonFRgGjCJM8MeI0dzuEs,23448
60
+ klaude_code/core/reminders.py,sha256=M_YPlOuZ2TpTjoxfEp1FbswB4yuk9_XUgSGb9MoMBCA,24741
60
61
  klaude_code/core/task.py,sha256=yJAcs_hFm1NYaLbjj-qbGiJr65Nu76uLD2lGGfseYYg,11773
61
62
  klaude_code/core/tool/__init__.py,sha256=fOEwgJMGHT8NkYYE6l1FZ0fDRUmHzC6laA8wESo9j60,1939
62
63
  klaude_code/core/tool/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -92,8 +93,8 @@ klaude_code/core/tool/tool_registry.py,sha256=VFB0Z4BWtYKIWtpZVGhjSLcgfK244gow_U
92
93
  klaude_code/core/tool/tool_runner.py,sha256=A_RviRFr8kF6TjdGOzdgCIingeyJLBxNbZpcTnzT64E,10695
93
94
  klaude_code/core/tool/truncation.py,sha256=YPKzelOM45rHW_OkcfX5_Ojg_pPi8yDZu7lSnwl9b_k,7334
94
95
  klaude_code/core/tool/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
95
- klaude_code/core/tool/web/mermaid_tool.md,sha256=gyNkf1rSra-_4EyDFJOyoLBg8CoADVkEcWEuJFFz2VM,1564
96
- klaude_code/core/tool/web/mermaid_tool.py,sha256=Ok0A27oHLnV1c__74bheUuy3wpqDJ1zaXUSxuuqsNPI,2630
96
+ klaude_code/core/tool/web/mermaid_tool.md,sha256=vvPSWxbY3P_cBpHh6AM8Je9JJoMY4FBTJzoteEkwuDU,2095
97
+ klaude_code/core/tool/web/mermaid_tool.py,sha256=Dbf9zjXCgQzwGNWC5EXE9Mt6ko5BZB6DN0Bc2r85sP8,2594
97
98
  klaude_code/core/tool/web/web_fetch_tool.md,sha256=jIrW-EAmfl50bBevcfioQ3Vrg8kWlHSut8ze_sRgRGw,486
98
99
  klaude_code/core/tool/web/web_fetch_tool.py,sha256=7WzOsAHdfijROOlk3JixtHUV1D2Cuwnf-AhoznrqATw,8551
99
100
  klaude_code/core/tool/web/web_search_tool.md,sha256=l5gGPx-fXHFel1zLBljm8isy9pwEYXGrq5cFzzw1VBw,1135
@@ -111,7 +112,7 @@ klaude_code/llm/openai_compatible/__init__.py,sha256=ACGpnki7k53mMcCl591aw99pm9j
111
112
  klaude_code/llm/openai_compatible/client.py,sha256=sMzHxaDZ4CRDgwSr1pZPqpG6YbHJA-Zk0cFyC_r-ihA,4396
112
113
  klaude_code/llm/openai_compatible/input.py,sha256=rtWVjpwb9tLrinucezmncQXet8MerUxE5Gxc32sfDr4,3750
113
114
  klaude_code/llm/openai_compatible/stream.py,sha256=KeB3FhfvIq_NkYJTUlyv_aV9DVu4OLxTf9_oij6kwD0,10839
114
- klaude_code/llm/openai_compatible/tool_call_accumulator.py,sha256=kuw3ceDgenQz2Ccc9KYqBkDo6F1sDb5Aga6m41AIECA,4071
115
+ klaude_code/llm/openai_compatible/tool_call_accumulator.py,sha256=Tpcs2od48qNXSCHGNyzgJcFa2jlsCFuZOGK1DoOmj3o,4651
115
116
  klaude_code/llm/openrouter/__init__.py,sha256=_As8lHjwj6vapQhLorZttTpukk5ZiCdhFdGT38_ASPo,69
116
117
  klaude_code/llm/openrouter/client.py,sha256=zUkH7wkiYUJMGS_8iaVwdhzUnry7WLw4Q1IDQtncmK0,4864
117
118
  klaude_code/llm/openrouter/input.py,sha256=aHVJCejkwzWaTM_EBbgmzKWyZfttAws2Y7QDW_NCnZk,5671
@@ -122,10 +123,10 @@ klaude_code/llm/responses/client.py,sha256=XEsVehevQJ0WFbEVxIkI-su7VwIcaeq0P9eSr
122
123
  klaude_code/llm/responses/input.py,sha256=qr61LmQJdcb_f-ofrAz06WpK_k4PEcI36XsyuZAXbKk,6805
123
124
  klaude_code/llm/usage.py,sha256=cq6yZNSKBhRVVjFqBYJQrK3mw9ZSLXaTpbDeal-BjBQ,4205
124
125
  klaude_code/protocol/__init__.py,sha256=aGUgzhYqvhuT3Mk2vj7lrHGriH4h9TSbqV1RsRFAZjQ,194
125
- klaude_code/protocol/commands.py,sha256=GN6GX9fo7YYtfumrBTpOmOvZofsnzZN2SAxP2X0BjTk,644
126
+ klaude_code/protocol/commands.py,sha256=RjeZYsHxanDaEdBGvw8xt1nBFLiqfXD7I-kPqKFjTdU,678
126
127
  klaude_code/protocol/events.py,sha256=KUMf1rLNdHQO9cZiQ9Pa1VsKkP1PTMbUkp18bu_jGy8,3935
127
128
  klaude_code/protocol/llm_param.py,sha256=cb4ubLq21PIsMOC8WJb0aid12z_sT1b7FsbNJMr-jLg,4255
128
- klaude_code/protocol/model.py,sha256=bHTSVKwkEBlMELtPEANzxu2c_GvOSZOCk9AP6mpronY,14128
129
+ klaude_code/protocol/model.py,sha256=zz1DeSkpUWDT-OZBlypaGWA4z78TSeefA-Tj8mJMHp4,14257
129
130
  klaude_code/protocol/op.py,sha256=zG8AGFcTx1vIZFN0lNZjIjucjmDYM4eVOR7tRiLofF4,4589
130
131
  klaude_code/protocol/op_handler.py,sha256=feTMdrz2QBwnjdv6ndizTinbBA9HFeH4oiBDeQBRKoY,1749
131
132
  klaude_code/protocol/sub_agent/__init__.py,sha256=Abap5lPLgnSCQsVD3axfeqnj2UtxOcDLGX8e9HugfSU,3964
@@ -136,11 +137,12 @@ klaude_code/protocol/sub_agent/web.py,sha256=Z5vUM367kz8CIexN6UVPG4XxzVOaaRek-Ga
136
137
  klaude_code/protocol/tools.py,sha256=OpGCr47ARKaCHcIlljhEN-p-2h4djgbP5jtfTIoKB-A,359
137
138
  klaude_code/session/__init__.py,sha256=oXcDA5w-gJCbzmlF8yuWy3ezIW9DgFBNUs-gJHUJ-Rc,121
138
139
  klaude_code/session/codec.py,sha256=ummbqT7t6uHHXtaS9lOkyhi1h0YpMk7SNSms8DyGAHU,2015
139
- klaude_code/session/export.py,sha256=r5bKy94vdjj8u-lKiHp9gpyScwDYHZoOfOBBplwPtr0,29337
140
+ klaude_code/session/export.py,sha256=dj-IRUNtXL8uONDj9bsEXcEHKyeHY7lIcXv80yP88h4,31022
140
141
  klaude_code/session/selector.py,sha256=uJQTQAw1ce9LzNOswSFEPkB7_PTzoJRXbA9rwK8hvdQ,2913
141
- klaude_code/session/session.py,sha256=QtxEY3rHvNBWKo9xbwk_Um8MfqwoiUs1eMNvGASjxes,16079
142
+ klaude_code/session/session.py,sha256=otWpPnCk5LGS5IW_zTdeXBtLdxbBlEK2jH5FnrOIpF4,16969
142
143
  klaude_code/session/store.py,sha256=-e-lInCB3N1nFLlet7bipkmPk1PXmGthuMxv5z3hg5o,6953
143
144
  klaude_code/session/templates/export_session.html,sha256=bA27AkcC7DQRoWmcMBeaR8WOx1z76hezEDf0aYH-0HQ,119780
145
+ klaude_code/session/templates/mermaid_viewer.html,sha256=lOkETxlctX1C1WJtS1wFw6KhNQmemxwJZFpXDSjlMOk,27842
144
146
  klaude_code/skill/__init__.py,sha256=yeWeCfRGPOhT4mx_pjdo4fLondQ_Vx0edBtnFusLhls,839
145
147
  klaude_code/skill/assets/deslop/SKILL.md,sha256=XMBER6gOyYnZof_u7l30CZSzmDcINe8XP-n_loah0EQ,873
146
148
  klaude_code/skill/assets/dev-docs/SKILL.md,sha256=eHI9v44KZAOcptlnAVp2aq2Ms7WGhncm-zmGUPGmhU8,3810
@@ -151,7 +153,7 @@ klaude_code/skill/loader.py,sha256=3xGh4udco7tXlrnGFh4Kr5yljtadJ391jKYjaQ2Z3js,1
151
153
  klaude_code/skill/manager.py,sha256=XRSGgGpNJo2Q9pHKpWo-VyMqf_y-dEt9JGtDoC3Eq-U,2088
152
154
  klaude_code/skill/system_skills.py,sha256=cfhxk5Jc1OFip-Lamr6RwlAEPq-UA60M3NdwSneKGco,6124
153
155
  klaude_code/trace/__init__.py,sha256=q8uOYhWr2_Mia1aEK_vkqx91YAfFM25ItIB6J8n3_pM,352
154
- klaude_code/trace/log.py,sha256=0H_RqkytSpt6AAIFDg-MV_8vA9zsR9BB1UqT6moTTTg,9134
156
+ klaude_code/trace/log.py,sha256=ivvs60XfMT1n7WUt060cit_8YAumsT_6crr7Us_fdEY,9231
155
157
  klaude_code/ui/__init__.py,sha256=XuEQsFUkJet8HI04cRmNLwnHOUqaPCRy4hF7PJnIfCY,2737
156
158
  klaude_code/ui/core/__init__.py,sha256=2NakrTDcxem5D0atyEY_Rxv1BbKCeZweF63L6AAq6r8,23
157
159
  klaude_code/ui/core/display.py,sha256=NwFQ9oKi8i3T5EsYDRrTpGBr3BZI0Ggns37JuQEOH54,3540
@@ -162,34 +164,35 @@ klaude_code/ui/modes/debug/__init__.py,sha256=1-1tAk7FtENdYzExSttYdHiJ-qH3DIQ5yY
162
164
  klaude_code/ui/modes/debug/display.py,sha256=7_j9NGZqL4wE2LWhF1TjDHac4MfaWlYN2RHZCTfQad8,1096
163
165
  klaude_code/ui/modes/exec/__init__.py,sha256=RsYa-DmDJj6g7iXb4H9mm2_Cu-KDQOD10RJd3yhVf_k,12
164
166
  klaude_code/ui/modes/exec/display.py,sha256=m2kkgaUoGD9rEVUmcm7Vs_PyAI2iruKCJYRhANjSsKo,1965
165
- klaude_code/ui/modes/repl/__init__.py,sha256=35a6SUiL1SDi2i43X2VjHQw97rR7yhbLBzkGI5aC6Bc,1526
167
+ klaude_code/ui/modes/repl/__init__.py,sha256=_0II73jlz5JUtvJsZ9sGRJzeHIQyJJpaI0egvmryYNw,286
166
168
  klaude_code/ui/modes/repl/clipboard.py,sha256=ZCpk7kRSXGhh0Q_BWtUUuSYT7ZOqRjAoRcg9T9n48Wo,5137
167
- klaude_code/ui/modes/repl/completers.py,sha256=ZQNZUNQNabMFrT1q_6g9pXXtpBhCR5VIKSRzxMyAtSA,28575
169
+ klaude_code/ui/modes/repl/completers.py,sha256=AElBFnWculNsSadom7ScnKf-P_vilC4V5AUn2qpRkXE,30005
168
170
  klaude_code/ui/modes/repl/display.py,sha256=06wawOHWO2ItEA9EIEh97p3GDID7TJhAtpaA03nPQXs,2335
169
- klaude_code/ui/modes/repl/event_handler.py,sha256=utaVTNv6nSrt3poMFEBkBCc-G3gGQB-UjsAMt5E2wPk,25530
170
- klaude_code/ui/modes/repl/input_prompt_toolkit.py,sha256=jt8kw6CQ_nkcuaLz1P7r8emPnzlob9wRlq48qFl0qwI,9120
171
+ klaude_code/ui/modes/repl/event_handler.py,sha256=ksQYSjHlTTAPfVdk6fGZLzRRKNozDUUg38c3Tgp3lWw,25775
172
+ klaude_code/ui/modes/repl/input_prompt_toolkit.py,sha256=5OqFRphfTvy46M7lrX7CCLSYGRSmXAfJzGJnXQR-NX4,7748
171
173
  klaude_code/ui/modes/repl/key_bindings.py,sha256=gc7b0s5S_mYC-__OJMtNcx-JxSm1DKof-hodj2XKfiY,7896
172
- klaude_code/ui/modes/repl/renderer.py,sha256=XcBztFI3ZfbuzWuqjRTVzAWbGKSY8F6uCmzZblU3vPM,15981
174
+ klaude_code/ui/modes/repl/renderer.py,sha256=7cum6SuKSuuBePDSyk4UvWs6q5dwgLA0NrJZ3eD9tHw,15902
173
175
  klaude_code/ui/renderers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
174
- klaude_code/ui/renderers/assistant.py,sha256=nO_QNJ2e9TwtU2IlojO9lCMWNFUNmcE9Ezz-WW748_w,743
175
- klaude_code/ui/renderers/common.py,sha256=5RdXC3ngtlhfmxRlbwOPtHtbXhAoWwbHoGX78tZcaTc,2284
176
- klaude_code/ui/renderers/developer.py,sha256=CawltuPSt_8s5lLoYKWYD9htwORbjgHeb4Ap0L2q7R4,6881
176
+ klaude_code/ui/renderers/assistant.py,sha256=7iu5zlHR7JGviHs2eA25Dsbd7ZkzCR2_0XzkqMPVxDI,862
177
+ klaude_code/ui/renderers/common.py,sha256=_EEgx7GTWk2eV8wEGcRcMmkeOBCMU9kjF2ZneM03V3s,2535
178
+ klaude_code/ui/renderers/developer.py,sha256=RrJsZphGdjuphIuTDnU1ivJ6tc-a3ndBvuyU17MQSQs,7776
177
179
  klaude_code/ui/renderers/diffs.py,sha256=uLpgYTudH38wucozoUw4xbPWMC6uYTQTaDTHcg-0zvM,10418
178
- klaude_code/ui/renderers/errors.py,sha256=o9pOHRqZ0nxMPwkmV4CG81X7taW1-izvga6RY3fFRMI,516
180
+ klaude_code/ui/renderers/errors.py,sha256=-geQA6neIkeQK_m0jaboSdVHmO61qd9620lo1a029bU,656
181
+ klaude_code/ui/renderers/mermaid_viewer.py,sha256=49ZiaR5sb1363PJMbbos5d7A2xH2RKVIS6zM24JIRVA,1696
179
182
  klaude_code/ui/renderers/metadata.py,sha256=_3OIAgnssoz05lq9t8Hm-3zlRWyfYzOTPSwG6guVKiE,8223
180
183
  klaude_code/ui/renderers/sub_agent.py,sha256=g8QCFXTtFX_w8oTaGMYGuy6u5KqbFMlvzWofER0hGKk,5946
181
184
  klaude_code/ui/renderers/thinking.py,sha256=nwKotPFS3WInsdrHFquqOHyvR8dTEKZ0JS5SMKJ_GgA,1946
182
- klaude_code/ui/renderers/tools.py,sha256=8Fsme2Wfc_yP5ofCjb_uCgQHOEACRP15U9ZYMIM0mHw,23522
185
+ klaude_code/ui/renderers/tools.py,sha256=j-OEbmQPEGBxXNrRmhph23aRXsFR37YQHiLJUmXZMGU,24394
183
186
  klaude_code/ui/renderers/user_input.py,sha256=e2hZS7UUnzQuQ6UqzSKRDkFJMkKTLUoub1JclHMX40g,3941
184
187
  klaude_code/ui/rich/__init__.py,sha256=zEZjnHR3Fnv_sFMxwIMjoJfwDoC4GRGv3lHJzAGRq_o,236
185
188
  klaude_code/ui/rich/cjk_wrap.py,sha256=ncmifgTwF6q95iayHQyazGbntt7BRQb_Ed7aXc8JU6Y,7551
186
189
  klaude_code/ui/rich/code_panel.py,sha256=ZKuJHh-kh-hIkBXSGLERLaDbJ7I9hvtvmYKocJn39_w,4744
187
190
  klaude_code/ui/rich/live.py,sha256=qiBLPSE4KW_Dpemy5MZ5BKhkFWEN2fjXBiQHmhJrPSM,2722
188
- klaude_code/ui/rich/markdown.py,sha256=8TKTXsZyCsCiOH6CXNbYKf72EeBcmLYU-2PRWyFrmDM,15364
191
+ klaude_code/ui/rich/markdown.py,sha256=ltcm4qVX6fsqUNkPWeOwX636FsQ6-gST6uLLcXAl9yA,15397
189
192
  klaude_code/ui/rich/quote.py,sha256=tZcxN73SfDBHF_qk0Jkh9gWBqPBn8VLp9RF36YRdKEM,1123
190
193
  klaude_code/ui/rich/searchable_text.py,sha256=DCVZgEFv7_ergAvT2v7XrfQAUXUzhmAwuVAchlIx8RY,2448
191
194
  klaude_code/ui/rich/status.py,sha256=QHg4oWmPSQH19H81vOFpImEqWyDtAbIXjuCGsuDjBPA,9278
192
- klaude_code/ui/rich/theme.py,sha256=ps_u3rdIylicEj_xQ870bQsD74X-DK5N9bzoaM-NmXg,13145
195
+ klaude_code/ui/rich/theme.py,sha256=4y9suVR_ILx9w6iq8VYfPlCav1tFMqXlfbSH6sMotdA,13664
193
196
  klaude_code/ui/terminal/__init__.py,sha256=GIMnsEcIAGT_vBHvTlWEdyNmAEpruyscUA6M_j3GQZU,1412
194
197
  klaude_code/ui/terminal/color.py,sha256=jvVbuysf5pnI0uAjUVeyW2HwU58dutTg2msykbu2w4Y,7197
195
198
  klaude_code/ui/terminal/control.py,sha256=WhkqEWdtzUO4iWULp-iI9VazAWmzzW52qTQXk-4Dr4s,4922
@@ -197,7 +200,7 @@ klaude_code/ui/terminal/notifier.py,sha256=wkRM66d98Oh6PujnN4bB7NiQxIYEHqQXverMK
197
200
  klaude_code/ui/terminal/progress_bar.py,sha256=MDnhPbqCnN4GDgLOlxxOEVZPDwVC_XL2NM5sl1MFNcQ,2133
198
201
  klaude_code/ui/utils/__init__.py,sha256=YEsCLjbCPaPza-UXTPUMTJTrc9BmNBUP5CbFWlshyOQ,15
199
202
  klaude_code/ui/utils/common.py,sha256=tqHqwgLtAyP805kwRFyoAL4EgMutcNb3Y-GAXJ4IeuM,2263
200
- klaude_code-1.2.27.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
201
- klaude_code-1.2.27.dist-info/entry_points.txt,sha256=7CWKjolvs6dZiYHpelhA_FRJ-sVDh43eu3iWuOhKc_w,53
202
- klaude_code-1.2.27.dist-info/METADATA,sha256=_CHrTndUvf9aO84MS6D2AF_BrRpSXYgMDY8NevHTKPE,9126
203
- klaude_code-1.2.27.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,,
@@ -1,3 +1,4 @@
1
1
  [console_scripts]
2
2
  klaude = klaude_code.cli.main:app
3
+ klaude-code = klaude_code.cli.main:app
3
4