klaude-code 1.2.2__py3-none-any.whl → 1.2.4__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 (60) hide show
  1. klaude_code/cli/main.py +7 -0
  2. klaude_code/cli/runtime.py +6 -6
  3. klaude_code/command/__init__.py +9 -5
  4. klaude_code/command/clear_cmd.py +3 -24
  5. klaude_code/command/command_abc.py +36 -1
  6. klaude_code/command/export_cmd.py +16 -20
  7. klaude_code/command/help_cmd.py +1 -0
  8. klaude_code/command/model_cmd.py +3 -30
  9. klaude_code/command/{prompt-update-dev-doc.md → prompt-dev-docs-update.md} +3 -2
  10. klaude_code/command/{prompt-dev-doc.md → prompt-dev-docs.md} +3 -2
  11. klaude_code/command/prompt-init.md +2 -5
  12. klaude_code/command/prompt_command.py +3 -3
  13. klaude_code/command/registry.py +6 -7
  14. klaude_code/command/status_cmd.py +111 -0
  15. klaude_code/config/config.py +1 -1
  16. klaude_code/config/list_model.py +1 -1
  17. klaude_code/const/__init__.py +1 -1
  18. klaude_code/core/agent.py +2 -11
  19. klaude_code/core/executor.py +155 -14
  20. klaude_code/core/prompts/prompt-gemini.md +1 -1
  21. klaude_code/core/reminders.py +24 -0
  22. klaude_code/core/task.py +10 -0
  23. klaude_code/core/tool/shell/bash_tool.py +6 -2
  24. klaude_code/core/tool/sub_agent_tool.py +1 -1
  25. klaude_code/core/tool/tool_context.py +1 -1
  26. klaude_code/core/tool/tool_registry.py +1 -1
  27. klaude_code/core/tool/tool_runner.py +1 -1
  28. klaude_code/core/tool/web/mermaid_tool.py +1 -1
  29. klaude_code/llm/__init__.py +3 -4
  30. klaude_code/llm/anthropic/client.py +12 -9
  31. klaude_code/llm/openai_compatible/client.py +2 -18
  32. klaude_code/llm/openai_compatible/tool_call_accumulator.py +2 -2
  33. klaude_code/llm/openrouter/client.py +2 -18
  34. klaude_code/llm/openrouter/input.py +6 -2
  35. klaude_code/llm/registry.py +2 -71
  36. klaude_code/llm/responses/client.py +2 -0
  37. klaude_code/llm/{metadata_tracker.py → usage.py} +49 -2
  38. klaude_code/protocol/commands.py +1 -0
  39. klaude_code/protocol/llm_param.py +12 -0
  40. klaude_code/protocol/model.py +30 -3
  41. klaude_code/protocol/op.py +14 -14
  42. klaude_code/protocol/op_handler.py +28 -0
  43. klaude_code/protocol/tools.py +0 -2
  44. klaude_code/session/export.py +124 -35
  45. klaude_code/session/session.py +1 -1
  46. klaude_code/session/templates/export_session.html +383 -39
  47. klaude_code/ui/__init__.py +6 -2
  48. klaude_code/ui/modes/exec/display.py +26 -0
  49. klaude_code/ui/modes/repl/event_handler.py +5 -1
  50. klaude_code/ui/renderers/developer.py +62 -11
  51. klaude_code/ui/renderers/metadata.py +33 -24
  52. klaude_code/ui/renderers/sub_agent.py +1 -1
  53. klaude_code/ui/renderers/tools.py +2 -2
  54. klaude_code/ui/renderers/user_input.py +18 -22
  55. klaude_code/ui/rich/status.py +13 -2
  56. {klaude_code-1.2.2.dist-info → klaude_code-1.2.4.dist-info}/METADATA +1 -1
  57. {klaude_code-1.2.2.dist-info → klaude_code-1.2.4.dist-info}/RECORD +60 -58
  58. /klaude_code/{core → protocol}/sub_agent.py +0 -0
  59. {klaude_code-1.2.2.dist-info → klaude_code-1.2.4.dist-info}/WHEEL +0 -0
  60. {klaude_code-1.2.2.dist-info → klaude_code-1.2.4.dist-info}/entry_points.txt +0 -0
@@ -107,7 +107,7 @@ class SpinnerStatusState:
107
107
  if self._base_status:
108
108
  result = Text(self._base_status)
109
109
  if activity_text:
110
- result.append(" ")
110
+ result.append(" | ")
111
111
  result.append_text(activity_text)
112
112
  return result
113
113
  if activity_text:
@@ -286,12 +286,14 @@ class DisplayEventHandler:
286
286
  self.renderer.display_task_finish(event)
287
287
  if not self.renderer.is_sub_agent_session(event.session_id):
288
288
  emit_osc94(OSC94States.HIDDEN)
289
+ self.spinner_status.reset()
289
290
  self.renderer.spinner_stop()
290
291
  await self.stage_manager.transition_to(Stage.WAITING)
291
292
  self._maybe_notify_task_finish(event)
292
293
 
293
294
  async def _on_interrupt(self, event: events.InterruptEvent) -> None:
294
295
  self.renderer.spinner_stop()
296
+ self.spinner_status.reset()
295
297
  await self.stage_manager.transition_to(Stage.WAITING)
296
298
  emit_osc94(OSC94States.HIDDEN)
297
299
  self.renderer.display_interrupt()
@@ -302,11 +304,13 @@ class DisplayEventHandler:
302
304
  self.renderer.display_error(event)
303
305
  if not event.can_retry:
304
306
  self.renderer.spinner_stop()
307
+ self.spinner_status.reset()
305
308
 
306
309
  async def _on_end(self, event: events.EndEvent) -> None:
307
310
  emit_osc94(OSC94States.HIDDEN)
308
311
  await self.stage_manager.transition_to(Stage.WAITING)
309
312
  self.renderer.spinner_stop()
313
+ self.spinner_status.reset()
310
314
 
311
315
  # ─────────────────────────────────────────────────────────────────────────────
312
316
  # Private helper methods
@@ -1,8 +1,9 @@
1
1
  from rich.console import Group, RenderableType
2
2
  from rich.padding import Padding
3
+ from rich.table import Table
3
4
  from rich.text import Text
4
5
 
5
- from klaude_code.protocol import commands, events
6
+ from klaude_code.protocol import commands, events, model
6
7
  from klaude_code.ui.renderers import diffs as r_diffs
7
8
  from klaude_code.ui.renderers.common import create_grid
8
9
  from klaude_code.ui.renderers.tools import render_path
@@ -16,7 +17,7 @@ def need_render_developer_message(e: events.DeveloperMessageEvent) -> bool:
16
17
  or e.item.external_file_changes
17
18
  or e.item.todo_use
18
19
  or e.item.at_files
19
- or e.item.clipboard_images
20
+ or e.item.user_image_count
20
21
  )
21
22
 
22
23
 
