klaude-code 1.2.9__py3-none-any.whl → 1.2.11__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 (69) hide show
  1. klaude_code/cli/main.py +11 -5
  2. klaude_code/cli/runtime.py +21 -21
  3. klaude_code/command/__init__.py +68 -23
  4. klaude_code/command/clear_cmd.py +6 -2
  5. klaude_code/command/command_abc.py +5 -2
  6. klaude_code/command/diff_cmd.py +5 -2
  7. klaude_code/command/export_cmd.py +7 -4
  8. klaude_code/command/help_cmd.py +6 -2
  9. klaude_code/command/model_cmd.py +5 -2
  10. klaude_code/command/prompt_command.py +8 -3
  11. klaude_code/command/refresh_cmd.py +6 -2
  12. klaude_code/command/registry.py +17 -5
  13. klaude_code/command/release_notes_cmd.py +5 -2
  14. klaude_code/command/status_cmd.py +8 -4
  15. klaude_code/command/terminal_setup_cmd.py +7 -4
  16. klaude_code/const/__init__.py +1 -1
  17. klaude_code/core/agent.py +62 -9
  18. klaude_code/core/executor.py +1 -4
  19. klaude_code/core/manager/agent_manager.py +19 -14
  20. klaude_code/core/manager/llm_clients.py +47 -22
  21. klaude_code/core/manager/llm_clients_builder.py +22 -13
  22. klaude_code/core/manager/sub_agent_manager.py +1 -1
  23. klaude_code/core/prompt.py +4 -4
  24. klaude_code/core/prompts/prompt-claude-code.md +1 -12
  25. klaude_code/core/prompts/prompt-minimal.md +12 -0
  26. klaude_code/core/reminders.py +0 -3
  27. klaude_code/core/task.py +6 -2
  28. klaude_code/core/tool/file/_utils.py +30 -0
  29. klaude_code/core/tool/file/edit_tool.py +5 -30
  30. klaude_code/core/tool/file/multi_edit_tool.py +6 -31
  31. klaude_code/core/tool/file/read_tool.py +6 -18
  32. klaude_code/core/tool/file/write_tool.py +5 -30
  33. klaude_code/core/tool/memory/__init__.py +5 -0
  34. klaude_code/core/tool/memory/memory_tool.md +4 -0
  35. klaude_code/core/tool/memory/skill_loader.py +3 -2
  36. klaude_code/core/tool/memory/skill_tool.py +13 -0
  37. klaude_code/core/tool/todo/todo_write_tool.md +0 -157
  38. klaude_code/core/tool/todo/todo_write_tool_raw.md +182 -0
  39. klaude_code/core/tool/tool_registry.py +3 -4
  40. klaude_code/llm/__init__.py +2 -12
  41. klaude_code/llm/anthropic/client.py +2 -1
  42. klaude_code/llm/client.py +2 -2
  43. klaude_code/llm/codex/client.py +1 -1
  44. klaude_code/llm/openai_compatible/client.py +3 -2
  45. klaude_code/llm/openrouter/client.py +3 -3
  46. klaude_code/llm/registry.py +33 -7
  47. klaude_code/llm/responses/client.py +2 -1
  48. klaude_code/llm/responses/input.py +1 -1
  49. klaude_code/llm/usage.py +17 -8
  50. klaude_code/protocol/model.py +15 -7
  51. klaude_code/protocol/op.py +5 -1
  52. klaude_code/protocol/sub_agent.py +1 -0
  53. klaude_code/session/export.py +16 -6
  54. klaude_code/session/session.py +10 -4
  55. klaude_code/session/templates/export_session.html +155 -0
  56. klaude_code/ui/core/input.py +1 -1
  57. klaude_code/ui/modes/repl/clipboard.py +5 -5
  58. klaude_code/ui/modes/repl/event_handler.py +1 -5
  59. klaude_code/ui/modes/repl/input_prompt_toolkit.py +3 -34
  60. klaude_code/ui/renderers/metadata.py +22 -1
  61. klaude_code/ui/renderers/tools.py +13 -2
  62. klaude_code/ui/rich/markdown.py +4 -1
  63. klaude_code/ui/terminal/__init__.py +55 -0
  64. klaude_code/ui/terminal/control.py +2 -2
  65. klaude_code/version.py +3 -3
  66. {klaude_code-1.2.9.dist-info → klaude_code-1.2.11.dist-info}/METADATA +1 -4
  67. {klaude_code-1.2.9.dist-info → klaude_code-1.2.11.dist-info}/RECORD +69 -66
  68. {klaude_code-1.2.9.dist-info → klaude_code-1.2.11.dist-info}/WHEEL +0 -0
  69. {klaude_code-1.2.9.dist-info → klaude_code-1.2.11.dist-info}/entry_points.txt +0 -0
@@ -40,19 +40,19 @@ class ClipboardCaptureState:
40
40
  """Capture image from clipboard, save to disk, and return a tag like [Image #N]."""
41
41
  try:
42
42
  clipboard_data = ImageGrab.grabclipboard()
43
- except Exception:
43
+ except OSError:
44
44
  return None
45
45
  if not isinstance(clipboard_data, Image.Image):
46
46
  return None
47
47
  try:
48
48
  self._images_dir.mkdir(parents=True, exist_ok=True)
49
- except Exception:
49
+ except OSError:
50
50
  return None
51
51
  filename = f"clipboard_{uuid.uuid4().hex[:8]}.png"
52
52
  path = self._images_dir / filename
53
53
  try:
54
54
  clipboard_data.save(path, "PNG")
55
- except Exception:
55
+ except OSError:
56
56
  return None
57
57
  tag = f"[Image #{self._counter}]"
58
58
  self._counter += 1
@@ -123,7 +123,7 @@ def _encode_image_file(file_path: str) -> ImageURLPart | None:
123
123
  # Clipboard images are always saved as PNG
124
124
  data_url = f"data:image/png;base64,{encoded}"
125
125
  return ImageURLPart(image_url=ImageURLPart.ImageURL(url=data_url, id=None))
126
- except Exception:
126
+ except OSError:
127
127
  return None
128
128
 
129
129
 
@@ -148,5 +148,5 @@ def copy_to_clipboard(text: str) -> None:
148
148
  input=text.encode("utf-8"),
149
149
  check=True,
150
150
  )
151
- except Exception:
151
+ except (OSError, subprocess.SubprocessError):
152
152
  pass
@@ -453,14 +453,10 @@ class DisplayEventHandler:
453
453
  if len(todo.content) > 0:
454
454
  status_text = todo.content
455
455
  status_text = status_text.replace("\n", "")
456
- return self._truncate_status_text(status_text, max_length=30)
456
+ return self._truncate_status_text(status_text, max_length=100)
457
457
 
458
458
  def _truncate_status_text(self, text: str, max_length: int) -> str:
459
- """Truncate text to max_length while preserving complete words."""
460
459
  if len(text) <= max_length:
461
460
  return text
462
461
  truncated = text[:max_length]
463
- last_space = truncated.rfind(" ")
464
- if last_space > 0:
465
- return truncated[:last_space] + "..."
466
462
  return truncated + "..."
@@ -6,9 +6,7 @@ from pathlib import Path
6
6
  from typing import NamedTuple, override
7
7
 
8
8
  from prompt_toolkit import PromptSession
9
- from prompt_toolkit.buffer import Buffer
10
9
  from prompt_toolkit.completion import ThreadedCompleter
11
- from prompt_toolkit.filters import Condition
12
10
  from prompt_toolkit.formatted_text import FormattedText
13
11
  from prompt_toolkit.history import FileHistory
14
12
  from prompt_toolkit.patch_stdout import patch_stdout
