klaude-code 1.2.18__py3-none-any.whl → 1.2.20__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 (74) hide show
  1. klaude_code/cli/main.py +42 -22
  2. klaude_code/cli/runtime.py +46 -2
  3. klaude_code/{version.py → cli/self_update.py} +110 -2
  4. klaude_code/command/__init__.py +1 -3
  5. klaude_code/command/clear_cmd.py +5 -4
  6. klaude_code/command/command_abc.py +5 -40
  7. klaude_code/command/debug_cmd.py +2 -2
  8. klaude_code/command/diff_cmd.py +2 -1
  9. klaude_code/command/export_cmd.py +14 -49
  10. klaude_code/command/export_online_cmd.py +10 -4
  11. klaude_code/command/help_cmd.py +2 -1
  12. klaude_code/command/model_cmd.py +7 -5
  13. klaude_code/command/prompt-jj-workspace.md +18 -0
  14. klaude_code/command/prompt_command.py +16 -9
  15. klaude_code/command/refresh_cmd.py +3 -2
  16. klaude_code/command/registry.py +98 -28
  17. klaude_code/command/release_notes_cmd.py +2 -1
  18. klaude_code/command/status_cmd.py +2 -1
  19. klaude_code/command/terminal_setup_cmd.py +2 -1
  20. klaude_code/command/thinking_cmd.py +6 -4
  21. klaude_code/core/executor.py +187 -180
  22. klaude_code/core/manager/sub_agent_manager.py +3 -0
  23. klaude_code/core/prompt.py +4 -1
  24. klaude_code/core/prompts/prompt-sub-agent-explore.md +14 -2
  25. klaude_code/core/prompts/prompt-sub-agent-web.md +3 -3
  26. klaude_code/core/reminders.py +70 -26
  27. klaude_code/core/task.py +13 -12
  28. klaude_code/core/tool/__init__.py +2 -0
  29. klaude_code/core/tool/file/apply_patch_tool.py +3 -1
  30. klaude_code/core/tool/file/edit_tool.py +7 -5
  31. klaude_code/core/tool/file/multi_edit_tool.py +7 -5
  32. klaude_code/core/tool/file/read_tool.md +1 -1
  33. klaude_code/core/tool/file/read_tool.py +8 -4
  34. klaude_code/core/tool/file/write_tool.py +8 -6
  35. klaude_code/core/tool/memory/skill_loader.py +12 -10
  36. klaude_code/core/tool/shell/bash_tool.py +89 -17
  37. klaude_code/core/tool/sub_agent_tool.py +5 -1
  38. klaude_code/core/tool/tool_abc.py +18 -0
  39. klaude_code/core/tool/tool_context.py +6 -6
  40. klaude_code/core/tool/tool_registry.py +1 -1
  41. klaude_code/core/tool/tool_runner.py +7 -7
  42. klaude_code/core/tool/web/web_fetch_tool.py +77 -22
  43. klaude_code/core/tool/web/web_search_tool.py +5 -1
  44. klaude_code/llm/anthropic/client.py +25 -9
  45. klaude_code/llm/openai_compatible/client.py +5 -2
  46. klaude_code/llm/openrouter/client.py +7 -3
  47. klaude_code/llm/responses/client.py +6 -1
  48. klaude_code/protocol/model.py +8 -1
  49. klaude_code/protocol/op.py +47 -0
  50. klaude_code/protocol/op_handler.py +25 -1
  51. klaude_code/protocol/sub_agent/web.py +1 -1
  52. klaude_code/session/codec.py +71 -0
  53. klaude_code/session/export.py +21 -11
  54. klaude_code/session/session.py +186 -322
  55. klaude_code/session/store.py +215 -0
  56. klaude_code/session/templates/export_session.html +48 -47
  57. klaude_code/ui/modes/repl/completers.py +211 -71
  58. klaude_code/ui/modes/repl/event_handler.py +7 -23
  59. klaude_code/ui/modes/repl/input_prompt_toolkit.py +5 -7
  60. klaude_code/ui/modes/repl/renderer.py +2 -2
  61. klaude_code/ui/renderers/common.py +54 -0
  62. klaude_code/ui/renderers/developer.py +2 -3
  63. klaude_code/ui/renderers/errors.py +1 -1
  64. klaude_code/ui/renderers/metadata.py +10 -1
  65. klaude_code/ui/renderers/tools.py +3 -4
  66. klaude_code/ui/rich/__init__.py +10 -1
  67. klaude_code/ui/rich/cjk_wrap.py +228 -0
  68. klaude_code/ui/rich/status.py +0 -1
  69. klaude_code/ui/utils/common.py +0 -18
  70. {klaude_code-1.2.18.dist-info → klaude_code-1.2.20.dist-info}/METADATA +18 -2
  71. {klaude_code-1.2.18.dist-info → klaude_code-1.2.20.dist-info}/RECORD +73 -70
  72. klaude_code/ui/utils/debouncer.py +0 -42
  73. {klaude_code-1.2.18.dist-info → klaude_code-1.2.20.dist-info}/WHEEL +0 -0
  74. {klaude_code-1.2.18.dist-info → klaude_code-1.2.20.dist-info}/entry_points.txt +0 -0
@@ -10,9 +10,8 @@ from klaude_code import const
10
10
  from klaude_code.protocol import events, model, tools
11
11
  from klaude_code.protocol.sub_agent import is_sub_agent_tool as _is_sub_agent_tool
12
12
  from klaude_code.ui.renderers import diffs as r_diffs
13
- from klaude_code.ui.renderers.common import create_grid
13
+ from klaude_code.ui.renderers.common import create_grid, truncate_display
14
14
  from klaude_code.ui.rich.theme import ThemeKey
15
- from klaude_code.ui.utils.common import truncate_display
16
15
 
17
16
 
18
17
  def is_sub_agent_tool(tool_name: str) -> bool:
@@ -290,7 +289,7 @@ def render_todo(tr: events.ToolResultEvent) -> RenderableType:
290
289
  def render_generic_tool_result(result: str, *, is_error: bool = False) -> RenderableType:
291
290
  """Render a generic tool result as indented, truncated text."""
292
291
  style = ThemeKey.ERROR if is_error else ThemeKey.TOOL_RESULT
293
- return Padding.indent(Text(truncate_display(result), style=style), level=2)
292
+ return Padding.indent(truncate_display(result, base_style=style), level=2)
294
293
 
295
294
 