@@ -74,16 +75,12 @@ def render_developer_message(e: events.DeveloperMessageEvent) -> RenderableType:
74
75
  )
75
76
  parts.append(grid)
76
77
 
77
- if ci := e.item.clipboard_images:
78
+ if uic := e.item.user_image_count:
78
79
  grid = create_grid()
79
- for img_tag in ci:
80
- grid.add_row(
81
- Text(" +", style=ThemeKey.REMINDER),
82
- Text.assemble(
83
- ("Read ", ThemeKey.REMINDER),
84
- Text(f"{img_tag} Image", style=ThemeKey.REMINDER_BOLD),
85
- ),
86
- )
80
+ grid.add_row(
81
+ Text(" +", style=ThemeKey.REMINDER),
82
+ Text(f"Attached {uic} image{'s' if uic > 1 else ''}", style=ThemeKey.REMINDER),
83
+ )
87
84
  parts.append(grid)
88
85
 
89
86
  return Group(*parts) if parts else Text("")
@@ -101,7 +98,61 @@ def render_command_output(e: events.DeveloperMessageEvent) -> RenderableType:
101
98
  return r_diffs.render_diff_panel(e.item.content, show_file_name=True)
102
99
  case commands.CommandName.HELP:
103
100
  return Padding.indent(Text.from_markup(e.item.content or ""), level=2)
101
+ case commands.CommandName.STATUS:
102
+ return _render_status_output(e.item.command_output)
104
103
  case _:
105
104
  content = e.item.content or "(no content)"
106
105
  style = ThemeKey.TOOL_RESULT if not e.item.command_output.is_error else ThemeKey.ERROR
107
106
  return Padding.indent(Text(truncate_display(content), style=style), level=2)
107
+
108
+
109
+ def _format_tokens(tokens: int) -> str:
110
+ """Format token count with K/M suffix for readability."""
111
+ if tokens >= 1_000_000:
112
+ return f"{tokens / 1_000_000:.2f}M"
113
+ if tokens >= 1_000:
114
+ return f"{tokens / 1_000:.1f}K"
115
+ return str(tokens)
116
+
117
+
118
+ def _format_cost(cost: float | None) -> str:
119
+ """Format cost in USD."""
120
+ if cost is None:
121
+ return "-"
122
+ if cost < 0.01:
123
+ return f"${cost:.4f}"
124
+ return f"${cost:.2f}"
125
+
126
+
127
+ def _render_status_output(command_output: model.CommandOutput) -> RenderableType:
128
+ """Render session status as a two-column table with sections."""
129
+ if not command_output.ui_extra or not command_output.ui_extra.session_status:
130
+ return Text("(no status data)", style=ThemeKey.TOOL_RESULT)
131
+
132
+ status = command_output.ui_extra.session_status
133
+ usage = status.usage
134
+
135
+ table = Table.grid(padding=(0, 2))
136
+ table.add_column(style=ThemeKey.TOOL_RESULT, no_wrap=True)
137
+ table.add_column(style=ThemeKey.TOOL_RESULT, no_wrap=True)
138
+ # Token Usage section
139
+ table.add_row(Text("Token Usage", style="bold"), "")
140
+ table.add_row("Input Tokens", _format_tokens(usage.input_tokens))
141
+ if usage.cached_tokens > 0:
142
+ table.add_row("Cached Tokens", _format_tokens(usage.cached_tokens))
143
+ if usage.reasoning_tokens > 0:
144
+ table.add_row("Reasoning Tokens", _format_tokens(usage.reasoning_tokens))
145
+ table.add_row("Output Tokens", _format_tokens(usage.output_tokens))
146
+ table.add_row("Total Tokens", _format_tokens(usage.total_tokens))
147
+
148
+ # Cost section
149
+ if usage.total_cost is not None:
150
+ table.add_row("", "") # Empty line
151
+ table.add_row(Text("Cost", style="bold"), "")
152
+ table.add_row("Input Cost", _format_cost(usage.input_cost))
153
+ if usage.cache_read_cost is not None and usage.cache_read_cost > 0:
154
+ table.add_row("Cache Read Cost", _format_cost(usage.cache_read_cost))
155
+ table.add_row("Output Cost", _format_cost(usage.output_cost))
156
+ table.add_row("Total Cost", _format_cost(usage.total_cost))
157
+
158
+ return Padding.indent(table, level=2)
@@ -41,33 +41,32 @@ def render_response_metadata(e: events.ResponseMetadataEvent) -> RenderableType:
41
41
 
42
42
  if metadata.usage is not None:
43
43
  # Input
44
- parts.append(
45
- Text.assemble(
46
- ("input:", ThemeKey.METADATA_DIM),
47
- (format_number(metadata.usage.input_tokens), ThemeKey.METADATA_DIM),
48
- )
49
- )
44
+ input_parts: list[tuple[str, str]] = [
45
+ ("input:", ThemeKey.METADATA_DIM),
46
+ (format_number(metadata.usage.input_tokens), ThemeKey.METADATA_DIM),
47
+ ]
48
+ if metadata.usage.input_cost is not None:
49
+ input_parts.append((f"(${metadata.usage.input_cost:.4f})", ThemeKey.METADATA_DIM))
50
+ parts.append(Text.assemble(*input_parts))
50
51
 
51
52
  # Cached
52
53
  if metadata.usage.cached_tokens > 0:
53
- parts.append(
54
- Text.assemble(
55
- ("cached", ThemeKey.METADATA_DIM),
56
- (":", ThemeKey.METADATA_DIM),
57
- (
58
- format_number(metadata.usage.cached_tokens),
59
- ThemeKey.METADATA_DIM,
60
- ),
61
- )
62
- )
54
+ cached_parts: list[tuple[str, str]] = [
55
+ ("cached:", ThemeKey.METADATA_DIM),
56
+ (format_number(metadata.usage.cached_tokens), ThemeKey.METADATA_DIM),
57
+ ]
58
+ if metadata.usage.cache_read_cost is not None:
59
+ cached_parts.append((f"(${metadata.usage.cache_read_cost:.4f})", ThemeKey.METADATA_DIM))
60
+ parts.append(Text.assemble(*cached_parts))
63
61
 
64
62
  # Output
65
- parts.append(
66
- Text.assemble(
67
- ("output:", ThemeKey.METADATA_DIM),
68
- (format_number(metadata.usage.output_tokens), ThemeKey.METADATA_DIM),
69
- )
70
- )
63
+ output_parts: list[tuple[str, str]] = [
64
+ ("output:", ThemeKey.METADATA_DIM),
65
+ (format_number(metadata.usage.output_tokens), ThemeKey.METADATA_DIM),
66
+ ]
67
+ if metadata.usage.output_cost is not None:
68
+ output_parts.append((f"(${metadata.usage.output_cost:.4f})", ThemeKey.METADATA_DIM))
69
+ parts.append(Text.assemble(*output_parts))
71
70
 
72
71
  # Reasoning
73
72
  if metadata.usage.reasoning_tokens > 0:
