klaude-code 2.0.1__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.
- klaude_code/cli/runtime.py +1 -8
- klaude_code/command/debug_cmd.py +1 -1
- klaude_code/command/export_online_cmd.py +4 -4
- klaude_code/command/fork_session_cmd.py +6 -6
- klaude_code/command/help_cmd.py +1 -1
- klaude_code/command/model_cmd.py +1 -1
- klaude_code/command/registry.py +10 -1
- klaude_code/command/release_notes_cmd.py +1 -1
- klaude_code/command/resume_cmd.py +2 -2
- klaude_code/command/status_cmd.py +2 -2
- klaude_code/command/terminal_setup_cmd.py +2 -2
- klaude_code/command/thinking_cmd.py +1 -1
- klaude_code/const.py +1 -0
- klaude_code/core/executor.py +15 -7
- klaude_code/core/reminders.py +55 -68
- klaude_code/core/tool/__init__.py +0 -2
- klaude_code/core/tool/file/edit_tool.py +3 -2
- klaude_code/core/tool/tool_registry.py +3 -3
- klaude_code/protocol/events.py +1 -0
- klaude_code/protocol/message.py +3 -11
- klaude_code/protocol/model.py +78 -9
- klaude_code/protocol/sub_agent/explore.py +0 -15
- klaude_code/protocol/sub_agent/task.py +1 -1
- klaude_code/protocol/sub_agent/web.py +1 -17
- klaude_code/protocol/tools.py +0 -1
- klaude_code/ui/modes/exec/display.py +2 -3
- klaude_code/ui/modes/repl/display.py +1 -1
- klaude_code/ui/modes/repl/event_handler.py +0 -5
- klaude_code/ui/modes/repl/input_prompt_toolkit.py +5 -1
- klaude_code/ui/modes/repl/renderer.py +2 -1
- klaude_code/ui/renderers/developer.py +113 -97
- klaude_code/ui/renderers/metadata.py +28 -15
- klaude_code/ui/renderers/tools.py +2 -39
- klaude_code/ui/rich/markdown.py +69 -11
- klaude_code/ui/rich/theme.py +9 -4
- klaude_code/ui/terminal/selector.py +36 -17
- {klaude_code-2.0.1.dist-info → klaude_code-2.0.2.dist-info}/METADATA +1 -1
- {klaude_code-2.0.1.dist-info → klaude_code-2.0.2.dist-info}/RECORD +40 -42
- klaude_code/core/tool/file/move_tool.md +0 -41
- klaude_code/core/tool/file/move_tool.py +0 -435
- {klaude_code-2.0.1.dist-info → klaude_code-2.0.2.dist-info}/WHEEL +0 -0
- {klaude_code-2.0.1.dist-info → klaude_code-2.0.2.dist-info}/entry_points.txt +0 -0
|
@@ -33,7 +33,6 @@ MARK_PLAN = "◈"
|
|
|
33
33
|
MARK_READ = "→"
|
|
34
34
|
MARK_EDIT = "±"
|
|
35
35
|
MARK_WRITE = "+"
|
|
36
|
-
MARK_MOVE = "±"
|
|
37
36
|
MARK_MERMAID = "⧉"
|
|
38
37
|
MARK_WEB_FETCH = "→"
|
|
39
38
|
MARK_WEB_SEARCH = "✱"
|
|
@@ -139,6 +138,7 @@ def render_bash_tool_call(arguments: str) -> RenderableType:
|
|
|
139
138
|
if isinstance(command, str) and command.strip():
|
|
140
139
|
cmd_str = command.strip()
|
|
141
140
|
highlighted = highlight_bash_command(cmd_str)
|
|
141
|
+
highlighted.stylize(ThemeKey.CODE_BACKGROUND)
|
|
142
142
|
|
|
143
143
|
display_line_count = len(highlighted.plain.splitlines())
|
|
144
144
|
|
|
@@ -277,35 +277,6 @@ def render_write_tool_call(arguments: str) -> RenderableType:
|
|
|
277
277
|
return _render_tool_call_tree(mark=MARK_WRITE, tool_name=tool_name, details=details)
|
|
278
278
|
|
|
279
279
|
|
|
280
|
-
def render_move_tool_call(arguments: str) -> RenderableType:
|
|
281
|
-
tool_name = "Move"
|
|
282
|
-
|
|
283
|
-
try:
|
|
284
|
-
payload = json.loads(arguments)
|
|
285
|
-
except json.JSONDecodeError:
|
|
286
|
-
details = Text(
|
|
287
|
-
arguments.strip()[:INVALID_TOOL_CALL_MAX_LENGTH],
|
|
288
|
-
style=ThemeKey.INVALID_TOOL_CALL_ARGS,
|
|
289
|
-
)
|
|
290
|
-
return _render_tool_call_tree(mark=MARK_MOVE, tool_name=tool_name, details=details)
|
|
291
|
-
|
|
292
|
-
source_path = payload.get("source_file_path", "")
|
|
293
|
-
target_path = payload.get("target_file_path", "")
|
|
294
|
-
start_line = payload.get("start_line", "")
|
|
295
|
-
end_line = payload.get("end_line", "")
|
|
296
|
-
|
|
297
|
-
parts = Text()
|
|
298
|
-
if source_path:
|
|
299
|
-
parts.append_text(render_path(source_path, ThemeKey.TOOL_PARAM_FILE_PATH))
|
|
300
|
-
if start_line and end_line:
|
|
301
|
-
parts.append(f":{start_line}-{end_line}", style=ThemeKey.TOOL_PARAM)
|
|
302
|
-
parts.append(" -> ", style=ThemeKey.TOOL_PARAM)
|
|
303
|
-
if target_path:
|
|
304
|
-
parts.append_text(render_path(target_path, ThemeKey.TOOL_PARAM_FILE_PATH))
|
|
305
|
-
|
|
306
|
-
return _render_tool_call_tree(mark=MARK_MOVE, tool_name=tool_name, details=parts)
|
|
307
|
-
|
|
308
|
-
|
|
309
280
|
def render_apply_patch_tool_call(arguments: str) -> RenderableType:
|
|
310
281
|
tool_name = "Apply Patch"
|
|
311
282
|
|
|
@@ -561,7 +532,6 @@ def render_report_back_tool_call() -> RenderableType:
|
|
|
561
532
|
_TOOL_ACTIVE_FORM: dict[str, str] = {
|
|
562
533
|
tools.BASH: "Bashing",
|
|
563
534
|
tools.APPLY_PATCH: "Patching",
|
|
564
|
-
tools.MOVE: "Moving",
|
|
565
535
|
tools.EDIT: "Editing",
|
|
566
536
|
tools.READ: "Reading",
|
|
567
537
|
tools.WRITE: "Writing",
|
|
@@ -609,8 +579,6 @@ def render_tool_call(e: events.ToolCallEvent) -> RenderableType | None:
|
|
|
609
579
|
return render_edit_tool_call(e.arguments)
|
|
610
580
|
case tools.WRITE:
|
|
611
581
|
return render_write_tool_call(e.arguments)
|
|
612
|
-
case tools.MOVE:
|
|
613
|
-
return render_move_tool_call(e.arguments)
|
|
614
582
|
case tools.BASH:
|
|
615
583
|
return render_bash_tool_call(e.arguments)
|
|
616
584
|
case tools.APPLY_PATCH:
|
|
@@ -691,7 +659,7 @@ def render_tool_result(
|
|
|
691
659
|
if isinstance(item, model.MarkdownDocUIExtra):
|
|
692
660
|
rendered.append(render_markdown_doc(item, code_theme=code_theme))
|
|
693
661
|
elif isinstance(item, model.DiffUIExtra):
|
|
694
|
-
show_file_name = e.tool_name
|
|
662
|
+
show_file_name = e.tool_name == tools.APPLY_PATCH
|
|
695
663
|
rendered.append(r_diffs.render_structured_diff(item, show_file_name=show_file_name))
|
|
696
664
|
return wrap(Group(*rendered)) if rendered else None
|
|
697
665
|
|
|
@@ -718,11 +686,6 @@ def render_tool_result(
|
|
|
718
686
|
if md_ui:
|
|
719
687
|
return wrap(render_markdown_doc(md_ui, code_theme=code_theme))
|
|
720
688
|
return wrap(r_diffs.render_structured_diff(diff_ui) if diff_ui else Text(""))
|
|
721
|
-
case tools.MOVE:
|
|
722
|
-
# Same-file move returns single DiffUIExtra, cross-file returns MultiUIExtra (handled above)
|
|
723
|
-
if diff_ui:
|
|
724
|
-
return wrap(r_diffs.render_structured_diff(diff_ui, show_file_name=True))
|
|
725
|
-
return None
|
|
726
689
|
case tools.APPLY_PATCH:
|
|
727
690
|
if md_ui:
|
|
728
691
|
return wrap(render_markdown_doc(md_ui, code_theme=code_theme))
|
klaude_code/ui/rich/markdown.py
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
445
|
-
|
|
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
|
-
|
|
472
|
-
|
|
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)
|
klaude_code/ui/rich/theme.py
CHANGED
|
@@ -53,7 +53,7 @@ LIGHT_PALETTE = Palette(
|
|
|
53
53
|
grey2="#93a4b1",
|
|
54
54
|
grey3="#c4ced4",
|
|
55
55
|
grey_green="#96a096",
|
|
56
|
-
purple="#
|
|
56
|
+
purple="#5f5fb7",
|
|
57
57
|
lavender="#5f87af",
|
|
58
58
|
diff_add="#2e5a32 on #dafbe1",
|
|
59
59
|
diff_add_char="#2e5a32 on #aceebb",
|
|
@@ -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="#
|
|
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:
|
|
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,7 +273,7 @@ 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.
|
|
276
|
+
ThemeKey.TOOL_RESULT_TREE_PREFIX.value: palette.grey3 + " dim",
|
|
272
277
|
ThemeKey.TOOL_RESULT_BOLD.value: "bold " + palette.grey_green,
|
|
273
278
|
ThemeKey.TOOL_RESULT_TRUNCATED.value: palette.grey1,
|
|
274
279
|
ThemeKey.TOOL_MARK.value: "bold",
|
|
@@ -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
|
-
|
|
307
|
-
|
|
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,
|
|
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
|
-
|
|
630
|
-
|
|
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:
|
|
@@ -17,29 +17,29 @@ klaude_code/cli/cost_cmd.py,sha256=GHbtgqWJnDg_TffPgSMx51gr1V-xzC-btaCIjMvCg9Q,1
|
|
|
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=
|
|
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=
|
|
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=
|
|
29
|
-
klaude_code/command/fork_session_cmd.py,sha256=
|
|
30
|
-
klaude_code/command/help_cmd.py,sha256=
|
|
31
|
-
klaude_code/command/model_cmd.py,sha256=
|
|
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=
|
|
38
|
-
klaude_code/command/release_notes_cmd.py,sha256=
|
|
39
|
-
klaude_code/command/resume_cmd.py,sha256=
|
|
40
|
-
klaude_code/command/status_cmd.py,sha256=
|
|
41
|
-
klaude_code/command/terminal_setup_cmd.py,sha256=
|
|
42
|
-
klaude_code/command/thinking_cmd.py,sha256=
|
|
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
45
|
klaude_code/config/assets/builtin_config.yaml,sha256=fXCvNZci7g7T6uUjDFq_lxTYAvszffsrpBeC41RZkb4,8214
|
|
@@ -47,10 +47,10 @@ klaude_code/config/builtin_config.py,sha256=1rHcFWmS0k6rXeIqR6sF_OgGXSbEd4ugh9bh
|
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
|
@@ -100,7 +98,7 @@ klaude_code/core/tool/todo/update_plan_tool.md,sha256=OoEF4voHHd5J3VDv7tq3UCHdXA
|
|
|
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=
|
|
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=
|
|
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=
|
|
149
|
-
klaude_code/protocol/model.py,sha256=
|
|
146
|
+
klaude_code/protocol/message.py,sha256=gG9GSr4Tysafe7Rl93LZ-xJnqkfn9rFaUEbAG6_H5gE,6208
|
|
147
|
+
klaude_code/protocol/model.py,sha256=tBwvGlmsI_GPsYrCuk5-QHqC-v0UgBSdm9UjEPOvTiM,10805
|
|
150
148
|
klaude_code/protocol/op.py,sha256=CEANh8tO0opdgcdtYtrMHPC0UmhpKtSKtzUY5pv-m5A,5297
|
|
151
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=
|
|
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=
|
|
156
|
-
klaude_code/protocol/sub_agent/web.py,sha256=
|
|
157
|
-
klaude_code/protocol/tools.py,sha256=
|
|
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=
|
|
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=
|
|
191
|
-
klaude_code/ui/modes/repl/event_handler.py,sha256=
|
|
192
|
-
klaude_code/ui/modes/repl/input_prompt_toolkit.py,sha256=
|
|
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
|
|
193
191
|
klaude_code/ui/modes/repl/key_bindings.py,sha256=2uN48J1HRHeCBqq7WrH5J82NIU59oQscce0HquAiYCI,18876
|
|
194
|
-
klaude_code/ui/modes/repl/renderer.py,sha256=
|
|
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
195
|
klaude_code/ui/renderers/bash_syntax.py,sha256=fQmhQZBUA3RopkNAaaurkEOUX052EtPrW0LLpgBUUT4,7406
|
|
198
196
|
klaude_code/ui/renderers/common.py,sha256=OveWF3zTO2woOADw_iFOa7N6wAMmtC0nWI96qsVQVd4,4636
|
|
199
|
-
klaude_code/ui/renderers/developer.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
|
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.
|
|
227
|
-
klaude_code-2.0.
|
|
228
|
-
klaude_code-2.0.
|
|
229
|
-
klaude_code-2.0.
|
|
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
|
-
```
|