296
295
  def _extract_mermaid_link(
@@ -597,7 +596,7 @@ def render_tool_result(e: events.ToolResultEvent) -> RenderableType | None:
597
596
 
598
597
  # Handle error case
599
598
  if e.status == "error" and e.ui_extra is None:
600
- error_msg = Text(truncate_display(e.result))
599
+ error_msg = truncate_display(e.result)
601
600
  return r_errors.render_error(error_msg)
602
601
 
603
602
  # Show truncation info if output was truncated and saved to file
@@ -1 +1,10 @@
1
- # Rich rendering utilities
1
+ """Rich rendering utilities.
2
+
3
+ This package installs a small monkey-patch that improves CJK line breaking in Rich.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from .cjk_wrap import install_rich_cjk_wrap_patch
9
+
10
+ install_rich_cjk_wrap_patch()
@@ -0,0 +1,228 @@
1
+ """Monkey-patch Rich wrapping for better CJK line breaks."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import unicodedata
6
+ from collections.abc import Callable
7
+
8
+
9
+ def _is_cjk_char(ch: str) -> bool:
10
+ return unicodedata.east_asian_width(ch) in ("W", "F")
11
+
12
+
13
+ def _contains_cjk(text: str) -> bool:
14
+ return any(_is_cjk_char(ch) for ch in text)
15
+
16
+
17
+ def _is_ascii_word_char(ch: str) -> bool:
18
+ o = ord(ch)
19
+ return (48 <= o <= 57) or (65 <= o <= 90) or (97 <= o <= 122) or ch in "_."
20
+
21
+
22
+ def _find_prefix_len_for_remaining(word: str, remaining_space: int) -> int:
23
+ """Find a prefix length (in chars) that fits remaining_space.
24
+
25
+ This prefers breakpoints that don't split ASCII word-like runs.
26
+ """
27
+
28
+ if remaining_space <= 0:
29
+ return 0
30
+
31
+ # Local import keeps import-time overhead low.
32
+ from rich.cells import get_character_cell_size
33
+
34
+ total = 0
35
+ best = 0
36
+ n = len(word)
37
+
38
+ for i, ch in enumerate(word):
39
+ total += get_character_cell_size(ch)
40
+ if total > remaining_space:
41
+ break
42
+
43
+ boundary = i + 1
44
+ if boundary >= n:
45
+ best = boundary
46
+ break
47
+
48
+ # Avoid leaving a path separator at the start of the next line.
49
+ if word[boundary] in "/":
50
+ continue
51
+
52
+ # Disallow breaks inside ASCII word runs: ...a|b...
53
+ if _is_ascii_word_char(word[boundary - 1]) and _is_ascii_word_char(word[boundary]):
54
+ continue
55
+
56
+ best = boundary
57
+
58
+ return best
59
+
60
+
61
+ _rich_cjk_wrap_patch_installed = False
62
+
63
+
64
+ def install_rich_cjk_wrap_patch() -> bool:
65
+ """Install a monkey-patch that improves CJK line wrapping in Rich.
66
+
67
+ Rich wraps text by tokenizing on whitespace, which causes long CJK runs to be
68
+ treated as a single "word" and moved to the next line wholesale.
69
+
70
+ This patch keeps ASCII word wrapping behaviour intact, but allows breaking
71
+ CJK-containing tokens at the end of a line to fill remaining space.
72
+
73
+ Returns:
74
+ True if the patch was installed in this process.
75
+ """
76
+
77
+ global _rich_cjk_wrap_patch_installed
78
+ if _rich_cjk_wrap_patch_installed:
79
+ return False
80
+
81
+ import rich._wrap as _wrap
82
+ import rich.text as _text
83
+ from rich._loop import loop_last
84
+ from rich.cells import cell_len, chop_cells
85
+
86
+ _OPEN_TO_CLOSE = {
87
+ "(": ")",
88
+ "(": ")",
89
+ "[": "]",
90
+ "{": "}",
91
+ "“": "”",
92
+ "‘": "’",
93
+ "《": "》",
94
+ "〈": "〉",
95
+ "「": "」",
96
+ "『": "』",
97
+ "【": "】",
98
+ }
99
+
100
+ def _leading_unclosed_delim(word: str) -> str | None:
101
+ stripped = word.lstrip()
102
+ if not stripped:
103
+ return None
104
+
105
+ close_delim = _OPEN_TO_CLOSE.get(stripped[0])
106
+ if close_delim is None:
107
+ return None
108
+
109
+ if close_delim in stripped:
110
+ return None
111
+
112
+ return close_delim
113
+
114
+ def _close_delim_appears_soon(
115
+ word_tokens: list[str],
116
+ *,
117
+ start_index: int,
118
+ close_delim: str,
119
+ max_chars: int = 32,
120
+ max_tokens: int = 4,
121
+ ) -> bool:
122
+ consumed = 0
123
+ for token in word_tokens[start_index + 1 : start_index + 1 + max_tokens]:
124
+ if not token:
125
+ continue
126
+
127
+ close_pos = token.find(close_delim)
128
+ if close_pos != -1 and (consumed + close_pos) < max_chars:
129
+ return True
130
+
131
+ consumed += len(token)
132
+ if consumed >= max_chars:
133
+ return False
134
+
135
+ return False
136
+
137
+ def divide_line_patched(text: str, width: int, fold: bool = True) -> list[int]:
138
+ break_positions: list[int] = []
139
+
140
+ def append(pos: int) -> None:
141
+ if pos and (not break_positions or break_positions[-1] != pos):
142
+ break_positions.append(pos)
143
+
144
+ cell_offset = 0
145
+ _cell_len: Callable[[str], int] = cell_len
146
+
147
+ words = list(_wrap.words(text))
148
+ word_tokens = [w for _s, _e, w in words]
149
+
150
+ for index, (start, _end, word) in enumerate(words):
151
+ next_word: str | None = None
152
+ if index + 1 < len(words):
153
+ next_word = words[index + 1][2]
154
+
155
+ # Heuristic: avoid leaving an unclosed opening delimiter fragment (e.g. "(Deep ")
156
+ # at the end of a line when the next token will wrap.
157
+ word_length = _cell_len(word.rstrip())
158
+ remaining_space = width - cell_offset
159
+ if remaining_space >= word_length and cell_offset and start and next_word is not None:
160
+ cell_offset_with_trailing = cell_offset + _cell_len(word)
161
+ next_length = _cell_len(next_word.rstrip())
162
+ next_will_wrap = next_length > width or (width - cell_offset_with_trailing) < next_length
163
+
164
+ close_delim = _leading_unclosed_delim(word)
165
+ if close_delim is not None and next_will_wrap:
166
+ stripped = word.strip()
167
+ if _cell_len(stripped) <= 16 and _close_delim_appears_soon(
168
+ word_tokens, start_index=index, close_delim=close_delim
169
+ ):
170
+ append(start)
171
+ cell_offset = _cell_len(word)
172
+ continue
173
+
174
+ while True:
175
+ word_length = _cell_len(word.rstrip())
176
+ remaining_space = width - cell_offset
177
+
178
+ if remaining_space >= word_length:
179
+ cell_offset += _cell_len(word)
180
+ break
181
+
182
+ # Prefer splitting CJK-containing tokens to fill remaining space.
183
+ if fold and cell_offset and start and remaining_space > 0 and _contains_cjk(word):
184
+ prefix_len = _find_prefix_len_for_remaining(word, remaining_space)
185
+ if prefix_len:
186
+ break_at = start + prefix_len
187
+ append(break_at)
188
+ word = word[prefix_len:]
189
+ start = break_at
190
+
191
+ # If the remainder fits on the next (empty) line, keep Rich's
192
+ # existing behaviour and move on.
193
+ if _cell_len(word.rstrip()) <= width:
194
+ cell_offset = _cell_len(word)
195
+ break
196
+
197
+ # Otherwise, continue folding the remainder starting on a new line.
198
+ cell_offset = 0
199
+ continue
200
+
201
+ # Fall back to Rich's original logic.
202
+ if word_length > width:
203
+ if fold:
204
+ folded_word = chop_cells(word, width=width)
205
+ for last, line in loop_last(folded_word):
206
+ if start:
207
+ append(start)
208
+ if last:
209
+ cell_offset = _cell_len(line)
210
+ else:
211
+ start += len(line)
212
+ else:
213
+ if start:
214
+ append(start)
215
+ cell_offset = _cell_len(word)
216
+ break
217
+
218
+ if cell_offset and start:
219
+ append(start)
220
+ cell_offset = _cell_len(word)
221
+ break
222
+
223
+ return break_positions
224
+
225
+ _wrap.divide_line = divide_line_patched # pyright: ignore[reportPrivateImportUsage]
226
+ _text.divide_line = divide_line_patched # pyright: ignore[reportPrivateImportUsage]
227
+ _rich_cjk_wrap_patch_installed = True
228
+ return True
@@ -34,7 +34,6 @@ _BREATHING_SPINNER_GLYPHS_BASE = [
34
34
  "◇",
35
35
  "✴",
36
36
  "✷",
37
- "⟡",
38
37
  ]
39
38
 
40
39
  # Shuffle glyphs on module load for variety across sessions
@@ -2,8 +2,6 @@ import re
2
2
  import subprocess
3
3
  from pathlib import Path
4
4
 
5
- from klaude_code import const
6
-
7
5
  LEADING_NEWLINES_REGEX = re.compile(r"^\n{2,}")
8
6
 
9
7
 
@@ -90,19 +88,3 @@ def show_path_with_tilde(path: Path | None = None):
90
88
  return f"~/{relative_path}"
91
89
  except ValueError:
92
90
  return str(path)
93
-
94
-
95
- def truncate_display(
96
- text: str,
97
- max_lines: int = const.TRUNCATE_DISPLAY_MAX_LINES,
98
- max_line_length: int = const.TRUNCATE_DISPLAY_MAX_LINE_LENGTH,
99
- ) -> str:
100
- lines = text.split("\n")
101
- if len(lines) > max_lines:
102
- lines = [*lines[:max_lines], "… (more " + str(len(lines) - max_lines) + " lines)"]
103
- for i, line in enumerate(lines):
104
- if len(line) > max_line_length:
105
- lines[i] = (
106
- line[:max_line_length] + "… (more " + str(len(line) - max_line_length) + " characters in this line)"
107
- )
108
- return "\n".join(lines)
@@ -1,8 +1,9 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: klaude-code
3
- Version: 1.2.18
3
+ Version: 1.2.20
4
4
  Summary: Add your description here
5
5
  Requires-Dist: anthropic>=0.66.0
6
+ Requires-Dist: chardet>=5.2.0
6
7
  Requires-Dist: ddgs>=9.9.3
7
8
  Requires-Dist: openai>=1.102.0
8
9
  Requires-Dist: pillow>=12.0.0
@@ -41,6 +42,21 @@ To update:
41
42
  uv tool upgrade klaude-code
42
43
  ```
43
44
 
45
+ Or use the built-in alias command:
46
+
47
+ ```bash
48
+ klaude update
49
+ klaude upgrade
50
+ ```
51
+
52
+ To show version:
53
+
54
+ ```bash
55
+ klaude --version
56
+ klaude -v
57
+ klaude version
58
+ ```
59
+
44
60
  ## Usage
45
61
 
46
62
  ### Interactive Mode
@@ -50,7 +66,7 @@ klaude [--model <name>] [--select-model]
50
66
  ```
51
67
 
52
68
  **Options:**
53
- - `--version`/`-V`: Show version and exit.
69
+ - `--version`/`-V`/`-v`: Show version and exit.
54
70
  - `--model`/`-m`: Preferred model name (exact match picks immediately; otherwise opens the interactive selector filtered by this value).
55
71
  - `--select-model`/`-s`: Open the interactive model selector at startup (shows all models unless `--model` is also provided).
56
72
  - `--continue`/`-c`: Resume the most recent session.
@@ -10,138 +10,142 @@ klaude_code/cli/auth_cmd.py,sha256=UWMHjn9xZp2o8OZc-x8y9MnkZgRWOkFXk05iKJYcySE,2
10
10
  klaude_code/cli/config_cmd.py,sha256=SBFmBnHvkf5IJtpsDDuHsHWQCmYd2i4PtIMBOKpxmOM,2894
11
11
  klaude_code/cli/debug.py,sha256=vohQVqy6fB59p4NYoiQb8BiLcl5YiGvugDXc2hYGFTc,2417
12
12
  klaude_code/cli/list_model.py,sha256=9YOxhWE0J59NaY-SrgPA9_jA1A8rlOGwWmzK0TRuos4,8011
13
- klaude_code/cli/main.py,sha256=XjeCnvQ2pYtQJVeWwkSxa_Nhu3Fx8uWnmRmDCnPvwd4,8427
14
- klaude_code/cli/runtime.py,sha256=QwTqPy-2y4rOTOT6KFPPtRLBEBhu0ZhBx0fkCd3xv00,11973
13
+ klaude_code/cli/main.py,sha256=K6VkJOmxVPc0jGNJPG3wumupUCx69DSpLmvKlANw98s,9485
14
+ klaude_code/cli/runtime.py,sha256=PqYK48EbK4d5Hm8P7SjtMR5p2UQDfPpsyEiNT8q4Zvc,13650
15
+ klaude_code/cli/self_update.py,sha256=fekLNRm3ivZ-Xbc-79rcgDBXbq-Zb-BkSQOGMRLeTAs,7986
15
16
  klaude_code/cli/session_cmd.py,sha256=jAopkqq_DGgoDIcGxT-RSzn9R4yqBC8NCaNgK1GLqnQ,2634
16
- klaude_code/command/__init__.py,sha256=6IhjtxjTz6sum4as4sp8N4_sSNlX0DDUEaXIqgJ5C8c,3290
17
- klaude_code/command/clear_cmd.py,sha256=963rYDVwZLlGLzdn11GD9HbYsd71KJP7WeT5e3pbQcA,564
18
- klaude_code/command/command_abc.py,sha256=R6Ji0LxiPBN4gtlaWkmbzzJQc2JXE1EiMkrEOq_bvas,3300
19
- klaude_code/command/debug_cmd.py,sha256=hRwIgB5aWdYS5DFfCuJjAaP6M38bP05ob0_6kb-J47M,2696
20
- klaude_code/command/diff_cmd.py,sha256=6XhnnPxytT_IcNdHZUcrpFkKEv_g_eyb5b7S-OZ6x-E,5159
21
- klaude_code/command/export_cmd.py,sha256=_NW5FV3qHDeh5yDP1VXdNOI5J0AmPJu9ODnQaegsnAY,3466
22
- klaude_code/command/export_online_cmd.py,sha256=sak3-C9LaiuL5BAByPFzySdIbpSx2lcUo83GNRj-yOo,5596
23
- klaude_code/command/help_cmd.py,sha256=gJQRLEOyT0Cqr-RvVdTpmmd8lbj2FzyOsADyJecGPPY,1574
24
- klaude_code/command/model_cmd.py,sha256=wCFdc8Hg1V01odEtQSKIF8Q8u8R-_pELTXBolU9DAeQ,1572
17
+ klaude_code/command/__init__.py,sha256=FBsAJAxQRR9zy-0GEfVsa52dk3CGmJh6-L4cjZ9sfag,3218
18
+ klaude_code/command/clear_cmd.py,sha256=DzCg6vQ5Eve7Rx4HdL-uta1pBDRQinOW6nwx5YlOA24,658
19
+ klaude_code/command/command_abc.py,sha256=wUGE8NkCWWKy8lZXcW-UcQyMGnVikxTrCIycLlPU5dY,2350
20
+ klaude_code/command/debug_cmd.py,sha256=9sBIAwHz28QoI-tHsU3ksQlDObF1ilIbtAAEAVMR0v0,2734
21
+ klaude_code/command/diff_cmd.py,sha256=T_Oyo7rHZM5_qKGA0DjSHNZlzAHOhUwJS3Oqvur3Hho,5218
22
+ klaude_code/command/export_cmd.py,sha256=Cs7YXWtos-ZfN9OEppIl8Xrb017kDG7R6hGiilqt2bM,1623
23
+ klaude_code/command/export_online_cmd.py,sha256=kOVmFEW7gEEFvaKnXL8suNenktLyTW-13bT64NBGwUQ,5861
24
+ klaude_code/command/help_cmd.py,sha256=yQJnVtj6sgXQdGsi4u9aS7EcjJLSrXccUA-v_bqmsRw,1633
25
+ klaude_code/command/model_cmd.py,sha256=GmDln1N6u7eWLK15tm_lcdDJBY8qI0ih48h6AhijafI,1665
25
26
  klaude_code/command/prompt-deslop.md,sha256=YGaAXqem39zd0UWCFjWUj83Cf7cvUJq1768aJExFqeg,1346
26
27
  klaude_code/command/prompt-dev-docs-update.md,sha256=g1IWIWIa-3qlNOw5mBA4N9H1_nvYcw8AKo7XoQw_AZQ,1855
27
28
  klaude_code/command/prompt-dev-docs.md,sha256=PU9iT6XdUEH6grfSjHVma7xKOQcA__ZTKlEDkbbO0hA,1783
28
29
  klaude_code/command/prompt-handoff.md,sha256=RXIeXNwOpSpkwAyNFSvQFoo077TVkbj11fqQ2r8aCh4,1638
29
30
  klaude_code/command/prompt-init.md,sha256=a4_FQ3gKizqs2vl9oEY5jtG6HNhv3f-1b5RSCFq0A18,1873
30
- klaude_code/command/prompt_command.py,sha256=ml4YZAoJV7ARS6-vfkSxndujGKWoqg559Oei75AaH40,2515
31
- klaude_code/command/refresh_cmd.py,sha256=SbyAK9ovHdvb0gYyMFefVTbPTv6TzvR3aRp8Li9e5v4,1178
32
- klaude_code/command/registry.py,sha256=vhIvTvTxklZBSPtUraL7YkLxdnIhCTaKfLPS_p6iSBM,3786
33
- klaude_code/command/release_notes_cmd.py,sha256=dKouhH7EUqLO2tQtvqqmLgGDP_F-oh8elsDMHL865Vg,2615
34
- klaude_code/command/status_cmd.py,sha256=bySD1WGT9UB8cc7vrGvifL24knhY4cXkoa_UbUTm8xE,5300
35
- klaude_code/command/terminal_setup_cmd.py,sha256=TZTdgo1Xsx6-QFXdZPF3dlT4JyzvmA389Uoz0ATyS9M,10852
36
- klaude_code/command/thinking_cmd.py,sha256=4eQgrQMlwrRFeaMb3M_zznkvoQxgxBWOANNqy3tN92U,8415
31
+ klaude_code/command/prompt-jj-workspace.md,sha256=BtSH3atgvE0j7n3j2EnSS6vuPUJDhEnUHDFZ5qq93QE,919
32
+ klaude_code/command/prompt_command.py,sha256=rMi-ZRLpUSt1t0IQVtwnzIYqcrXK-MwZrabbZ8dc8U4,2774
33
+ klaude_code/command/refresh_cmd.py,sha256=575eJ5IsOc1e_7CulMxvTu5GQ6BaXTG1k8IsAqzrwdQ,1244
34
+ klaude_code/command/registry.py,sha256=avTjsoyLv11SsLsY_qb3OpsRjsSyxIlu7uwJI0Nq6HE,6176
35
+ klaude_code/command/release_notes_cmd.py,sha256=FIrBRfKTlXEp8mBh15buNjgOrl_GMX7FeeMWxYYBn1o,2674
36
+ klaude_code/command/status_cmd.py,sha256=MnHtNdXTMqCJfB4_seHXDJEHYo99D-4ITZcGDCX2ilA,5359
37
+ klaude_code/command/terminal_setup_cmd.py,sha256=SivM1gX_anGY_8DCQNFZ5VblFqt4sVgCMEWPRlo6K5w,10911
38
+ klaude_code/command/thinking_cmd.py,sha256=KSLHXRS0gE5-Z9g1RgHprmDlpqXEp_lu1Z2MrdKcG-o,8493
37
39
  klaude_code/config/__init__.py,sha256=Qrqvi8nizkj6N77h2vDj0r4rbgCiqxvz2HLBPFuWulA,120
38
40
  klaude_code/config/config.py,sha256=2jvM6a8zoC-TdRFaLIw3OW5paxxeXC6l-o05ds4RysA,7263
39
41
  klaude_code/config/select_model.py,sha256=KCdFjaoHXyO9QidNna_OGdDrvlEXtRUXKfG-F8kdNLk,5188
40
42
  klaude_code/const/__init__.py,sha256=MWm6fppZfAd8EGPdQgdEvRzrMRJ1Ei6Ma11eoNg4es0,4256
41
43
  klaude_code/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
44
  klaude_code/core/agent.py,sha256=bWm-UFX_0-KAy5j_YHH8X8o3MJT4-40Ni2EaDP2SL5k,5819
43
- klaude_code/core/executor.py,sha256=AWMVuYjx1qk2_v75Ps3GXEV7d8fIBdvJ_HEuWbaoPg8,23095
45
+ klaude_code/core/executor.py,sha256=HmKtj0ZremRcLCGHkPckR_k0FSZh6FZ52-LMRSMZK9c,24882
44
46
  klaude_code/core/manager/__init__.py,sha256=hdIbpnYj6i18byiWjtJIm5l7NYYDQMvafw8fePVPydc,562
45
47
  klaude_code/core/manager/llm_clients.py,sha256=X2oMFWgJcP0tK8GEtMMDYR3HyR6_H8FuyCqpzWF5x2k,871
46
48
  klaude_code/core/manager/llm_clients_builder.py,sha256=pPZ_xBh-_ipV66L-9a1fnwNos4iik82Zkq0E0y3WrfI,1521
47
- klaude_code/core/manager/sub_agent_manager.py,sha256=G4se7JvDBYtEJ2t-dzOAoBYZcQcyjlAoIaAZwsnSn0s,4709
48
- klaude_code/core/prompt.py,sha256=o0BHYPdr8Jcv7xGWGgNRKvWsrw9D51MJGNWq8JYH4o0,3552
49
+ klaude_code/core/manager/sub_agent_manager.py,sha256=GC54N5xErSa-ATLNQphnfZfKlt089uwuvYY9rTeh8Uk,4866
50
+ klaude_code/core/prompt.py,sha256=c4tDx7WjESgMcPBEUso50BYz_4El5VDjWfw2v2sqst4,3728
49
51
  klaude_code/core/prompts/prompt-claude-code.md,sha256=uuWBv6GrG63mdmBedAHT5U9yOpbHSKFYbbS2xBnUzOE,8290
50
52
  klaude_code/core/prompts/prompt-codex-gpt-5-1-codex-max.md,sha256=SW-y8AmR99JL_9j26k9YVAOQuZ18vR12aT5CWHkZDc4,11741
51
53
  klaude_code/core/prompts/prompt-codex-gpt-5-1.md,sha256=jNi593_4L3EoMvjS0TwltF2b684gtDBsYHa9npxO34A,24239
52
54
  klaude_code/core/prompts/prompt-gemini.md,sha256=JjE1tHSByGKJzjn4Gpj1zekT7ry1Yqbwx5qx3fZy2gE,3901
53
55
  klaude_code/core/prompts/prompt-minimal.md,sha256=6-ZmQQkE3f92W_3V2wS7ocB13wLog1_UojCjZG0K4v8,1559
54
- klaude_code/core/prompts/prompt-sub-agent-explore.md,sha256=i0I9LFB3X8VZIQtxK87CXwcRKowSO_HJxSIKopkFy_Q,2123
56
+ klaude_code/core/prompts/prompt-sub-agent-explore.md,sha256=21kFodjhvN0L-c_ZFo4yVhJOyzfgES-Dty9Vz_Ew9q8,2629
55
57
  klaude_code/core/prompts/prompt-sub-agent-oracle.md,sha256=1PLI3snvxnenCOPVrL0IxZnBl5b2xxGhlufHAyLyf60,1376
56
- klaude_code/core/prompts/prompt-sub-agent-web.md,sha256=RMJJVXmPKWTI2lOad85ichTaKKJL_PPpznOwg1j7z6U,2312
58
+ klaude_code/core/prompts/prompt-sub-agent-web.md,sha256=ewS7-h8_u4QZftFpqrZWpht9Ap08s7zF9D4k4md8oD8,2360
57
59
  klaude_code/core/prompts/prompt-sub-agent.md,sha256=dmmdsOenbAOfqG6FmdR88spOLZkXmntDBs-cmZ9DN_g,897
58
- klaude_code/core/reminders.py,sha256=LA8sWzYQNlwRaAeXFtso5a0HOc5ECxpDaxGgDJAmDLw,18601
59
- klaude_code/core/task.py,sha256=MK40Tx2WOvfscM1Tqyoqq2XteR66YHcYlAlq0Yw2-LM,10388
60
- klaude_code/core/tool/__init__.py,sha256=qNdrji0JlmDp6nW9wFngT_38FpsSgCMkaKhRLpTZERk,2158
60
+ klaude_code/core/reminders.py,sha256=d7q4tba_oso2QOJwIeDG_buueSUYotka4RJdjnQidCk,20407
61
+ klaude_code/core/task.py,sha256=_wvxo1YrfhhNI0BCsaA2JG-mAj3myd82vkn7ulENfgQ,10460
62
+ klaude_code/core/tool/__init__.py,sha256=NzAaNEk_kJgcARm0YWBkOkrNqeaDFPpqHEsw9MoyCaI,2194
61
63
  klaude_code/core/tool/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
64
  klaude_code/core/tool/file/_utils.py,sha256=LLmdEOJnC7MgdiAlWtBPZR0h23oM9wD_UsKqU1Nfkbs,774
63
65
  klaude_code/core/tool/file/apply_patch.py,sha256=LZd3pYQ9ow_TxiFnqYuzD216HmvkLX6lW6BoMd9iQRs,17080
64
66
  klaude_code/core/tool/file/apply_patch_tool.md,sha256=KVDsjUiLDa97gym0NrZNVG4jA1_zN-2i-B3upVQyOhU,59
65
- klaude_code/core/tool/file/apply_patch_tool.py,sha256=c2avTOOY9hLpFTPr1FTTWDfQ6CaIEag53gFNGvpT4Fo,8174
67
+ klaude_code/core/tool/file/apply_patch_tool.py,sha256=7NDFdTKBz1wpYURyjGDU_z38wboz5hsKgcZBgy1b4BE,8345
66
68
  klaude_code/core/tool/file/edit_tool.md,sha256=rEcUjJuPC46t1nXWjTDxplDcxWDbzTWsr6_bYt5_aRI,1110
67
- klaude_code/core/tool/file/edit_tool.py,sha256=0fDe9QSDW33t9Ujsj-L6xMqo4FuaEwVLcCpLVmzKs4k,9806
69
+ klaude_code/core/tool/file/edit_tool.py,sha256=afRA6ujeAFOdt8ub3iq1nkO71K_vyEyFkjzf8CKLMeI,10010
68
70
  klaude_code/core/tool/file/multi_edit_tool.md,sha256=4G39b-jGdJdGGbBTj7R6tcUfcui9tXn6CLQ5uaX5y1M,2485
69
- klaude_code/core/tool/file/multi_edit_tool.py,sha256=TI8Z8qlXUlrJ4ThVyPSUcocNC-B7NHyixoCqV-mi9G0,6886
70
- klaude_code/core/tool/file/read_tool.md,sha256=FeRW9WMUNCtgbezjohvSJjFLZhQd1EaHVcjCI4eQHf4,1472
71
- klaude_code/core/tool/file/read_tool.py,sha256=ZdCus6oFed3ZU2eYSQOX7iBexzynB7XWi68Hk4IrRGo,14040
71
+ klaude_code/core/tool/file/multi_edit_tool.py,sha256=OHLBzsPGj-7Kd0BWscbWmbCKpjkOeOAZ0iENieWT6L8,7090
72
+ klaude_code/core/tool/file/read_tool.md,sha256=74SLSl1tq3L0por73M0QV_ws41MRIvGXQpfLb8dmtp0,1351
73
+ klaude_code/core/tool/file/read_tool.py,sha256=Hz0belgVrPPzo5L2DBEquEJ4U4kxtoPG_SyL-oQVboE,14348
72
74
  klaude_code/core/tool/file/write_tool.md,sha256=CNnYgtieUasuHdpXLDpTEsqe492Pf7v75M4RQ3oIer8,613
73
- klaude_code/core/tool/file/write_tool.py,sha256=TdGZlxFec4hQNmWgD5Rlos5bCI9Z1RJtjhPvg15v5hk,4339
75
+ klaude_code/core/tool/file/write_tool.py,sha256=wSMx_cRwnPKq8wYq9dO_WsYBcEaN1s3B1bBZoY7fNJs,4531
74
76
  klaude_code/core/tool/memory/__init__.py,sha256=oeBpjUXcAilCtYXhiXDzavw5-BE_pbB2ZxsFJKTTcdc,143
75
77
  klaude_code/core/tool/memory/memory_tool.md,sha256=qWytU7k0kQQbne_8n4cei2-dDTNpHesmbI2PYza3XR0,1299
76
78
  klaude_code/core/tool/memory/memory_tool.py,sha256=xasFf1IQp1LFaL4ctDIQt5jfrd_z62ZsBeE42QIKAKs,18949
77
- klaude_code/core/tool/memory/skill_loader.py,sha256=DOlfALn4GwSPHDubNhYtzxM5di29uE7_tOdRi3yxfDc,8726
79
+ klaude_code/core/tool/memory/skill_loader.py,sha256=WGC3svsasEIM8yDAjFmFId1HQuEhuD3KFEvgoXcHmD4,8870
78
80
  klaude_code/core/tool/memory/skill_tool.md,sha256=UfjJK5EGAd3mf7ym5rIrRdPyV3kBTxNnwzOjNnHOBrE,973
79
81
  klaude_code/core/tool/memory/skill_tool.py,sha256=8SC4asNZSKfExuhzbyGz4f2cr78PgCpNkut_31IHePw,3602
80
82
  klaude_code/core/tool/report_back_tool.py,sha256=KRZzQAIxniwXe58SDJcfK_DCf9TFFAx8XC75wPEjmpY,3246
81
83
  klaude_code/core/tool/shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
84
  klaude_code/core/tool/shell/bash_tool.md,sha256=ILKpnRCBTkU2uSDEdZQjNYo1l6hsM4TO-3RD5zWC61c,3935
83
- klaude_code/core/tool/shell/bash_tool.py,sha256=xW6-F_SnSVZwAel9UB1jaCKz26ogusHIQU9ZlyV-QhE,5263
85
+ klaude_code/core/tool/shell/bash_tool.py,sha256=PEcpBiWPclaLa87SM8iIZF3EK0QGWIV9XNkkixCnaXs,8409
84
86
  klaude_code/core/tool/shell/command_safety.py,sha256=bGsooLovuzq8WmLcZ2v24AVBDj3bZv2p4GSL0IlixvM,13192
85
- klaude_code/core/tool/sub_agent_tool.py,sha256=vFRmULiOERqK0V9OoHww80e3yA_Q5Wxu3iv8Dpxi8d0,2992
87
+ klaude_code/core/tool/sub_agent_tool.py,sha256=5n0HDxv4cUzuwBhYiAe3gIJ0s3QgV4GSV12CIIkD_g0,3190
86
88
  klaude_code/core/tool/todo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
89
  klaude_code/core/tool/todo/todo_write_tool.md,sha256=BFP9qIkzkakzskHwIOPVtDhehkh0F90A5oosyDuC_BE,1682
88
90
  klaude_code/core/tool/todo/todo_write_tool.py,sha256=XgSo8F1aJn_0fkh9Gx-5DHNFNlbZys1bUjwhe6NwyLU,4506
89
91
  klaude_code/core/tool/todo/todo_write_tool_raw.md,sha256=AJ2OkZGcccQYDXkydPAr5JI2SExBF8qJd0rXsHySLps,9711
90
92
  klaude_code/core/tool/todo/update_plan_tool.md,sha256=OoEF4voHHd5J3VDv7tq3UCHdXApkBvxdHXUf5tVOkE8,157
91
93
  klaude_code/core/tool/todo/update_plan_tool.py,sha256=5MmmApG0wObBgc-mLETjIMupxIv-SZ7Q0uJO2Krtl1k,3794
92
- klaude_code/core/tool/tool_abc.py,sha256=3FlVZ8a6hC-_Ci23_cpLaap9nHinHgxSB1TsZL5ylUQ,731
93
- klaude_code/core/tool/tool_context.py,sha256=M6KpU2xtgKeQmvAZwqeLnzbzWvjxTt_M0p2ohC1tsb4,4157
94
- klaude_code/core/tool/tool_registry.py,sha256=vp7xmXvPW-vpX0fXi41RiQMZtQFwgyA0GP7K_wHRR9I,2630
95
- klaude_code/core/tool/tool_runner.py,sha256=1MQUzqd4pWCVN1UJan4xROj6PkI2FrLBYCi_V3fyFN0,10710
94
+ klaude_code/core/tool/tool_abc.py,sha256=CROXR16__l-IumQsoa00O9-MlG7cpbl5JU4UrjouZhI,1179
95
+ klaude_code/core/tool/tool_context.py,sha256=k3toeAVtm8_-EVfD-2Kw0atx7EyN3c5AL1DIc8TlF6s,4149
96
+ klaude_code/core/tool/tool_registry.py,sha256=VFB0Z4BWtYKIWtpZVGhjSLcgfK244gow_UYZn1IcJQY,2642
97
+ klaude_code/core/tool/tool_runner.py,sha256=A_RviRFr8kF6TjdGOzdgCIingeyJLBxNbZpcTnzT64E,10695
96
98
  klaude_code/core/tool/truncation.py,sha256=YPKzelOM45rHW_OkcfX5_Ojg_pPi8yDZu7lSnwl9b_k,7334
97
99
  klaude_code/core/tool/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
100
  klaude_code/core/tool/web/mermaid_tool.md,sha256=Ketpxpr7lz8238p5Q7ZzcyWchWd4dU68u708-dxaZds,978
99
101
  klaude_code/core/tool/web/mermaid_tool.py,sha256=Ok0A27oHLnV1c__74bheUuy3wpqDJ1zaXUSxuuqsNPI,2630
100
102
  klaude_code/core/tool/web/web_fetch_tool.md,sha256=jIrW-EAmfl50bBevcfioQ3Vrg8kWlHSut8ze_sRgRGw,486
101
- klaude_code/core/tool/web/web_fetch_tool.py,sha256=otqg2RXnRZLnDKeG1c1zVOH5amPhsdj8czft4pmx_mM,6260
103
+ klaude_code/core/tool/web/web_fetch_tool.py,sha256=7WzOsAHdfijROOlk3JixtHUV1D2Cuwnf-AhoznrqATw,8551
102
104
  klaude_code/core/tool/web/web_search_tool.md,sha256=l5gGPx-fXHFel1zLBljm8isy9pwEYXGrq5cFzzw1VBw,1135
103
- klaude_code/core/tool/web/web_search_tool.py,sha256=riI5ugsrkg1kOaaQ-Q2CYyGYx6r8WRo1db0eoitSEH0,3829
105
+ klaude_code/core/tool/web/web_search_tool.py,sha256=9-dzzMXOdTA_QsdnwHw251R0VelOltlneovV73E4mLE,4028
104
106
  klaude_code/core/turn.py,sha256=PvtVV5GLAvYYAsl3RJNDnIvX1Yp4Va8whr0TR8x-9PI,12706
105
107
  klaude_code/llm/__init__.py,sha256=b4AsqnrMIs0a5qR_ti6rZcHwFzAReTwOW96EqozEoSo,287
106
108
  klaude_code/llm/anthropic/__init__.py,sha256=PWETvaeNAAX3ue0ww1uRUIxTJG0RpWiutkn7MlwKxBs,67
107
- klaude_code/llm/anthropic/client.py,sha256=J0uv_tGHq2V5A_LuaJOVHXW6vARdZxsWOvzO6PdW4JQ,9742
109
+ klaude_code/llm/anthropic/client.py,sha256=EYBi2Ak1_DCJmZ-HG8uCz1W-6YRg9fLsCc3fjDIaUJM,10656
108
110
  klaude_code/llm/anthropic/input.py,sha256=nyDX3uFK0GVduSiLlBEgBjAl70e0pgIZSF3PbbbuW78,8585
109
111
  klaude_code/llm/client.py,sha256=FbFnzLUAKM61goiYNdKi8-D4rBfu_ksaxjJtmJn0w_4,960
110
112
  klaude_code/llm/codex/__init__.py,sha256=8vN2j2ezWB_UVpfqQ8ooStsBeLL5SY4SUMXOXdWiMaI,132
111
113
  klaude_code/llm/codex/client.py,sha256=0BAOiLAdk2PxBEYuC_TGOs4_h6yfNZr1YWuf1lzkBxM,5329
112
114
  klaude_code/llm/input_common.py,sha256=NxiYlhGRFntiLiKm5sKLCF0xGYW6DwcyvIhj6KAZoeU,8533
113
115
  klaude_code/llm/openai_compatible/__init__.py,sha256=ACGpnki7k53mMcCl591aw99pm9jZOZk0ghr7atOfNps,81
114
- klaude_code/llm/openai_compatible/client.py,sha256=DD1tnVqPIicmlG4tK0dlYgLkY_7vaZL8OvqYNRK6fu0,7846
116
+ klaude_code/llm/openai_compatible/client.py,sha256=ctGJAZkg3vUNN34RoTTZsakC22u4kVNmtOmun1GszvU,7991
115
117
  klaude_code/llm/openai_compatible/input.py,sha256=rtWVjpwb9tLrinucezmncQXet8MerUxE5Gxc32sfDr4,3750
116
118
  klaude_code/llm/openai_compatible/stream_processor.py,sha256=EOJeoWlQGHrDj6chMclflj9RMqFgE1X7cdieQ5U5rZI,3415
117
119
  klaude_code/llm/openai_compatible/tool_call_accumulator.py,sha256=kuw3ceDgenQz2Ccc9KYqBkDo6F1sDb5Aga6m41AIECA,4071
118
120
  klaude_code/llm/openrouter/__init__.py,sha256=_As8lHjwj6vapQhLorZttTpukk5ZiCdhFdGT38_ASPo,69
119
- klaude_code/llm/openrouter/client.py,sha256=5grbpu5ft4QclxwzFQaePitSKmQKg82RoVV124ajNh8,8855
121
+ klaude_code/llm/openrouter/client.py,sha256=9QeqXCwDjtqQWkW3h8qwJ6B3qAv1RmssQNJcCVS3wzc,9087
120
122
  klaude_code/llm/openrouter/input.py,sha256=aHVJCejkwzWaTM_EBbgmzKWyZfttAws2Y7QDW_NCnZk,5671
121
123
  klaude_code/llm/openrouter/reasoning_handler.py,sha256=r8I2F-oFTCkqJpINv74SCQZXwAuQZym7wJi5ScSe6hs,3378
122
124
  klaude_code/llm/registry.py,sha256=grgHetTd-lSxTXiY689QW_Zd6voaid7qBqSnulpg_fE,1734
123
125
  klaude_code/llm/responses/__init__.py,sha256=WsiyvnNiIytaYcaAqNiB8GI-5zcpjjeODPbMlteeFjA,67
124
- klaude_code/llm/responses/client.py,sha256=OdvnFeEOUp5aYX5hEVVZzJ8aSB5t2sfBCVNOElSMSIY,9908
126
+ klaude_code/llm/responses/client.py,sha256=XEsVehevQJ0WFbEVxIkI-su7VwIcaeq0P9eSrIRcGug,10184
125
127
  klaude_code/llm/responses/input.py,sha256=qr61LmQJdcb_f-ofrAz06WpK_k4PEcI36XsyuZAXbKk,6805
126
128
  klaude_code/llm/usage.py,sha256=cq6yZNSKBhRVVjFqBYJQrK3mw9ZSLXaTpbDeal-BjBQ,4205
127
129
  klaude_code/protocol/__init__.py,sha256=aGUgzhYqvhuT3Mk2vj7lrHGriH4h9TSbqV1RsRFAZjQ,194
128
130
  klaude_code/protocol/commands.py,sha256=z9Ckp_YGC403axcqIkB-xTUM-gtlTtd-1lNx83AQriE,662
129
131
  klaude_code/protocol/events.py,sha256=KUMf1rLNdHQO9cZiQ9Pa1VsKkP1PTMbUkp18bu_jGy8,3935
130
132
  klaude_code/protocol/llm_param.py,sha256=cb4ubLq21PIsMOC8WJb0aid12z_sT1b7FsbNJMr-jLg,4255
131
- klaude_code/protocol/model.py,sha256=JDWjN_GiUwJQxVA2HFXo2cryR_UOEjDBeVB3SwmrbE8,12584
132
- klaude_code/protocol/op.py,sha256=hdQTzD6zAsRMJJFaLOPvDX9gokhtIBSYNQuZ20TusI4,2824
133
- klaude_code/protocol/op_handler.py,sha256=_lnv3-RxKkrTfGTNBlQ23gbHJBEtMLC8O48SYWDtPjE,843
133
+ klaude_code/protocol/model.py,sha256=rKgsj0ePPjL1Icdw0AeJ2h_EEeHpPhmUQvYx7gn0YI0,12800
134
+ klaude_code/protocol/op.py,sha256=X3UeXxBOLf_jkEaYXhQSTpjtUV2u1Ot5f4bbPWNdQp4,4241
135
+ klaude_code/protocol/op_handler.py,sha256=qaWrm2rlskSyF7ukPtxFAKf8brgLsUaVzg6035N-7w0,1565
134
136
  klaude_code/protocol/sub_agent/__init__.py,sha256=Abap5lPLgnSCQsVD3axfeqnj2UtxOcDLGX8e9HugfSU,3964
135
137
  klaude_code/protocol/sub_agent/explore.py,sha256=Z4M7i98XBLew38ClXiW-hJteSYjMUu2b548rkR7JW3A,2579
136
138
  klaude_code/protocol/sub_agent/oracle.py,sha256=0cbuutKQcvwaM--Q15mbkCdbpZMF4YjxDN1jkuGVKp4,3344
137
139
  klaude_code/protocol/sub_agent/task.py,sha256=fvj4i1vfWXivStQ-9urDS40wTWkmNRvl6D-A0exExJg,3608
138
- klaude_code/protocol/sub_agent/web.py,sha256=XEQsKn4X2CMyyzMxNUWVbiSna8P5p0FYBk4kFYuTEB0,3030
140
+ klaude_code/protocol/sub_agent/web.py,sha256=Z5vUM367kz8CIexN6UVPG4XxzVOaaRek-Ga64NvcZdk,3043
139
141
  klaude_code/protocol/tools.py,sha256=QvFtVAGkA5elef3HWnSs7FcxcI0FOn4N_toCLT-S6Rw,401
140
142
  klaude_code/session/__init__.py,sha256=oXcDA5w-gJCbzmlF8yuWy3ezIW9DgFBNUs-gJHUJ-Rc,121
141
- klaude_code/session/export.py,sha256=bgljE-3vGH2fKl6d8UptGmG4sPoy8gdVgSstMBsMy9M,26783
143
+ klaude_code/session/codec.py,sha256=ummbqT7t6uHHXtaS9lOkyhi1h0YpMk7SNSms8DyGAHU,2015
144
+ klaude_code/session/export.py,sha256=NmIG2SI1ec6HpXglb3zI2xeN8A80rMlPWP_zJGw4uFs,27147
142
145
  klaude_code/session/selector.py,sha256=gijwWQkSV20XYP3Fxr27mFXuqP4ChY2DQm_YuBOTQKw,2888
143
- klaude_code/session/session.py,sha256=k4neSIAeI08judDed_YnhQtx8I0R0ibMpsk7Ak_lKF0,21822
144
- klaude_code/session/templates/export_session.html,sha256=uO0oB9RZjr2lygjT1R0pr00y-CtbZ7f4M1aphNMdoNc,50012
146
+ klaude_code/session/session.py,sha256=P3vkPtlTitS6_01ZAPLG9hDmeyoBQx6RrZmrQZNGgYc,15772
147
+ klaude_code/session/store.py,sha256=MLNTE-HiwmE3foM7n3AUtPvsf_hdyMHYA66ludTR8KU,6872
148
+ klaude_code/session/templates/export_session.html,sha256=VM3uSEIEKU4ewBeaTS-iO3iBswbyiEGfC9KuikGpka4,119113
145
149
  klaude_code/trace/__init__.py,sha256=q8uOYhWr2_Mia1aEK_vkqx91YAfFM25ItIB6J8n3_pM,352
146
150
  klaude_code/trace/log.py,sha256=0H_RqkytSpt6AAIFDg-MV_8vA9zsR9BB1UqT6moTTTg,9134
147
151
  klaude_code/ui/__init__.py,sha256=XuEQsFUkJet8HI04cRmNLwnHOUqaPCRy4hF7PJnIfCY,2737
@@ -156,30 +160,31 @@ klaude_code/ui/modes/exec/__init__.py,sha256=RsYa-DmDJj6g7iXb4H9mm2_Cu-KDQOD10RJ
156
160
  klaude_code/ui/modes/exec/display.py,sha256=m2kkgaUoGD9rEVUmcm7Vs_PyAI2iruKCJYRhANjSsKo,1965
157
161
  klaude_code/ui/modes/repl/__init__.py,sha256=35a6SUiL1SDi2i43X2VjHQw97rR7yhbLBzkGI5aC6Bc,1526
158
162
  klaude_code/ui/modes/repl/clipboard.py,sha256=ZCpk7kRSXGhh0Q_BWtUUuSYT7ZOqRjAoRcg9T9n48Wo,5137
159
- klaude_code/ui/modes/repl/completers.py,sha256=KG_wMlVGTKpvkGhAGIBydXe2Jk4-nVWDuChGniW412A,19034
163
+ klaude_code/ui/modes/repl/completers.py,sha256=z5hDKUZCxtRLKWHtirQqBjTibRFLHPqTCBo7O0YlLLs,24721
160
164
  klaude_code/ui/modes/repl/display.py,sha256=0u4ISeOoYjynF7InYyV-PMOZqP44QBbjYOLOL18V0c0,2245
161
- klaude_code/ui/modes/repl/event_handler.py,sha256=tQuJ8nzXRKZ8aXxIe_iqv_klno_m7tgGuC0mCogvX6E,23859
162
- klaude_code/ui/modes/repl/input_prompt_toolkit.py,sha256=EAIAtcL9EHVPmVK6oOHg0xCeZ0IOnG5S5KsaL85OHOk,6368
165
+ klaude_code/ui/modes/repl/event_handler.py,sha256=gsdSHD_53AnR5UXrwDrMrknVI9Bcrxaq9C8gNjTQpmY,23065
166
+ klaude_code/ui/modes/repl/input_prompt_toolkit.py,sha256=uF88c9OpJpf2KAxowX04ieOm58qIg5lQigc1GNnozX0,6298
163
167
  klaude_code/ui/modes/repl/key_bindings.py,sha256=Fxz9Ey2SnOHvfleMeSYVduxuofY0Yo-97hMRs-OMe-o,7800
164
- klaude_code/ui/modes/repl/renderer.py,sha256=qiB6wuk-bBroN1OCDDC-h09Mduo4Utj6xAZx6YmHu-Y,11660
168
+ klaude_code/ui/modes/repl/renderer.py,sha256=YJAF3Cx2fmyrmGOHLVRvUlXvlRR8ptYZtngR50Vg7uY,11639
165
169
  klaude_code/ui/renderers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
166
170
  klaude_code/ui/renderers/assistant.py,sha256=Dxy6v4pX28RyWhnrjBteY8_NvDIi_jQa-j0mWt-eqWY,569
167
- klaude_code/ui/renderers/common.py,sha256=TPH7LCbeJGqB8ArTsVitqJHEyOxHU6nwnRtvF04nLJ4,184
168
- klaude_code/ui/renderers/developer.py,sha256=dlap4Cdcx4cCtbixUEQLd4UoLDaT8VXGOQtbvCIbweo,6916
171
+ klaude_code/ui/renderers/common.py,sha256=3wVTOX2UR575yA_vmqheM4cmNOoFu_UKMrrD7kzwPUw,1787
172
+ klaude_code/ui/renderers/developer.py,sha256=_xpsLZE6NhSZmmpHUmJMS3uZlOniNhLwf6M9er00d44,6876
169
173
  klaude_code/ui/renderers/diffs.py,sha256=iPQxxZW1JGPwtTdCKMEkDlNb5trLm9tdWjfMRmtj6yQ,7616
170
- klaude_code/ui/renderers/errors.py,sha256=c_fbnoNOnvuI3Bb24IujwV8Mpes-qWS_xCWfAcBvg6A,517
171
- klaude_code/ui/renderers/metadata.py,sha256=Qh5JIs0ZJeuzS0ocAaSklWFaxmCDLSkxK4idjLexYxY,7956
174
+ klaude_code/ui/renderers/errors.py,sha256=o9pOHRqZ0nxMPwkmV4CG81X7taW1-izvga6RY3fFRMI,516
175
+ klaude_code/ui/renderers/metadata.py,sha256=K0D9nx02rulZb2Sz_yOasFvlSFxG5U-VI3mIKD0JqbE,8290
172
176
  klaude_code/ui/renderers/sub_agent.py,sha256=grQ_9G_7iYHdCpxrM0qDAKEMQfXcxBv0bI0GPe3s0lE,4961
173
177
  klaude_code/ui/renderers/thinking.py,sha256=hUIJzgsjvpK2cM_C2103cG4gz785FUt1PtQsQtgji9s,1764
174
- klaude_code/ui/renderers/tools.py,sha256=U5NI1B3ItQVTOXEMpoAkWS9mPKinO-uh8k_Vm6UZ4Ts,23736
178
+ klaude_code/ui/renderers/tools.py,sha256=Ch-Ads0Bj4qI3enZ7-A6j7QTY8mp9-tHMO7Eev_82z4,23690
175
179
  klaude_code/ui/renderers/user_input.py,sha256=rDdOYvbgJ6oePQAtyTCK-KhARfLKytpTZboZ-cFIuJQ,2603
176
- klaude_code/ui/rich/__init__.py,sha256=olvMm2SteyKioOqUJbEoav2TsDr_mtKqkSaifNumjwc,27
180
+ klaude_code/ui/rich/__init__.py,sha256=zEZjnHR3Fnv_sFMxwIMjoJfwDoC4GRGv3lHJzAGRq_o,236
181
+ klaude_code/ui/rich/cjk_wrap.py,sha256=ncmifgTwF6q95iayHQyazGbntt7BRQb_Ed7aXc8JU6Y,7551
177
182
  klaude_code/ui/rich/code_panel.py,sha256=MdUP4QSaQJQxX0MQJT0pvrkhpGYZx3gWdIRbZT_Uj_I,3938
178
183
  klaude_code/ui/rich/live.py,sha256=Uid0QAZG7mHb4KrCF8p9c9n1nHLHzW75xSqcLZ4bLWY,2098
179
184
  klaude_code/ui/rich/markdown.py,sha256=cL1irwj4OuEdUvOSUjUopiuf_VMHKd52yXHIsl3JINA,10787
180
185
  klaude_code/ui/rich/quote.py,sha256=tZcxN73SfDBHF_qk0Jkh9gWBqPBn8VLp9RF36YRdKEM,1123
181
186
  klaude_code/ui/rich/searchable_text.py,sha256=DCVZgEFv7_ergAvT2v7XrfQAUXUzhmAwuVAchlIx8RY,2448
182
- klaude_code/ui/rich/status.py,sha256=QKwH-QhkpcX-6Zg7TuX6TUcuu-wY1PdBK-JEr8HQ8u0,9746
187
+ klaude_code/ui/rich/status.py,sha256=1sp3ss0ftskIi7xfeGPayMiELTTWJ5CR-oWmaS9Td_U,9735
183
188
  klaude_code/ui/rich/theme.py,sha256=5m4xDw436GLVecsnKo94lRo44pPuFPXHV-dcxrdHQAI,10723
184
189
  klaude_code/ui/terminal/__init__.py,sha256=GIMnsEcIAGT_vBHvTlWEdyNmAEpruyscUA6M_j3GQZU,1412
185
190
  klaude_code/ui/terminal/color.py,sha256=M-i09DVlLAhAyhQjfeAi7OipoGi1p_OVkaZxeRfykY0,7135
@@ -187,10 +192,8 @@ klaude_code/ui/terminal/control.py,sha256=6SGNwxorP3jMW9xqnZy2BC0OsJd4DSrS13O3t6
187
192
  klaude_code/ui/terminal/notifier.py,sha256=wkRM66d98Oh6PujnN4bB7NiQxIYEHqQXverMKU43H5E,3187
188
193
  klaude_code/ui/terminal/progress_bar.py,sha256=MDnhPbqCnN4GDgLOlxxOEVZPDwVC_XL2NM5sl1MFNcQ,2133
189
194
  klaude_code/ui/utils/__init__.py,sha256=YEsCLjbCPaPza-UXTPUMTJTrc9BmNBUP5CbFWlshyOQ,15
190
- klaude_code/ui/utils/common.py,sha256=UCQMun23l-EREr3xkl-Bjx67yfi9ctRTw2gcGPsOM2c,2881
191
- klaude_code/ui/utils/debouncer.py,sha256=x8AYxf48Xd6tabBvH8cVl1bIV8FzyeDo3HswDjtNfwU,1266
192
- klaude_code/version.py,sha256=x2OeiACPdzS87EWtaSi_UP13htm81Uq7mlV3kFy5jko,4815
193
- klaude_code-1.2.18.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
194
- klaude_code-1.2.18.dist-info/entry_points.txt,sha256=7CWKjolvs6dZiYHpelhA_FRJ-sVDh43eu3iWuOhKc_w,53
195
- klaude_code-1.2.18.dist-info/METADATA,sha256=To2azZ7yKg5IdXJlusNEl7CrqQ4rSYsejnathQ5UflU,7450
196
- klaude_code-1.2.18.dist-info/RECORD,,
195
+ klaude_code/ui/utils/common.py,sha256=tqHqwgLtAyP805kwRFyoAL4EgMutcNb3Y-GAXJ4IeuM,2263
196
+ klaude_code-1.2.20.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
197
+ klaude_code-1.2.20.dist-info/entry_points.txt,sha256=7CWKjolvs6dZiYHpelhA_FRJ-sVDh43eu3iWuOhKc_w,53
198
+ klaude_code-1.2.20.dist-info/METADATA,sha256=k01_8Ew_jz0ALaq8oMtAcp-nspPH-YHHre2deCPXFMY,7636
199
+ klaude_code-1.2.20.dist-info/RECORD,,