@@ -105,16 +104,26 @@ def render_response_metadata(e: events.ResponseMetadataEvent) -> RenderableType:
105
104
  )
106
105
  )
107
106
 
108
- # Cost
107
+ # Duration
109
108
  if metadata.task_duration_s is not None:
110
109
  parts.append(
111
110
  Text.assemble(
112
- ("cost", ThemeKey.METADATA_DIM),
111
+ ("time", ThemeKey.METADATA_DIM),
113
112
  (":", ThemeKey.METADATA_DIM),
114
113
  (f"{metadata.task_duration_s:.1f}s", ThemeKey.METADATA_DIM),
115
114
  )
116
115
  )
117
116
 
117
+ # Cost (USD)
118
+ if metadata.usage is not None and metadata.usage.total_cost is not None:
119
+ parts.append(
120
+ Text.assemble(
121
+ ("cost", ThemeKey.METADATA_DIM),
122
+ (":", ThemeKey.METADATA_DIM),
123
+ (f"${metadata.usage.total_cost:.4f}", ThemeKey.METADATA_DIM),
124
+ )
125
+ )
126
+
118
127
  if parts:
119
128
  line2 = Text("/", style=ThemeKey.METADATA_DIM).join(parts)
120
129
  renderables.append(Padding(line2, (0, 0, 0, 2)))
@@ -6,8 +6,8 @@ from rich.style import Style
6
6
  from rich.text import Text
7
7
 
8
8
  from klaude_code import const
9
- from klaude_code.core.sub_agent import get_sub_agent_profile_by_tool
10
9
  from klaude_code.protocol import events, model
10
+ from klaude_code.protocol.sub_agent import get_sub_agent_profile_by_tool
11
11
  from klaude_code.ui.rich.markdown import NoInsetMarkdown
12
12
  from klaude_code.ui.rich.theme import ThemeKey
13
13
 
@@ -6,8 +6,8 @@ from rich.padding import Padding
6
6
  from rich.text import Text
7
7
 
8
8
  from klaude_code import const
9
- from klaude_code.core.sub_agent import is_sub_agent_tool as _is_sub_agent_tool
10
9
  from klaude_code.protocol import events, model
10
+ from klaude_code.protocol.sub_agent import is_sub_agent_tool as _is_sub_agent_tool
11
11
  from klaude_code.ui.renderers import diffs as r_diffs
12
12
  from klaude_code.ui.renderers.common import create_grid
13
13
  from klaude_code.ui.rich.theme import ThemeKey
@@ -449,7 +449,7 @@ def get_tool_active_form(tool_name: str) -> str:
449
449
  return _TOOL_ACTIVE_FORM[tool_name]
450
450
 
451
451
  # Check sub agent profiles
452
- from klaude_code.core.sub_agent import get_sub_agent_profile_by_tool
452
+ from klaude_code.protocol.sub_agent import get_sub_agent_profile_by_tool
453
453
 
454
454
  profile = get_sub_agent_profile_by_tool(tool_name)
455
455
  if profile and profile.active_form:
@@ -3,7 +3,7 @@ import re
3
3
  from rich.console import Group, RenderableType
4
4
  from rich.text import Text
5
5
 
6
- from klaude_code.protocol import commands
6
+ from klaude_code.command import is_slash_command_name
7
7
  from klaude_code.ui.renderers.common import create_grid
8
8
  from klaude_code.ui.rich.theme import ThemeKey
9
9
 
