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