klaude-code 2.5.2__py3-none-any.whl → 2.5.3__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/auth_cmd.py +2 -13
- klaude_code/cli/cost_cmd.py +10 -10
- klaude_code/cli/main.py +40 -7
- klaude_code/cli/session_cmd.py +2 -11
- klaude_code/config/assets/builtin_config.yaml +45 -24
- klaude_code/config/model_matcher.py +1 -1
- klaude_code/const.py +2 -1
- klaude_code/core/tool/file/edit_tool.py +1 -1
- klaude_code/core/tool/file/read_tool.py +2 -2
- klaude_code/core/tool/file/write_tool.py +1 -1
- klaude_code/core/turn.py +19 -1
- klaude_code/llm/anthropic/client.py +75 -50
- klaude_code/llm/anthropic/input.py +20 -9
- klaude_code/llm/google/client.py +223 -148
- klaude_code/llm/google/input.py +44 -36
- klaude_code/llm/openai_compatible/stream.py +109 -99
- klaude_code/llm/openrouter/reasoning.py +4 -29
- klaude_code/llm/partial_message.py +2 -32
- klaude_code/llm/responses/client.py +99 -81
- klaude_code/llm/responses/input.py +11 -25
- klaude_code/llm/stream_parts.py +94 -0
- klaude_code/log.py +57 -0
- klaude_code/tui/command/fork_session_cmd.py +14 -23
- klaude_code/tui/command/model_picker.py +2 -17
- klaude_code/tui/command/resume_cmd.py +2 -18
- klaude_code/tui/command/sub_agent_model_cmd.py +5 -19
- klaude_code/tui/command/thinking_cmd.py +2 -14
- klaude_code/tui/components/common.py +1 -1
- klaude_code/tui/components/metadata.py +17 -16
- klaude_code/tui/components/rich/quote.py +36 -8
- klaude_code/tui/components/rich/theme.py +2 -0
- klaude_code/tui/input/prompt_toolkit.py +3 -1
- klaude_code/tui/machine.py +19 -1
- klaude_code/tui/renderer.py +3 -3
- klaude_code/tui/terminal/selector.py +174 -31
- {klaude_code-2.5.2.dist-info → klaude_code-2.5.3.dist-info}/METADATA +1 -1
- {klaude_code-2.5.2.dist-info → klaude_code-2.5.3.dist-info}/RECORD +39 -38
- {klaude_code-2.5.2.dist-info → klaude_code-2.5.3.dist-info}/WHEEL +0 -0
- {klaude_code-2.5.2.dist-info → klaude_code-2.5.3.dist-info}/entry_points.txt +0 -0
|
@@ -18,17 +18,35 @@ from prompt_toolkit.layout import ConditionalContainer, Float, FloatContainer, H
|
|
|
18
18
|
from prompt_toolkit.layout.containers import Container, ScrollOffsets
|
|
19
19
|
from prompt_toolkit.layout.controls import BufferControl, FormattedTextControl
|
|
20
20
|
from prompt_toolkit.styles import Style, merge_styles
|
|
21
|
+
from prompt_toolkit.styles.base import BaseStyle
|
|
21
22
|
|
|
22
23
|
from klaude_code.ui.common import format_model_params
|
|
23
24
|
|
|
25
|
+
DEFAULT_PICKER_STYLE = Style(
|
|
26
|
+
[
|
|
27
|
+
("pointer", "ansigreen"),
|
|
28
|
+
("highlighted", "ansigreen"),
|
|
29
|
+
("msg", ""),
|
|
30
|
+
("meta", "fg:ansibrightblack"),
|
|
31
|
+
("text", "ansibrightblack"),
|
|
32
|
+
("question", "bold"),
|
|
33
|
+
("search_prefix", "ansibrightblack"),
|
|
34
|
+
# Search filter colors at the bottom (currently unused by selector, but
|
|
35
|
+
# kept for consistency with picker style defaults).
|
|
36
|
+
("search_success", "noinherit fg:ansigreen"),
|
|
37
|
+
("search_none", "noinherit fg:ansired"),
|
|
38
|
+
]
|
|
39
|
+
)
|
|
40
|
+
|
|
24
41
|
|
|
25
42
|
@dataclass(frozen=True, slots=True)
|
|
26
43
|
class SelectItem[T]:
|
|
27
44
|
"""One selectable item for terminal selection UI."""
|
|
28
45
|
|
|
29
46
|
title: list[tuple[str, str]]
|
|
30
|
-
value: T
|
|
47
|
+
value: T | None
|
|
31
48
|
search_text: str
|
|
49
|
+
selectable: bool = True
|
|
32
50
|
|
|
33
51
|
|
|
34
52
|
# ---------------------------------------------------------------------------
|
|
@@ -43,7 +61,7 @@ def build_model_select_items(models: list[Any]) -> list[SelectItem[str]]:
|
|
|
43
61
|
models: List of ModelEntry objects (from config.iter_model_entries).
|
|
44
62
|
|
|
45
63
|
Returns:
|
|
46
|
-
List of SelectItem[str] with
|
|
64
|
+
List of SelectItem[str] with model selector as the value.
|
|
47
65
|
"""
|
|
48
66
|
if not models:
|
|
49
67
|
return []
|
|
@@ -51,22 +69,64 @@ def build_model_select_items(models: list[Any]) -> list[SelectItem[str]]:
|
|
|
51
69
|
max_model_name_length = max(len(m.model_name) for m in models)
|
|
52
70
|
num_width = len(str(len(models)))
|
|
53
71
|
|
|
72
|
+
# Group models by provider in stable insertion order.
|
|
73
|
+
# This keeps per-provider model order intact while making the list easier to scan.
|
|
74
|
+
grouped: dict[str, list[Any]] = {}
|
|
75
|
+
for m in models:
|
|
76
|
+
provider = str(getattr(m, "provider", ""))
|
|
77
|
+
grouped.setdefault(provider, []).append(m)
|
|
78
|
+
|
|
79
|
+
# Calculate max header width for alignment
|
|
80
|
+
max_header_len = max(len(f"{p.upper()} ({len(ms)})") for p, ms in grouped.items())
|
|
81
|
+
|
|
54
82
|
items: list[SelectItem[str]] = []
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
(
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
83
|
+
model_idx = 0
|
|
84
|
+
separator_base_len = 40
|
|
85
|
+
for provider, provider_models in grouped.items():
|
|
86
|
+
provider_text = provider.lower()
|
|
87
|
+
count_text = f"({len(provider_models)})"
|
|
88
|
+
header_len = len(provider_text) + 1 + len(count_text)
|
|
89
|
+
separator_len = separator_base_len + max_header_len - header_len
|
|
90
|
+
separator = "─" * separator_len
|
|
91
|
+
items.append(
|
|
92
|
+
SelectItem(
|
|
93
|
+
title=[
|
|
94
|
+
("class:meta ansiyellow", provider_text + " "),
|
|
95
|
+
("class:meta ansibrightblack", count_text + " "),
|
|
96
|
+
("class:meta ansibrightblack dim", separator),
|
|
97
|
+
("class:meta", "\n"),
|
|
98
|
+
],
|
|
99
|
+
value=None,
|
|
100
|
+
search_text=provider,
|
|
101
|
+
selectable=False,
|
|
102
|
+
)
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
for m in provider_models:
|
|
106
|
+
model_idx += 1
|
|
107
|
+
model_id_str = m.model_id or "N/A"
|
|
108
|
+
display_name = m.model_name
|
|
109
|
+
first_line_prefix = f"{display_name:<{max_model_name_length}}"
|
|
110
|
+
meta_parts = format_model_params(m)
|
|
111
|
+
meta_str = " · ".join(meta_parts) if meta_parts else ""
|
|
112
|
+
title: list[tuple[str, str]] = [
|
|
113
|
+
("class:meta", f"{model_idx:>{num_width}}. "),
|
|
114
|
+
("class:msg bold", first_line_prefix),
|
|
115
|
+
("class:msg dim", " → "),
|
|
116
|
+
# Keep provider/model_id styling attribute-based (dim/bold) so that
|
|
117
|
+
# the selector's highlight color can still override uniformly.
|
|
118
|
+
("class:msg ansiblue", model_id_str),
|
|
119
|
+
("class:msg dim", " · "),
|
|
120
|
+
("class:msg ansibrightblack", provider),
|
|
121
|
+
]
|
|
122
|
+
|
|
123
|
+
if meta_str:
|
|
124
|
+
title.append(("class:msg dim", " · "))
|
|
125
|
+
title.append(("class:meta", meta_str))
|
|
126
|
+
|
|
127
|
+
title.append(("class:meta", "\n"))
|
|
128
|
+
search_text = f"{m.selector} {m.model_name} {model_id_str} {provider}"
|
|
129
|
+
items.append(SelectItem(title=title, value=m.selector, search_text=search_text))
|
|
70
130
|
|
|
71
131
|
return items
|
|
72
132
|
|
|
@@ -186,10 +246,58 @@ def _filter_items[T](
|
|
|
186
246
|
return needle_norm in _normalize_search_key(it.search_text)
|
|
187
247
|
return False
|
|
188
248
|
|
|
189
|
-
|
|
190
|
-
if
|
|
191
|
-
|
|
192
|
-
|
|
249
|
+
matched_selectable = [i for i, it in enumerate(items) if it.selectable and _is_match(it)]
|
|
250
|
+
if not matched_selectable:
|
|
251
|
+
# Keep the full list visible so the user can still browse when the filter
|
|
252
|
+
# doesn't match anything.
|
|
253
|
+
return list(range(len(items))), False
|
|
254
|
+
|
|
255
|
+
matched_set = set(matched_selectable)
|
|
256
|
+
visible: list[int] = []
|
|
257
|
+
|
|
258
|
+
# If we have non-selectable header rows, keep a header visible only when its
|
|
259
|
+
# group has at least one matched selectable item.
|
|
260
|
+
i = 0
|
|
261
|
+
while i < len(items):
|
|
262
|
+
it = items[i]
|
|
263
|
+
if not it.selectable:
|
|
264
|
+
header_idx = i
|
|
265
|
+
group_start = i + 1
|
|
266
|
+
group_end = next((j for j in range(group_start, len(items)) if not items[j].selectable), len(items))
|
|
267
|
+
group_matches = [j for j in range(group_start, group_end) if j in matched_set]
|
|
268
|
+
if group_matches:
|
|
269
|
+
visible.append(header_idx)
|
|
270
|
+
visible.extend(group_matches)
|
|
271
|
+
i = group_end
|
|
272
|
+
continue
|
|
273
|
+
|
|
274
|
+
if i in matched_set:
|
|
275
|
+
visible.append(i)
|
|
276
|
+
i += 1
|
|
277
|
+
|
|
278
|
+
return visible, True
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
def _coerce_pointed_at_to_selectable[T](
|
|
282
|
+
items: list[SelectItem[T]],
|
|
283
|
+
visible_indices: list[int],
|
|
284
|
+
pointed_at: int,
|
|
285
|
+
) -> int:
|
|
286
|
+
"""Return a valid pointed_at position for selectable items.
|
|
287
|
+
|
|
288
|
+
pointed_at is an index into visible_indices (not into items).
|
|
289
|
+
"""
|
|
290
|
+
|
|
291
|
+
if not visible_indices:
|
|
292
|
+
return 0
|
|
293
|
+
|
|
294
|
+
start = pointed_at % len(visible_indices)
|
|
295
|
+
for offset in range(len(visible_indices)):
|
|
296
|
+
pos = (start + offset) % len(visible_indices)
|
|
297
|
+
idx = visible_indices[pos]
|
|
298
|
+
if items[idx].selectable:
|
|
299
|
+
return pos
|
|
300
|
+
return start
|
|
193
301
|
|
|
194
302
|
|
|
195
303
|
def _build_choices_tokens[T](
|
|
@@ -325,7 +433,7 @@ def select_one[T](
|
|
|
325
433
|
message: str,
|
|
326
434
|
items: list[SelectItem[T]],
|
|
327
435
|
pointer: str = "→",
|
|
328
|
-
style:
|
|
436
|
+
style: BaseStyle | None = None,
|
|
329
437
|
use_search_filter: bool = True,
|
|
330
438
|
initial_value: T | None = None,
|
|
331
439
|
search_placeholder: str = "type to search",
|
|
@@ -353,7 +461,7 @@ def select_one[T](
|
|
|
353
461
|
nonlocal pointed_at
|
|
354
462
|
indices, _ = _filter_items(items, get_filter_text())
|
|
355
463
|
if indices:
|
|
356
|
-
pointed_at
|
|
464
|
+
pointed_at = _coerce_pointed_at_to_selectable(items, indices, pointed_at)
|
|
357
465
|
return _build_choices_tokens(
|
|
358
466
|
items,
|
|
359
467
|
indices,
|
|
@@ -362,6 +470,19 @@ def select_one[T](
|
|
|
362
470
|
highlight_pointed_item=highlight_pointed_item,
|
|
363
471
|
)
|
|
364
472
|
|
|
473
|
+
def move_pointed_at(delta: int) -> None:
|
|
474
|
+
nonlocal pointed_at
|
|
475
|
+
indices, _ = _filter_items(items, get_filter_text())
|
|
476
|
+
if not indices:
|
|
477
|
+
return
|
|
478
|
+
|
|
479
|
+
pointed_at = _coerce_pointed_at_to_selectable(items, indices, pointed_at)
|
|
480
|
+
for _ in range(len(indices)):
|
|
481
|
+
pointed_at = (pointed_at + delta) % len(indices)
|
|
482
|
+
idx = indices[pointed_at]
|
|
483
|
+
if items[idx].selectable:
|
|
484
|
+
return
|
|
485
|
+
|
|
365
486
|
def on_search_changed(_buf: Buffer) -> None:
|
|
366
487
|
nonlocal pointed_at
|
|
367
488
|
pointed_at = 0
|
|
@@ -377,14 +498,12 @@ def select_one[T](
|
|
|
377
498
|
|
|
378
499
|
@kb.add(Keys.Down, eager=True)
|
|
379
500
|
def _(event: KeyPressEvent) -> None:
|
|
380
|
-
|
|
381
|
-
pointed_at += 1
|
|
501
|
+
move_pointed_at(+1)
|
|
382
502
|
event.app.invalidate()
|
|
383
503
|
|
|
384
504
|
@kb.add(Keys.Up, eager=True)
|
|
385
505
|
def _(event: KeyPressEvent) -> None:
|
|
386
|
-
|
|
387
|
-
pointed_at -= 1
|
|
506
|
+
move_pointed_at(-1)
|
|
388
507
|
event.app.invalidate()
|
|
389
508
|
|
|
390
509
|
@kb.add(Keys.Enter, eager=True)
|
|
@@ -393,8 +512,15 @@ def select_one[T](
|
|
|
393
512
|
if not indices:
|
|
394
513
|
event.app.exit(result=None)
|
|
395
514
|
return
|
|
515
|
+
|
|
516
|
+
nonlocal pointed_at
|
|
517
|
+
pointed_at = _coerce_pointed_at_to_selectable(items, indices, pointed_at)
|
|
396
518
|
idx = indices[pointed_at % len(indices)]
|
|
397
|
-
|
|
519
|
+
value = items[idx].value
|
|
520
|
+
if value is None:
|
|
521
|
+
event.app.exit(result=None)
|
|
522
|
+
return
|
|
523
|
+
event.app.exit(result=value)
|
|
398
524
|
|
|
399
525
|
@kb.add(Keys.Escape, eager=True)
|
|
400
526
|
def _(event: KeyPressEvent) -> None:
|
|
@@ -532,14 +658,26 @@ class SelectOverlay[T]:
|
|
|
532
658
|
kb = KeyBindings()
|
|
533
659
|
is_open_filter = Condition(lambda: self._is_open)
|
|
534
660
|
|
|
661
|
+
def move_pointed_at(delta: int) -> None:
|
|
662
|
+
indices, _ = self._get_visible_indices()
|
|
663
|
+
if not indices:
|
|
664
|
+
return
|
|
665
|
+
|
|
666
|
+
self._pointed_at = _coerce_pointed_at_to_selectable(self._items, indices, self._pointed_at)
|
|
667
|
+
for _ in range(len(indices)):
|
|
668
|
+
self._pointed_at = (self._pointed_at + delta) % len(indices)
|
|
669
|
+
idx = indices[self._pointed_at]
|
|
670
|
+
if self._items[idx].selectable:
|
|
671
|
+
return
|
|
672
|
+
|
|
535
673
|
@kb.add(Keys.Down, filter=is_open_filter, eager=True)
|
|
536
674
|
def _(event: KeyPressEvent) -> None:
|
|
537
|
-
|
|
675
|
+
move_pointed_at(+1)
|
|
538
676
|
event.app.invalidate()
|
|
539
677
|
|
|
540
678
|
@kb.add(Keys.Up, filter=is_open_filter, eager=True)
|
|
541
679
|
def _(event: KeyPressEvent) -> None:
|
|
542
|
-
|
|
680
|
+
move_pointed_at(-1)
|
|
543
681
|
event.app.invalidate()
|
|
544
682
|
|
|
545
683
|
@kb.add(Keys.Enter, filter=is_open_filter, eager=True)
|
|
@@ -548,8 +686,13 @@ class SelectOverlay[T]:
|
|
|
548
686
|
if not indices:
|
|
549
687
|
self.close()
|
|
550
688
|
return
|
|
689
|
+
|
|
690
|
+
self._pointed_at = _coerce_pointed_at_to_selectable(self._items, indices, self._pointed_at)
|
|
551
691
|
idx = indices[self._pointed_at % len(indices)]
|
|
552
692
|
value = self._items[idx].value
|
|
693
|
+
if value is None:
|
|
694
|
+
self.close()
|
|
695
|
+
return
|
|
553
696
|
self.close()
|
|
554
697
|
|
|
555
698
|
if self._on_select is None:
|
|
@@ -593,7 +736,7 @@ class SelectOverlay[T]:
|
|
|
593
736
|
def get_choices_tokens() -> list[tuple[str, str]]:
|
|
594
737
|
indices, _ = self._get_visible_indices()
|
|
595
738
|
if indices:
|
|
596
|
-
self._pointed_at
|
|
739
|
+
self._pointed_at = _coerce_pointed_at_to_selectable(self._items, indices, self._pointed_at)
|
|
597
740
|
return _build_choices_tokens(
|
|
598
741
|
self._items,
|
|
599
742
|
indices,
|
|
@@ -14,23 +14,23 @@ klaude_code/auth/codex/jwt_utils.py,sha256=tuaJKT4vAIGeaQjNzgNcHWGrYYSDrDeaQT9h4
|
|
|
14
14
|
klaude_code/auth/codex/oauth.py,sha256=4hAGZ2Dv87NC3loEws7U5yNyPyIrryGm5YXY2FkHeyo,7840
|
|
15
15
|
klaude_code/auth/codex/token_manager.py,sha256=EiEdxEErh_mcnW8USWbvdbN91LK7nyk0PZJZGmdUTG8,1405
|
|
16
16
|
klaude_code/cli/__init__.py,sha256=YzlAoWAr5rx5oe6B_4zPxRFS4QaZauuy1AFwampP5fg,45
|
|
17
|
-
klaude_code/cli/auth_cmd.py,sha256=
|
|
17
|
+
klaude_code/cli/auth_cmd.py,sha256=TITw_NU23428vVOKJHT9ufynUklPFNZzCIzQK9jKRhA,5835
|
|
18
18
|
klaude_code/cli/config_cmd.py,sha256=ZDNt1qtXbiWtFJBIaqtfqKrGHXQ1X-NHBeu1k1DoO1o,3391
|
|
19
|
-
klaude_code/cli/cost_cmd.py,sha256=
|
|
19
|
+
klaude_code/cli/cost_cmd.py,sha256=WYLEnKspzr3iOezQpmde4T4YLdJFCasvySSnTHvvY9k,12376
|
|
20
20
|
klaude_code/cli/debug.py,sha256=vEHOjObhrIHDAXk3q6cOgeW2NZxCx5AWM1rJ6FiJnVU,1901
|
|
21
21
|
klaude_code/cli/list_model.py,sha256=dzXwahAZZv8NHPD4pvOTLaTJTEWnCjS1B-K52n3OHOs,13603
|
|
22
|
-
klaude_code/cli/main.py,sha256=
|
|
22
|
+
klaude_code/cli/main.py,sha256=6j5TG73d0XpNWY_bggr3mWLERkgNlZ4M3VZkIHHVsj8,10575
|
|
23
23
|
klaude_code/cli/self_update.py,sha256=mn1B7Xn1keQkbwoDURzsM2fFjorzJTNLlV-Y_NYa6fA,2708
|
|
24
|
-
klaude_code/cli/session_cmd.py,sha256=
|
|
24
|
+
klaude_code/cli/session_cmd.py,sha256=eZv6sx45bA1GDW_VA0_171-S4JBUB4jfW5tpOPako_g,2995
|
|
25
25
|
klaude_code/config/__init__.py,sha256=Qe1BeMekBfO2-Zd30x33lB70hdM1QQZGrp4DbWSQ-II,353
|
|
26
26
|
klaude_code/config/assets/__init__.py,sha256=uMUfmXT3I-gYiI-HVr1DrE60mx5cY1o8V7SYuGqOmvY,32
|
|
27
|
-
klaude_code/config/assets/builtin_config.yaml,sha256=
|
|
27
|
+
klaude_code/config/assets/builtin_config.yaml,sha256=iTD_GfQ2pgo_fYe_2vfs6nmEf-oABbWdF2wCXzW8yDY,7782
|
|
28
28
|
klaude_code/config/builtin_config.py,sha256=1rHcFWmS0k6rXeIqR6sF_OgGXSbEd4ugh9bh2N6VSS0,1494
|
|
29
29
|
klaude_code/config/config.py,sha256=u9xVkWFkR5ZYSGNkQ-uLBE_ogSpxvncuvBu6pMMuR_g,25062
|
|
30
|
-
klaude_code/config/model_matcher.py,sha256=
|
|
30
|
+
klaude_code/config/model_matcher.py,sha256=3IlLU5h3NDh_bURbCW-PV027C3irG3hyitwj1cj99Ig,6179
|
|
31
31
|
klaude_code/config/sub_agent_model_helper.py,sha256=fI-OIZWFI4116qjalsZj2pIi0waPR1cXE-OKrVMFS6g,8064
|
|
32
32
|
klaude_code/config/thinking.py,sha256=RDWH8UYbeDoIKPXaCIcvVwPAh07Ntaq8w5Zn_fhm-Fk,9329
|
|
33
|
-
klaude_code/const.py,sha256=
|
|
33
|
+
klaude_code/const.py,sha256=dVWGzsUINndi0skjlkDsfJtI5ocqINpJUVm0wxOaO7w,11246
|
|
34
34
|
klaude_code/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
35
|
klaude_code/core/agent.py,sha256=5TNzzzHgKLKpEcFhaM0d136kaGUn_mESC8b1nLoxS2o,3913
|
|
36
36
|
klaude_code/core/agent_profile.py,sha256=EAsAHj9Jd_JaL_ydr13I3uVoBN4RIm9zmKPn3H7NYu8,12817
|
|
@@ -61,11 +61,11 @@ klaude_code/core/tool/file/apply_patch_tool.md,sha256=KVDsjUiLDa97gym0NrZNVG4jA1
|
|
|
61
61
|
klaude_code/core/tool/file/apply_patch_tool.py,sha256=t7zNZW2wYpDyHutxq7nx_xSs7GbPx8UymveSR25F2-8,8079
|
|
62
62
|
klaude_code/core/tool/file/diff_builder.py,sha256=IH5Ws8LvcU66DnPfI40m_qfDyjN3mH4C1LVjC9eKYJQ,6044
|
|
63
63
|
klaude_code/core/tool/file/edit_tool.md,sha256=rEcUjJuPC46t1nXWjTDxplDcxWDbzTWsr6_bYt5_aRI,1110
|
|
64
|
-
klaude_code/core/tool/file/edit_tool.py,sha256=
|
|
64
|
+
klaude_code/core/tool/file/edit_tool.py,sha256=zduRQKnydxO8_nn_W64WkU_2NbOjoVDVR80qsgpJ0Aw,10898
|
|
65
65
|
klaude_code/core/tool/file/read_tool.md,sha256=74SLSl1tq3L0por73M0QV_ws41MRIvGXQpfLb8dmtp0,1351
|
|
66
|
-
klaude_code/core/tool/file/read_tool.py,sha256=
|
|
66
|
+
klaude_code/core/tool/file/read_tool.py,sha256=wne_aibWnsCpVc9xFYYPlPIDKCtVeTaqHCMaMhpoLwc,13236
|
|
67
67
|
klaude_code/core/tool/file/write_tool.md,sha256=CNnYgtieUasuHdpXLDpTEsqe492Pf7v75M4RQ3oIer8,613
|
|
68
|
-
klaude_code/core/tool/file/write_tool.py,sha256=
|
|
68
|
+
klaude_code/core/tool/file/write_tool.py,sha256=R2gWJp8kDOm_gUMbb8F6Z-SrEf8-8Y__9KaMmaQaQVg,5674
|
|
69
69
|
klaude_code/core/tool/offload.py,sha256=y-OgDVFwB-hMdzXll94ylUhFkiK0KwFCu7sxtFLlNxM,12477
|
|
70
70
|
klaude_code/core/tool/report_back_tool.py,sha256=SkuRhfLpVwTOSpIj7XwYfGDNBp8YsCUNXieXDkafS2E,3381
|
|
71
71
|
klaude_code/core/tool/shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -89,11 +89,11 @@ klaude_code/core/tool/web/web_fetch_tool.md,sha256=i0IwsZ6r9vAQeCpwDBtEGrWmHPzZk
|
|
|
89
89
|
klaude_code/core/tool/web/web_fetch_tool.py,sha256=jXbJTgpI_RvyXy5ac8qIrC-AKOUX1fJ3TpqXq_BfkS4,9596
|
|
90
90
|
klaude_code/core/tool/web/web_search_tool.md,sha256=l5gGPx-fXHFel1zLBljm8isy9pwEYXGrq5cFzzw1VBw,1135
|
|
91
91
|
klaude_code/core/tool/web/web_search_tool.py,sha256=ljkgXxP6L5nJnbYB_IOUtPUN9zA_h5hBD55lhNAja08,4293
|
|
92
|
-
klaude_code/core/turn.py,sha256
|
|
92
|
+
klaude_code/core/turn.py,sha256=16bS6yVOqGIFixB3Ev-o4wpymMfYgYKqC0Fh2NOT6F4,18628
|
|
93
93
|
klaude_code/llm/__init__.py,sha256=b4AsqnrMIs0a5qR_ti6rZcHwFzAReTwOW96EqozEoSo,287
|
|
94
94
|
klaude_code/llm/anthropic/__init__.py,sha256=PWETvaeNAAX3ue0ww1uRUIxTJG0RpWiutkn7MlwKxBs,67
|
|
95
|
-
klaude_code/llm/anthropic/client.py,sha256=
|
|
96
|
-
klaude_code/llm/anthropic/input.py,sha256=
|
|
95
|
+
klaude_code/llm/anthropic/client.py,sha256=RpYw4UQnhLzAsp6i-FU7cDW4deqngdAoQaTPGnCeO5U,17346
|
|
96
|
+
klaude_code/llm/anthropic/input.py,sha256=TCR9egH_bC6Y-KupZ6RSfkcZMZ4h3Upy6iwGoN_H4kQ,9766
|
|
97
97
|
klaude_code/llm/bedrock/__init__.py,sha256=UmXPBXMmigAJ7euIh59iivSeUdrYJwum0RYU7okkkPM,86
|
|
98
98
|
klaude_code/llm/bedrock/client.py,sha256=mETQrhGDt4uEDXO2c3y5Iao9RngygFSF6MOtwqAy1tk,2279
|
|
99
99
|
klaude_code/llm/claude/__init__.py,sha256=8VCvvEjQQI-RpAMfHCl5ct4zlDU_jgbAuLOc9p9u-B4,61
|
|
@@ -102,26 +102,27 @@ klaude_code/llm/client.py,sha256=2PRxcKBHRk7csw-swglsmLJfYUpbJn6tzNqMb5fJBvE,182
|
|
|
102
102
|
klaude_code/llm/codex/__init__.py,sha256=8vN2j2ezWB_UVpfqQ8ooStsBeLL5SY4SUMXOXdWiMaI,132
|
|
103
103
|
klaude_code/llm/codex/client.py,sha256=d2pDHKokQAaMfnWRoliBtTtjeyElQiPjSwNWyjW_PRs,5389
|
|
104
104
|
klaude_code/llm/google/__init__.py,sha256=tQtf_mh_mC3E4S9XAsnhS2JZXGRnYUsBKF0jpXZTvM0,61
|
|
105
|
-
klaude_code/llm/google/client.py,sha256=
|
|
106
|
-
klaude_code/llm/google/input.py,sha256=
|
|
105
|
+
klaude_code/llm/google/client.py,sha256=TcYO5Hlk6xX431uwrs8J_7KGDulhiUBsgOMoQIoIYk4,20758
|
|
106
|
+
klaude_code/llm/google/input.py,sha256=ErbpSmmv8wOaxSO7b2KSZqPgKvRJo1m4deW-JTzN5CU,8798
|
|
107
107
|
klaude_code/llm/image.py,sha256=jt9FBPFhAIo48pauIEJMIhB9WuDt4wwNs9s3LiEsETE,4272
|
|
108
108
|
klaude_code/llm/input_common.py,sha256=-GnZ87BfzyGqXTP3WYflFOqbRcbKpJjE9mjIv8qKWsQ,6228
|
|
109
109
|
klaude_code/llm/openai_compatible/__init__.py,sha256=ACGpnki7k53mMcCl591aw99pm9jZOZk0ghr7atOfNps,81
|
|
110
110
|
klaude_code/llm/openai_compatible/client.py,sha256=9epE7B58UX-Rr8Zw62AwVv1uonajzcT2RLjreQTQ_PU,4683
|
|
111
111
|
klaude_code/llm/openai_compatible/input.py,sha256=VpgT2wbph6bFsB6OFWKnIdjE32W_gKA_p39T-xuJPrE,3217
|
|
112
|
-
klaude_code/llm/openai_compatible/stream.py,sha256=
|
|
112
|
+
klaude_code/llm/openai_compatible/stream.py,sha256=TMTnXG1aP2wHs30PKqFmOmAnmLspb1unqY6Hl8RrE6Y,15875
|
|
113
113
|
klaude_code/llm/openai_compatible/tool_call_accumulator.py,sha256=quajimkUR1uSIPVXYsVNiQSTnOSVt7WuyZ23RyT7lJs,4906
|
|
114
114
|
klaude_code/llm/openrouter/__init__.py,sha256=_As8lHjwj6vapQhLorZttTpukk5ZiCdhFdGT38_ASPo,69
|
|
115
115
|
klaude_code/llm/openrouter/client.py,sha256=dlS6bmg26qkTI_He9FuZw1__6D8CbNufiBLvRHuYHK4,5695
|
|
116
116
|
klaude_code/llm/openrouter/input.py,sha256=Z_Cf6TnMZ5KQNJ0E5IIDCKK2OWlzi8IW0S5A72BBGT0,6176
|
|
117
|
-
klaude_code/llm/openrouter/reasoning.py,sha256=
|
|
118
|
-
klaude_code/llm/partial_message.py,sha256
|
|
117
|
+
klaude_code/llm/openrouter/reasoning.py,sha256=u7ccfnGxJ4Ws8P3X5FW91d8HXie29JjeWz0hZ1r0oFg,3320
|
|
118
|
+
klaude_code/llm/partial_message.py,sha256=-sjlpV-et4ViBtBpdtihK5QBjAlwS47-mBpVbRQPP3s,142
|
|
119
119
|
klaude_code/llm/registry.py,sha256=wEf9wvbb9CMvlNDtndKzKY5LN3zqEJYPI2v9kIrqfGI,2235
|
|
120
120
|
klaude_code/llm/responses/__init__.py,sha256=WsiyvnNiIytaYcaAqNiB8GI-5zcpjjeODPbMlteeFjA,67
|
|
121
|
-
klaude_code/llm/responses/client.py,sha256=
|
|
122
|
-
klaude_code/llm/responses/input.py,sha256=
|
|
121
|
+
klaude_code/llm/responses/client.py,sha256=cOpf8aCAtrcxN_hYTzYVAU67M49JkOjLlaVeJIELf8U,16355
|
|
122
|
+
klaude_code/llm/responses/input.py,sha256=kYR4VZpdc-iH-VG_xhQV-tYkRGX581oOcE9D1O_mMYg,8845
|
|
123
|
+
klaude_code/llm/stream_parts.py,sha256=kU40BaWyiKOqzrIwF0_IwogWgKRRqVEt-6MvwMi5J1I,2790
|
|
123
124
|
klaude_code/llm/usage.py,sha256=L6w-DlZ3oF8lOR_SEudPBM9idzIy7__f5FZ4ZJ2smi8,5957
|
|
124
|
-
klaude_code/log.py,sha256=
|
|
125
|
+
klaude_code/log.py,sha256=i9iVCmp4dxqxqH_7XPMVjZt8umiH1KPhRbX4Ao93mSM,11382
|
|
125
126
|
klaude_code/protocol/__init__.py,sha256=TTPnuyQ22RypoTGKdoiS7ZEgHzinuaRHUrauzHDh7Xo,246
|
|
126
127
|
klaude_code/protocol/commands.py,sha256=MfiUgN7r7VFGh0pel4nCRnk44F2Yzdcd7xqM-M369vY,771
|
|
127
128
|
klaude_code/protocol/events/__init__.py,sha256=5WoUQzj3P7Lih6xO6keaJmaLOyxboO1OtOPavrNNj24,1673
|
|
@@ -170,38 +171,38 @@ klaude_code/tui/command/copy_cmd.py,sha256=T-r1tWpNCNeixHeTnaR5RWd7bNkjw10CsPERT
|
|
|
170
171
|
klaude_code/tui/command/debug_cmd.py,sha256=cXi2ymcsbcJVCKfVKPvtUFPOmgNFEpwG-IcLlnkiyZY,2698
|
|
171
172
|
klaude_code/tui/command/export_cmd.py,sha256=KdFlOMJ6gruKYnd_24eWJJb21t9gLVwI1FnN1s08m5U,1609
|
|
172
173
|
klaude_code/tui/command/export_online_cmd.py,sha256=34De0K486wNOC5yjjPemcGTILrKQhWld2qfV3c0PUQ8,5664
|
|
173
|
-
klaude_code/tui/command/fork_session_cmd.py,sha256=
|
|
174
|
+
klaude_code/tui/command/fork_session_cmd.py,sha256=1ilbZ0FG8uuio4y-5R3toCTI6N5ZzJwNG3ZzahWnork,9235
|
|
174
175
|
klaude_code/tui/command/model_cmd.py,sha256=EnUcr_nnUm433G2HwEKKNssVE767IgQFNoc9etxPpmY,1734
|
|
175
|
-
klaude_code/tui/command/model_picker.py,sha256=
|
|
176
|
+
klaude_code/tui/command/model_picker.py,sha256=CQ5tb9sThFRon6cbibtLAtK1VR6fxmecdLUX1_h4Cng,5127
|
|
176
177
|
klaude_code/tui/command/prompt-init.md,sha256=a4_FQ3gKizqs2vl9oEY5jtG6HNhv3f-1b5RSCFq0A18,1873
|
|
177
178
|
klaude_code/tui/command/prompt_command.py,sha256=PGGoH_ZgA-0kTtpjk19rDSsWjiZyAEoUlxnSp8B8GRQ,2764
|
|
178
179
|
klaude_code/tui/command/refresh_cmd.py,sha256=_nY7Iko7GSpHmc9t2vKK2DcXRYbXfUnbGzwsmNc-yPI,1405
|
|
179
180
|
klaude_code/tui/command/registry.py,sha256=2HDrC6ZqGKSdzQAYra2TSFt1kc3tDliobjrWfgrTdX8,7028
|
|
180
|
-
klaude_code/tui/command/resume_cmd.py,sha256=
|
|
181
|
+
klaude_code/tui/command/resume_cmd.py,sha256=XaQyoB00_TiimUNl__z5ZvRg5EdG16LXvkGAZ3H6YxU,3359
|
|
181
182
|
klaude_code/tui/command/status_cmd.py,sha256=yALYGxyUX7iVdSRAKdG526YkqOvGV9F0CJNwk8nmzu4,5164
|
|
182
|
-
klaude_code/tui/command/sub_agent_model_cmd.py,sha256=
|
|
183
|
+
klaude_code/tui/command/sub_agent_model_cmd.py,sha256=iz9_bdxHBSOQjjMWPP4RBW58V_HhWREweG-4cXuotk0,5610
|
|
183
184
|
klaude_code/tui/command/terminal_setup_cmd.py,sha256=DfusD9c8eVkWPKGtQI0JvTgJnU_686huyzXsYE9TSEM,10639
|
|
184
|
-
klaude_code/tui/command/thinking_cmd.py,sha256=
|
|
185
|
+
klaude_code/tui/command/thinking_cmd.py,sha256=QV3YjcyNRTrmYrujvxfR6Dt05gTK7_uompT9BNWUfgg,2684
|
|
185
186
|
klaude_code/tui/commands.py,sha256=JBGmWFa31nVRmNJnfRUS9YSWIp79uw9XO0s11JY8SIM,3378
|
|
186
187
|
klaude_code/tui/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
187
188
|
klaude_code/tui/components/assistant.py,sha256=3VUIGf_BJhmoWZ5bHw-QUTMElUxp-MZQKUMWNimHKLE,904
|
|
188
189
|
klaude_code/tui/components/bash_syntax.py,sha256=0Pceo8w7jbK56smaVSBzkZYgCXzqqy7Qnx6kDZOh1yA,7450
|
|
189
190
|
klaude_code/tui/components/command_output.py,sha256=n1bxmPTXysJrm2UERNeOxC9fyW57qm-DIjQ5DU10wxE,3737
|
|
190
|
-
klaude_code/tui/components/common.py,sha256=
|
|
191
|
+
klaude_code/tui/components/common.py,sha256=dhUYLVVOSKxg5GCoS4eyUeKZ3E8Kpt4nqft4njuvPaI,4698
|
|
191
192
|
klaude_code/tui/components/developer.py,sha256=1hDr7boJN1z_JyvvFNn8m7MAf4lPDN3eoqmofE0lv4Y,5414
|
|
192
193
|
klaude_code/tui/components/diffs.py,sha256=JUokkkJeTIoKD0b-c-chMzIDmMjivBQqH8DYXIA3hHs,10411
|
|
193
194
|
klaude_code/tui/components/errors.py,sha256=_9ojf-23ThR-BoMwNEYG68rzILwA_O59muGvofYL10w,669
|
|
194
195
|
klaude_code/tui/components/mermaid_viewer.py,sha256=MstufMnTauMKzI8cKngXpFqVo-qya20P8ReNkplYtEw,3098
|
|
195
|
-
klaude_code/tui/components/metadata.py,sha256=
|
|
196
|
+
klaude_code/tui/components/metadata.py,sha256=U4gu8GYaaGlrT-xGWRQf-yGUUq_enqfjDbbC85GQZ6o,7277
|
|
196
197
|
klaude_code/tui/components/rich/__init__.py,sha256=zEZjnHR3Fnv_sFMxwIMjoJfwDoC4GRGv3lHJzAGRq_o,236
|
|
197
198
|
klaude_code/tui/components/rich/cjk_wrap.py,sha256=eMqBxftUtll7zrytUb9WtJ6naYLyax0W4KJRpGwWulM,7602
|
|
198
199
|
klaude_code/tui/components/rich/code_panel.py,sha256=ZKuJHh-kh-hIkBXSGLERLaDbJ7I9hvtvmYKocJn39_w,4744
|
|
199
200
|
klaude_code/tui/components/rich/live.py,sha256=xiMT6dPsxM_jaazddKrV9CMJQWwpe2t9OdjffHvo1JU,2821
|
|
200
201
|
klaude_code/tui/components/rich/markdown.py,sha256=dkSzovKFY8zMQqRhad9k-fpV3Iot1CxKvxe202aaP4w,19512
|
|
201
|
-
klaude_code/tui/components/rich/quote.py,sha256=
|
|
202
|
+
klaude_code/tui/components/rich/quote.py,sha256=u6sBmGdp0ckaZLw_XgJk7iHW4zxnWikUaB3GX2tkhlM,5375
|
|
202
203
|
klaude_code/tui/components/rich/searchable_text.py,sha256=PUe6MotKxSBY4FlPeojVjVQgxCsx_jiQ41bCzLp8WvE,2271
|
|
203
204
|
klaude_code/tui/components/rich/status.py,sha256=kNt08FQGvMZJB-zUhT5UyVFA7jvuRBNqf6yDXLEhb9c,14756
|
|
204
|
-
klaude_code/tui/components/rich/theme.py,sha256=
|
|
205
|
+
klaude_code/tui/components/rich/theme.py,sha256=UE70dpIOM8yXoDJk1i3qR3wwOYYEf4VuZ5khHCA8jxw,15260
|
|
205
206
|
klaude_code/tui/components/sub_agent.py,sha256=afkDbndByQmrxO3lvWR3rSvlbIE0wktbjdnlBTwka5I,6309
|
|
206
207
|
klaude_code/tui/components/thinking.py,sha256=AXC7Xpyiu7ST-eWGLRGY7N8Dak2ny3lV3mvznmfqKmM,2890
|
|
207
208
|
klaude_code/tui/components/tools.py,sha256=Up8DQbXuiPfcbiFVZD6gmZO0YBz2SExWS-tE_xeriX4,25060
|
|
@@ -212,9 +213,9 @@ klaude_code/tui/input/__init__.py,sha256=cAB38ypo7dHo_jgXUCnoBTUKHtiriVaKCv4YepS
|
|
|
212
213
|
klaude_code/tui/input/clipboard.py,sha256=HjThFB9MG_YdJ76CQv7B-IUoz5JarbWUZDbUVkH1LpY,5106
|
|
213
214
|
klaude_code/tui/input/completers.py,sha256=lkDBjnqYPLMgR6AZHhx2bfT_vMW-fbV6aqY9SqRwq74,32571
|
|
214
215
|
klaude_code/tui/input/key_bindings.py,sha256=2uN48J1HRHeCBqq7WrH5J82NIU59oQscce0HquAiYCI,18876
|
|
215
|
-
klaude_code/tui/input/prompt_toolkit.py,sha256=
|
|
216
|
-
klaude_code/tui/machine.py,sha256=
|
|
217
|
-
klaude_code/tui/renderer.py,sha256=
|
|
216
|
+
klaude_code/tui/input/prompt_toolkit.py,sha256=qIb-kDJBBzFhSX3BjwxW2EKAGRQmMYvEI6TzR6hJTP8,28671
|
|
217
|
+
klaude_code/tui/machine.py,sha256=Ibm4RJvcSnrcjexL5uk9fimgS7yFhsT9QfJR-eaQsXM,26063
|
|
218
|
+
klaude_code/tui/renderer.py,sha256=PufeBNZT3ILEBsaDJjoAcBHP4BZOQxTjzBCj8zV_Huk,29446
|
|
218
219
|
klaude_code/tui/runner.py,sha256=nOq8wC78HzgqHLRgHC8OgYubH--2gPcDqA6GoV913Yc,11270
|
|
219
220
|
klaude_code/tui/terminal/__init__.py,sha256=GIMnsEcIAGT_vBHvTlWEdyNmAEpruyscUA6M_j3GQZU,1412
|
|
220
221
|
klaude_code/tui/terminal/color.py,sha256=6SJR2RA8cqJINNoRz65w0HL3x9g46ydIvDOGWMeNnQU,7195
|
|
@@ -222,7 +223,7 @@ klaude_code/tui/terminal/control.py,sha256=m2fL6uHum5Li25X2IPnI4z_oVzMpVYcSldB-r
|
|
|
222
223
|
klaude_code/tui/terminal/image.py,sha256=ytzmw1J3fmaq49nWTDRmK_7aMIGbdUPCtVccSpVRHxY,1195
|
|
223
224
|
klaude_code/tui/terminal/notifier.py,sha256=-aTtgRvpzQcfbkOfbeDOfUs3l9smNBZX-60G9f0326Y,4643
|
|
224
225
|
klaude_code/tui/terminal/progress_bar.py,sha256=Go-0_ZodrmJVaQodaPnyxVU2nkpkBaYLnZBqwAUQukE,2133
|
|
225
|
-
klaude_code/tui/terminal/selector.py,sha256=
|
|
226
|
+
klaude_code/tui/terminal/selector.py,sha256=QOuC0Ug251r4ii87kCXV8r2RtJ4llZh1I28edADQY8o,29338
|
|
226
227
|
klaude_code/ui/__init__.py,sha256=3k9Sbesq0nNN3jcSMDqJ4zUcys4PKzGg4Xsum-6dZis,451
|
|
227
228
|
klaude_code/ui/common.py,sha256=_KmCNM-U8VowObYkfq8e9cyuvN1dF85P56hG8tGYlts,4309
|
|
228
229
|
klaude_code/ui/core/__init__.py,sha256=2NakrTDcxem5D0atyEY_Rxv1BbKCeZweF63L6AAq6r8,23
|
|
@@ -232,7 +233,7 @@ klaude_code/ui/debug_mode.py,sha256=ZvqbOx4c_rUerMbEZzOfcbNf9leqEDFjqJUlALtzF9Y,
|
|
|
232
233
|
klaude_code/ui/terminal/__init__.py,sha256=5OeAzr994r8-peWsLON0iXsAvJ2pexwMp36JY7FKGDc,179
|
|
233
234
|
klaude_code/ui/terminal/title.py,sha256=EZpLXTMhunsZPVGaxP317lH0Ad2oOh7OsjbV3yRD5is,1115
|
|
234
235
|
klaude_code/update.py,sha256=QER816AZe9u3RhRvP0Z37Jh2Ch5RLy9PREyDsI0e1dA,4480
|
|
235
|
-
klaude_code-2.5.
|
|
236
|
-
klaude_code-2.5.
|
|
237
|
-
klaude_code-2.5.
|
|
238
|
-
klaude_code-2.5.
|
|
236
|
+
klaude_code-2.5.3.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
|
|
237
|
+
klaude_code-2.5.3.dist-info/entry_points.txt,sha256=kkXIXedaTOtjXPr2rVjRVVXZYlFUcBHELaqmyVlWUFA,92
|
|
238
|
+
klaude_code-2.5.3.dist-info/METADATA,sha256=tTq2QyitxnA7pHnnL7MW2Prwi5g_aWaV89fDU9rXFKI,10249
|
|
239
|
+
klaude_code-2.5.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|