@@ -25,14 +25,6 @@ def render_at_pattern(
25
25
  return Text(text, style=other_style)
26
26
 
27
27
 
28
- def _is_valid_slash_command(command: str) -> bool:
29
- try:
30
- commands.CommandName(command)
31
- return True
32
- except ValueError:
33
- return False
34
-
35
-
36
28
  def render_user_input(content: str) -> RenderableType:
37
29
  """Render a user message as a group of quoted lines with styles.
38
30
 
@@ -41,27 +33,31 @@ def render_user_input(content: str) -> RenderableType:
41
33
  """
42
34
  lines = content.strip().split("\n")
43
35
  renderables: list[RenderableType] = []
36
+ has_command = False
44
37
  for i, line in enumerate(lines):
45
38
  line_text = render_at_pattern(line)
46
39
 
47
40
  if i == 0 and line.startswith("/"):
48
41
  splits = line.split(" ", maxsplit=1)
49
- if _is_valid_slash_command(splits[0][1:]):
50
- if len(splits) <= 1:
51
- renderables.append(Text(f" {line} ", style=ThemeKey.USER_INPUT_SLASH_COMMAND))
52
- continue
53
- else:
54
- line_text = Text.assemble(
55
- (f" {splits[0]} ", ThemeKey.USER_INPUT_SLASH_COMMAND),
56
- " ",
57
- render_at_pattern(splits[1]),
58
- )
59
- renderables.append(line_text)
60
- continue
42
+ if is_slash_command_name(splits[0][1:]):
43
+ has_command = True
44
+ line_text = Text.assemble(
45
+ (f"{splits[0]}", ThemeKey.USER_INPUT_SLASH_COMMAND),
46
+ " ",
47
+ render_at_pattern(splits[1]) if len(splits) > 1 else Text(""),
48
+ )
49
+ renderables.append(line_text)
50
+ continue
61
51
 
62
52
  renderables.append(line_text)
63
53
  grid = create_grid()
64
- grid.add_row(Text("❯", style=ThemeKey.USER_INPUT_PROMPT), Group(*renderables))
54
+ grid.padding = (0, 0)
55
+ mark = (
56
+ Text("❯ ", style=ThemeKey.USER_INPUT_PROMPT)
57
+ if not has_command
58
+ else Text(" ", style=ThemeKey.USER_INPUT_SLASH_COMMAND)
59
+ )
60
+ grid.add_row(mark, Group(*renderables))
65
61
  return grid
66
62
 
67
63
 
@@ -52,10 +52,21 @@ def _shimmer_profile(main_text: str) -> list[tuple[str, float]]:
52
52
  return []
53
53
 
54
54
  padding = const.STATUS_SHIMMER_PADDING
55
- period = len(chars) + padding * 2
55
+ char_count = len(chars)
56
+ period = char_count + padding * 2
57
+
58
+ # Keep a roughly constant shimmer speed (characters per second)
59
+ # regardless of text length by deriving a character velocity from a
60
+ # baseline text length and the configured sweep duration.
61
+ # The baseline is chosen to be close to the default
62
+ # "Thinking … (esc to interrupt)" status line.
63
+ baseline_chars = 30
64
+ base_period = baseline_chars + padding * 2
56
65
  sweep_seconds = const.STATUS_SHIMMER_SWEEP_SECONDS
66
+ char_speed = base_period / sweep_seconds if sweep_seconds > 0 else base_period
67
+
57
68
  elapsed = _elapsed_since_start()
58
- pos_f = (elapsed % sweep_seconds) / sweep_seconds * float(period)
69
+ pos_f = (elapsed * char_speed) % float(period)
59
70
  pos = int(pos_f)
60
71
  band_half_width = const.STATUS_SHIMMER_BAND_HALF_WIDTH
61
72
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: klaude-code
3
- Version: 1.2.2
3
+ Version: 1.2.4
4
4
  Summary: Add your description here
5
5
  Requires-Dist: anthropic>=0.66.0
6
6
  Requires-Dist: openai>=1.102.0
@@ -1,41 +1,41 @@
1
1
  klaude_code/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  klaude_code/cli/__init__.py,sha256=YzlAoWAr5rx5oe6B_4zPxRFS4QaZauuy1AFwampP5fg,45
3
- klaude_code/cli/main.py,sha256=BcCxD710I888UlK6pUA5NtCIHlKYKGGI7cZzZgIEkN4,9068
4
- klaude_code/cli/runtime.py,sha256=-NycISWarSPU4DKYeauWpKRY-MX90h5ea0Piv8f18sY,12242
3
+ klaude_code/cli/main.py,sha256=vQt1jZVX4pxQUYceWQcXkRO3w0glOUIhazI7uDex2fE,9279
4
+ klaude_code/cli/runtime.py,sha256=jipzUciIlY-w0hlUsid8HfSZuf_xCH23XoOuByJijU8,12288
5
5
  klaude_code/cli/session_cmd.py,sha256=cIBm3uUurke-TfBvQHz9mGW29LOAh22FIpXVyypnwDo,2549
6
- klaude_code/command/__init__.py,sha256=VrMOzZGrMvH8Ez7WR3uYUir7JBJqv5cpIEZe2AN2ofQ,984
7
- klaude_code/command/clear_cmd.py,sha256=iQfBY9SHOpAFeXKTIo5cby_UqV6iDaribB1aOhiAGkU,1415
8
- klaude_code/command/command_abc.py,sha256=Yp-Ioy6-vpNpU5GuO_IgcM8_BcH5McWK0Pl74MqR_Hk,1651
6
+ klaude_code/command/__init__.py,sha256=ApRFYqzmDxXe-jJ0tHg4qe4XsJ4QSICu8ICQcmwxQ1Y,1125
7
+ klaude_code/command/clear_cmd.py,sha256=ojsDdZnv_-bDYBPecpdY85DfGicst9Jf9j7esg2z2hE,674
8
+ klaude_code/command/command_abc.py,sha256=WWY9qi7SILttPl6fJNi9ThevsqpGFoQJ1ecgoosd_Ms,2547
9
9
  klaude_code/command/diff_cmd.py,sha256=306PcTeKokLmchp6mIWeZ2rokINsU5-2f4iGrjEbkCE,5269
10
- klaude_code/command/export_cmd.py,sha256=r6qKHuawaAP6T30bnMDMVa4QX6x1_Tcm48AlFUq1cOI,3622
11
- klaude_code/command/help_cmd.py,sha256=5bjMDqbyQDvI_bfaTn_BRLEpwBNisfpi33kTpbTiq2M,1675
12
- klaude_code/command/model_cmd.py,sha256=iWNUzEJftDXphboExa0w7f296quuQnTl0gB9K7_3fMc,2491
13
- klaude_code/command/prompt-dev-doc.md,sha256=hV2xvPODmMrDI4mNcN7dDo3LbjFBDhanTZAlj9t3FLs,1836
14
- klaude_code/command/prompt-init.md,sha256=9wxYo0eyPGH4zTIpq_2Jzusjn7U6JluFbVsupmYQyiA,1867
15
- klaude_code/command/prompt-update-dev-doc.md,sha256=5O_WeRma0CidTamEFaIPElHtDipL9pxstB6856thgxE,1843
16
- klaude_code/command/prompt_command.py,sha256=irkEJBdyKBn8SvGFB1YGRLSyAlrvJQJaGv-HsLn3tfs,2359
10
+ klaude_code/command/export_cmd.py,sha256=lsnBwxjiHyxgU7TPmT038ZVsOVqNxV2l-6U9T-dxI1g,3498
11
+ klaude_code/command/help_cmd.py,sha256=VddWegAJS5OjbAZ35c9Pb0SSDZpPH5PqRyQ--sdseII,1709
12
+ klaude_code/command/model_cmd.py,sha256=EApytBR6gl1Po9Mi7YVvDWgV-0ivgw-RQTnQ__EIvFQ,1510
13
+ klaude_code/command/prompt-dev-docs-update.md,sha256=g1IWIWIa-3qlNOw5mBA4N9H1_nvYcw8AKo7XoQw_AZQ,1855
14
+ klaude_code/command/prompt-dev-docs.md,sha256=PU9iT6XdUEH6grfSjHVma7xKOQcA__ZTKlEDkbbO0hA,1783
15
+ klaude_code/command/prompt-init.md,sha256=a4_FQ3gKizqs2vl9oEY5jtG6HNhv3f-1b5RSCFq0A18,1873
16
+ klaude_code/command/prompt_command.py,sha256=cDdLAyGk3JFS-nRlNzTnT8T35QQ-FC6RT0fD5ELZGO4,2405
17
17
  klaude_code/command/refresh_cmd.py,sha256=kgpbcnqf1n_ihMW99AfTXeZEkE2_MNwgQ9DbNfl2jqY,1288
18
- klaude_code/command/registry.py,sha256=QyNB2xHSZ7ejXMjtSR9hSbJqdmJXN9pNEFo0Eivf3Oc,3566
18
+ klaude_code/command/registry.py,sha256=OZhQqoLfWjqojJauemc8L2rnwPhYoAh2Kjx3HSAz_ZE,3554
19
+ klaude_code/command/status_cmd.py,sha256=mVGxyaqaP2qgjdjQ5BhweUb-Cc0VpsK8-7Pab92kKJg,3961
19
20
  klaude_code/command/terminal_setup_cmd.py,sha256=bQfMDZIzak8emkmuaY43_2YaS7t908sUJ_orYwccTtY,10957
20
21
  klaude_code/config/__init__.py,sha256=9XVCYYqzJtCi46I94hbUmJ2yTFuZ-UlH-QTx7OpLAkQ,292
21
- klaude_code/config/config.py,sha256=DlbLpYrxP5NCkCb0eSmAfpGZ6UV9ERK12-pycAclbCA,6522
22
- klaude_code/config/list_model.py,sha256=LhzWVVq11zIvnPYnhJLS8rddhBwXlL3bwR1Ew4rSHio,6194
22
+ klaude_code/config/config.py,sha256=Vc9u7-40T81Rbx1OdMqSWZLh3vf9aj4wmBUnIOH7jAw,6526
23
+ klaude_code/config/list_model.py,sha256=nr7PfxFSfFsfNDJXNfI6aYMLOOAmVQeSUBDL_b-kWTU,6198
23
24
  klaude_code/config/select_model.py,sha256=el1jqXlNyYmHH_dvdcEkWVOYqIZ9y05_VJRlfZk7HkQ,2565
24
- klaude_code/const/__init__.py,sha256=vdWKXJuOVDWJ6aDIqGfikqLFP-WOxoNSX2qXXIImxMA,3980
25
+ klaude_code/const/__init__.py,sha256=joTUQF1NEA-OHY3fuNIjNYYxOJlBW-MtSQ3YE3EAer4,3980
25
26
  klaude_code/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- klaude_code/core/agent.py,sha256=_BhCGTIuJPA72lbpcRtQCtOo4SzeyUWUIlrJqcKObu4,6588
27
- klaude_code/core/executor.py,sha256=VIjlOI0ulyD7O1rYVyYwEqCOAc0286h1SI1w-GtZd0U,18669
27
+ klaude_code/core/agent.py,sha256=XCzoo0fR5WVlJjSdOURB1FgvMbgRt4xrLydPORkbqOU,6193
28
+ klaude_code/core/executor.py,sha256=5dwSWpL_8XSJfBbuI-4CNZ3ftTC0qHWOusoFG493AAg,24114
28
29
  klaude_code/core/prompt.py,sha256=EhaM-rgjamaceYOWy4J6rXYqc0M7TfnORMBCMS1h1Yk,2868
29
30
  klaude_code/core/prompts/prompt-claude-code.md,sha256=3OY5ShcYPp8f0XrIl-3pBVIDZkweWsLzDHy5ldnSOJc,8954
30
31
  klaude_code/core/prompts/prompt-codex.md,sha256=jNi593_4L3EoMvjS0TwltF2b684gtDBsYHa9npxO34A,24239
31
- klaude_code/core/prompts/prompt-gemini.md,sha256=m7hlCrWalP3JJ_ooPINGIH-ltjgY0wCJ1GFoKiejyYM,3867
32
+ klaude_code/core/prompts/prompt-gemini.md,sha256=JjE1tHSByGKJzjn4Gpj1zekT7ry1Yqbwx5qx3fZy2gE,3901
32
33
  klaude_code/core/prompts/prompt-subagent-explore.md,sha256=OxZzGodc9BmMVkrgtFHzWXoWGj_lMtyn4r1DwopgW8I,2002
33
34
  klaude_code/core/prompts/prompt-subagent-oracle.md,sha256=hGtyDm_6UhJZUJwfXt5A-170is1KMHls85fEEo45z-w,1376
34
35
  klaude_code/core/prompts/prompt-subagent-webfetch.md,sha256=kHtJINbCRiRDrip_q6idHHU3CwbDfrVlpgtSZvugOWI,2304
35
36
  klaude_code/core/prompts/prompt-subagent.md,sha256=dmmdsOenbAOfqG6FmdR88spOLZkXmntDBs-cmZ9DN_g,897
36
- klaude_code/core/reminders.py,sha256=xUcK1hmTG69GBVy0mMYSM6WAiSJfPtwFlo6RSEpXPL8,16976
37
- klaude_code/core/sub_agent.py,sha256=rD4nDX3jBp1HIseQTjd83I4VJ_fFcJ9NzkKCWO6JGsk,13351
38
- klaude_code/core/task.py,sha256=eUQIHjZ7WW1Wtw-JPdCt5Wf6NygooBwRcnf6jjTOz5s,9466
37
+ klaude_code/core/reminders.py,sha256=JKD4cSPYj_ekqoMOa1ILrUwp83O2ToZLZym-MwZfPqs,17964
38
+ klaude_code/core/task.py,sha256=9rjCxru4WpT77pNDap3nrEXw9W6ecwGQyoPdW5_NCVw,10054
39
39
  klaude_code/core/tool/__init__.py,sha256=GQjs6IXqtiKn8RI3OmM0wki8p16SBnvuHVBez4Z5xqo,2120
40
40
  klaude_code/core/tool/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
41
  klaude_code/core/tool/file/apply_patch.py,sha256=gUukVxt0qEP2NLHiPsmFWOi0sOuW0FaUnN0BfZ6FcII,17257
@@ -57,59 +57,61 @@ klaude_code/core/tool/memory/skill_tool.md,sha256=UfjJK5EGAd3mf7ym5rIrRdPyV3kBTx
57
57
  klaude_code/core/tool/memory/skill_tool.py,sha256=Ma0iLQya3AndatUHfEANTDtXzhTly0AkzckPuQ1JXtA,3209
58
58
  klaude_code/core/tool/shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
59
  klaude_code/core/tool/shell/bash_tool.md,sha256=ILKpnRCBTkU2uSDEdZQjNYo1l6hsM4TO-3RD5zWC61c,3935
60
- klaude_code/core/tool/shell/bash_tool.py,sha256=yeHTWEbJOygeNWZGB_FRj6IIxhCIWz-V27zxcqJl30A,4385
60
+ klaude_code/core/tool/shell/bash_tool.py,sha256=jtL380zN0c6wS6iO-_NvXbJKEHAIFK4LOnQq2BVzAgE,4553
61
61
  klaude_code/core/tool/shell/command_safety.py,sha256=p56g3hpc8W0kgtq4_L_RJKVslO_4NkLsn0_e6V46dKY,21275
62
- klaude_code/core/tool/sub_agent_tool.py,sha256=L83NtoWnrs-QwQ9qdgqcQatGeU2-QANJXqm72SXYuP0,2759
62
+ klaude_code/core/tool/sub_agent_tool.py,sha256=CpQAG9P6ovtDBaQ_khXNoIfGerbHJVL7UnNRtcqtX5c,2763
63
63
  klaude_code/core/tool/todo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
64
  klaude_code/core/tool/todo/todo_write_tool.md,sha256=AJ2OkZGcccQYDXkydPAr5JI2SExBF8qJd0rXsHySLps,9711
65
65
  klaude_code/core/tool/todo/todo_write_tool.py,sha256=LPCAq_GiG3fPWvVkidl-gITCWSGXLUsyYi0fdUCTv2g,4552
66
66
  klaude_code/core/tool/todo/update_plan_tool.md,sha256=OoEF4voHHd5J3VDv7tq3UCHdXApkBvxdHXUf5tVOkE8,157
67
67
  klaude_code/core/tool/todo/update_plan_tool.py,sha256=4l8BO_f0ZZTbI8JNL9mIU_lPo1Qo7E1s93Kz9CR2DuA,3840
68
68
  klaude_code/core/tool/tool_abc.py,sha256=3FlVZ8a6hC-_Ci23_cpLaap9nHinHgxSB1TsZL5ylUQ,731
69
- klaude_code/core/tool/tool_context.py,sha256=ugXcqd9kSstQ7aSaVhbhc9u6W1eu9b2yKgihiEqFA4w,3745
70
- klaude_code/core/tool/tool_registry.py,sha256=o2iO7elnjVo4FA1AWiRyDp1M67qK2MwDRWVQQQzZY-s,2555
71
- klaude_code/core/tool/tool_runner.py,sha256=gRtJDA6EGlzu11LutMOVRl5RqioE1N8lPs8loEeAaN4,10255
69
+ klaude_code/core/tool/tool_context.py,sha256=vCA3oYN_YHnINoxejsdEUfM2QxlbXRaJ3D9_udc-8wk,3749
70
+ klaude_code/core/tool/tool_registry.py,sha256=lauvxFgGhgpLeH9QkF0XJVvlyVdnwRChvU0v_-0grf8,2559
71
+ klaude_code/core/tool/tool_runner.py,sha256=IyVjMnGVMAjs8bJuCMBfFE1eQ39FSjnOz3Wb5HHQ0T4,10259
72
72
  klaude_code/core/tool/truncation.py,sha256=V_p4rW3msyJgw_QSgLCx74KyuCC0_eEI0-R7jTfPM-8,6439
73
73
  klaude_code/core/tool/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
74
  klaude_code/core/tool/web/mermaid_tool.md,sha256=Ketpxpr7lz8238p5Q7ZzcyWchWd4dU68u708-dxaZds,978
75
- klaude_code/core/tool/web/mermaid_tool.py,sha256=4QqQN98Myr6sW_cdJf5LTBRzI6u1hP3OfURM_JI3gLo,2750
75
+ klaude_code/core/tool/web/mermaid_tool.py,sha256=GUwWcrakSZH_Jp61Q_i5TvwQj6sWMrIW0ZbNpJ0dVtE,2750
76
76
  klaude_code/core/tool/web/web_fetch_tool.md,sha256=_5U-LSoI86rD26nPb0D5BQCr6hj8eyF0UELSiyLznCA,347
77
77
  klaude_code/core/tool/web/web_fetch_tool.py,sha256=iu6kM_-90K8mqHbK9Loui96vICV7d8rmtss68rcFqw0,4958
78
78
  klaude_code/core/turn.py,sha256=_Jx0huYlUXXTvgEIo_LFisJnFYssdyZePELSw7d_vHg,8391
79
- klaude_code/llm/__init__.py,sha256=612WvATVfn9PARcoEW3AGYfCL2TWGn8yN_6I_cUA298,581
79
+ klaude_code/llm/__init__.py,sha256=iHO9DXKO3z-8CRuwKbSgyaWyRUVAcwFKN2eO68Ud6Ms,544
80
80
  klaude_code/llm/anthropic/__init__.py,sha256=PWETvaeNAAX3ue0ww1uRUIxTJG0RpWiutkn7MlwKxBs,67
81
- klaude_code/llm/anthropic/client.py,sha256=2zPSq6rvvGUva4_OvKNrkUrfN_bT_-o4yfzhoI4imYk,11046
81
+ klaude_code/llm/anthropic/client.py,sha256=yEsp3JSVj-18y-UiYT6zQUMRg8PYJ-Ao3bSPSBiJSJM,11166
82
82
  klaude_code/llm/anthropic/input.py,sha256=I8W7declzxRhIvidsTGy2NIuAXIu0UE2Nr5a4fhnhQc,7361
83
83
  klaude_code/llm/client.py,sha256=Un5LA5Z622JQ1MYEfJi7gXj3ycX3ce0WvYPcOogM32Y,1527
84
84
  klaude_code/llm/input_common.py,sha256=yLn-g9T_lC3AnPPilFwlKEA2-vnIgyOKlHFBYB00jm8,8972
85
- klaude_code/llm/metadata_tracker.py,sha256=L-_awI5m1GXFc3MzYlpZoYBYVJzx-mrTasmz41-Dvoo,2263
86
85
  klaude_code/llm/openai_compatible/__init__.py,sha256=ACGpnki7k53mMcCl591aw99pm9jZOZk0ghr7atOfNps,81
87
- klaude_code/llm/openai_compatible/client.py,sha256=KPtR5fnRcpxKM1R_W6iLJOScXk1Y2fdU80OG1WHGbAk,9934
86
+ klaude_code/llm/openai_compatible/client.py,sha256=LqwkmKZdgDJq8_zlwsb35-QRhunP-ec0VFKMr-SM_uk,9215
88
87
  klaude_code/llm/openai_compatible/input.py,sha256=INn9sSYngS6C9584y_HZTWeYPhgU8Q6FYMZWzhH4iyA,3610
89
- klaude_code/llm/openai_compatible/tool_call_accumulator.py,sha256=30Ct67-1tqJgCL3erYIODP-3KFKSKbC40whU1F1i7Hk,4055
88
+ klaude_code/llm/openai_compatible/tool_call_accumulator.py,sha256=kuw3ceDgenQz2Ccc9KYqBkDo6F1sDb5Aga6m41AIECA,4071
90
89
  klaude_code/llm/openrouter/__init__.py,sha256=_As8lHjwj6vapQhLorZttTpukk5ZiCdhFdGT38_ASPo,69
91
- klaude_code/llm/openrouter/client.py,sha256=LbJ7onBUWWa4Yuv9msEY0zmsIRPSoKeuJdxUaH3V_TE,9820
92
- klaude_code/llm/openrouter/input.py,sha256=IgTwp_O2lvWqKWdl-hrr-pFoJ-KaMgGm_sgc6ggVSdI,5751
90
+ klaude_code/llm/openrouter/client.py,sha256=oq8VPmehAdSK9wsnKCNDRmkicEbeZ4sjy7bPfuWBNPc,9101
91
+ klaude_code/llm/openrouter/input.py,sha256=7FEKVFmLEyMqXPmg09M3lUKHJsDvIW5yofXg_til4lI,5921
93
92
  klaude_code/llm/openrouter/reasoning_handler.py,sha256=TYIHdwMopi8DVqOpeN3vpyp-GcWOZgTeRnT5QvlK70U,8100
94
- klaude_code/llm/registry.py,sha256=0Z_GnWs4DcveU2O4J8nSvqVosN0DWSjSHtoZ6GU3cNg,3116
93
+ klaude_code/llm/registry.py,sha256=KBKSelBLlGooInpzfVztN6OZqqfc0WzmB-cT8lE5fw8,686
95
94
  klaude_code/llm/responses/__init__.py,sha256=WsiyvnNiIytaYcaAqNiB8GI-5zcpjjeODPbMlteeFjA,67
96
- klaude_code/llm/responses/client.py,sha256=tsyt0kGQwukvMZaBXT8S75Recr2s0aSxWcCwDJHW-8o,10545
95
+ klaude_code/llm/responses/client.py,sha256=laNTjJ7WJ8hooqZ55XPfAkrurKKryMJTx4xz0AzG_6g,10663
97
96
  klaude_code/llm/responses/input.py,sha256=NtJhWyzg6XzHKuplgvta0ubzqA1u33gfgjL7X6xNeIw,6011
97
+ klaude_code/llm/usage.py,sha256=zDW47J-sxHhRJqDZihXeW2eyxpZS6F39qLsB8K0cua0,4240
98
98
  klaude_code/protocol/__init__.py,sha256=aGUgzhYqvhuT3Mk2vj7lrHGriH4h9TSbqV1RsRFAZjQ,194
99
- klaude_code/protocol/commands.py,sha256=O1miI3GyCTLG_u3wS4CtQsmztP-nlGrjyO-k4ADYHH0,522
99
+ klaude_code/protocol/commands.py,sha256=zoqyBSpFZI8q8LP3rlr1mR-ekCufx-DfPGbzqsgx7X8,544
100
100
  klaude_code/protocol/events.py,sha256=Pw8lY7rJLwk-FjKWtX8C_-Op7p0KWLaI-PH1_U7Uoyg,3290
101
- klaude_code/protocol/llm_param.py,sha256=Bbm9pxQ54AUHhlySpKz868-LoepDb-h8bVv1bxOPmLM,3891
102
- klaude_code/protocol/model.py,sha256=gyvYcPLbVhZ51gBYTK4S9FlIiRrbt5o65QzpQG4jddw,6308
103
- klaude_code/protocol/op.py,sha256=sETYOuNkC9VewldX5oui6yDg34TupATDTwrQGsS14hI,2627
104
- klaude_code/protocol/tools.py,sha256=ygaLUdpF_sBQJi4vpFKh5zxXdAYEI-Q8lWBzYIjDL9w,350
101
+ klaude_code/protocol/llm_param.py,sha256=8_B8e83iPQs62CyVicTKlEKWBoOmRMlOOWkKBK__R58,4337
102
+ klaude_code/protocol/model.py,sha256=op7xqxF8S8L1xwtI4-DWnZgUVW-9q0OUlTc_-suzuY8,7755
103
+ klaude_code/protocol/op.py,sha256=rkPvDRsOgPyibMI1n0pDO7ghFWJBfDGas9BnACtmfO4,2654
104
+ klaude_code/protocol/op_handler.py,sha256=_lnv3-RxKkrTfGTNBlQ23gbHJBEtMLC8O48SYWDtPjE,843
105
+ klaude_code/protocol/sub_agent.py,sha256=rD4nDX3jBp1HIseQTjd83I4VJ_fFcJ9NzkKCWO6JGsk,13351
106
+ klaude_code/protocol/tools.py,sha256=hkjVirnQqGTJS46IWvVKXWR4usPPUgDZDnm34LzAVSc,348
105
107
  klaude_code/session/__init__.py,sha256=oXcDA5w-gJCbzmlF8yuWy3ezIW9DgFBNUs-gJHUJ-Rc,121
106
- klaude_code/session/export.py,sha256=BQTZ8v-WZm30h15z8_nEGFkqGEgDhZ_OM415TDCIkHI,20597
108
+ klaude_code/session/export.py,sha256=NDUZwjV6niQcZk2H4IRv9REviDGmw8ZmvGqko6TTjbA,23675
107
109
  klaude_code/session/selector.py,sha256=HTboyzih7V8zbZoSsArJ-GVC1EnXTGocHJwFmZfbeSg,2567
108
- klaude_code/session/session.py,sha256=9K511qvl-GC5yXmLs5YOIGCYYz0OGf5FJ1fEjK3Lp5M,19184
109
- klaude_code/session/templates/export_session.html,sha256=xtf6gSuou8DOuIM7hieNMmbm_0ReNaQYfXZS0VVrnXY,30222
110
+ klaude_code/session/session.py,sha256=KLE3QUNvt8d7Zu_Mj2x6rdHygzsUtLsvMzQbsiIOrKg,19195
111
+ klaude_code/session/templates/export_session.html,sha256=obRJtqmGEkSu2urixX4AeYlPTSEr9788omU---3PvkU,40850
110
112
  klaude_code/trace/__init__.py,sha256=B-S4qdCj8W88AaC_gVmhTaejH6eLYClBVh2Q6aGAVBk,184
111
113
  klaude_code/trace/log.py,sha256=0K0uek2KWq0zkUZijcO-TBM6STLe-h_8IIW0lx7V7ZA,4865
112
- klaude_code/ui/__init__.py,sha256=dTKc_a5Mo0DHmnU9BevlbvYQl5A5lKsg22q48PhUd-I,2659
114
+ klaude_code/ui/__init__.py,sha256=AL1Ro0u8ObNPMj4sci_U4zakG7IpnI3bie-C63E2QPI,2873
113
115
  klaude_code/ui/core/__init__.py,sha256=2NakrTDcxem5D0atyEY_Rxv1BbKCeZweF63L6AAq6r8,23
114
116
  klaude_code/ui/core/display.py,sha256=NwFQ9oKi8i3T5EsYDRrTpGBr3BZI0Ggns37JuQEOH54,3540
115
117
  klaude_code/ui/core/input.py,sha256=jyu2wJWvZT7t-icoa1oLO5jfr4WLZ8TReYUwGR15ha0,2571
@@ -118,32 +120,32 @@ klaude_code/ui/modes/__init__.py,sha256=ByDPbyYYU4o5kdnEes3b1VEV173RI9XAXyzkFbrA
118
120
  klaude_code/ui/modes/debug/__init__.py,sha256=1-1tAk7FtENdYzExSttYdHiJ-qH3DIQ5yYJ51ms2uSg,13
119
121
  klaude_code/ui/modes/debug/display.py,sha256=11I-JN9OEz2zBIqhEXctSUaDO1Z0nT_cG8R78jIBftk,1067
120
122
  klaude_code/ui/modes/exec/__init__.py,sha256=RsYa-DmDJj6g7iXb4H9mm2_Cu-KDQOD10RJd3yhVf_k,12
121
- klaude_code/ui/modes/exec/display.py,sha256=6amPuyjLcZ6O7igv9fLwfddgwqoDHA3zq0K6qgxZG2Q,1201
123
+ klaude_code/ui/modes/exec/display.py,sha256=m2kkgaUoGD9rEVUmcm7Vs_PyAI2iruKCJYRhANjSsKo,1965
122
124
  klaude_code/ui/modes/repl/__init__.py,sha256=WlSaybzk2M3Dngf8mJZWr5vx-yJpeph7lTb5Nm9fMRo,1635
123
125
  klaude_code/ui/modes/repl/clipboard.py,sha256=_WVLgv-4mprERmcw7iRYTunrSUU51-oojp_hFCM3gVk,5117
124
126
  klaude_code/ui/modes/repl/completers.py,sha256=-cuExsWHKLrao0Rz04AF4Th4M5b7PjmyE-5TzN_b0c0,16796
125
127
  klaude_code/ui/modes/repl/display.py,sha256=v-Jxe7MWpOCEsx9FFEzqKaIg0jLS7ZU9bevooBjxxEQ,2242
126
- klaude_code/ui/modes/repl/event_handler.py,sha256=iRAoquknnGeJ4gjPYNsX6IRt1WJ9Bdy8473kCE-ZtIY,15953
128
+ klaude_code/ui/modes/repl/event_handler.py,sha256=hgneJ_s5OvJTo7417pbNNRmA0uxOPgHbDaJbszrY5-c,16107
127
129
  klaude_code/ui/modes/repl/input_prompt_toolkit.py,sha256=wwXTQ_ZP70y_SgIQenttY82aBZDsRYhxerEqm46gpOM,7592
128
130
  klaude_code/ui/modes/repl/key_bindings.py,sha256=Px-QdRHkzvb2fDGg5d3JHic5ieiGiPcXorPJ5bAM8dI,7801
129
131
  klaude_code/ui/modes/repl/renderer.py,sha256=o1QubSm9lej-bVZ1G3ie-5qRxgPMDUo42kC9dTZRkvU,11893
130
132
  klaude_code/ui/renderers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
133
  klaude_code/ui/renderers/assistant.py,sha256=Dxy6v4pX28RyWhnrjBteY8_NvDIi_jQa-j0mWt-eqWY,569
132
134
  klaude_code/ui/renderers/common.py,sha256=TPH7LCbeJGqB8ArTsVitqJHEyOxHU6nwnRtvF04nLJ4,184
133
- klaude_code/ui/renderers/developer.py,sha256=4XaxqLy4DLTikgA8EoseURxhBn8tuoJYNFBubnZ60qs,3914
135
+ klaude_code/ui/renderers/developer.py,sha256=-pyy3Fj3M-Agsv3YsqGa6mMru1IoEQa40n6YkLJ4fqs,6019
134
136
  klaude_code/ui/renderers/diffs.py,sha256=P--aLjvZy4z77FDx6uM9LlIYVjYlyZwj0MncdJTO2AA,7691
135
137
  klaude_code/ui/renderers/errors.py,sha256=c_fbnoNOnvuI3Bb24IujwV8Mpes-qWS_xCWfAcBvg6A,517
136
- klaude_code/ui/renderers/metadata.py,sha256=MhHF_j2QwFR8IX6cLdfXkYhMcL8IE1CQ9gz3oIs4NCs,6225
137
- klaude_code/ui/renderers/sub_agent.py,sha256=lWKOUTz81OhcFlusSkN-g_yI9d02V3HmmL3Q4mREqAA,2682
138
+ klaude_code/ui/renderers/metadata.py,sha256=KSF6z4LHM_eBtaSPTLSIMK7GI-1MU6FUHaT2Hv4z8tk,6985
139
+ klaude_code/ui/renderers/sub_agent.py,sha256=3cyn95pu4IniOJyWW4vfQ-X72iLufQ3LT9CkAQMuF4k,2686
138
140
  klaude_code/ui/renderers/thinking.py,sha256=jzDfvYuwpafndmBMMb6UumGxur9iFi_X0LYIo08eDlw,1179
139
- klaude_code/ui/renderers/tools.py,sha256=Uo9uLqYCAlBtWafhVDsnQgmcO9bj0p0AFolv402c5iw,20418
140
- klaude_code/ui/renderers/user_input.py,sha256=eHfRuWuqCvRsWS44YHhzyMn1L2hL_nB6Lxh7KmhaqiQ,2202
141
+ klaude_code/ui/renderers/tools.py,sha256=0Ekh5p7kwUYCuPfVrU-OAoLptt6Onx_jE9awBfxCm3I,20426
142
+ klaude_code/ui/renderers/user_input.py,sha256=pPjtTBRtG-sJo_ZSSmE7zmQFZFm7xhwP4g1t81e86iI,2074
141
143
  klaude_code/ui/rich/__init__.py,sha256=olvMm2SteyKioOqUJbEoav2TsDr_mtKqkSaifNumjwc,27
142
144
  klaude_code/ui/rich/live.py,sha256=Uid0QAZG7mHb4KrCF8p9c9n1nHLHzW75xSqcLZ4bLWY,2098
143
145
  klaude_code/ui/rich/markdown.py,sha256=hvL0uvMxUBi7II-Jizn9U92mk4flJpEh_xJkxDQhEK8,11425
144
146
  klaude_code/ui/rich/quote.py,sha256=tZcxN73SfDBHF_qk0Jkh9gWBqPBn8VLp9RF36YRdKEM,1123
145
147
  klaude_code/ui/rich/searchable_text.py,sha256=Adr2EFewX1UInypz-vMOUgZP9gk3Zk8_d2utWhV3K90,2452
146
- klaude_code/ui/rich/status.py,sha256=JIhe8pHah3wmGBdb4KLAN5Bi4Mnj6lesDVSnM0naI44,8027
148
+ klaude_code/ui/rich/status.py,sha256=sHTenGYERGiLwnkwdGFjFw9WDbbnMSPTKeEJiSYYNaU,8503
147
149
  klaude_code/ui/rich/theme.py,sha256=4XCP1v1Q7GubUdBaNIuVSLusiIRGffpUS4e6kSwf24g,10046
148
150
  klaude_code/ui/terminal/__init__.py,sha256=33AbEwVH3G-oJSYL3QDlnbjoVj-uH_C0p09Zr71Z7Fw,21
149
151
  klaude_code/ui/terminal/color.py,sha256=M-i09DVlLAhAyhQjfeAi7OipoGi1p_OVkaZxeRfykY0,7135
@@ -154,7 +156,7 @@ klaude_code/ui/utils/__init__.py,sha256=YEsCLjbCPaPza-UXTPUMTJTrc9BmNBUP5CbFWlsh
154
156
  klaude_code/ui/utils/common.py,sha256=xzw-Mgj0agxrf22QxpH7YzVIpkMXIRY6SgXWtLYF0yU,2881
155
157
  klaude_code/ui/utils/debouncer.py,sha256=TFF1z7B7-FxONEigkYohhShDlqo4cOcqydE9zz7JBHc,1270
156
158
  klaude_code/version.py,sha256=QDgEqSFhyTSiABQFQc9VfujMPQcdjgoCaYTQsr94x0Q,4752
157
- klaude_code-1.2.2.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
158
- klaude_code-1.2.2.dist-info/entry_points.txt,sha256=7CWKjolvs6dZiYHpelhA_FRJ-sVDh43eu3iWuOhKc_w,53
159
- klaude_code-1.2.2.dist-info/METADATA,sha256=4_G49Ka_JLaeZy7ak6YLNbsNfaX7dO3sVn2OpE_4sFs,5140
160
- klaude_code-1.2.2.dist-info/RECORD,,
159
+ klaude_code-1.2.4.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
160
+ klaude_code-1.2.4.dist-info/entry_points.txt,sha256=7CWKjolvs6dZiYHpelhA_FRJ-sVDh43eu3iWuOhKc_w,53
161
+ klaude_code-1.2.4.dist-info/METADATA,sha256=O_BGmrEiCeeUj6RdP0wUe-zbPATYRKWa5fx2HJHk9JY,5140
162
+ klaude_code-1.2.4.dist-info/RECORD,,
File without changes