klaude-code 2.8.0__py3-none-any.whl → 2.8.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- klaude_code/cli/main.py +1 -1
- klaude_code/const.py +1 -1
- klaude_code/core/agent_profile.py +1 -1
- klaude_code/core/compaction/compaction.py +4 -6
- klaude_code/core/executor.py +18 -0
- klaude_code/core/tool/file/edit_tool.py +1 -2
- klaude_code/protocol/commands.py +1 -0
- klaude_code/protocol/op.py +14 -0
- klaude_code/protocol/op_handler.py +5 -0
- klaude_code/session/export.py +308 -299
- klaude_code/session/templates/export_session.html +430 -134
- klaude_code/tui/command/__init__.py +3 -0
- klaude_code/tui/command/continue_cmd.py +34 -0
- klaude_code/tui/components/rich/markdown.py +63 -12
- klaude_code/tui/renderer.py +1 -0
- {klaude_code-2.8.0.dist-info → klaude_code-2.8.1.dist-info}/METADATA +1 -1
- {klaude_code-2.8.0.dist-info → klaude_code-2.8.1.dist-info}/RECORD +19 -18
- {klaude_code-2.8.0.dist-info → klaude_code-2.8.1.dist-info}/WHEEL +0 -0
- {klaude_code-2.8.0.dist-info → klaude_code-2.8.1.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from klaude_code.protocol import commands, events, message, op
|
|
2
|
+
|
|
3
|
+
from .command_abc import Agent, CommandABC, CommandResult
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ContinueCommand(CommandABC):
|
|
7
|
+
"""Continue agent execution without adding a new user message."""
|
|
8
|
+
|
|
9
|
+
@property
|
|
10
|
+
def name(self) -> commands.CommandName:
|
|
11
|
+
return commands.CommandName.CONTINUE
|
|
12
|
+
|
|
13
|
+
@property
|
|
14
|
+
def summary(self) -> str:
|
|
15
|
+
return "Continue agent execution (for recovery after interruptions)"
|
|
16
|
+
|
|
17
|
+
async def run(self, agent: Agent, user_input: message.UserInputPayload) -> CommandResult:
|
|
18
|
+
del user_input # unused
|
|
19
|
+
|
|
20
|
+
if agent.session.messages_count == 0:
|
|
21
|
+
return CommandResult(
|
|
22
|
+
events=[
|
|
23
|
+
events.CommandOutputEvent(
|
|
24
|
+
session_id=agent.session.id,
|
|
25
|
+
command_name=self.name,
|
|
26
|
+
content="Cannot continue: no conversation history. Start a conversation first.",
|
|
27
|
+
is_error=True,
|
|
28
|
+
)
|
|
29
|
+
]
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
return CommandResult(
|
|
33
|
+
operations=[op.ContinueAgentOperation(session_id=agent.session.id)],
|
|
34
|
+
)
|
|
@@ -5,6 +5,7 @@ import io
|
|
|
5
5
|
import re
|
|
6
6
|
import time
|
|
7
7
|
from collections.abc import Callable
|
|
8
|
+
from pathlib import Path
|
|
8
9
|
from typing import Any, ClassVar
|
|
9
10
|
|
|
10
11
|
from markdown_it import MarkdownIt
|
|
@@ -12,7 +13,7 @@ from markdown_it.token import Token
|
|
|
12
13
|
from rich import box
|
|
13
14
|
from rich._loop import loop_first
|
|
14
15
|
from rich.console import Console, ConsoleOptions, RenderableType, RenderResult
|
|
15
|
-
from rich.markdown import CodeBlock, Heading, ListItem, Markdown, MarkdownElement, TableElement
|
|
16
|
+
from rich.markdown import CodeBlock, Heading, ImageItem, ListItem, Markdown, MarkdownElement, TableElement
|
|
16
17
|
from rich.rule import Rule
|
|
17
18
|
from rich.segment import Segment
|
|
18
19
|
from rich.style import Style, StyleType
|
|
@@ -207,6 +208,25 @@ class CheckboxListItem(ListItem):
|
|
|
207
208
|
yield new_line
|
|
208
209
|
|
|
209
210
|
|
|
211
|
+
class LocalImageItem(ImageItem):
|
|
212
|
+
"""Image element that collects local file paths for external rendering."""
|
|
213
|
+
|
|
214
|
+
@classmethod
|
|
215
|
+
def create(cls, markdown: Markdown, token: Token) -> MarkdownElement:
|
|
216
|
+
src = str(token.attrs.get("src", ""))
|
|
217
|
+
instance = cls(src, markdown.hyperlinks)
|
|
218
|
+
if src.startswith("/") and Path(src).exists():
|
|
219
|
+
collected = getattr(markdown, "collected_images", None)
|
|
220
|
+
if collected is not None:
|
|
221
|
+
collected.append(src)
|
|
222
|
+
return instance
|
|
223
|
+
|
|
224
|
+
def __rich_console__(self, console: Console, options: ConsoleOptions) -> RenderResult:
|
|
225
|
+
if self.destination.startswith("/") and Path(self.destination).exists():
|
|
226
|
+
return
|
|
227
|
+
yield from super().__rich_console__(console, options)
|
|
228
|
+
|
|
229
|
+
|
|
210
230
|
class NoInsetMarkdown(Markdown):
|
|
211
231
|
"""Markdown with code blocks that have no padding and left-justified headings."""
|
|
212
232
|
|
|
@@ -219,8 +239,13 @@ class NoInsetMarkdown(Markdown):
|
|
|
219
239
|
"table_open": MarkdownTable,
|
|
220
240
|
"html_block": ThinkingHTMLBlock,
|
|
221
241
|
"list_item_open": CheckboxListItem,
|
|
242
|
+
"image": LocalImageItem,
|
|
222
243
|
}
|
|
223
244
|
|
|
245
|
+
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
|
246
|
+
super().__init__(*args, **kwargs)
|
|
247
|
+
self.collected_images: list[str] = []
|
|
248
|
+
|
|
224
249
|
|
|
225
250
|
class ThinkingMarkdown(Markdown):
|
|
226
251
|
"""Markdown for thinking content with grey-styled code blocks and left-justified headings."""
|
|
@@ -234,8 +259,13 @@ class ThinkingMarkdown(Markdown):
|
|
|
234
259
|
"table_open": MarkdownTable,
|
|
235
260
|
"html_block": ThinkingHTMLBlock,
|
|
236
261
|
"list_item_open": CheckboxListItem,
|
|
262
|
+
"image": LocalImageItem,
|
|
237
263
|
}
|
|
238
264
|
|
|
265
|
+
def __init__(self, *args: Any, **kwargs: Any) -> None:
|
|
266
|
+
super().__init__(*args, **kwargs)
|
|
267
|
+
self.collected_images: list[str] = []
|
|
268
|
+
|
|
239
269
|
|
|
240
270
|
class MarkdownStream:
|
|
241
271
|
"""Block-based streaming Markdown renderer.
|
|
@@ -260,6 +290,7 @@ class MarkdownStream:
|
|
|
260
290
|
left_margin: int = 0,
|
|
261
291
|
right_margin: int = MARKDOWN_RIGHT_MARGIN,
|
|
262
292
|
markdown_class: Callable[..., Markdown] | None = None,
|
|
293
|
+
image_callback: Callable[[str], None] | None = None,
|
|
263
294
|
) -> None:
|
|
264
295
|
"""Initialize the markdown stream.
|
|
265
296
|
|
|
@@ -272,6 +303,7 @@ class MarkdownStream:
|
|
|
272
303
|
left_margin (int, optional): Number of columns to reserve on the left side
|
|
273
304
|
right_margin (int, optional): Number of columns to reserve on the right side
|
|
274
305
|
markdown_class: Markdown class to use for rendering (defaults to NoInsetMarkdown)
|
|
306
|
+
image_callback: Callback to display local images (called with file path)
|
|
275
307
|
"""
|
|
276
308
|
self._stable_rendered_lines: list[str] = []
|
|
277
309
|
self._stable_source_line_count: int = 0
|
|
@@ -282,6 +314,8 @@ class MarkdownStream:
|
|
|
282
314
|
self.mdargs = {}
|
|
283
315
|
|
|
284
316
|
self._live_sink = live_sink
|
|
317
|
+
self._image_callback = image_callback
|
|
318
|
+
self._displayed_images: set[str] = set()
|
|
285
319
|
|
|
286
320
|
# Streaming control
|
|
287
321
|
self.when: float = 0.0 # Timestamp of last update
|
|
@@ -421,20 +455,24 @@ class MarkdownStream:
|
|
|
421
455
|
|
|
422
456
|
This is primarily intended for internal debugging and tests.
|
|
423
457
|
"""
|
|
458
|
+
lines, _ = self._render_markdown_to_lines(text, apply_mark=apply_mark)
|
|
459
|
+
return "".join(lines)
|
|
424
460
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
def render_stable_ansi(self, stable_source: str, *, has_live_suffix: bool, final: bool) -> str:
|
|
428
|
-
"""Render stable prefix to ANSI, preserving inter-block spacing."""
|
|
461
|
+
def render_stable_ansi(self, stable_source: str, *, has_live_suffix: bool, final: bool) -> tuple[str, list[str]]:
|
|
462
|
+
"""Render stable prefix to ANSI, preserving inter-block spacing.
|
|
429
463
|
|
|
464
|
+
Returns:
|
|
465
|
+
tuple: (ANSI string, collected local image paths)
|
|
466
|
+
"""
|
|
430
467
|
if not stable_source:
|
|
431
|
-
return ""
|
|
468
|
+
return "", []
|
|
432
469
|
|
|
433
470
|
render_source = stable_source
|
|
434
471
|
if not final and has_live_suffix:
|
|
435
472
|
render_source = self._append_nonfinal_sentinel(stable_source)
|
|
436
473
|
|
|
437
|
-
|
|
474
|
+
lines, images = self._render_markdown_to_lines(render_source, apply_mark=True)
|
|
475
|
+
return "".join(lines), images
|
|
438
476
|
|
|
439
477
|
@staticmethod
|
|
440
478
|
def normalize_live_ansi_for_boundary(*, stable_ansi: str, live_ansi: str) -> str:
|
|
@@ -497,14 +535,14 @@ class MarkdownStream:
|
|
|
497
535
|
return stable_source + "\n<!-- -->"
|
|
498
536
|
return stable_source + "\n\n<!-- -->"
|
|
499
537
|
|
|
500
|
-
def _render_markdown_to_lines(self, text: str, *, apply_mark: bool) -> list[str]:
|
|
538
|
+
def _render_markdown_to_lines(self, text: str, *, apply_mark: bool) -> tuple[list[str], list[str]]:
|
|
501
539
|
"""Render markdown text to a list of lines.
|
|
502
540
|
|
|
503
541
|
Args:
|
|
504
542
|
text (str): Markdown text to render
|
|
505
543
|
|
|
506
544
|
Returns:
|
|
507
|
-
|
|
545
|
+
tuple: (lines with line endings preserved, collected local image paths)
|
|
508
546
|
"""
|
|
509
547
|
# Render the markdown to a string buffer
|
|
510
548
|
string_io = io.StringIO()
|
|
@@ -526,6 +564,8 @@ class MarkdownStream:
|
|
|
526
564
|
temp_console.print(markdown)
|
|
527
565
|
output = string_io.getvalue()
|
|
528
566
|
|
|
567
|
+
collected_images = getattr(markdown, "collected_images", [])
|
|
568
|
+
|
|
529
569
|
# Split rendered output into lines, strip trailing spaces, and apply left margin.
|
|
530
570
|
lines = output.splitlines(keepends=True)
|
|
531
571
|
indent_prefix = " " * self.left_margin if self.left_margin > 0 else ""
|
|
@@ -559,7 +599,7 @@ class MarkdownStream:
|
|
|
559
599
|
stripped += "\n"
|
|
560
600
|
processed_lines.append(stripped)
|
|
561
601
|
|
|
562
|
-
return processed_lines
|
|
602
|
+
return processed_lines, list(collected_images)
|
|
563
603
|
|
|
564
604
|
def __del__(self) -> None:
|
|
565
605
|
"""Destructor to ensure Live display is properly cleaned up."""
|
|
@@ -587,15 +627,22 @@ class MarkdownStream:
|
|
|
587
627
|
start = time.time()
|
|
588
628
|
|
|
589
629
|
stable_chunk_to_print: str | None = None
|
|
630
|
+
new_images: list[str] = []
|
|
590
631
|
stable_changed = final or stable_line > self._stable_source_line_count
|
|
591
632
|
if stable_changed and stable_source:
|
|
592
|
-
stable_ansi = self.render_stable_ansi(
|
|
633
|
+
stable_ansi, collected_images = self.render_stable_ansi(
|
|
634
|
+
stable_source, has_live_suffix=bool(live_source), final=final
|
|
635
|
+
)
|
|
593
636
|
stable_lines = stable_ansi.splitlines(keepends=True)
|
|
594
637
|
new_lines = stable_lines[len(self._stable_rendered_lines) :]
|
|
595
638
|
if new_lines:
|
|
596
639
|
stable_chunk_to_print = "".join(new_lines)
|
|
597
640
|
self._stable_rendered_lines = stable_lines
|
|
598
641
|
self._stable_source_line_count = stable_line
|
|
642
|
+
for img in collected_images:
|
|
643
|
+
if img not in self._displayed_images:
|
|
644
|
+
new_images.append(img)
|
|
645
|
+
self._displayed_images.add(img)
|
|
599
646
|
elif final and not stable_source:
|
|
600
647
|
self._stable_rendered_lines = []
|
|
601
648
|
self._stable_source_line_count = stable_line
|
|
@@ -603,7 +650,7 @@ class MarkdownStream:
|
|
|
603
650
|
live_text_to_set: Text | None = None
|
|
604
651
|
if not final and MARKDOWN_STREAM_LIVE_REPAINT_ENABLED and self._live_sink is not None:
|
|
605
652
|
apply_mark_live = self._stable_source_line_count == 0
|
|
606
|
-
live_lines = self._render_markdown_to_lines(live_source, apply_mark=apply_mark_live)
|
|
653
|
+
live_lines, _ = self._render_markdown_to_lines(live_source, apply_mark=apply_mark_live)
|
|
607
654
|
|
|
608
655
|
if self._stable_rendered_lines:
|
|
609
656
|
stable_trailing_blank = 0
|
|
@@ -629,6 +676,10 @@ class MarkdownStream:
|
|
|
629
676
|
if stable_chunk_to_print:
|
|
630
677
|
self.console.print(Text.from_ansi(stable_chunk_to_print), end="\n")
|
|
631
678
|
|
|
679
|
+
if new_images and self._image_callback:
|
|
680
|
+
for img_path in new_images:
|
|
681
|
+
self._image_callback(img_path)
|
|
682
|
+
|
|
632
683
|
if final:
|
|
633
684
|
if self._live_sink is not None:
|
|
634
685
|
self._live_sink(None)
|
klaude_code/tui/renderer.py
CHANGED
|
@@ -26,7 +26,7 @@ klaude_code/cli/config_cmd.py,sha256=7BmZpKeiO24mKKLKGO46WvSQzSaNwuZ3KtCV4GH-Yh0
|
|
|
26
26
|
klaude_code/cli/cost_cmd.py,sha256=yW_niFZtCnBfFXkCWkxYDB07CIMZbirQXgjj3soljkw,13474
|
|
27
27
|
klaude_code/cli/debug.py,sha256=vEHOjObhrIHDAXk3q6cOgeW2NZxCx5AWM1rJ6FiJnVU,1901
|
|
28
28
|
klaude_code/cli/list_model.py,sha256=G1_vW7uZDos9j-77INHPRh_rq4o5KkcrxZZ_VUwUtpo,15494
|
|
29
|
-
klaude_code/cli/main.py,sha256=
|
|
29
|
+
klaude_code/cli/main.py,sha256=nJcLwTyf8ITC2z-orKnvfTzmApPdA8mt_gdwOfl2YfE,12225
|
|
30
30
|
klaude_code/cli/self_update.py,sha256=1xdG9ifvRZQDSx6RAtSSgXmw9hZNXMLvqC2zu4bS-GY,2622
|
|
31
31
|
klaude_code/config/__init__.py,sha256=Qe1BeMekBfO2-Zd30x33lB70hdM1QQZGrp4DbWSQ-II,353
|
|
32
32
|
klaude_code/config/assets/__init__.py,sha256=uMUfmXT3I-gYiI-HVr1DrE60mx5cY1o8V7SYuGqOmvY,32
|
|
@@ -36,16 +36,16 @@ klaude_code/config/config.py,sha256=adJCE1j231fjzJYRZw1CGW-ACbOLWjWM6MUrCum6_6E,
|
|
|
36
36
|
klaude_code/config/model_matcher.py,sha256=3IlLU5h3NDh_bURbCW-PV027C3irG3hyitwj1cj99Ig,6179
|
|
37
37
|
klaude_code/config/sub_agent_model_helper.py,sha256=fI-OIZWFI4116qjalsZj2pIi0waPR1cXE-OKrVMFS6g,8064
|
|
38
38
|
klaude_code/config/thinking.py,sha256=RDWH8UYbeDoIKPXaCIcvVwPAh07Ntaq8w5Zn_fhm-Fk,9329
|
|
39
|
-
klaude_code/const.py,sha256=
|
|
39
|
+
klaude_code/const.py,sha256=eEjkrib5qP2KgIO_Fff4YwE-9SD4fBUXVi5pNSUh8vo,11527
|
|
40
40
|
klaude_code/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
41
|
klaude_code/core/agent.py,sha256=GrIg22nfoq1c90UHyEfU_bh46vtXTCo4bLezb-3mGNo,4120
|
|
42
|
-
klaude_code/core/agent_profile.py,sha256=
|
|
42
|
+
klaude_code/core/agent_profile.py,sha256=HG9wNnxChBvaJ9gwcjMF8w-_MS2jgRJKQMumMfu0AvM,13031
|
|
43
43
|
klaude_code/core/compaction/AGENTS.md,sha256=KZR5lxe4jVAbT5K9PxbZcHWI1UwsppbGmxIfCdHYr7Q,3684
|
|
44
44
|
klaude_code/core/compaction/__init__.py,sha256=CvidYx3sX0IZAa4pifX9jrQSkg4Nib7PKrcaOHswF60,329
|
|
45
|
-
klaude_code/core/compaction/compaction.py,sha256=
|
|
45
|
+
klaude_code/core/compaction/compaction.py,sha256=IEKA2mmiOyQq5ryJKBcNcIDQ51AuTD5ewVc8qmUoMoQ,25032
|
|
46
46
|
klaude_code/core/compaction/overflow.py,sha256=uNqTy8ZITl_oaNlU2wgAN663zeoBC5BI6W5kPS1rSJc,1244
|
|
47
47
|
klaude_code/core/compaction/prompts.py,sha256=GgwbMi9fkCF4eHScoHe7hykzNT_L160nRdgmQn9-MYU,3191
|
|
48
|
-
klaude_code/core/executor.py,sha256=
|
|
48
|
+
klaude_code/core/executor.py,sha256=TRiSilv7h4fIUfMqP0TA2TDDcSx0kfHgUwAYlZti2m0,38435
|
|
49
49
|
klaude_code/core/loaded_skills.py,sha256=5lxPzXx2uf9mNxwEu_Jt3qRoATa2jaMvFjBfWhgbaSk,1177
|
|
50
50
|
klaude_code/core/manager/__init__.py,sha256=hdIbpnYj6i18byiWjtJIm5l7NYYDQMvafw8fePVPydc,562
|
|
51
51
|
klaude_code/core/manager/llm_clients.py,sha256=8v56JOXHye1CshKSEtUwPt9ndJuKaPU7zGCM9dDzpy4,1077
|
|
@@ -73,7 +73,7 @@ klaude_code/core/tool/file/apply_patch_tool.md,sha256=KVDsjUiLDa97gym0NrZNVG4jA1
|
|
|
73
73
|
klaude_code/core/tool/file/apply_patch_tool.py,sha256=t7zNZW2wYpDyHutxq7nx_xSs7GbPx8UymveSR25F2-8,8079
|
|
74
74
|
klaude_code/core/tool/file/diff_builder.py,sha256=IH5Ws8LvcU66DnPfI40m_qfDyjN3mH4C1LVjC9eKYJQ,6044
|
|
75
75
|
klaude_code/core/tool/file/edit_tool.md,sha256=rEcUjJuPC46t1nXWjTDxplDcxWDbzTWsr6_bYt5_aRI,1110
|
|
76
|
-
klaude_code/core/tool/file/edit_tool.py,sha256=
|
|
76
|
+
klaude_code/core/tool/file/edit_tool.py,sha256=x5NUWeArtAvtbZrj4atrZEjmY73rspEEasUHuHnqnQA,10865
|
|
77
77
|
klaude_code/core/tool/file/read_tool.md,sha256=74SLSl1tq3L0por73M0QV_ws41MRIvGXQpfLb8dmtp0,1351
|
|
78
78
|
klaude_code/core/tool/file/read_tool.py,sha256=wne_aibWnsCpVc9xFYYPlPIDKCtVeTaqHCMaMhpoLwc,13236
|
|
79
79
|
klaude_code/core/tool/file/write_tool.md,sha256=CNnYgtieUasuHdpXLDpTEsqe492Pf7v75M4RQ3oIer8,613
|
|
@@ -139,13 +139,13 @@ klaude_code/llm/stream_parts.py,sha256=kU40BaWyiKOqzrIwF0_IwogWgKRRqVEt-6MvwMi5J
|
|
|
139
139
|
klaude_code/llm/usage.py,sha256=L6w-DlZ3oF8lOR_SEudPBM9idzIy7__f5FZ4ZJ2smi8,5957
|
|
140
140
|
klaude_code/log.py,sha256=i9iVCmp4dxqxqH_7XPMVjZt8umiH1KPhRbX4Ao93mSM,11382
|
|
141
141
|
klaude_code/protocol/__init__.py,sha256=TTPnuyQ22RypoTGKdoiS7ZEgHzinuaRHUrauzHDh7Xo,246
|
|
142
|
-
klaude_code/protocol/commands.py,sha256=
|
|
142
|
+
klaude_code/protocol/commands.py,sha256=sy6z48I3q8HHL91bqou9n0TZZ91P34pVmtNHqcHArBo,759
|
|
143
143
|
klaude_code/protocol/events.py,sha256=g1yrbv83NEcmBFFk1mvdeB4DSzuqxXb_VXXyzWCVNgY,4860
|
|
144
144
|
klaude_code/protocol/llm_param.py,sha256=MzKiZBKK_uTvJsmbaXJd7EEmQ9dedLEtVsSJUn2jbjg,5223
|
|
145
145
|
klaude_code/protocol/message.py,sha256=bq3cxbZ8Vk5e2mE1NQ-7fvdnOTDCauiT0Pl7FPyCJoc,6958
|
|
146
146
|
klaude_code/protocol/model.py,sha256=KboyTyfG5DntRMK98oDHomgJfUpHBdeiq51dWXRSqeM,9923
|
|
147
|
-
klaude_code/protocol/op.py,sha256=
|
|
148
|
-
klaude_code/protocol/op_handler.py,sha256=
|
|
147
|
+
klaude_code/protocol/op.py,sha256=vS7XWB_P1Y6DqLt9F0Fh0o7RdEDALsxDGMSZ9zbMwxY,6875
|
|
148
|
+
klaude_code/protocol/op_handler.py,sha256=wA8RMmbB4dWR_fiQiQ8nyAIfIewWy-RjnPeO53t80gE,2374
|
|
149
149
|
klaude_code/protocol/sub_agent/AGENTS.md,sha256=DHeHl11PYprTOQxInENCEnwnh3kIztBLjvETkwWAO08,1299
|
|
150
150
|
klaude_code/protocol/sub_agent/__init__.py,sha256=RKPFJawd0AB7nRYBxdwuG-14D8pT6HF1-DPCTAxwohI,3784
|
|
151
151
|
klaude_code/protocol/sub_agent/explore.py,sha256=f3fHTyxVeEH4vxJtEts0FbZhdrhOR-_x94QMfNicuUI,1859
|
|
@@ -155,11 +155,11 @@ klaude_code/protocol/sub_agent/web.py,sha256=XOQdqlIp_xno7Q7YVFPFo4AyKU1wbrVKhIi
|
|
|
155
155
|
klaude_code/protocol/tools.py,sha256=T0mzW9EhidVMNkwH-KTeB5FgwMvXBnV_MYE5ytrU1TM,343
|
|
156
156
|
klaude_code/session/__init__.py,sha256=4sw81uQvEd3YUOOjamKk1KqGmxeb4Ic9T1Tee5zztyU,241
|
|
157
157
|
klaude_code/session/codec.py,sha256=a374UZkOusn9MgFCc--yznDljK_4Qfy6yDPfhQq5_P0,1889
|
|
158
|
-
klaude_code/session/export.py,sha256=
|
|
158
|
+
klaude_code/session/export.py,sha256=EQZD8R7w3dnLpJjC6WP5yf7X6mAdjOkmwm1bMw7nftM,44922
|
|
159
159
|
klaude_code/session/selector.py,sha256=snBpnz9UQCe_0K8HttSGCJECCE4YEzpWs_Fdmk2P9nI,2195
|
|
160
160
|
klaude_code/session/session.py,sha256=QloQWxCt9ptSoOwTGNl055rkbBQFoEs1O_-l0OtnYFo,26913
|
|
161
161
|
klaude_code/session/store.py,sha256=HRrmFzwEVdExqDQlT9FBZOhlFtQmM9Im9zco8pzvUMY,6455
|
|
162
|
-
klaude_code/session/templates/export_session.html,sha256=
|
|
162
|
+
klaude_code/session/templates/export_session.html,sha256=ekRt1zGePqT2lOYSPgdNlDjsOemM2r7FVB6X8nBrC00,137452
|
|
163
163
|
klaude_code/session/templates/mermaid_viewer.html,sha256=Y_wEWFm4mKWpfAz3YMis5DdLEkhw_2d8CpU6jbvGZow,27842
|
|
164
164
|
klaude_code/skill/.DS_Store,sha256=zy9qIqi2YLGzlZwHNM4oAX8rDoNTg9yxdo22PJOwupg,6148
|
|
165
165
|
klaude_code/skill/__init__.py,sha256=yeWeCfRGPOhT4mx_pjdo4fLondQ_Vx0edBtnFusLhls,839
|
|
@@ -172,10 +172,11 @@ klaude_code/skill/loader.py,sha256=g3MNDBq4B4_hf_d1NXf0Zhw3Xu9M2GIiaUZIN6S1ikM,8
|
|
|
172
172
|
klaude_code/skill/manager.py,sha256=6N1sfa0a5a7NgQgj3M_rRO2aj0vecyeBp_kWOZg211c,3452
|
|
173
173
|
klaude_code/skill/system_skills.py,sha256=ryGN07t0Xv2Yn_Prfq072tdIN0Dp4ZpdXLTl7O7rCkg,6122
|
|
174
174
|
klaude_code/tui/__init__.py,sha256=Q8-0D-uesw3oFwHcFLD5UaWlTFbrj8qV7dSn6C6_g_o,274
|
|
175
|
-
klaude_code/tui/command/__init__.py,sha256=
|
|
175
|
+
klaude_code/tui/command/__init__.py,sha256=2s6uu3uEi-vqRYJ5MPe1Ty1synRhT8C_kowgsNH-6hY,3542
|
|
176
176
|
klaude_code/tui/command/clear_cmd.py,sha256=9stN0blD24sME_xvTae0gN1r9caZA7QmLWnxzhTB4iA,744
|
|
177
177
|
klaude_code/tui/command/command_abc.py,sha256=sTzn0LAJguDKPrXK-0wkiadf0jQuAtuXbDMfDZJ4pqk,2438
|
|
178
178
|
klaude_code/tui/command/compact_cmd.py,sha256=lT1ODB1Tdo8Q163_jtUXn_Y5x4-hmZCmQ4E2gwAZNJg,999
|
|
179
|
+
klaude_code/tui/command/continue_cmd.py,sha256=P5FkqXiclEmqB7_Uz_LZSYeuuEsTbUJzsgPgTa9uA-M,1157
|
|
179
180
|
klaude_code/tui/command/copy_cmd.py,sha256=2gjKYTbOspmVotD8FrU7oQgwyNxdcjYP0iLKs6AXcL4,1792
|
|
180
181
|
klaude_code/tui/command/debug_cmd.py,sha256=cXi2ymcsbcJVCKfVKPvtUFPOmgNFEpwG-IcLlnkiyZY,2698
|
|
181
182
|
klaude_code/tui/command/export_cmd.py,sha256=KdFlOMJ6gruKYnd_24eWJJb21t9gLVwI1FnN1s08m5U,1609
|
|
@@ -206,7 +207,7 @@ klaude_code/tui/components/rich/__init__.py,sha256=zEZjnHR3Fnv_sFMxwIMjoJfwDoC4G
|
|
|
206
207
|
klaude_code/tui/components/rich/cjk_wrap.py,sha256=eMqBxftUtll7zrytUb9WtJ6naYLyax0W4KJRpGwWulM,7602
|
|
207
208
|
klaude_code/tui/components/rich/code_panel.py,sha256=ZKuJHh-kh-hIkBXSGLERLaDbJ7I9hvtvmYKocJn39_w,4744
|
|
208
209
|
klaude_code/tui/components/rich/live.py,sha256=xiMT6dPsxM_jaazddKrV9CMJQWwpe2t9OdjffHvo1JU,2821
|
|
209
|
-
klaude_code/tui/components/rich/markdown.py,sha256=
|
|
210
|
+
klaude_code/tui/components/rich/markdown.py,sha256=B3NyV_TQbWDgUnkj7ORqjGtaV0tNqiPN2ctYPpeUoYM,26148
|
|
210
211
|
klaude_code/tui/components/rich/quote.py,sha256=u6sBmGdp0ckaZLw_XgJk7iHW4zxnWikUaB3GX2tkhlM,5375
|
|
211
212
|
klaude_code/tui/components/rich/searchable_text.py,sha256=PUe6MotKxSBY4FlPeojVjVQgxCsx_jiQ41bCzLp8WvE,2271
|
|
212
213
|
klaude_code/tui/components/rich/status.py,sha256=kNt08FQGvMZJB-zUhT5UyVFA7jvuRBNqf6yDXLEhb9c,14756
|
|
@@ -226,7 +227,7 @@ klaude_code/tui/input/key_bindings.py,sha256=rgWC3wlO1MvxFeMmQRxm0s5Y9sChzUDh0c8
|
|
|
226
227
|
klaude_code/tui/input/paste.py,sha256=kELg5jC0WdBXWHJUsEjIhZ67KCvHMbN1XzyGmevVSNM,1888
|
|
227
228
|
klaude_code/tui/input/prompt_toolkit.py,sha256=fYUn_e1IVrbX4xDup9N22T9xwGGaJvH4FnIETKOM54M,29485
|
|
228
229
|
klaude_code/tui/machine.py,sha256=Ue4Ta13zNoVNg3-xrUrEPckNgVbTN8uTfEmJrp3C0RI,28690
|
|
229
|
-
klaude_code/tui/renderer.py,sha256=
|
|
230
|
+
klaude_code/tui/renderer.py,sha256=69DUnx3ovIS2jcBWahQZ56_rqKHLUNOoN_r4pHfB93A,28691
|
|
230
231
|
klaude_code/tui/runner.py,sha256=dOmuWEVT5D0pLCGpdThCkNSE1ohdCgk7EkWdSAbSm5A,11874
|
|
231
232
|
klaude_code/tui/terminal/__init__.py,sha256=GIMnsEcIAGT_vBHvTlWEdyNmAEpruyscUA6M_j3GQZU,1412
|
|
232
233
|
klaude_code/tui/terminal/color.py,sha256=6SJR2RA8cqJINNoRz65w0HL3x9g46ydIvDOGWMeNnQU,7195
|
|
@@ -244,7 +245,7 @@ klaude_code/ui/debug_mode.py,sha256=ZvqbOx4c_rUerMbEZzOfcbNf9leqEDFjqJUlALtzF9Y,
|
|
|
244
245
|
klaude_code/ui/terminal/__init__.py,sha256=5OeAzr994r8-peWsLON0iXsAvJ2pexwMp36JY7FKGDc,179
|
|
245
246
|
klaude_code/ui/terminal/title.py,sha256=EZpLXTMhunsZPVGaxP317lH0Ad2oOh7OsjbV3yRD5is,1115
|
|
246
247
|
klaude_code/update.py,sha256=QER816AZe9u3RhRvP0Z37Jh2Ch5RLy9PREyDsI0e1dA,4480
|
|
247
|
-
klaude_code-2.8.
|
|
248
|
-
klaude_code-2.8.
|
|
249
|
-
klaude_code-2.8.
|
|
250
|
-
klaude_code-2.8.
|
|
248
|
+
klaude_code-2.8.1.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
|
|
249
|
+
klaude_code-2.8.1.dist-info/entry_points.txt,sha256=kkXIXedaTOtjXPr2rVjRVVXZYlFUcBHELaqmyVlWUFA,92
|
|
250
|
+
klaude_code-2.8.1.dist-info/METADATA,sha256=F_UT5mgZDMdRAnDA4uNyCmNFuCxab-pohtk0JoTfvGw,10379
|
|
251
|
+
klaude_code-2.8.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|