@@ -45,9 +43,6 @@ class PromptToolkitInput(InputProviderABC):
45
43
  ): # ▌
46
44
  self._status_provider = status_provider
47
45
 
48
- # Mouse is disabled by default; only enabled when input becomes multi-line.
49
- self._mouse_enabled: bool = False
50
-
51
46
  project = str(Path.cwd()).strip("/").replace("/", "-")
52
47
  history_path = Path.home() / ".klaude" / "projects" / f"{project}" / "input_history.txt"
53
48
 
@@ -56,8 +51,6 @@ class PromptToolkitInput(InputProviderABC):
56
51
  if not history_path.exists():
57
52
  history_path.touch()
58
53
 
59
- mouse_support_filter = Condition(lambda: self._mouse_enabled)
60
-
61
54
  # Create key bindings with injected dependencies
62
55
  kb = create_key_bindings(
63
56
  capture_clipboard_tag=capture_clipboard_tag,
@@ -75,7 +68,7 @@ class PromptToolkitInput(InputProviderABC):
75
68
  complete_while_typing=True,
76
69
  erase_when_done=True,
77
70
  bottom_toolbar=self._render_bottom_toolbar,
78
- mouse_support=mouse_support_filter,
71
+ mouse_support=False,
79
72
  style=Style.from_dict(
80
73
  {
81
74
  "completion-menu": "bg:default",
@@ -90,12 +83,6 @@ class PromptToolkitInput(InputProviderABC):
90
83
  ),
91
84
  )
92
85
 
93
- try:
94
- self._session.default_buffer.on_text_changed += self._on_buffer_text_changed
95
- except Exception:
96
- # If we can't hook the buffer events for any reason, fall back to static behavior.
97
- pass
98
-
99
86
  def _render_bottom_toolbar(self) -> FormattedText:
100
87
  """Render bottom toolbar with working directory, git branch on left, model name and context usage on right.
101
88
 
@@ -168,8 +155,6 @@ class PromptToolkitInput(InputProviderABC):
168
155
  @override
169
156
  async def iter_inputs(self) -> AsyncIterator[UserInputPayload]:
170
157
  while True:
171
- # For each new prompt, start with mouse disabled so users can select history.
172
- self._mouse_enabled = False
173
158
  with patch_stdout():
174
159
  line: str = await self._session.prompt_async()
175
160
 
@@ -178,21 +163,5 @@ class PromptToolkitInput(InputProviderABC):
178
163
 
179
164
  yield UserInputPayload(text=line, images=images if images else None)
180
165
 
181
- def _on_buffer_text_changed(self, buf: Buffer) -> None:
182
- """Toggle mouse support based on current buffer content.
183
-
184
- Mouse stays disabled when input is empty. It is enabled only when
185
- the user has entered more than one line of text.
186
- """
187
- try:
188
- text = buf.text
189
- except Exception:
190
- return
191
- self._mouse_enabled = self._should_enable_mouse(text)
192
-
193
- def _should_enable_mouse(self, text: str) -> bool:
194
- """Return True when mouse support should be enabled for current input."""
195
- if not text.strip():
196
- return False
197
- # Enable mouse only when input spans multiple lines.
198
- return "\n" in text
166
+ # Note: Mouse support is intentionally disabled at the PromptSession
167
+ # level so that terminals retain their native scrollback behavior.
@@ -77,6 +77,17 @@ def _render_task_metadata_block(
77
77
  ]
78
78
  if metadata.usage.cache_read_cost is not None:
79
79
  cached_parts.append((f"({currency_symbol}{metadata.usage.cache_read_cost:.4f})", ThemeKey.METADATA_DIM))
80
+ # Cache ratio: (content + cached - last turn output) / input tokens, this might caclulate over 100% if system prompt is cached in first turn
81
+ # Shows how much of the input was cached (not new context growth)
82
+ if show_context_and_time and metadata.usage.input_tokens > 0:
83
+ context_delta = metadata.usage.context_delta or 0
84
+ last_turn_output_token = metadata.usage.last_turn_output_token or 0
85
+ cache_ratio = (
86
+ (metadata.usage.cached_tokens + context_delta - last_turn_output_token)
87
+ / metadata.usage.input_tokens
88
+ * 100
89
+ )
90
+ cached_parts.append((f"[{cache_ratio:.0f}%]", ThemeKey.METADATA_DIM))
80
91
  parts2.append(Text.assemble(*cached_parts))
81
92
 
82
93
  # Output
@@ -118,7 +129,7 @@ def _render_task_metadata_block(
118
129
  if metadata.usage is not None:
119
130
  # Context (only for main agent)
120
131
  if show_context_and_time and metadata.usage.context_usage_percent is not None:
121
- context_size = format_number(metadata.usage.context_window_size or 0)
132
+ context_size = format_number(metadata.usage.context_token or 0)
122
133
  parts3.append(
123
134
  Text.assemble(
124
135
  ("context", ThemeKey.METADATA_DIM),
@@ -150,6 +161,16 @@ def _render_task_metadata_block(
150
161
  )
151
162
  )
152
163
 
164
+ # Turn count
165
+ if show_context_and_time and metadata.turn_count > 0:
166
+ parts3.append(
167
+ Text.assemble(
168
+ ("turns", ThemeKey.METADATA_DIM),
169
+ (":", ThemeKey.METADATA_DIM),
170
+ (str(metadata.turn_count), ThemeKey.METADATA_DIM),
171
+ )
172
+ )
173
+
153
174
  if parts3:
154
175
  line2 = Text(" / ", style=ThemeKey.METADATA_DIM).join(parts3)
155
176
  renderables.append(Padding(line2, (0, 0, 0, indent + 2)))
@@ -339,12 +339,23 @@ def render_mermaid_tool_call(arguments: str) -> RenderableType:
339
339
 
340
340
 
341
341
  def render_mermaid_tool_result(tr: events.ToolResultEvent) -> RenderableType:
342
+ from klaude_code.ui.terminal import supports_osc8_hyperlinks
343
+
342
344
  link_info = _extract_mermaid_link(tr.ui_extra)
343
345
  if link_info is None:
344
346
  return render_generic_tool_result(tr.result, is_error=tr.status == "error")
345
347
 
346
- link_text = Text.from_markup(f"[blue u][link={link_info.link}]Command+click to view[/link][/blue u]")
347
- return Padding.indent(link_text, level=2)
348
+ if supports_osc8_hyperlinks():
349
+ link_text = Text.from_markup(f"[blue u][link={link_info.link}]Command+click to view[/link][/blue u]")
350
+ return Padding.indent(link_text, level=2)
351
+
352
+ # For terminals that don't support OSC 8, show a hint to use /export
353
+ hint_text = Text.assemble(
354
+ ("Use ", ThemeKey.TOOL_RESULT),
355
+ ("/export", ThemeKey.TOOL_RESULT_BOLD),
356
+ (" to view the diagram.", ThemeKey.TOOL_RESULT),
357
+ )
358
+ return Padding.indent(hint_text, level=2)
348
359
 
349
360
 
350
361
  def _extract_truncation(
@@ -284,7 +284,10 @@ class MarkdownStream:
284
284
 
285
285
  target_height = min(self._live_window_seen_height, self.live_window)
286
286
  if target_height > 0 and current_height < target_height:
287
- pad_count = target_height - current_height + 1
287
+ # Pad only up to the maximum height we've seen so far.
288
+ # This keeps the Live region height stable without overshooting,
289
+ # which can cause the spinner to jump by a line.
290
+ pad_count = target_height - current_height
288
291
  # Pad after the existing lines so spinner visually stays at the bottom.
289
292
  rest_lines = rest_lines + ["\n"] * pad_count
290
293
 
@@ -1 +1,56 @@
1
1
  # Terminal utilities
2
+ import os
3
+ from functools import lru_cache
4
+
5
+
6
+ @lru_cache(maxsize=1)
7
+ def supports_osc8_hyperlinks() -> bool:
8
+ """Check if the current terminal supports OSC 8 hyperlinks.
9
+
10
+ Based on known terminal support. Returns False for unknown terminals.
11
+ """
12
+ term_program = os.environ.get("TERM_PROGRAM", "").lower()
13
+ term = os.environ.get("TERM", "").lower()
14
+
15
+ # Known terminals that do NOT support OSC 8
16
+ unsupported = ("warp", "apple_terminal")
17
+ if any(t in term_program for t in unsupported):
18
+ return False
19
+
20
+ # Known terminals that support OSC 8
21
+ supported = (
22
+ "iterm.app",
23
+ "ghostty",
24
+ "wezterm",
25
+ "kitty",
26
+ "alacritty",
27
+ "hyper",
28
+ "contour",
29
+ "vscode",
30
+ )
31
+ if any(t in term_program for t in supported):
32
+ return True
33
+
34
+ # Kitty sets TERM to xterm-kitty
35
+ if "kitty" in term:
36
+ return True
37
+
38
+ # Ghostty sets TERM to xterm-ghostty
39
+ if "ghostty" in term:
40
+ return True
41
+
42
+ # Windows Terminal
43
+ if os.environ.get("WT_SESSION"):
44
+ return True
45
+
46
+ # VTE-based terminals (GNOME Terminal, etc.) version 0.50+
47
+ vte_version = os.environ.get("VTE_VERSION", "")
48
+ if vte_version:
49
+ try:
50
+ if int(vte_version) >= 5000:
51
+ return True
52
+ except ValueError:
53
+ pass
54
+
55
+ # Default to False for unknown terminals
56
+ return False
@@ -38,7 +38,7 @@ def start_esc_interrupt_monitor(
38
38
  # Fallback for non-interactive or non-POSIX environments.
39
39
  if not sys.stdin.isatty() or os.name != "posix":
40
40
 
41
- async def _noop() -> None: # type: ignore[return-type]
41
+ async def _noop() -> None:
42
42
  return None
43
43
 
44
44
  return stop_event, asyncio.create_task(_noop())
@@ -85,7 +85,7 @@ def start_esc_interrupt_monitor(
85
85
  log((f"esc monitor error: {exc}", "r red"))
86
86
  finally:
87
87
  try:
88
- termios.tcsetattr(fd, termios.TCSADRAIN, old) # type: ignore[name-defined]
88
+ termios.tcsetattr(fd, termios.TCSADRAIN, old)
89
89
  except Exception:
90
90
  pass
91
91
 
klaude_code/version.py CHANGED
@@ -57,7 +57,7 @@ def _get_installed_version() -> str | None:
57
57
  ver = ver[1:]
58
58
  return ver
59
59
  return None
60
- except Exception:
60
+ except (OSError, subprocess.SubprocessError):
61
61
  return None
62
62
 
63
63
 
@@ -67,7 +67,7 @@ def _get_latest_version() -> str | None:
67
67
  with urllib.request.urlopen(PYPI_URL, timeout=5) as response:
68
68
  data = json.loads(response.read().decode())
69
69
  return data.get("info", {}).get("version")
70
- except Exception:
70
+ except (OSError, json.JSONDecodeError, ValueError):
71
71
  return None
72
72
 
73
73
 
@@ -93,7 +93,7 @@ def _compare_versions(installed: str, latest: str) -> bool:
93
93
  installed_tuple = _parse_version(installed)
94
94
  latest_tuple = _parse_version(latest)
95
95
  return latest_tuple > installed_tuple
96
- except Exception:
96
+ except ValueError:
97
97
  return False
98
98
 
99
99
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: klaude-code
3
- Version: 1.2.9
3
+ Version: 1.2.11
4
4
  Summary: Add your description here
5
5
  Requires-Dist: anthropic>=0.66.0
6
6
  Requires-Dist: openai>=1.102.0
@@ -159,9 +159,6 @@ Inside the interactive session (`klaude`), use these commands to streamline your
159
159
  | `Backspace` | Delete character or selected text |
160
160
  | `c` (with selection) | Copy selected text to clipboard |
161
161
 
162
- Mouse support is automatically enabled when input spans multiple lines.
163
-
164
-
165
162
  ### Non-Interactive Headless Mode (exec)
166
163
 
167
164
  Execute a single command without starting the interactive REPL:
@@ -6,82 +6,85 @@ klaude_code/auth/codex/jwt_utils.py,sha256=tuaJKT4vAIGeaQjNzgNcHWGrYYSDrDeaQT9h4
6
6
  klaude_code/auth/codex/oauth.py,sha256=ap78TUPJsF6O6cnkkuj11w1t4bCIVQzyVkuDvOLo0oo,7848
7
7
  klaude_code/auth/codex/token_manager.py,sha256=F4xH5PhE9cksqTiWsU_YAboNe284VgUFWF2VY1sZV9U,2720
8
8
  klaude_code/cli/__init__.py,sha256=YzlAoWAr5rx5oe6B_4zPxRFS4QaZauuy1AFwampP5fg,45
9
- klaude_code/cli/main.py,sha256=4c0pwFDJXIrumvHKKJthlEkUm6p5RLfPfBOrK4HerTE,11609
10
- klaude_code/cli/runtime.py,sha256=It7JwXi4MfaRHV2CaBjDmR8M8VVJEXoljXMUc7pR85Y,12347
9
+ klaude_code/cli/main.py,sha256=_Srm_OiwJKcM9SUXPGI3jhr6XNs7bzpCpPQvBmn3QLc,12082
10
+ klaude_code/cli/runtime.py,sha256=qrw3SLaiI65v_rD78SGcJ1UXoZxBIK2mitGhDobvM_M,12582
11
11
  klaude_code/cli/session_cmd.py,sha256=cIBm3uUurke-TfBvQHz9mGW29LOAh22FIpXVyypnwDo,2549
12
- klaude_code/command/__init__.py,sha256=dN2JLmHIzcUJW5xsiah6DS0MuqcVCgr6l1wwzDcipZQ,1203
13
- klaude_code/command/clear_cmd.py,sha256=ojsDdZnv_-bDYBPecpdY85DfGicst9Jf9j7esg2z2hE,674
14
- klaude_code/command/command_abc.py,sha256=WWY9qi7SILttPl6fJNi9ThevsqpGFoQJ1ecgoosd_Ms,2547
15
- klaude_code/command/diff_cmd.py,sha256=306PcTeKokLmchp6mIWeZ2rokINsU5-2f4iGrjEbkCE,5269
16
- klaude_code/command/export_cmd.py,sha256=lsnBwxjiHyxgU7TPmT038ZVsOVqNxV2l-6U9T-dxI1g,3498
17
- klaude_code/command/help_cmd.py,sha256=VddWegAJS5OjbAZ35c9Pb0SSDZpPH5PqRyQ--sdseII,1709
18
- klaude_code/command/model_cmd.py,sha256=EApytBR6gl1Po9Mi7YVvDWgV-0ivgw-RQTnQ__EIvFQ,1510
12
+ klaude_code/command/__init__.py,sha256=k9LJCFzzABhq09q1TeKSl4oG-288MYFXCICnZemVha8,2878
13
+ klaude_code/command/clear_cmd.py,sha256=EXIhVHvbfpgTrquLzTyeVAPkIRusjFkknwqzcct51ww,733
14
+ klaude_code/command/command_abc.py,sha256=1Wwp94Q3W08GNCraYYEGcjjNC7JLIei6E953zSZ2lZ4,2605
15
+ klaude_code/command/diff_cmd.py,sha256=Hk37Zg-tUchnrmq8128x4xOVU1AfZUypFAGj1FLIpkg,5327
16
+ klaude_code/command/export_cmd.py,sha256=npibiB42IYOoCRGtW7pR6CNQWcfSaql-tP-PTqc5BnU,3560
17
+ klaude_code/command/help_cmd.py,sha256=B24xKRfpphUQz3A1BMhbzPWWij24PHALglgNbal2l6o,1768
18
+ klaude_code/command/model_cmd.py,sha256=RRF7Hp5zrfCdye3bEiRTNwV_BvssJ_LSScIm78-GyBQ,1568
19
19
  klaude_code/command/prompt-deslop.md,sha256=YGaAXqem39zd0UWCFjWUj83Cf7cvUJq1768aJExFqeg,1346
20
20
  klaude_code/command/prompt-dev-docs-update.md,sha256=g1IWIWIa-3qlNOw5mBA4N9H1_nvYcw8AKo7XoQw_AZQ,1855
21
21
  klaude_code/command/prompt-dev-docs.md,sha256=PU9iT6XdUEH6grfSjHVma7xKOQcA__ZTKlEDkbbO0hA,1783
22
22
  klaude_code/command/prompt-init.md,sha256=a4_FQ3gKizqs2vl9oEY5jtG6HNhv3f-1b5RSCFq0A18,1873
23
- klaude_code/command/prompt_command.py,sha256=cDdLAyGk3JFS-nRlNzTnT8T35QQ-FC6RT0fD5ELZGO4,2405
24
- klaude_code/command/refresh_cmd.py,sha256=kgpbcnqf1n_ihMW99AfTXeZEkE2_MNwgQ9DbNfl2jqY,1288
25
- klaude_code/command/registry.py,sha256=OZhQqoLfWjqojJauemc8L2rnwPhYoAh2Kjx3HSAz_ZE,3554
26
- klaude_code/command/release_notes_cmd.py,sha256=vVkb0pQTyZBDqPhlO1nA18ftZdft9L7EALPz1nxFQro,2725
27
- klaude_code/command/status_cmd.py,sha256=VL8bghmYl2evDWDjd-KChNnXZsEFF2oU5bWLbvULZic,5431
28
- klaude_code/command/terminal_setup_cmd.py,sha256=bQfMDZIzak8emkmuaY43_2YaS7t908sUJ_orYwccTtY,10957
23
+ klaude_code/command/prompt_command.py,sha256=8jBUcfSmC9tXAYkLAB-u81KFqSKtCAHfHMnTQDzpgcg,2607
24
+ klaude_code/command/refresh_cmd.py,sha256=fiVlzTLNHqMsidj1JgEpUlB5MixKbijlPmN2n6v9xHI,1347
25
+ klaude_code/command/registry.py,sha256=ypRh1ArygVkHSwFDYMpngQudq6rUSJKF9FIM7JGCXus,3914
26
+ klaude_code/command/release_notes_cmd.py,sha256=6ywt5MI0PLOrBZF-uNKw0W1FbpEWsp2E9DVnCQ6HPV0,2783
27
+ klaude_code/command/status_cmd.py,sha256=SWCv5-JDM7zT1inGt3Bq93x4uTmPFJaXx6G65rUs_Fg,5472
28
+ klaude_code/command/terminal_setup_cmd.py,sha256=E819wPNSOnZ3AzMfDwq9bsdlg7-AuSooczBa97gf3ps,11019
29
29
  klaude_code/config/__init__.py,sha256=9XVCYYqzJtCi46I94hbUmJ2yTFuZ-UlH-QTx7OpLAkQ,292
30
30
  klaude_code/config/config.py,sha256=Vc9u7-40T81Rbx1OdMqSWZLh3vf9aj4wmBUnIOH7jAw,6526
31
31
  klaude_code/config/list_model.py,sha256=08vLxar7YAcUNzGTN6bUbPtAoXXyfO5y6LjaaXMbsyQ,8019
32
32
  klaude_code/config/select_model.py,sha256=el1jqXlNyYmHH_dvdcEkWVOYqIZ9y05_VJRlfZk7HkQ,2565
33
- klaude_code/const/__init__.py,sha256=joTUQF1NEA-OHY3fuNIjNYYxOJlBW-MtSQ3YE3EAer4,3980
33
+ klaude_code/const/__init__.py,sha256=dSfcFjVeDoc5UEHtzR-9U_BWCVNXggHyiKHwHapASZ0,3980
34
34
  klaude_code/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- klaude_code/core/agent.py,sha256=PMMKEbDyPAx-Np4GEkn3_7apgtVK1ydHAHHvfsh5htA,5918
36
- klaude_code/core/executor.py,sha256=cuFxabyChIq8VqFr1ssbAy-VByHu0qJynJfEq2iHajI,18653
35
+ klaude_code/core/agent.py,sha256=98VK6WBcPSS_N6IBT2_vCCkg4XsAziy4FGJadW8mOiw,8169
36
+ klaude_code/core/executor.py,sha256=OkebxW6_64hecQBjHPgDQlw8JgOa_k5meBpNsMBB4qg,18512
37
37
  klaude_code/core/manager/__init__.py,sha256=6CswltCHXBUcezlW7xui2S1swDp8JTkS1YiEHmq4-no,658
38
- klaude_code/core/manager/agent_manager.py,sha256=5InJ1EaPKbBSLZy7vLro2B8-DbbjPRHHc4D9SuiT9Rw,4908
39
- klaude_code/core/manager/llm_clients.py,sha256=Fdkd7EijC9IDnEPU622cFLeaYGojov5Z2nPyR0xhj3Q,1335
40
- klaude_code/core/manager/llm_clients_builder.py,sha256=NzZKWXv8xB4GA1Hd6whEYM746atMavnI_nJaq7K5G08,1710
41
- klaude_code/core/manager/sub_agent_manager.py,sha256=FLMOPDuLn0dFpY7FGtKQkktONaWu0__Go1E-wuAK-9A,3754
42
- klaude_code/core/prompt.py,sha256=9eO5AqPXYdIw6QZw-HGIcmCPOMFFJVv73nk7xpAf4BA,3329
43
- klaude_code/core/prompts/prompt-claude-code.md,sha256=3OY5ShcYPp8f0XrIl-3pBVIDZkweWsLzDHy5ldnSOJc,8954
38
+ klaude_code/core/manager/agent_manager.py,sha256=IG07QD3wJWroJrTLdTZKwiCJrQjQikz8MoTyI7KCK0A,5267
39
+ klaude_code/core/manager/llm_clients.py,sha256=sIFCweup7SJL5o9LbPgRLYE3fDuhYA4ZdhtSF2M0FAQ,2225
40
+ klaude_code/core/manager/llm_clients_builder.py,sha256=SjSEBJWS77FY5xctu3uxT0JaiQKGtRJnjTZYandJwU0,1772
41
+ klaude_code/core/manager/sub_agent_manager.py,sha256=SnDFu8ovcQjBkQSJrSD8e0Yf63NhIjYAt8WyQhBcpy0,3760
42
+ klaude_code/core/prompt.py,sha256=I0jTB2mFG5a4ztwlP-Jxawsp-enRHFQCVANLUurhXEA,3303
43
+ klaude_code/core/prompts/prompt-claude-code.md,sha256=c7kNgwjJqnbwQuKWGJoMx-AMbf1gxAFC3ZFDhngBe74,8293
44
44
  klaude_code/core/prompts/prompt-codex-gpt-5-1-codex-max.md,sha256=SW-y8AmR99JL_9j26k9YVAOQuZ18vR12aT5CWHkZDc4,11741
45
45
  klaude_code/core/prompts/prompt-codex-gpt-5-1.md,sha256=jNi593_4L3EoMvjS0TwltF2b684gtDBsYHa9npxO34A,24239
46
46
  klaude_code/core/prompts/prompt-gemini.md,sha256=JjE1tHSByGKJzjn4Gpj1zekT7ry1Yqbwx5qx3fZy2gE,3901
47
+ klaude_code/core/prompts/prompt-minimal.md,sha256=6-ZmQQkE3f92W_3V2wS7ocB13wLog1_UojCjZG0K4v8,1559
47
48
  klaude_code/core/prompts/prompt-subagent-explore.md,sha256=m7eQMTWWibaZIMPNbMYUhPbNRn5KrTq5tIoXw1HJuLY,2124
48
49
  klaude_code/core/prompts/prompt-subagent-oracle.md,sha256=hGtyDm_6UhJZUJwfXt5A-170is1KMHls85fEEo45z-w,1376
49
50
  klaude_code/core/prompts/prompt-subagent-webfetch.md,sha256=kHtJINbCRiRDrip_q6idHHU3CwbDfrVlpgtSZvugOWI,2304
50
51
  klaude_code/core/prompts/prompt-subagent.md,sha256=dmmdsOenbAOfqG6FmdR88spOLZkXmntDBs-cmZ9DN_g,897
51
- klaude_code/core/reminders.py,sha256=OGmdAV0z5glmkdz-6v14gt2JWie-KnaobhqAcs5wbqk,18225
52
- klaude_code/core/task.py,sha256=wM5zrtazYr8Aqriw-VN1DENrbAXuGOHd3titwVA6kk8,10475
52
+ klaude_code/core/reminders.py,sha256=S5ZbYYrIoQKPGtLqtqg8yPCwZRD5Vdlkzf1wu86bw8g,18123
53
+ klaude_code/core/task.py,sha256=Ct1puAKnbOiuczSiogaXCzK3V0lX3a7E0x5dj9M7UJQ,10631
53
54
  klaude_code/core/tool/__init__.py,sha256=-pxK4iCkvcdLpav74foMNdeIjsC6PMkVaw_q5kajivg,2170
54
55
  klaude_code/core/tool/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
+ klaude_code/core/tool/file/_utils.py,sha256=UjXO9Bwyr7YtDeSALiA8cp4KQlQskibZlbk6A33F0q4,779
55
57
  klaude_code/core/tool/file/apply_patch.py,sha256=gUukVxt0qEP2NLHiPsmFWOi0sOuW0FaUnN0BfZ6FcII,17257
56
58
  klaude_code/core/tool/file/apply_patch_tool.md,sha256=KVDsjUiLDa97gym0NrZNVG4jA1_zN-2i-B3upVQyOhU,59
57
59
  klaude_code/core/tool/file/apply_patch_tool.py,sha256=cz9E7oYW9CjaokXhjAeyIxsukdvHVM2uM3cvwwDTNxg,8215
58
60
  klaude_code/core/tool/file/edit_tool.md,sha256=rEcUjJuPC46t1nXWjTDxplDcxWDbzTWsr6_bYt5_aRI,1110
59
- klaude_code/core/tool/file/edit_tool.py,sha256=XfIAf29heynFJ44yAvmXn6eXBv8PXoCVFIujMgo-wkc,10486
61
+ klaude_code/core/tool/file/edit_tool.py,sha256=5qk7iwoF1ODUhY3eRoUGs7x_RNjXark1XfpYb18oEd8,9994
60
62
  klaude_code/core/tool/file/multi_edit_tool.md,sha256=4G39b-jGdJdGGbBTj7R6tcUfcui9tXn6CLQ5uaX5y1M,2485
61
- klaude_code/core/tool/file/multi_edit_tool.py,sha256=h4QvIrfamjubCsjzJKcWn__Y6zMp73_Ttak4bBaDHGw,7380
63
+ klaude_code/core/tool/file/multi_edit_tool.py,sha256=inXJvAKGp-ZSQVAFk0Tv8kWc1LwxLdCMAla4Fpj47Gs,6887
62
64
  klaude_code/core/tool/file/read_tool.md,sha256=FeRW9WMUNCtgbezjohvSJjFLZhQd1EaHVcjCI4eQHf4,1472
63
- klaude_code/core/tool/file/read_tool.py,sha256=N7Z4MC9vjLKHfUX-rioV63xVQ7fUANy8_hjvoXPDMX4,12894
65
+ klaude_code/core/tool/file/read_tool.py,sha256=I3j6XS4KBt1BH0cyJwLp0zFWh-mq8xAyh_w7_bU96Z8,12803
64
66
  klaude_code/core/tool/file/write_tool.md,sha256=CNnYgtieUasuHdpXLDpTEsqe492Pf7v75M4RQ3oIer8,613
65
- klaude_code/core/tool/file/write_tool.py,sha256=xoGkw0ei4bnJMvcUgt1iJjpHzNv36HjyjumOrqpKdkw,4832
66
- klaude_code/core/tool/memory/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
- klaude_code/core/tool/memory/memory_tool.md,sha256=LNpu2kStqcfDA7AXj7IiQqgC6_Yf5kQm06fSVgyN4Jw,1011
67
+ klaude_code/core/tool/file/write_tool.py,sha256=AqprfzACIL-f-J_ZTLntteCddUBCOKFoIukM6kp_ZqI,4340
68
+ klaude_code/core/tool/memory/__init__.py,sha256=oeBpjUXcAilCtYXhiXDzavw5-BE_pbB2ZxsFJKTTcdc,143
69
+ klaude_code/core/tool/memory/memory_tool.md,sha256=qWytU7k0kQQbne_8n4cei2-dDTNpHesmbI2PYza3XR0,1299
68
70
  klaude_code/core/tool/memory/memory_tool.py,sha256=h777Iju8gNijCfYMEALeoyRomBY0FXGu46gykehCeUA,19018
69
- klaude_code/core/tool/memory/skill_loader.py,sha256=AOFU5RQfR6GAKemHEgI40F-X8t8yCnSKsS8Oi6nfZtA,8567
71
+ klaude_code/core/tool/memory/skill_loader.py,sha256=3CywpqhEwAoWOVMKsE9awfYGDkBfO0J-rA-9Ckyk8dQ,8660
70
72
  klaude_code/core/tool/memory/skill_tool.md,sha256=UfjJK5EGAd3mf7ym5rIrRdPyV3kBTxNnwzOjNnHOBrE,973
71
- klaude_code/core/tool/memory/skill_tool.py,sha256=Ma0iLQya3AndatUHfEANTDtXzhTly0AkzckPuQ1JXtA,3209
73
+ klaude_code/core/tool/memory/skill_tool.py,sha256=8SC4asNZSKfExuhzbyGz4f2cr78PgCpNkut_31IHePw,3602
72
74
  klaude_code/core/tool/shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
75
  klaude_code/core/tool/shell/bash_tool.md,sha256=ILKpnRCBTkU2uSDEdZQjNYo1l6hsM4TO-3RD5zWC61c,3935
74
76
  klaude_code/core/tool/shell/bash_tool.py,sha256=qPB7W51LmFsRxWJoqKih1vNTGIOaXE4wfxnKPzBXs6g,4490
75
77
  klaude_code/core/tool/shell/command_safety.py,sha256=r5nTltVj1Iil7dmnYByj4jp4du7AtPEaUa4J6XdrlTo,13209
76
78
  klaude_code/core/tool/sub_agent_tool.py,sha256=Ohroht4z-W_kuBo0AvKoL40XQM0QGzScIDAuqYKXSVk,2765
77
79
  klaude_code/core/tool/todo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
- klaude_code/core/tool/todo/todo_write_tool.md,sha256=AJ2OkZGcccQYDXkydPAr5JI2SExBF8qJd0rXsHySLps,9711
80
+ klaude_code/core/tool/todo/todo_write_tool.md,sha256=BFP9qIkzkakzskHwIOPVtDhehkh0F90A5oosyDuC_BE,1682
79
81
  klaude_code/core/tool/todo/todo_write_tool.py,sha256=XgSo8F1aJn_0fkh9Gx-5DHNFNlbZys1bUjwhe6NwyLU,4506
82
+ klaude_code/core/tool/todo/todo_write_tool_raw.md,sha256=AJ2OkZGcccQYDXkydPAr5JI2SExBF8qJd0rXsHySLps,9711
80
83
  klaude_code/core/tool/todo/update_plan_tool.md,sha256=OoEF4voHHd5J3VDv7tq3UCHdXApkBvxdHXUf5tVOkE8,157
81
84
  klaude_code/core/tool/todo/update_plan_tool.py,sha256=5MmmApG0wObBgc-mLETjIMupxIv-SZ7Q0uJO2Krtl1k,3794
82
85
  klaude_code/core/tool/tool_abc.py,sha256=3FlVZ8a6hC-_Ci23_cpLaap9nHinHgxSB1TsZL5ylUQ,731
83
86
  klaude_code/core/tool/tool_context.py,sha256=Slnykn14GwN9V_-IBRX3xu0xjvA-Fi3bqHTYR-Z7A5Y,4175
84
- klaude_code/core/tool/tool_registry.py,sha256=2d-5zIsODztgJe7obS1OAZbrQSqAquULcoXPLLEr2Xs,2665
87
+ klaude_code/core/tool/tool_registry.py,sha256=AgJ9m42gKB23GZnUuY4eThSzKaB4_51ytdLDxQD8lIk,2603
85
88
  klaude_code/core/tool/tool_runner.py,sha256=I9BfeRgtVT3IoZGXgEVvzTEF8-fpKFqtbt6MgznJleI,10079
86
89
  klaude_code/core/tool/truncation.py,sha256=hHeJDrvvNt0wE9yGZVaZheYUW0VoJ7QbopKo6wjyP-w,6644
87
90
  klaude_code/core/tool/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -90,48 +93,48 @@ klaude_code/core/tool/web/mermaid_tool.py,sha256=Ok0A27oHLnV1c__74bheUuy3wpqDJ1z
90
93
  klaude_code/core/tool/web/web_fetch_tool.md,sha256=_5U-LSoI86rD26nPb0D5BQCr6hj8eyF0UELSiyLznCA,347
91
94
  klaude_code/core/tool/web/web_fetch_tool.py,sha256=iu6kM_-90K8mqHbK9Loui96vICV7d8rmtss68rcFqw0,4958
92
95
  klaude_code/core/turn.py,sha256=0Pc8GI2tuY2wukCPxCrWvuPlhhZRfXcrduNrDG0yeG8,9517
93
- klaude_code/llm/__init__.py,sha256=hjegW9bOyTZ6tN6TxQaMWKkEOuapgK2LJ0vWs9FLj_c,594
96
+ klaude_code/llm/__init__.py,sha256=b4AsqnrMIs0a5qR_ti6rZcHwFzAReTwOW96EqozEoSo,287
94
97
  klaude_code/llm/anthropic/__init__.py,sha256=PWETvaeNAAX3ue0ww1uRUIxTJG0RpWiutkn7MlwKxBs,67
95
- klaude_code/llm/anthropic/client.py,sha256=OWjs1O3yVJyYMhX1Im3nwfU9WDtI_hGpKDRelZSjFRY,9539
98
+ klaude_code/llm/anthropic/client.py,sha256=1gk4Fkd4FvEJjt1Ryta9uP-mMN7ZYX4zqNgxkyK0QT8,9605
96
99
  klaude_code/llm/anthropic/input.py,sha256=qPo4nmhnhSfLqef4UUVoIz8EjoXTxvlsrfsc_6qqM_s,8039
97
- klaude_code/llm/client.py,sha256=WspUKmeKpjNvj1nu6aEdRpuZRQRCQG4NyVcOWNclZZw,1543
100
+ klaude_code/llm/client.py,sha256=km3wN3qoVBmo8azmTNjD2lOhUBtkQTlPDHBsYbjO_NU,1489
98
101
  klaude_code/llm/codex/__init__.py,sha256=8vN2j2ezWB_UVpfqQ8ooStsBeLL5SY4SUMXOXdWiMaI,132
99
- klaude_code/llm/codex/client.py,sha256=apEFy64OmVBuxgdVfFwmSSbzwJED-YGo0BIJwf673_c,4919
102
+ klaude_code/llm/codex/client.py,sha256=t-A5kzyqowNIuec1hLlrcYzLnAzTEtVF30wjEKKeg80,4928
100
103
  klaude_code/llm/input_common.py,sha256=purxHHMo_yahNvv0Y1pH7WmfTfZgZqUqyo2JvdFiVO0,8526
101
104
  klaude_code/llm/openai_compatible/__init__.py,sha256=ACGpnki7k53mMcCl591aw99pm9jZOZk0ghr7atOfNps,81
102
- klaude_code/llm/openai_compatible/client.py,sha256=iwA9FYZJETOmV8cZdQJ_Dnyb57Ua2CASONsQCMdTOsY,7524
105
+ klaude_code/llm/openai_compatible/client.py,sha256=R4T0KhQb-gpyczJfUG1y42l4_K_IsIWHFIPLtPZ6iwQ,7597
103
106
  klaude_code/llm/openai_compatible/input.py,sha256=rtWVjpwb9tLrinucezmncQXet8MerUxE5Gxc32sfDr4,3750
104
107
  klaude_code/llm/openai_compatible/stream_processor.py,sha256=ckOBWZ_iUqgcESD5pnvjqJxvPI7YA4k9DYZkZ37KbmE,3388
105
108
  klaude_code/llm/openai_compatible/tool_call_accumulator.py,sha256=kuw3ceDgenQz2Ccc9KYqBkDo6F1sDb5Aga6m41AIECA,4071
106
109
  klaude_code/llm/openrouter/__init__.py,sha256=_As8lHjwj6vapQhLorZttTpukk5ZiCdhFdGT38_ASPo,69
107
- klaude_code/llm/openrouter/client.py,sha256=R7baVbNrxS4vvZnPjhNo7nxqznYlv0_nFkQy7Yhh2XU,7854
110
+ klaude_code/llm/openrouter/client.py,sha256=tFb6e0iNz-72pygnmtKnNeQUQ2zY5ui1vTPcho99NCg,7835
108
111
  klaude_code/llm/openrouter/input.py,sha256=2GuDVHd_74ZtHQyFyTGhZqtWjM7m5GYqFtKf--AvmlI,5059
109
112
  klaude_code/llm/openrouter/reasoning_handler.py,sha256=TYIHdwMopi8DVqOpeN3vpyp-GcWOZgTeRnT5QvlK70U,8100
110
- klaude_code/llm/registry.py,sha256=KBKSelBLlGooInpzfVztN6OZqqfc0WzmB-cT8lE5fw8,686
113
+ klaude_code/llm/registry.py,sha256=bbxZ_Mb7C2xCk_OVUQoZnsyPgmO3tbfJ292qaCtr1Ts,1763
111
114
  klaude_code/llm/responses/__init__.py,sha256=WsiyvnNiIytaYcaAqNiB8GI-5zcpjjeODPbMlteeFjA,67
112
- klaude_code/llm/responses/client.py,sha256=vyCgo4spD6-63Pm0-3ha1AaEB5uwIG9A6GYH3dAFvH0,9293
113
- klaude_code/llm/responses/input.py,sha256=hnTnOGpo1-N_vsi7C3O_PJoj-Gf1cBdt9Q1sal3vhYM,6079
114
- klaude_code/llm/usage.py,sha256=Qkfq3iK66MZiqrjyf4mTOgElYW2yORECpiclXYHhyZM,5486
115
+ klaude_code/llm/responses/client.py,sha256=hcFbDgUJPMZsAR8kSxfshuAEAVXJOZL2FIxVqZ1ku90,9359
116
+ klaude_code/llm/responses/input.py,sha256=noNmalXvxw6UXo6ngkhFBroECxK6igmgEQ49YVhY0xg,6049
117
+ klaude_code/llm/usage.py,sha256=3FWDQZeM2LKXt1eeP2K40lkjtwovZP6SLCYlBJ0NV8Y,5647
115
118
  klaude_code/protocol/__init__.py,sha256=aGUgzhYqvhuT3Mk2vj7lrHGriH4h9TSbqV1RsRFAZjQ,194
116
119
  klaude_code/protocol/commands.py,sha256=ulHcHvvRbJosmp51l-xNio8ImDEI8uVmG17wVH2kg90,580
117
120
  klaude_code/protocol/events.py,sha256=exOriAIxdIzS7WDKCw3am-uw1egx_8tVbvcgO6s3nMI,3562
118
121
  klaude_code/protocol/llm_param.py,sha256=Hjq8Z-3nGhAJovf-lcsNc0kBVGRDWKe910J5lZwQfq4,4424
119
- klaude_code/protocol/model.py,sha256=w0qFg4qUEdch7g9_ppjxSxdlPhajvENZklVErSLH6Cg,11972
120
- klaude_code/protocol/op.py,sha256=rkPvDRsOgPyibMI1n0pDO7ghFWJBfDGas9BnACtmfO4,2654
122
+ klaude_code/protocol/model.py,sha256=UFcnBlpVYj8Kbd13h8Lo0It6Yy8ddVcXmdiiXHOZEx8,12351
123
+ klaude_code/protocol/op.py,sha256=hdQTzD6zAsRMJJFaLOPvDX9gokhtIBSYNQuZ20TusI4,2824
121
124
  klaude_code/protocol/op_handler.py,sha256=_lnv3-RxKkrTfGTNBlQ23gbHJBEtMLC8O48SYWDtPjE,843
122
- klaude_code/protocol/sub_agent.py,sha256=dPOG0rGQJEpx2w0FtXodP0VsJLnCtPa5vIAP4eZ1iq8,13548
125
+ klaude_code/protocol/sub_agent.py,sha256=NZib4kubDY8Js7toE6G2eKDNH4sWrmVYnH9FSTqKkZI,13666
123
126
  klaude_code/protocol/tools.py,sha256=hkjVirnQqGTJS46IWvVKXWR4usPPUgDZDnm34LzAVSc,348
124
127
  klaude_code/session/__init__.py,sha256=oXcDA5w-gJCbzmlF8yuWy3ezIW9DgFBNUs-gJHUJ-Rc,121
125
- klaude_code/session/export.py,sha256=rB6s4gJUn7ZjGDwsh8yEQx92XR7_iI6YB9jg_FZpsYA,24363
128
+ klaude_code/session/export.py,sha256=1awi_cyZGRVnrzHMTpR_eeDsLkJqRI5QdqhvWd8anas,25149
126
129
  klaude_code/session/selector.py,sha256=HTboyzih7V8zbZoSsArJ-GVC1EnXTGocHJwFmZfbeSg,2567
127
- klaude_code/session/session.py,sha256=zZHuZaLjd3OUMUL_Qrczq5JM1vMZqpegk-tV767e9Fk,19618
128
- klaude_code/session/templates/export_session.html,sha256=O25hJaq2WnKFswZSxJOzufGj0WYmva9IQjwod2mzYRc,41537
130
+ klaude_code/session/session.py,sha256=vm7I-IODBQr7JNkdx2jWfvDZgiLzMRrb0HBebfz7wnU,20051
131
+ klaude_code/session/templates/export_session.html,sha256=jvyVM_ZrRoQIqWslfmo6ASprVYLhbOtT_QTzgkrdXHs,46389
129
132
  klaude_code/trace/__init__.py,sha256=B-S4qdCj8W88AaC_gVmhTaejH6eLYClBVh2Q6aGAVBk,184
130
133
  klaude_code/trace/log.py,sha256=0K0uek2KWq0zkUZijcO-TBM6STLe-h_8IIW0lx7V7ZA,4865
131
134
  klaude_code/ui/__init__.py,sha256=AL1Ro0u8ObNPMj4sci_U4zakG7IpnI3bie-C63E2QPI,2873
132
135
  klaude_code/ui/core/__init__.py,sha256=2NakrTDcxem5D0atyEY_Rxv1BbKCeZweF63L6AAq6r8,23
133
136
  klaude_code/ui/core/display.py,sha256=NwFQ9oKi8i3T5EsYDRrTpGBr3BZI0Ggns37JuQEOH54,3540
134
- klaude_code/ui/core/input.py,sha256=jyu2wJWvZT7t-icoa1oLO5jfr4WLZ8TReYUwGR15ha0,2571
137
+ klaude_code/ui/core/input.py,sha256=GqEos_VKRpfzQg0LQvr3210gzu2mw0_7OpPyNXmF3LI,2533
135
138
  klaude_code/ui/core/stage_manager.py,sha256=ozKYS213_RpsgYxF9mIDcTObrxqkqbE3Ao6CDhnES2E,1559
136
139
  klaude_code/ui/modes/__init__.py,sha256=ByDPbyYYU4o5kdnEes3b1VEV173RI9XAXyzkFbrApEY,26
137
140
  klaude_code/ui/modes/debug/__init__.py,sha256=1-1tAk7FtENdYzExSttYdHiJ-qH3DIQ5yYJ51ms2uSg,13
@@ -139,11 +142,11 @@ klaude_code/ui/modes/debug/display.py,sha256=11I-JN9OEz2zBIqhEXctSUaDO1Z0nT_cG8R
139
142
  klaude_code/ui/modes/exec/__init__.py,sha256=RsYa-DmDJj6g7iXb4H9mm2_Cu-KDQOD10RJd3yhVf_k,12
140
143
  klaude_code/ui/modes/exec/display.py,sha256=m2kkgaUoGD9rEVUmcm7Vs_PyAI2iruKCJYRhANjSsKo,1965
141
144
  klaude_code/ui/modes/repl/__init__.py,sha256=JursXYxevw0hrezE-urGo25962InIXVPj_uYnPafN-U,1528
142
- klaude_code/ui/modes/repl/clipboard.py,sha256=_WVLgv-4mprERmcw7iRYTunrSUU51-oojp_hFCM3gVk,5117
145
+ klaude_code/ui/modes/repl/clipboard.py,sha256=ZCpk7kRSXGhh0Q_BWtUUuSYT7ZOqRjAoRcg9T9n48Wo,5137
143
146
  klaude_code/ui/modes/repl/completers.py,sha256=V6pxi61w1z0B1eDliudahBQJ6wkPXAGI4AaBg8J0XtE,18283
144
147
  klaude_code/ui/modes/repl/display.py,sha256=v-Jxe7MWpOCEsx9FFEzqKaIg0jLS7ZU9bevooBjxxEQ,2242
145
- klaude_code/ui/modes/repl/event_handler.py,sha256=qZdyDmPN_KsMYjkGlm6-H4Owqo5JVGH-XB0x7h9YKz8,18797
146
- klaude_code/ui/modes/repl/input_prompt_toolkit.py,sha256=wwXTQ_ZP70y_SgIQenttY82aBZDsRYhxerEqm46gpOM,7592
148
+ klaude_code/ui/modes/repl/event_handler.py,sha256=oReGpdmqgrNmwOMehykscZS2t_XzTWcCvyxZq28MxCc,18604
149
+ klaude_code/ui/modes/repl/input_prompt_toolkit.py,sha256=EAIAtcL9EHVPmVK6oOHg0xCeZ0IOnG5S5KsaL85OHOk,6368
147
150
  klaude_code/ui/modes/repl/key_bindings.py,sha256=Px-QdRHkzvb2fDGg5d3JHic5ieiGiPcXorPJ5bAM8dI,7801
148
151
  klaude_code/ui/modes/repl/renderer.py,sha256=G7K9HXqFKLdEvWgz3JpruJk02RBULqq7-GSu_gCkP-A,11962
149
152
  klaude_code/ui/renderers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -152,28 +155,28 @@ klaude_code/ui/renderers/common.py,sha256=TPH7LCbeJGqB8ArTsVitqJHEyOxHU6nwnRtvF0
152
155
  klaude_code/ui/renderers/developer.py,sha256=fE-9LRzVLiKnK3ctFcuDDP_eehohhsgPCH_tYaOp-xs,6378
153
156
  klaude_code/ui/renderers/diffs.py,sha256=P--aLjvZy4z77FDx6uM9LlIYVjYlyZwj0MncdJTO2AA,7691
154
157
  klaude_code/ui/renderers/errors.py,sha256=c_fbnoNOnvuI3Bb24IujwV8Mpes-qWS_xCWfAcBvg6A,517
155
- klaude_code/ui/renderers/metadata.py,sha256=od1MYeD2776I4rkvV2B3Nv6lzPbYsDXxazEBu13cqHM,8815
158
+ klaude_code/ui/renderers/metadata.py,sha256=ESX8d3DOeT1MRHx9eX9yFUwwOMENZaivrbudKhgAHHk,9881
156
159
  klaude_code/ui/renderers/sub_agent.py,sha256=3cyn95pu4IniOJyWW4vfQ-X72iLufQ3LT9CkAQMuF4k,2686
157
160
  klaude_code/ui/renderers/thinking.py,sha256=jzDfvYuwpafndmBMMb6UumGxur9iFi_X0LYIo08eDlw,1179
158
- klaude_code/ui/renderers/tools.py,sha256=kHxInHy9N3n4Np0svQsy6JUDjlUzG0gr2-7t4WG58YA,19564
161
+ klaude_code/ui/renderers/tools.py,sha256=iVgTo10gzS981LmbLU36Zt17JMW3YTPYRqA3mUJ_d8c,19975
159
162
  klaude_code/ui/renderers/user_input.py,sha256=rDdOYvbgJ6oePQAtyTCK-KhARfLKytpTZboZ-cFIuJQ,2603
160
163
  klaude_code/ui/rich/__init__.py,sha256=olvMm2SteyKioOqUJbEoav2TsDr_mtKqkSaifNumjwc,27
161
164
  klaude_code/ui/rich/live.py,sha256=Uid0QAZG7mHb4KrCF8p9c9n1nHLHzW75xSqcLZ4bLWY,2098
162
- klaude_code/ui/rich/markdown.py,sha256=XYJoTAiNnXXWySxwmlPuAGWelV6sZgQ6foZUX_s43IE,11461
165
+ klaude_code/ui/rich/markdown.py,sha256=5RFIWsYDuC2q_ngD4mG48viGyDT70FF8-7SwSvgPA_M,11674
163
166
  klaude_code/ui/rich/quote.py,sha256=tZcxN73SfDBHF_qk0Jkh9gWBqPBn8VLp9RF36YRdKEM,1123
164
167
  klaude_code/ui/rich/searchable_text.py,sha256=Adr2EFewX1UInypz-vMOUgZP9gk3Zk8_d2utWhV3K90,2452
165
168
  klaude_code/ui/rich/status.py,sha256=sHTenGYERGiLwnkwdGFjFw9WDbbnMSPTKeEJiSYYNaU,8503
166
169
  klaude_code/ui/rich/theme.py,sha256=JAlFXwcZYbHv0vcuweWnzu4vR2CDe-mqH24CEtNBnL4,10159
167
- klaude_code/ui/terminal/__init__.py,sha256=33AbEwVH3G-oJSYL3QDlnbjoVj-uH_C0p09Zr71Z7Fw,21
170
+ klaude_code/ui/terminal/__init__.py,sha256=GIMnsEcIAGT_vBHvTlWEdyNmAEpruyscUA6M_j3GQZU,1412
168
171
  klaude_code/ui/terminal/color.py,sha256=M-i09DVlLAhAyhQjfeAi7OipoGi1p_OVkaZxeRfykY0,7135
169
- klaude_code/ui/terminal/control.py,sha256=P9PyaX8v1qp1zxwr7yGwTiNEb772KNMUSQWkVKMvAvQ,5056
172
+ klaude_code/ui/terminal/control.py,sha256=Yq0giFYIBOIJp1KQTvqAglQXKzSbwO5f2fI_b8EoTcU,4997
170
173
  klaude_code/ui/terminal/notifier.py,sha256=YOQXZYrjUZFLRt1iIoHxDKYoQUS-760lpydBGw9OxbM,3227
171
174
  klaude_code/ui/terminal/progress_bar.py,sha256=MDnhPbqCnN4GDgLOlxxOEVZPDwVC_XL2NM5sl1MFNcQ,2133
172
175
  klaude_code/ui/utils/__init__.py,sha256=YEsCLjbCPaPza-UXTPUMTJTrc9BmNBUP5CbFWlshyOQ,15
173
176
  klaude_code/ui/utils/common.py,sha256=xzw-Mgj0agxrf22QxpH7YzVIpkMXIRY6SgXWtLYF0yU,2881
174
177
  klaude_code/ui/utils/debouncer.py,sha256=TFF1z7B7-FxONEigkYohhShDlqo4cOcqydE9zz7JBHc,1270
175
- klaude_code/version.py,sha256=QDgEqSFhyTSiABQFQc9VfujMPQcdjgoCaYTQsr94x0Q,4752
176
- klaude_code-1.2.9.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
177
- klaude_code-1.2.9.dist-info/entry_points.txt,sha256=7CWKjolvs6dZiYHpelhA_FRJ-sVDh43eu3iWuOhKc_w,53
178
- klaude_code-1.2.9.dist-info/METADATA,sha256=7XSISIuiSdvBL_sDMhmtwSaYCDu_kr77v32LpiumUHY,5140
179
- klaude_code-1.2.9.dist-info/RECORD,,
178
+ klaude_code/version.py,sha256=x2OeiACPdzS87EWtaSi_UP13htm81Uq7mlV3kFy5jko,4815
179
+ klaude_code-1.2.11.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
180
+ klaude_code-1.2.11.dist-info/entry_points.txt,sha256=7CWKjolvs6dZiYHpelhA_FRJ-sVDh43eu3iWuOhKc_w,53
181
+ klaude_code-1.2.11.dist-info/METADATA,sha256=YP1lR039UswgCpr7YjhigkdUh21LrVaJtrnCzQg4h60,5067
182
+ klaude_code-1.2.11.dist-info/RECORD,,