klaude-code 2.0.0__py3-none-any.whl → 2.0.2__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 (50) hide show
  1. klaude_code/cli/cost_cmd.py +1 -1
  2. klaude_code/cli/runtime.py +1 -8
  3. klaude_code/command/debug_cmd.py +1 -1
  4. klaude_code/command/export_online_cmd.py +4 -4
  5. klaude_code/command/fork_session_cmd.py +6 -6
  6. klaude_code/command/help_cmd.py +1 -1
  7. klaude_code/command/model_cmd.py +1 -1
  8. klaude_code/command/registry.py +10 -1
  9. klaude_code/command/release_notes_cmd.py +1 -1
  10. klaude_code/command/resume_cmd.py +2 -2
  11. klaude_code/command/status_cmd.py +2 -2
  12. klaude_code/command/terminal_setup_cmd.py +2 -2
  13. klaude_code/command/thinking_cmd.py +1 -1
  14. klaude_code/config/assets/builtin_config.yaml +4 -0
  15. klaude_code/const.py +5 -3
  16. klaude_code/core/executor.py +15 -36
  17. klaude_code/core/reminders.py +55 -68
  18. klaude_code/core/tool/__init__.py +0 -2
  19. klaude_code/core/tool/file/edit_tool.py +3 -2
  20. klaude_code/core/tool/todo/todo_write_tool.py +1 -2
  21. klaude_code/core/tool/tool_registry.py +3 -3
  22. klaude_code/protocol/events.py +1 -0
  23. klaude_code/protocol/message.py +3 -11
  24. klaude_code/protocol/model.py +79 -13
  25. klaude_code/protocol/op.py +0 -13
  26. klaude_code/protocol/op_handler.py +0 -5
  27. klaude_code/protocol/sub_agent/explore.py +0 -15
  28. klaude_code/protocol/sub_agent/task.py +1 -1
  29. klaude_code/protocol/sub_agent/web.py +1 -17
  30. klaude_code/protocol/tools.py +0 -1
  31. klaude_code/ui/modes/exec/display.py +2 -3
  32. klaude_code/ui/modes/repl/display.py +1 -1
  33. klaude_code/ui/modes/repl/event_handler.py +2 -10
  34. klaude_code/ui/modes/repl/input_prompt_toolkit.py +5 -1
  35. klaude_code/ui/modes/repl/key_bindings.py +135 -1
  36. klaude_code/ui/modes/repl/renderer.py +2 -1
  37. klaude_code/ui/renderers/bash_syntax.py +36 -4
  38. klaude_code/ui/renderers/common.py +8 -6
  39. klaude_code/ui/renderers/developer.py +113 -97
  40. klaude_code/ui/renderers/metadata.py +28 -15
  41. klaude_code/ui/renderers/tools.py +17 -59
  42. klaude_code/ui/rich/markdown.py +69 -11
  43. klaude_code/ui/rich/theme.py +22 -17
  44. klaude_code/ui/terminal/selector.py +36 -17
  45. {klaude_code-2.0.0.dist-info → klaude_code-2.0.2.dist-info}/METADATA +1 -1
  46. {klaude_code-2.0.0.dist-info → klaude_code-2.0.2.dist-info}/RECORD +48 -50
  47. klaude_code/core/tool/file/move_tool.md +0 -41
  48. klaude_code/core/tool/file/move_tool.py +0 -435
  49. {klaude_code-2.0.0.dist-info → klaude_code-2.0.2.dist-info}/WHEEL +0 -0
  50. {klaude_code-2.0.0.dist-info → klaude_code-2.0.2.dist-info}/entry_points.txt +0 -0
@@ -18,7 +18,12 @@ from rich.table import Table
18
18
  from rich.text import Text
19
19
  from rich.theme import Theme
20
20
 
21
- from klaude_code.const import MARKDOWN_RIGHT_MARGIN, MARKDOWN_STREAM_LIVE_REPAINT_ENABLED, UI_REFRESH_RATE_FPS
21
+ from klaude_code.const import (
22
+ MARKDOWN_RIGHT_MARGIN,
23
+ MARKDOWN_STREAM_LIVE_REPAINT_ENABLED,
24
+ MARKDOWN_STREAM_SYNCHRONIZED_OUTPUT_ENABLED,
25
+ UI_REFRESH_RATE_FPS,
26
+ )
22
27
  from klaude_code.ui.rich.code_panel import CodePanel
23
28
 
24
29
 
@@ -201,6 +206,52 @@ class MarkdownStream:
201
206
  def _get_base_width(self) -> int:
202
207
  return self.console.options.max_width
203
208
 
209
+ def _should_use_synchronized_output(self) -> bool:
210
+ if not MARKDOWN_STREAM_SYNCHRONIZED_OUTPUT_ENABLED:
211
+ return False
212
+ if self._live_sink is None:
213
+ return False
214
+ console_file = getattr(self.console, "file", None)
215
+ if console_file is None:
216
+ return False
217
+ isatty = getattr(console_file, "isatty", None)
218
+ if isatty is None:
219
+ return False
220
+ return bool(isatty())
221
+
222
+ @contextlib.contextmanager
223
+ def _synchronized_output(self) -> Any:
224
+ """Batch terminal updates to reduce flicker.
225
+
226
+ Uses xterm's "Synchronized Output" mode (DECSET/DECRST 2026). Terminals that
227
+ don't support it will typically ignore the escape codes.
228
+ """
229
+
230
+ if not self._should_use_synchronized_output():
231
+ yield
232
+ return
233
+
234
+ console_file = self.console.file
235
+ enabled = False
236
+ try:
237
+ console_file.write("\x1b[?2026h")
238
+ flush = getattr(console_file, "flush", None)
239
+ if flush is not None:
240
+ flush()
241
+ enabled = True
242
+ except Exception:
243
+ pass
244
+
245
+ try:
246
+ yield
247
+ finally:
248
+ if enabled:
249
+ with contextlib.suppress(Exception):
250
+ console_file.write("\x1b[?2026l")
251
+ flush = getattr(console_file, "flush", None)
252
+ if flush is not None:
253
+ flush()
254
+
204
255
  def compute_candidate_stable_line(self, text: str) -> int:
205
256
  """Return the start line of the last top-level block, or 0.
206
257
 
@@ -427,26 +478,22 @@ class MarkdownStream:
427
478
 
428
479
  start = time.time()
429
480
 
481
+ stable_chunk_to_print: str | None = None
430
482
  stable_changed = final or stable_line > self._stable_source_line_count
431
483
  if stable_changed and stable_source:
432
484
  stable_ansi = self.render_stable_ansi(stable_source, has_live_suffix=bool(live_source), final=final)
433
485
  stable_lines = stable_ansi.splitlines(keepends=True)
434
486
  new_lines = stable_lines[len(self._stable_rendered_lines) :]
435
487
  if new_lines:
436
- stable_chunk = "".join(new_lines)
437
- self.console.print(Text.from_ansi(stable_chunk), end="\n")
488
+ stable_chunk_to_print = "".join(new_lines)
438
489
  self._stable_rendered_lines = stable_lines
439
490
  self._stable_source_line_count = stable_line
440
491
  elif final and not stable_source:
441
492
  self._stable_rendered_lines = []
442
493
  self._stable_source_line_count = stable_line
443
494
 
444
- if final:
445
- if self._live_sink is not None:
446
- self._live_sink(None)
447
- return
448
-
449
- if MARKDOWN_STREAM_LIVE_REPAINT_ENABLED and self._live_sink is not None:
495
+ live_text_to_set: Text | None = None
496
+ if not final and MARKDOWN_STREAM_LIVE_REPAINT_ENABLED and self._live_sink is not None:
450
497
  apply_mark_live = self._stable_source_line_count == 0
451
498
  live_lines = self._render_markdown_to_lines(live_source, apply_mark=apply_mark_live)
452
499
 
@@ -468,8 +515,19 @@ class MarkdownStream:
468
515
  if drop > 0:
469
516
  live_lines = live_lines[drop:]
470
517
 
471
- live_text = Text.from_ansi("".join(live_lines))
472
- self._live_sink(live_text)
518
+ live_text_to_set = Text.from_ansi("".join(live_lines))
519
+
520
+ with self._synchronized_output():
521
+ if stable_chunk_to_print:
522
+ self.console.print(Text.from_ansi(stable_chunk_to_print), end="\n")
523
+
524
+ if final:
525
+ if self._live_sink is not None:
526
+ self._live_sink(None)
527
+ return
528
+
529
+ if live_text_to_set is not None and self._live_sink is not None:
530
+ self._live_sink(live_text_to_set)
473
531
 
474
532
  elapsed = time.time() - start
475
533
  self.min_delay = min(max(elapsed * 6, 1.0 / 30), 0.5)
@@ -53,24 +53,24 @@ LIGHT_PALETTE = Palette(
53
53
  grey2="#93a4b1",
54
54
  grey3="#c4ced4",
55
55
  grey_green="#96a096",
56
- purple="#5f5fd7",
56
+ purple="#5f5fb7",
57
57
  lavender="#5f87af",
58
58
  diff_add="#2e5a32 on #dafbe1",
59
59
  diff_add_char="#2e5a32 on #aceebb",
60
60
  diff_remove="#82071e on #ffecec",
61
61
  diff_remove_char="#82071e on #ffcfcf",
62
62
  code_theme="ansi_light",
63
- code_background="#e0e0e0",
64
- green_background="#e8f1e9",
65
- blue_grey_background="#e8e9f1",
66
- cyan_background="#e0f0f0",
67
- green_sub_background="#e0f0e0",
68
- blue_sub_background="#e0e8f5",
69
- purple_background="#ede0f5",
70
- orange_background="#f5ebe0",
71
- red_background="#f5e0e0",
72
- grey_background="#e8e8e8",
73
- yellow_background="#f5f5e0",
63
+ code_background="#ebebeb",
64
+ green_background="#f0f7f1",
65
+ blue_grey_background="#f0f1f7",
66
+ cyan_background="#ecf7f7",
67
+ green_sub_background="#ecf7ec",
68
+ blue_sub_background="#ecf1f9",
69
+ purple_background="#f5ecf9",
70
+ orange_background="#f9f3ec",
71
+ red_background="#f9ecec",
72
+ grey_background="#f0f0f0",
73
+ yellow_background="#f9f9ec",
74
74
  )
75
75
 
76
76
  DARK_PALETTE = Palette(
@@ -93,7 +93,7 @@ DARK_PALETTE = Palette(
93
93
  diff_remove="#ffcdd2 on #3d1f23",
94
94
  diff_remove_char="#ffcdd2 on #7a3a42",
95
95
  code_theme="ansi_dark",
96
- code_background="#2f3440",
96
+ code_background="#1a1f2a",
97
97
  green_background="#23342c",
98
98
  blue_grey_background="#313848",
99
99
  cyan_background="#1a3333",
@@ -110,6 +110,9 @@ DARK_PALETTE = Palette(
110
110
  class ThemeKey(str, Enum):
111
111
  LINES = "lines"
112
112
 
113
+ # CODE
114
+ CODE_BACKGROUND = "code_background"
115
+
113
116
  # PANEL
114
117
  SUB_AGENT_RESULT_PANEL = "panel.sub_agent_result"
115
118
  WRITE_MARKDOWN_PANEL = "panel.write_markdown"
@@ -224,6 +227,8 @@ def get_theme(theme: str | None = None) -> Themes:
224
227
  app_theme=Theme(
225
228
  styles={
226
229
  ThemeKey.LINES.value: palette.grey3,
230
+ # CODE
231
+ ThemeKey.CODE_BACKGROUND.value: f"on {palette.code_background}",
227
232
  # PANEL
228
233
  ThemeKey.SUB_AGENT_RESULT_PANEL.value: f"on {palette.blue_grey_background}",
229
234
  ThemeKey.WRITE_MARKDOWN_PANEL.value: f"on {palette.green_background}",
@@ -260,7 +265,7 @@ def get_theme(theme: str | None = None) -> Themes:
260
265
  ThemeKey.STATUS_HINT.value: palette.grey2,
261
266
  # REMINDER
262
267
  ThemeKey.REMINDER.value: palette.grey1,
263
- ThemeKey.REMINDER_BOLD.value: "bold " + palette.grey1,
268
+ ThemeKey.REMINDER_BOLD.value: palette.grey1,
264
269
  # TOOL
265
270
  ThemeKey.INVALID_TOOL_CALL_ARGS.value: palette.yellow,
266
271
  ThemeKey.TOOL_NAME.value: "bold",
@@ -268,13 +273,13 @@ def get_theme(theme: str | None = None) -> Themes:
268
273
  ThemeKey.TOOL_PARAM.value: palette.green,
269
274
  ThemeKey.TOOL_PARAM_BOLD.value: "bold " + palette.green,
270
275
  ThemeKey.TOOL_RESULT.value: palette.grey_green,
271
- ThemeKey.TOOL_RESULT_TREE_PREFIX.value: palette.grey_green + " dim",
276
+ ThemeKey.TOOL_RESULT_TREE_PREFIX.value: palette.grey3 + " dim",
272
277
  ThemeKey.TOOL_RESULT_BOLD.value: "bold " + palette.grey_green,
273
- ThemeKey.TOOL_RESULT_TRUNCATED.value: palette.yellow + " dim",
278
+ ThemeKey.TOOL_RESULT_TRUNCATED.value: palette.grey1,
274
279
  ThemeKey.TOOL_MARK.value: "bold",
275
280
  ThemeKey.TOOL_APPROVED.value: palette.green + " bold reverse",
276
281
  ThemeKey.TOOL_REJECTED.value: palette.red + " bold reverse",
277
- ThemeKey.TOOL_TIMEOUT.value: palette.yellow,
282
+ ThemeKey.TOOL_TIMEOUT.value: palette.grey2,
278
283
  ThemeKey.TOOL_RESULT_MERMAID: palette.blue + " underline",
279
284
  ThemeKey.SUB_AGENT_FOOTER.value: "dim " + palette.grey2,
280
285
  # BASH SYNTAX
@@ -238,9 +238,31 @@ def _build_choices_tokens[T](
238
238
  return tokens
239
239
 
240
240
 
241
- def _build_rounded_frame(body: Container) -> HSplit:
241
+ def _build_rounded_frame(body: Container, *, padding_x: int = 0, padding_y: int = 0) -> HSplit:
242
242
  """Build a rounded border frame around the given container."""
243
243
  border = partial(Window, style="class:frame.border", height=1)
244
+ pad = partial(Window, style="class:frame", char=" ", always_hide_cursor=Always())
245
+
246
+ inner: Container = body
247
+ if padding_y > 0:
248
+ inner = HSplit(
249
+ [
250
+ pad(height=padding_y, dont_extend_height=Always()),
251
+ body,
252
+ pad(height=padding_y, dont_extend_height=Always()),
253
+ ],
254
+ padding=0,
255
+ style="class:frame",
256
+ )
257
+
258
+ middle_children: list[Container] = [border(width=1, char="│")]
259
+ if padding_x > 0:
260
+ middle_children.append(pad(width=padding_x))
261
+ middle_children.append(inner)
262
+ if padding_x > 0:
263
+ middle_children.append(pad(width=padding_x))
264
+ middle_children.append(border(width=1, char="│"))
265
+
244
266
  top = VSplit(
245
267
  [
246
268
  border(width=1, char="╭"),
@@ -250,14 +272,7 @@ def _build_rounded_frame(body: Container) -> HSplit:
250
272
  height=1,
251
273
  padding=0,
252
274
  )
253
- middle = VSplit(
254
- [
255
- border(width=1, char="│"),
256
- body,
257
- border(width=1, char="│"),
258
- ],
259
- padding=0,
260
- )
275
+ middle = VSplit(middle_children, padding=0)
261
276
  bottom = VSplit(
262
277
  [
263
278
  border(width=1, char="╰"),
@@ -273,6 +288,8 @@ def _build_rounded_frame(body: Container) -> HSplit:
273
288
  def _build_search_container(
274
289
  search_buffer: Buffer,
275
290
  search_placeholder: str,
291
+ *,
292
+ frame: bool = True,
276
293
  ) -> tuple[Window, Container]:
277
294
  """Build the search input container with placeholder."""
278
295
  placeholder_text = f"{search_placeholder} · ↑↓ to select · esc to quit"
@@ -303,8 +320,10 @@ def _build_search_container(
303
320
  content=input_window,
304
321
  floats=[Float(content=placeholder_window, top=0, left=0)],
305
322
  )
306
- framed = _build_rounded_frame(VSplit([search_prefix_window, search_input_container], padding=0))
307
- return input_window, framed
323
+ search_row: Container = VSplit([search_prefix_window, search_input_container], padding=0)
324
+ if frame:
325
+ return input_window, _build_rounded_frame(search_row)
326
+ return input_window, search_row
308
327
 
309
328
 
310
329
  # ---------------------------------------------------------------------------
@@ -436,7 +455,7 @@ def select_one[T](
436
455
 
437
456
  base_style = Style(
438
457
  [
439
- ("frame.border", "fg:ansibrightblack"),
458
+ ("frame.border", "fg:ansibrightblack dim"),
440
459
  ("frame.label", "fg:ansibrightblack italic"),
441
460
  ("search_prefix", "fg:ansibrightblack"),
442
461
  ("search_placeholder", "fg:ansibrightblack italic"),
@@ -619,17 +638,17 @@ class SelectOverlay[T]:
619
638
  search_container: Container | None = None
620
639
  if self._use_search_filter and self._search_buffer is not None:
621
640
  self._search_input_window, search_container = _build_search_container(
622
- self._search_buffer, self._search_placeholder
641
+ self._search_buffer,
642
+ self._search_placeholder,
643
+ frame=False,
623
644
  )
624
645
 
625
646
  root_children: list[Container] = [header_window, spacer_window, list_window]
626
647
  if search_container is not None:
627
648
  root_children.append(search_container)
628
649
 
629
- return ConditionalContainer(
630
- content=HSplit(root_children, padding=0),
631
- filter=Condition(lambda: self._is_open),
632
- )
650
+ framed_content = _build_rounded_frame(HSplit(root_children, padding=0), padding_x=1)
651
+ return ConditionalContainer(content=framed_content, filter=Condition(lambda: self._is_open))
633
652
 
634
653
  @property
635
654
  def is_open(self) -> bool:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: klaude-code
3
- Version: 2.0.0
3
+ Version: 2.0.2
4
4
  Summary: Minimal code agent CLI
5
5
  Requires-Dist: anthropic>=0.66.0
6
6
  Requires-Dist: chardet>=5.2.0
@@ -13,44 +13,44 @@ klaude_code/auth/codex/token_manager.py,sha256=EiEdxEErh_mcnW8USWbvdbN91LK7nyk0P
13
13
  klaude_code/cli/__init__.py,sha256=YzlAoWAr5rx5oe6B_4zPxRFS4QaZauuy1AFwampP5fg,45
14
14
  klaude_code/cli/auth_cmd.py,sha256=7Kuwe_ZWTCRYNHKpfV1aGgA-7rdnYsT800bDiKNv_uE,6068
15
15
  klaude_code/cli/config_cmd.py,sha256=b-UnoeaJhPpt2LdhEMTFrW7CtfQF3_l6sDJwtAaQ3Pg,3392
16
- klaude_code/cli/cost_cmd.py,sha256=uj2Qe6YwO0b4kgKGuzqTrIgcjC2tpXt-l8sP75eK06c,12467
16
+ klaude_code/cli/cost_cmd.py,sha256=GHbtgqWJnDg_TffPgSMx51gr1V-xzC-btaCIjMvCg9Q,12467
17
17
  klaude_code/cli/debug.py,sha256=cPQ7cgATcJTyBIboleW_Q4Pa_t-tGG6x-Hj3woeeuHE,2669
18
18
  klaude_code/cli/list_model.py,sha256=3nYjw3l77eFqinGVZWt2yCurRPTrJlO1D8pv9pW8yA4,12793
19
19
  klaude_code/cli/main.py,sha256=cMO47Hn6MiSyTVK992pJa2UVUR9tl7IQgj36N2ydlUY,13557
20
- klaude_code/cli/runtime.py,sha256=G_A7BEJ2S0bxUSCmSpixIbA9QQf9iTuBwR_XgdsUjI0,19914
20
+ klaude_code/cli/runtime.py,sha256=HB0FislVFeQepopzicEvPPj4ygV-UtFiI7LHaCF2qto,19529
21
21
  klaude_code/cli/self_update.py,sha256=Eo8bz3WrsmuMCGl1L7xMDI0Kk_os1E-rpM1fL2UVHZQ,8059
22
22
  klaude_code/cli/session_cmd.py,sha256=Ki8AhkIsdnISVzTeOPbAJzgnwSbPQ0FtPoJG1wrmIQU,3199
23
23
  klaude_code/command/__init__.py,sha256=IK2jz2SFMLVIcVzD5evKk3zWv6u1CjgCgfJXzWdvDlk,3470
24
24
  klaude_code/command/clear_cmd.py,sha256=9zoCtYVtkfOqc9LxTdDe0lu7KmCTEEMh6hP_bFQj0RA,800
25
25
  klaude_code/command/command_abc.py,sha256=d1i4QbFqWC5V4LPmofMHTxGrxNLwOWe-z_bUKoAmRiQ,2540
26
- klaude_code/command/debug_cmd.py,sha256=wjIhvpviZad-nWiMRK4ddd7EUG5xHc9me-BmryRukzA,2770
26
+ klaude_code/command/debug_cmd.py,sha256=PwiHloiGMeFQqH74SUAMdIqLG_V6hbHZCPI2z6lhSR8,2764
27
27
  klaude_code/command/export_cmd.py,sha256=uTslAHoKvgi_YJns_UmPDZJ_3wMKgi-XnoKO6a9_7Gk,1627
28
- klaude_code/command/export_online_cmd.py,sha256=lqPbsSwpnNhccsyXin-uKffN7mF4tUf8YzYAHlCfixE,6205
29
- klaude_code/command/fork_session_cmd.py,sha256=2Zi8JogAP_CTtmb2ajoaI1B2h3Z-EzpIuYVCh_QHH8w,10261
30
- klaude_code/command/help_cmd.py,sha256=tlcTN5HvTqeU8IzBkbzSp61jvabnYdyvVTDZkXVznA0,1702
31
- klaude_code/command/model_cmd.py,sha256=bvZGYAex0K7R9LgcKD6q83S_zBRNqwIg15QDEIw4OjY,2992
28
+ klaude_code/command/export_online_cmd.py,sha256=tI5katypHbZbFXnHEp9RMGkKmoOLl7FL05Oemy1ng20,6181
29
+ klaude_code/command/fork_session_cmd.py,sha256=Pi6zbi4VG7hZOO0KVC8Lo2OyyeuM7NwA2ElD0lwrWPU,10237
30
+ klaude_code/command/help_cmd.py,sha256=aAfR524lRo6qLovVJkqghELX_grUHoKR8tVZH1-WJdw,1696
31
+ klaude_code/command/model_cmd.py,sha256=rF8rj6zCFm64kYsCZ-5w6cw7C1iEI99v7MrM_F6sXhI,2986
32
32
  klaude_code/command/model_select.py,sha256=bHfhmRk217_dLjcXs1j2UFq6ReNpqF4C_2rEfZSmrMk,3190
33
33
  klaude_code/command/prompt-commit.md,sha256=6hv1lrf8SkwNp1ptw0wn8uNydg5uxgna88eUo6Uqr3w,2400
34
34
  klaude_code/command/prompt-init.md,sha256=a4_FQ3gKizqs2vl9oEY5jtG6HNhv3f-1b5RSCFq0A18,1873
35
35
  klaude_code/command/prompt_command.py,sha256=zKBWVShD5AtsnLUjH3LC3UNMco2fb9jgMxkIFH3UT8A,2780
36
36
  klaude_code/command/refresh_cmd.py,sha256=RAlWx6ZLJjnlbzFUjF0shXyW9yAWRBdJzaBZ7DXHU74,1296
37
- klaude_code/command/registry.py,sha256=Ck6j4Xlx1zFyd2mzODIXW8F70vVIFIT6yY9cQG0DVHQ,6996
38
- klaude_code/command/release_notes_cmd.py,sha256=a_0KgAZ7bUg8hwSjR-KxCTOrkmAwfh8nsCI83yvd5H0,2710
39
- klaude_code/command/resume_cmd.py,sha256=2vgMj5r3BnG-NDsZnsxeuCTSSH1t3h2ycCe_UZB3aNc,4275
40
- klaude_code/command/status_cmd.py,sha256=CQj73OQiTgcF01qacKGCHBbKnqoSl6fcz-b8-lcvs9c,5441
41
- klaude_code/command/terminal_setup_cmd.py,sha256=Y7OP1KzfDNoZf4SjYeRIEKQQlL2WZOwICVFUaSRo3dE,10956
42
- klaude_code/command/thinking_cmd.py,sha256=Ew3B7j9n4_xQhexWGlQwEbAH8BccCA-XqoQJB001cpM,3095
37
+ klaude_code/command/registry.py,sha256=JwL-zTBn3RfOnxH_WRlIsx4PcUP_mLJ6L2t8m-dALu8,7284
38
+ klaude_code/command/release_notes_cmd.py,sha256=qv4DVVEFfvN4NPEKv-6NJztC_iNvbk6k1EJuPGSIfgU,2704
39
+ klaude_code/command/resume_cmd.py,sha256=V7dijyIeOdr7G_9XvdScrInXEF3ngMn1lxNd7FQ7Dx0,4263
40
+ klaude_code/command/status_cmd.py,sha256=zJ2UPhBQfh1bHSC97z9Pj4CMN-sR8TfB07LYgS97e_8,5435
41
+ klaude_code/command/terminal_setup_cmd.py,sha256=b3K1cyfPacVf_fDY2LLu6UzIg1ca2vM1_I5__Tt4djM,10928
42
+ klaude_code/command/thinking_cmd.py,sha256=WyNnjUx9s-jcjghILf-CvugEPfdoR0h-RgyctL-uPtM,3089
43
43
  klaude_code/config/__init__.py,sha256=Qe1BeMekBfO2-Zd30x33lB70hdM1QQZGrp4DbWSQ-II,353
44
44
  klaude_code/config/assets/__init__.py,sha256=uMUfmXT3I-gYiI-HVr1DrE60mx5cY1o8V7SYuGqOmvY,32
45
- klaude_code/config/assets/builtin_config.yaml,sha256=zh1GMBCXwB4dkxbsLdqBloKc8VvBXZ25_ge0PUlt76U,8136
45
+ klaude_code/config/assets/builtin_config.yaml,sha256=fXCvNZci7g7T6uUjDFq_lxTYAvszffsrpBeC41RZkb4,8214
46
46
  klaude_code/config/builtin_config.py,sha256=1rHcFWmS0k6rXeIqR6sF_OgGXSbEd4ugh9bh2N6VSS0,1494
47
47
  klaude_code/config/config.py,sha256=Oxh5uernxcS694RMwi_pdmhMj4mDQm5hiWMGV0ZXNj0,18211
48
48
  klaude_code/config/select_model.py,sha256=PPbQ-BAJkwXPINBcCSPAlZjiXm4rEtg2y0hPnZE8Bnc,5183
49
49
  klaude_code/config/thinking.py,sha256=1FFN9UgPVEFyTzahTvNOM5Y4b8Bo7G1jIc93xjX3Uvk,9323
50
- klaude_code/const.py,sha256=sY_VrHbJXJ9ee_qdX-HDPRBUemTbaENYOjWygF0Xvm0,10390
50
+ klaude_code/const.py,sha256=PFkpHYgx27rCKFw10i_nhVpAB5zi-efNTxpYhuTPdyg,10617
51
51
  klaude_code/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
52
  klaude_code/core/agent.py,sha256=rmNuMDuEGRAX_XGEQeyNvfyRPKRsHItN1Bw8WRZBTqc,5291
53
- klaude_code/core/executor.py,sha256=qyqGiT_WA6GC50EhBZG-Vz6YiKV4LRY06sR7JG4Y60Q,28583
53
+ klaude_code/core/executor.py,sha256=3errUXJN72ra_RtoY2N-vUaYhWcIsAe7oSs9IAaGlYg,27721
54
54
  klaude_code/core/manager/__init__.py,sha256=hdIbpnYj6i18byiWjtJIm5l7NYYDQMvafw8fePVPydc,562
55
55
  klaude_code/core/manager/llm_clients.py,sha256=X2oMFWgJcP0tK8GEtMMDYR3HyR6_H8FuyCqpzWF5x2k,871
56
56
  klaude_code/core/manager/llm_clients_builder.py,sha256=vvNV6hSpWtUCMZORQN6OfFWyA_3OAOGS5SFGy6oaKMs,1641
@@ -66,9 +66,9 @@ klaude_code/core/prompts/prompt-sub-agent-explore.md,sha256=21kFodjhvN0L-c_ZFo4y
66
66
  klaude_code/core/prompts/prompt-sub-agent-image-gen.md,sha256=tXYKSzFd04OiC0dmVO9suMKeD5f9qo_4NsvqGo7irfI,78
67
67
  klaude_code/core/prompts/prompt-sub-agent-web.md,sha256=n7fcIs26Xnu_CvHda_S_k5LGTpV3njY04yo88FT_S9A,3602
68
68
  klaude_code/core/prompts/prompt-sub-agent.md,sha256=dmmdsOenbAOfqG6FmdR88spOLZkXmntDBs-cmZ9DN_g,897
69
- klaude_code/core/reminders.py,sha256=HPIfycJ8ccStdC8uumiSz0MJ5ghG1Wlr-5WO30Z8kmM,25715
69
+ klaude_code/core/reminders.py,sha256=lxSy4NgsKSoPTl0R39Txuqsr-EIJdVRprPVThCieuEQ,25259
70
70
  klaude_code/core/task.py,sha256=PdzC8XEsDNbBSMamrxbj9oHPWfQGwynygeMiW8HIWUA,11852
71
- klaude_code/core/tool/__init__.py,sha256=Y1r-xka9Zk5e5SrB0kcweFp4LyH0aafQ-BDiwYCAqFY,1992
71
+ klaude_code/core/tool/__init__.py,sha256=fOEwgJMGHT8NkYYE6l1FZ0fDRUmHzC6laA8wESo9j60,1939
72
72
  klaude_code/core/tool/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
73
  klaude_code/core/tool/file/_utils.py,sha256=OG4BE9WyJqzH8ilVCL3D9yvAcHk-r-L9snd-E8gO_io,967
74
74
  klaude_code/core/tool/file/apply_patch.py,sha256=LZd3pYQ9ow_TxiFnqYuzD216HmvkLX6lW6BoMd9iQRs,17080
@@ -76,9 +76,7 @@ klaude_code/core/tool/file/apply_patch_tool.md,sha256=KVDsjUiLDa97gym0NrZNVG4jA1
76
76
  klaude_code/core/tool/file/apply_patch_tool.py,sha256=bHj4dHyeJ_2Y0f9jBrZ28DB9bD5jYIue4f-TPau7l5o,8123
77
77
  klaude_code/core/tool/file/diff_builder.py,sha256=d3n0RYBuhOD3yophmqNw4ok-da2kxerNixcTf_IXJHk,5911
78
78
  klaude_code/core/tool/file/edit_tool.md,sha256=rEcUjJuPC46t1nXWjTDxplDcxWDbzTWsr6_bYt5_aRI,1110
79
- klaude_code/core/tool/file/edit_tool.py,sha256=xmEewZPVP2dAKWE4LAzgq8pMqYm2glpz--6Uw5kQDu0,11069
80
- klaude_code/core/tool/file/move_tool.md,sha256=vG5tpr-48ylcEh6KLAv0bP4nZKIJbpo4oaZYATNfb0g,1432
81
- klaude_code/core/tool/file/move_tool.py,sha256=5KeKgL2NYQ69eC0HP1YrHgXMCR1MMaexC-kE2qoqnpk,18442
79
+ klaude_code/core/tool/file/edit_tool.py,sha256=xwFypH8FhC9AVMT4r8BDe8stufwFGGY-LcMT3_OcGbw,11157
82
80
  klaude_code/core/tool/file/read_tool.md,sha256=74SLSl1tq3L0por73M0QV_ws41MRIvGXQpfLb8dmtp0,1351
83
81
  klaude_code/core/tool/file/read_tool.py,sha256=U_g6Syk7mgM8C267JCKQMtTfLEd1rSlaBgl0pwaWURQ,13111
84
82
  klaude_code/core/tool/file/write_tool.md,sha256=CNnYgtieUasuHdpXLDpTEsqe492Pf7v75M4RQ3oIer8,613
@@ -94,13 +92,13 @@ klaude_code/core/tool/skill/skill_tool.py,sha256=5YL3wCdwQ8_NJ0fM34y4UNRJk84PZQb
94
92
  klaude_code/core/tool/sub_agent_tool.py,sha256=LRMkVOZo6ldcrhstF1t6959XhxRZtUfSgh8g_-8xOOE,4628
95
93
  klaude_code/core/tool/todo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
94
  klaude_code/core/tool/todo/todo_write_tool.md,sha256=BFP9qIkzkakzskHwIOPVtDhehkh0F90A5oosyDuC_BE,1682
97
- klaude_code/core/tool/todo/todo_write_tool.py,sha256=uF0L56i6m9KLYs8qMBIIoDsdcaeo-wAqf2wXxKlwRiQ,4550
95
+ klaude_code/core/tool/todo/todo_write_tool.py,sha256=AItmUtRJJD0kOgwXa8zeJRYF-4zcHIwPYpnZGEnohPI,4454
98
96
  klaude_code/core/tool/todo/todo_write_tool_raw.md,sha256=AJ2OkZGcccQYDXkydPAr5JI2SExBF8qJd0rXsHySLps,9711
99
97
  klaude_code/core/tool/todo/update_plan_tool.md,sha256=OoEF4voHHd5J3VDv7tq3UCHdXApkBvxdHXUf5tVOkE8,157
100
98
  klaude_code/core/tool/todo/update_plan_tool.py,sha256=S_Kuw3l39Ux-eP6Cv4e3gXGeNmruLI6Xk1D1VQ7Oob8,3838
101
99
  klaude_code/core/tool/tool_abc.py,sha256=dLFRDIkdklL8rccb4RszJ3n92dZstT4zwFCjL7FeXq8,1186
102
100
  klaude_code/core/tool/tool_context.py,sha256=cr2oDty3k6QFJ6VQ9aAq76XrMgCJGs6WDFBgzeHfPks,5068
103
- klaude_code/core/tool/tool_registry.py,sha256=VuHQHk9cY7jkvVQ6ATKWVxhPW4HPgyCnskcv6eeiw9E,2678
101
+ klaude_code/core/tool/tool_registry.py,sha256=VFB0Z4BWtYKIWtpZVGhjSLcgfK244gow_UYZn1IcJQY,2642
104
102
  klaude_code/core/tool/tool_runner.py,sha256=-25-C2dOA06fmTgRtfKiyGijtq_Wy9V_KrxA9JyrU04,12873
105
103
  klaude_code/core/tool/truncation.py,sha256=LEK7mgGQ3f08vgouviIcVr53xptiRJAyhgQa0ALITJk,7691
106
104
  klaude_code/core/tool/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -143,18 +141,18 @@ klaude_code/llm/responses/input.py,sha256=BYZFBh6qa85pQjVrHds9q3A_aMfhSN2GB0e7VX
143
141
  klaude_code/llm/usage.py,sha256=Hukt4hKGUb2EnmwGy2-1Ku0oxEI6J7gOU0EsOSBBJAk,5034
144
142
  klaude_code/protocol/__init__.py,sha256=TTPnuyQ22RypoTGKdoiS7ZEgHzinuaRHUrauzHDh7Xo,246
145
143
  klaude_code/protocol/commands.py,sha256=4tFt98CD_KvS9C-XEaHLN-S-QFsbDxQb_kGKnPkQlrk,958
146
- klaude_code/protocol/events.py,sha256=unMUvSjadE3Rvy2UczE8PnDrwhmI2e09MReU8V6fQ_o,4195
144
+ klaude_code/protocol/events.py,sha256=jHJkrjUmD5vtP7edjz2T2d_oG14Dagba6Q3PG_0F2mQ,4234
147
145
  klaude_code/protocol/llm_param.py,sha256=nyk5bW3AF8KziDawcImwDLiFiv07bu1ci62TslWxUkg,5161
148
- klaude_code/protocol/message.py,sha256=0qhNjt4kp-wBnGOCaZjEXs0j96Xy-Y-V5PtD2dB9ELw,6620
149
- klaude_code/protocol/model.py,sha256=QSkdmdupuMivGKzp6oNzuFnoMnugBc8N3dUgfZCRdLk,9325
150
- klaude_code/protocol/op.py,sha256=4EO90_Ke4qqd-Rjr1jd1W2gk1wyfITUpONVtpLPEwWo,5765
151
- klaude_code/protocol/op_handler.py,sha256=hSxEVPEkk0vRPRsOyJdEn3sa87c_m17wzFGKjaMqa4o,1929
146
+ klaude_code/protocol/message.py,sha256=gG9GSr4Tysafe7Rl93LZ-xJnqkfn9rFaUEbAG6_H5gE,6208
147
+ klaude_code/protocol/model.py,sha256=tBwvGlmsI_GPsYrCuk5-QHqC-v0UgBSdm9UjEPOvTiM,10805
148
+ klaude_code/protocol/op.py,sha256=CEANh8tO0opdgcdtYtrMHPC0UmhpKtSKtzUY5pv-m5A,5297
149
+ klaude_code/protocol/op_handler.py,sha256=NgQWyLZwPqRRH93hMvPH-TCK8YbLeDpnKeNVnlt27_o,1765
152
150
  klaude_code/protocol/sub_agent/__init__.py,sha256=KkSdKAD45DERZoMS7zyTg0AWPgVmK-po0uv5rt_d-zE,3972
153
- klaude_code/protocol/sub_agent/explore.py,sha256=Xav8C-ob7jOlUQg40lJszxXmDj3vWj0rRBaJZHNU4F4,3261
151
+ klaude_code/protocol/sub_agent/explore.py,sha256=beDpcPFUds54JLhQyVEpuhVp5xm5hRnkp6F3gMCIvw8,2712
154
152
  klaude_code/protocol/sub_agent/image_gen.py,sha256=e2iRpGnWUHdZw96wC-f-Ik8HXYnvxTqQRqWXhNtUv2E,4812
155
- klaude_code/protocol/sub_agent/task.py,sha256=NHjI2i3dsVyPeQvNiTnFRY5W-dcopfMU2QUFhQhs_Rw,4302
156
- klaude_code/protocol/sub_agent/web.py,sha256=3GLglXUOqB1L8BgQC3pGagVrMnVOraEpGOev_cOCw7M,3725
157
- klaude_code/protocol/tools.py,sha256=ejhMCBBMz1ODbPEiynhzjB-aLbIRKL-wipPFv-nEz4g,373
153
+ klaude_code/protocol/sub_agent/task.py,sha256=96XHxbySu_zdM2K6WjlkPFGXoVDVrLiK2hew1cmwGS4,4290
154
+ klaude_code/protocol/sub_agent/web.py,sha256=XZEfY-bKhpw9RZPkrcohLQDMufQITeeweW7ZOHgk2Ao,3200
155
+ klaude_code/protocol/tools.py,sha256=OpGCr47ARKaCHcIlljhEN-p-2h4djgbP5jtfTIoKB-A,359
158
156
  klaude_code/session/__init__.py,sha256=4sw81uQvEd3YUOOjamKk1KqGmxeb4Ic9T1Tee5zztyU,241
159
157
  klaude_code/session/codec.py,sha256=fTtaS20H5G6M7k7vufg55c88ZGAblhFk9xGAm3CvWT0,2007
160
158
  klaude_code/session/export.py,sha256=Oa0BdrqipFGkGp62dAsvQ-bPQr0HFAQBpAb7OmgaNno,38926
@@ -183,47 +181,47 @@ klaude_code/ui/modes/__init__.py,sha256=ByDPbyYYU4o5kdnEes3b1VEV173RI9XAXyzkFbrA
183
181
  klaude_code/ui/modes/debug/__init__.py,sha256=1-1tAk7FtENdYzExSttYdHiJ-qH3DIQ5yYJ51ms2uSg,13
184
182
  klaude_code/ui/modes/debug/display.py,sha256=eY42OaT6h-AsfdCbTb_yALvEMkl6QV55K7nseXeABaU,1113
185
183
  klaude_code/ui/modes/exec/__init__.py,sha256=RsYa-DmDJj6g7iXb4H9mm2_Cu-KDQOD10RJd3yhVf_k,12
186
- klaude_code/ui/modes/exec/display.py,sha256=m2kkgaUoGD9rEVUmcm7Vs_PyAI2iruKCJYRhANjSsKo,1965
184
+ klaude_code/ui/modes/exec/display.py,sha256=o3-YIiK5wFI3ogfSJ6HHIWyJOomymoWKpMq2fHO2PAQ,1884
187
185
  klaude_code/ui/modes/repl/__init__.py,sha256=_0II73jlz5JUtvJsZ9sGRJzeHIQyJJpaI0egvmryYNw,286
188
186
  klaude_code/ui/modes/repl/clipboard.py,sha256=HjThFB9MG_YdJ76CQv7B-IUoz5JarbWUZDbUVkH1LpY,5106
189
187
  klaude_code/ui/modes/repl/completers.py,sha256=sUcG946XIt5yoSXD1GV7Ks-ltH-PDWJ4Z5Vd68zPPo0,32577
190
- klaude_code/ui/modes/repl/display.py,sha256=06wawOHWO2ItEA9EIEh97p3GDID7TJhAtpaA03nPQXs,2335
191
- klaude_code/ui/modes/repl/event_handler.py,sha256=VQXG__MLBA77qVlTCyOFoJB81jN0726IpBS3ImQawlo,25342
192
- klaude_code/ui/modes/repl/input_prompt_toolkit.py,sha256=vNVK7L2j27y_pK9g0NAct1uB1k7j-NWjHHSDxbjw7pc,27074
193
- klaude_code/ui/modes/repl/key_bindings.py,sha256=AsjwX5ZAsP_jDrmDTVUt3zatRh3_lBL0KC6EXhdfa7Y,13023
194
- klaude_code/ui/modes/repl/renderer.py,sha256=6_4NV3LKWLtcoXwdf7cwYss1LU7ldERrcTrCv3GUD4g,20135
188
+ klaude_code/ui/modes/repl/display.py,sha256=RzkUljpYBnNcV4TNwoxDaXUIN5soT9e96MO88q_mHP4,2326
189
+ klaude_code/ui/modes/repl/event_handler.py,sha256=Tcp0Xg5oyNh5nLnon7VGmGcJbl0kme296tcqc3315lI,25012
190
+ klaude_code/ui/modes/repl/input_prompt_toolkit.py,sha256=b_Wvzyweu6I8y4Wktq_10YO0nk6ZFwaEESrF1DfIgbY,27232
191
+ klaude_code/ui/modes/repl/key_bindings.py,sha256=2uN48J1HRHeCBqq7WrH5J82NIU59oQscce0HquAiYCI,18876
192
+ klaude_code/ui/modes/repl/renderer.py,sha256=rS_sGauPC9iztKTB3Hn5j-LaDHONjpQFoB42NG_pMxc,20215
195
193
  klaude_code/ui/renderers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
196
194
  klaude_code/ui/renderers/assistant.py,sha256=8_lonaFRi0FFDr3aVherNEYmnAQ8XM7B-oCUhKgHo-g,878
197
- klaude_code/ui/renderers/bash_syntax.py,sha256=VcX_tuojOtS58s_Ff-Zmhw_6LBRn2wsvR5UBtEr_qQU,5923
198
- klaude_code/ui/renderers/common.py,sha256=rSta7-6P2MZJlCURBENvDnKW6r7l-2hUTyxJevGlXhM,4530
199
- klaude_code/ui/renderers/developer.py,sha256=keEOFF1sZ9gz5uZHI5e5ERKSRdQRIROJ6bST8ylVO88,8202
195
+ klaude_code/ui/renderers/bash_syntax.py,sha256=fQmhQZBUA3RopkNAaaurkEOUX052EtPrW0LLpgBUUT4,7406
196
+ klaude_code/ui/renderers/common.py,sha256=OveWF3zTO2woOADw_iFOa7N6wAMmtC0nWI96qsVQVd4,4636
197
+ klaude_code/ui/renderers/developer.py,sha256=xAB9I3hjPnqAdu4hL2SYzzJZfSjmOJXViccVc-0ePuM,10007
200
198
  klaude_code/ui/renderers/diffs.py,sha256=NLEz3I8MNfZmEcSEs_Di7FBVumbkzJU6jtxqepxYN94,10397
201
199
  klaude_code/ui/renderers/errors.py,sha256=MavmYOQ7lyjA_VpuUpDVFCuY9W7XrMVdLsg2lCOn4GY,655
202
200
  klaude_code/ui/renderers/mermaid_viewer.py,sha256=MstufMnTauMKzI8cKngXpFqVo-qya20P8ReNkplYtEw,3098
203
- klaude_code/ui/renderers/metadata.py,sha256=07lVVO2x9MGhBKPLvMpuNYB9iiL49qzWdHozSgP59tg,8979
201
+ klaude_code/ui/renderers/metadata.py,sha256=tHaKAV9y3LXKiDLeYIl9dLRBK2BWnc5iZhte1ySl8Qk,9396
204
202
  klaude_code/ui/renderers/sub_agent.py,sha256=oXR5UjmvkoADgTeh8W3QG7RJfI0LU0W-Xej2y5xtCFs,7711
205
203
  klaude_code/ui/renderers/thinking.py,sha256=puUjuM3g4tYiSM9iEUty57mpD8a_pNFeeyn55LD-miQ,2864
206
- klaude_code/ui/renderers/tools.py,sha256=qwFNX6dw0zCjxHqFvf_8MApsZknWy1a4LX_fj0Q1x9I,28054
204
+ klaude_code/ui/renderers/tools.py,sha256=AUMdMMbmfSzDJZgitAzZ8XDzoroD9ZenGNGx0PpK_iE,26365
207
205
  klaude_code/ui/renderers/user_input.py,sha256=OPHVOZsCefIRVpgl6WMBFusc3Vwyr1fk5ilFaQ64AqU,4500
208
206
  klaude_code/ui/rich/__init__.py,sha256=zEZjnHR3Fnv_sFMxwIMjoJfwDoC4GRGv3lHJzAGRq_o,236
209
207
  klaude_code/ui/rich/cjk_wrap.py,sha256=ncmifgTwF6q95iayHQyazGbntt7BRQb_Ed7aXc8JU6Y,7551
210
208
  klaude_code/ui/rich/code_panel.py,sha256=ZKuJHh-kh-hIkBXSGLERLaDbJ7I9hvtvmYKocJn39_w,4744
211
209
  klaude_code/ui/rich/live.py,sha256=xiMT6dPsxM_jaazddKrV9CMJQWwpe2t9OdjffHvo1JU,2821
212
- klaude_code/ui/rich/markdown.py,sha256=c3zeLSw6LUxe2jn5fMmKlJFvPb6v4oaJ9pOutZS-3_I,18191
210
+ klaude_code/ui/rich/markdown.py,sha256=wddACuPlM4v_mxZZftjJaT5qXzdO_ol3uyTVs_gBBd8,20045
213
211
  klaude_code/ui/rich/quote.py,sha256=gTLwxSPQd9nlp73P1ysQIEgOb-BoTE2gzyiPBLMiHcY,3834
214
212
  klaude_code/ui/rich/searchable_text.py,sha256=PUe6MotKxSBY4FlPeojVjVQgxCsx_jiQ41bCzLp8WvE,2271
215
213
  klaude_code/ui/rich/status.py,sha256=HZdp5aXLC6RfJy7IFszCKsEn9_u8S6XygWsFPFuzFyU,13307
216
- klaude_code/ui/rich/theme.py,sha256=VKgQZI-qxKUZY6yl1FbnLkzEZnDQkGw32bLkwhYinYM,14796
214
+ klaude_code/ui/rich/theme.py,sha256=ebX-M-L8_HPITu6Q5t_we81yT3W9FDOblEyyEjHNAR4,14926
217
215
  klaude_code/ui/terminal/__init__.py,sha256=GIMnsEcIAGT_vBHvTlWEdyNmAEpruyscUA6M_j3GQZU,1412
218
216
  klaude_code/ui/terminal/color.py,sha256=jvVbuysf5pnI0uAjUVeyW2HwU58dutTg2msykbu2w4Y,7197
219
217
  klaude_code/ui/terminal/control.py,sha256=WhkqEWdtzUO4iWULp-iI9VazAWmzzW52qTQXk-4Dr4s,4922
220
218
  klaude_code/ui/terminal/image.py,sha256=ytzmw1J3fmaq49nWTDRmK_7aMIGbdUPCtVccSpVRHxY,1195
221
219
  klaude_code/ui/terminal/notifier.py,sha256=U3WcFYSO8CXAB3SESfE5q1dCkBDm9HGbg6QiAo-UhIg,4645
222
220
  klaude_code/ui/terminal/progress_bar.py,sha256=Go-0_ZodrmJVaQodaPnyxVU2nkpkBaYLnZBqwAUQukE,2133
223
- klaude_code/ui/terminal/selector.py,sha256=-zkPWr7H3vdaUfXe8wgKzO2-q8-4Sd7DNvVBHQ7aNzg,23555
221
+ klaude_code/ui/terminal/selector.py,sha256=QPddET-LfSU4we7NLHk17CqTWPKd6CQ0kj1Ire_WM3Q,24398
224
222
  klaude_code/ui/utils/__init__.py,sha256=YEsCLjbCPaPza-UXTPUMTJTrc9BmNBUP5CbFWlshyOQ,15
225
223
  klaude_code/ui/utils/common.py,sha256=FA1koSH8egLBT2Pb_D065gfK7u6-wTuGA9_WRembX3s,4249
226
- klaude_code-2.0.0.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
227
- klaude_code-2.0.0.dist-info/entry_points.txt,sha256=kkXIXedaTOtjXPr2rVjRVVXZYlFUcBHELaqmyVlWUFA,92
228
- klaude_code-2.0.0.dist-info/METADATA,sha256=Hm9FzAo07dD-GHbakpLmvO-OtPjfUF9H7lGx_uBfOjY,12782
229
- klaude_code-2.0.0.dist-info/RECORD,,
224
+ klaude_code-2.0.2.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
225
+ klaude_code-2.0.2.dist-info/entry_points.txt,sha256=kkXIXedaTOtjXPr2rVjRVVXZYlFUcBHELaqmyVlWUFA,92
226
+ klaude_code-2.0.2.dist-info/METADATA,sha256=QfsZnwwLDPSfv1crrucB29OYDjllR7m8GsnvOuzVDGQ,12782
227
+ klaude_code-2.0.2.dist-info/RECORD,,
@@ -1,41 +0,0 @@
1
- Moves a range of lines from one file to another.
2
-
3
- Usage:
4
- - Cuts lines from `start_line` to `end_line` (inclusive, 1-indexed) from the source file
5
- - Pastes them into the target file at `insert_line` (inserted before that line)
6
- - Both files must have been read first using the Read tool
7
- - To create a new target file, set `insert_line` to 1 and ensure target file does not exist
8
- - For same-file moves, line numbers refer to the original file state before any changes
9
- - Use this tool when refactoring code into separate modules to avoid passing large code blocks twice
10
- - To move files or directories, use the Bash tool with `mv` command instead
11
-
12
- Return format:
13
- The tool returns context snippets showing the state after the operation:
14
-
15
- 1. Source file context (after cut): Shows 3 lines before and after the cut location
16
- 2. Target file context (after insert): Shows 3 lines before the inserted content, the inserted content itself, and 3 lines after
17
-
18
- Example output:
19
- ```
20
- Cut 8 lines from /path/source.py (lines 9-16) and pasted into /path/target.py (updated) at line 10.
21
-
22
- Source file context (after cut):
23
- 6 return value
24
- 7
25
- 8
26
- -------- cut here --------
27
- 9 class NextClass:
28
- 10 pass
29
- 11
30
-
31
- Target file context (after insert):
32
- 7 return {}
33
- 8
34
- 9
35
- -------- inserted --------
36
- 10 class MovedClass:
37
- ...
38
- 17 return result
39
- -------- end --------
40
- 18 # Next section
41
- ```