klaude-code 2.5.0__py3-none-any.whl → 2.5.2__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/list_model.py +8 -0
- klaude_code/cli/main.py +1 -1
- klaude_code/config/assets/builtin_config.yaml +0 -2
- klaude_code/config/config.py +30 -7
- klaude_code/config/model_matcher.py +2 -2
- klaude_code/config/sub_agent_model_helper.py +1 -1
- klaude_code/const.py +1 -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/task.py +1 -0
- klaude_code/core/tool/context.py +1 -3
- klaude_code/core/turn.py +0 -7
- klaude_code/llm/anthropic/client.py +23 -11
- klaude_code/protocol/events/lifecycle.py +1 -0
- klaude_code/protocol/events/streaming.py +0 -1
- 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/refresh_cmd.py +2 -0
- klaude_code/tui/components/metadata.py +6 -6
- klaude_code/tui/components/rich/markdown.py +8 -0
- klaude_code/tui/components/welcome.py +32 -0
- klaude_code/tui/machine.py +29 -18
- klaude_code/tui/renderer.py +0 -1
- {klaude_code-2.5.0.dist-info → klaude_code-2.5.2.dist-info}/METADATA +1 -1
- {klaude_code-2.5.0.dist-info → klaude_code-2.5.2.dist-info}/RECORD +34 -31
- klaude_code/skill/assets/jj-workspace/SKILL.md +0 -20
- {klaude_code-2.5.0.dist-info → klaude_code-2.5.2.dist-info}/WHEEL +0 -0
- {klaude_code-2.5.0.dist-info → klaude_code-2.5.2.dist-info}/entry_points.txt +0 -0
|
@@ -55,15 +55,15 @@ def _render_task_metadata_block(
|
|
|
55
55
|
token_text.append("↑", style=ThemeKey.METADATA_DIM)
|
|
56
56
|
token_text.append(format_number(metadata.usage.input_tokens), style=ThemeKey.METADATA)
|
|
57
57
|
if metadata.usage.cached_tokens > 0:
|
|
58
|
-
token_text.append("
|
|
58
|
+
token_text.append(" ◎", style=ThemeKey.METADATA_DIM)
|
|
59
59
|
token_text.append(format_number(metadata.usage.cached_tokens), style=ThemeKey.METADATA)
|
|
60
|
-
token_text.append("
|
|
60
|
+
token_text.append(" ↓", style=ThemeKey.METADATA_DIM)
|
|
61
61
|
token_text.append(format_number(metadata.usage.output_tokens), style=ThemeKey.METADATA)
|
|
62
62
|
if metadata.usage.reasoning_tokens > 0:
|
|
63
|
-
token_text.append("
|
|
63
|
+
token_text.append(" ∿", style=ThemeKey.METADATA_DIM)
|
|
64
64
|
token_text.append(format_number(metadata.usage.reasoning_tokens), style=ThemeKey.METADATA)
|
|
65
65
|
if metadata.usage.image_tokens > 0:
|
|
66
|
-
token_text.append("
|
|
66
|
+
token_text.append(" ⌗ ", style=ThemeKey.METADATA_DIM)
|
|
67
67
|
token_text.append(format_number(metadata.usage.image_tokens), style=ThemeKey.METADATA)
|
|
68
68
|
parts.append(token_text)
|
|
69
69
|
|
|
@@ -130,8 +130,8 @@ def _render_task_metadata_block(
|
|
|
130
130
|
)
|
|
131
131
|
|
|
132
132
|
if parts:
|
|
133
|
-
content.append_text(Text("
|
|
134
|
-
content.append_text(Text("
|
|
133
|
+
content.append_text(Text(" ", style=ThemeKey.METADATA_DIM))
|
|
134
|
+
content.append_text(Text(" ", style=ThemeKey.METADATA_DIM).join(parts))
|
|
135
135
|
|
|
136
136
|
grid.add_row(mark, content)
|
|
137
137
|
return grid if not is_sub_agent else Padding(grid, (0, 0, 0, 2))
|
|
@@ -290,6 +290,14 @@ class MarkdownStream:
|
|
|
290
290
|
|
|
291
291
|
stable_source = "".join(lines[:stable_line])
|
|
292
292
|
live_source = "".join(lines[stable_line:])
|
|
293
|
+
|
|
294
|
+
# If the "stable" prefix is only whitespace and we haven't stabilized any
|
|
295
|
+
# non-whitespace content yet, keep everything in the live buffer.
|
|
296
|
+
#
|
|
297
|
+
# This avoids cases where marks/indentation should apply to the first
|
|
298
|
+
# visible line, but would be suppressed because stable_line > 0.
|
|
299
|
+
if min_stable_line == 0 and stable_source.strip() == "":
|
|
300
|
+
return "", text, 0
|
|
293
301
|
return stable_source, live_source, stable_line
|
|
294
302
|
|
|
295
303
|
def render_ansi(self, text: str, *, apply_mark: bool) -> str:
|
|
@@ -59,6 +59,38 @@ def render_welcome(e: events.WelcomeEvent) -> RenderableType:
|
|
|
59
59
|
)
|
|
60
60
|
)
|
|
61
61
|
|
|
62
|
+
# Loaded skills summary is provided by core via WelcomeEvent to keep TUI decoupled.
|
|
63
|
+
loaded_skills = e.loaded_skills or {}
|
|
64
|
+
user_skills = loaded_skills.get("user") or []
|
|
65
|
+
project_skills = loaded_skills.get("project") or []
|
|
66
|
+
system_skills = loaded_skills.get("system") or []
|
|
67
|
+
|
|
68
|
+
skill_groups: list[tuple[str, list[str]]] = []
|
|
69
|
+
if user_skills:
|
|
70
|
+
skill_groups.append(("user", user_skills))
|
|
71
|
+
if project_skills:
|
|
72
|
+
skill_groups.append(("project", project_skills))
|
|
73
|
+
if system_skills:
|
|
74
|
+
skill_groups.append(("system", system_skills))
|
|
75
|
+
|
|
76
|
+
if skill_groups:
|
|
77
|
+
panel_content.append_text(Text("\n\n", style=ThemeKey.WELCOME_INFO))
|
|
78
|
+
panel_content.append_text(Text("skills", style=ThemeKey.WELCOME_HIGHLIGHT))
|
|
79
|
+
|
|
80
|
+
label_width = len("[project]")
|
|
81
|
+
|
|
82
|
+
for i, (group_name, skills) in enumerate(skill_groups):
|
|
83
|
+
is_last = i == len(skill_groups) - 1
|
|
84
|
+
prefix = "└─ " if is_last else "├─ "
|
|
85
|
+
label = f"[{group_name}]"
|
|
86
|
+
panel_content.append_text(
|
|
87
|
+
Text.assemble(
|
|
88
|
+
("\n", ThemeKey.WELCOME_INFO),
|
|
89
|
+
(prefix, ThemeKey.LINES),
|
|
90
|
+
(f"{label.ljust(label_width)} {', '.join(skills)}", ThemeKey.WELCOME_INFO),
|
|
91
|
+
)
|
|
92
|
+
)
|
|
93
|
+
|
|
62
94
|
border_style = ThemeKey.WELCOME_DEBUG_BORDER if debug_mode else ThemeKey.LINES
|
|
63
95
|
|
|
64
96
|
if e.show_klaude_code_info:
|
klaude_code/tui/machine.py
CHANGED
|
@@ -66,17 +66,6 @@ FAST_TOOLS: frozenset[str] = frozenset(
|
|
|
66
66
|
)
|
|
67
67
|
|
|
68
68
|
|
|
69
|
-
def _should_skip_tool_activity(tool_name: str, model_id: str | None) -> bool:
|
|
70
|
-
"""Check if tool activity should be skipped for non-streaming models."""
|
|
71
|
-
if model_id is None:
|
|
72
|
-
return False
|
|
73
|
-
if tool_name not in FAST_TOOLS:
|
|
74
|
-
return False
|
|
75
|
-
# Gemini and Grok models don't stream tool JSON at fine granularity
|
|
76
|
-
model_lower = model_id.lower()
|
|
77
|
-
return "gemini" in model_lower or "grok" in model_lower
|
|
78
|
-
|
|
79
|
-
|
|
80
69
|
@dataclass
|
|
81
70
|
class SubAgentThinkingHeaderState:
|
|
82
71
|
buffer: str = ""
|
|
@@ -257,7 +246,7 @@ class SpinnerStatusState:
|
|
|
257
246
|
base_status = self._reasoning_status or self._todo_status
|
|
258
247
|
|
|
259
248
|
if base_status:
|
|
260
|
-
# Default "
|
|
249
|
+
# Default "Thinking ..." uses normal style; custom headers use bold italic
|
|
261
250
|
is_default_reasoning = base_status == STATUS_THINKING_TEXT
|
|
262
251
|
status_style = ThemeKey.STATUS_TEXT if is_default_reasoning else ThemeKey.STATUS_TEXT_BOLD_ITALIC
|
|
263
252
|
if activity_text:
|
|
@@ -300,6 +289,7 @@ class _SessionState:
|
|
|
300
289
|
session_id: str
|
|
301
290
|
sub_agent_state: model.SubAgentState | None = None
|
|
302
291
|
sub_agent_thinking_header: SubAgentThinkingHeaderState | None = None
|
|
292
|
+
model_id: str | None = None
|
|
303
293
|
assistant_stream_active: bool = False
|
|
304
294
|
thinking_stream_active: bool = False
|
|
305
295
|
assistant_char_count: int = 0
|
|
@@ -313,6 +303,23 @@ class _SessionState:
|
|
|
313
303
|
def should_show_sub_agent_thinking_header(self) -> bool:
|
|
314
304
|
return bool(self.sub_agent_state and self.sub_agent_state.sub_agent_type == "ImageGen")
|
|
315
305
|
|
|
306
|
+
@property
|
|
307
|
+
def should_extract_reasoning_header(self) -> bool:
|
|
308
|
+
"""Gemini and GPT-5 models use markdown bold headers in thinking."""
|
|
309
|
+
if self.model_id is None:
|
|
310
|
+
return False
|
|
311
|
+
model_lower = self.model_id.lower()
|
|
312
|
+
return "gemini" in model_lower or "gpt-5" in model_lower
|
|
313
|
+
|
|
314
|
+
def should_skip_tool_activity(self, tool_name: str) -> bool:
|
|
315
|
+
"""Check if tool activity should be skipped for non-streaming models."""
|
|
316
|
+
if self.model_id is None:
|
|
317
|
+
return False
|
|
318
|
+
if tool_name not in FAST_TOOLS:
|
|
319
|
+
return False
|
|
320
|
+
model_lower = self.model_id.lower()
|
|
321
|
+
return "gemini" in model_lower or "grok" in model_lower
|
|
322
|
+
|
|
316
323
|
|
|
317
324
|
class DisplayStateMachine:
|
|
318
325
|
"""Simplified, session-aware REPL UI state machine.
|
|
@@ -380,6 +387,7 @@ class DisplayStateMachine:
|
|
|
380
387
|
|
|
381
388
|
case events.TaskStartEvent() as e:
|
|
382
389
|
s.sub_agent_state = e.sub_agent_state
|
|
390
|
+
s.model_id = e.model_id
|
|
383
391
|
if not s.is_sub_agent:
|
|
384
392
|
self._set_primary_if_needed(e.session_id)
|
|
385
393
|
cmds.append(TaskClockStart())
|
|
@@ -412,6 +420,7 @@ class DisplayStateMachine:
|
|
|
412
420
|
if not self._is_primary(e.session_id):
|
|
413
421
|
return []
|
|
414
422
|
s.thinking_stream_active = True
|
|
423
|
+
s.thinking_tail = ""
|
|
415
424
|
# Ensure the status reflects that reasoning has started even
|
|
416
425
|
# before we receive any deltas (or a bold header).
|
|
417
426
|
self._spinner.set_reasoning_status(STATUS_THINKING_TEXT)
|
|
@@ -435,11 +444,13 @@ class DisplayStateMachine:
|
|
|
435
444
|
cmds.append(AppendThinking(session_id=e.session_id, content=e.content))
|
|
436
445
|
|
|
437
446
|
# Update reasoning status for spinner (based on bounded tail).
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
447
|
+
# Only extract headers for models that use markdown bold headers in thinking.
|
|
448
|
+
if s.should_extract_reasoning_header:
|
|
449
|
+
s.thinking_tail = (s.thinking_tail + e.content)[-8192:]
|
|
450
|
+
header = extract_last_bold_header(normalize_thinking_content(s.thinking_tail))
|
|
451
|
+
if header:
|
|
452
|
+
self._spinner.set_reasoning_status(header)
|
|
453
|
+
cmds.extend(self._spinner_update_commands())
|
|
443
454
|
|
|
444
455
|
return cmds
|
|
445
456
|
|
|
@@ -528,7 +539,7 @@ class DisplayStateMachine:
|
|
|
528
539
|
|
|
529
540
|
# Skip activity state for fast tools on non-streaming models (e.g., Gemini)
|
|
530
541
|
# to avoid flash-and-disappear effect
|
|
531
|
-
if not
|
|
542
|
+
if not s.should_skip_tool_activity(e.tool_name):
|
|
532
543
|
tool_active_form = get_tool_active_form(e.tool_name)
|
|
533
544
|
if is_sub_agent_tool(e.tool_name):
|
|
534
545
|
self._spinner.add_sub_agent_tool_call(e.tool_call_id, tool_active_form)
|
klaude_code/tui/renderer.py
CHANGED
|
@@ -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
|
|
@@ -17,23 +18,24 @@ klaude_code/cli/auth_cmd.py,sha256=4h59A0UrNBCAf_IL_tVU3GY4kxraoab3CTjgCdKvJGM,6
|
|
|
17
18
|
klaude_code/cli/config_cmd.py,sha256=ZDNt1qtXbiWtFJBIaqtfqKrGHXQ1X-NHBeu1k1DoO1o,3391
|
|
18
19
|
klaude_code/cli/cost_cmd.py,sha256=6bL22amGEB2gfCV9KXQfN5cZYyPL6J6JVIjV65_QjJo,12471
|
|
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=xhV2rVJnFFPeV9ikFVoK9mtRiQtAqgerwYd3EubWXHQ,8754
|
|
22
23
|
klaude_code/cli/self_update.py,sha256=mn1B7Xn1keQkbwoDURzsM2fFjorzJTNLlV-Y_NYa6fA,2708
|
|
23
24
|
klaude_code/cli/session_cmd.py,sha256=IyuSkqHOLldcm8qraJWJZEme9TY5Rfqmld9NmVJuHnc,3198
|
|
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=2ixUe3VyIQtCGd_p4uKBPryg0oXyzPH6lW4TUmglORg,7162
|
|
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=UCC0QLuQIeEtfHDi0g1JpM1iEjfNMDQEew9FW-MWErA,6159
|
|
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=FFBwUI2DolPu4_XNzaODyWTr1dETr-JwMQnSTt4Kimc,11149
|
|
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
|
|
@@ -49,9 +51,9 @@ klaude_code/core/prompts/prompt-sub-agent-image-gen.md,sha256=tXYKSzFd04OiC0dmVO
|
|
|
49
51
|
klaude_code/core/prompts/prompt-sub-agent-web.md,sha256=UwrO5M_jPUbee_8lL7gB-2VFFLxvzEejluXDkMzmR5A,3625
|
|
50
52
|
klaude_code/core/prompts/prompt-sub-agent.md,sha256=dmmdsOenbAOfqG6FmdR88spOLZkXmntDBs-cmZ9DN_g,897
|
|
51
53
|
klaude_code/core/reminders.py,sha256=SOSB1wZMPdCtCwTpvjUW5et-d0JcnUxF7lMg90CZnA4,24384
|
|
52
|
-
klaude_code/core/task.py,sha256=
|
|
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
|
|
@@ -87,10 +89,10 @@ 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=-HPhkQrkIbiM-szZULnd3-2Zg2lrL6AkPV7ztS6Lb8g,17667
|
|
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=
|
|
95
|
+
klaude_code/llm/anthropic/client.py,sha256=asQofiC13FeScLROMxLtDnRSj0frqe6kPRFZUNE1gm0,16242
|
|
94
96
|
klaude_code/llm/anthropic/input.py,sha256=FeNhPwP0QJS7E7kICqhRBe2hUNCYkqLf_YP5qWcI_ao,9474
|
|
95
97
|
klaude_code/llm/bedrock/__init__.py,sha256=UmXPBXMmigAJ7euIh59iivSeUdrYJwum0RYU7okkkPM,86
|
|
96
98
|
klaude_code/llm/bedrock/client.py,sha256=mETQrhGDt4uEDXO2c3y5Iao9RngygFSF6MOtwqAy1tk,2279
|
|
@@ -125,12 +127,12 @@ klaude_code/protocol/commands.py,sha256=MfiUgN7r7VFGh0pel4nCRnk44F2Yzdcd7xqM-M36
|
|
|
125
127
|
klaude_code/protocol/events/__init__.py,sha256=5WoUQzj3P7Lih6xO6keaJmaLOyxboO1OtOPavrNNj24,1673
|
|
126
128
|
klaude_code/protocol/events/base.py,sha256=QfqgksjA2Hj-ClmwKVeJ7QA6Z7YdzjswO1NfAVnPCoI,335
|
|
127
129
|
klaude_code/protocol/events/chat.py,sha256=mI_Ks5IIU1ZiywclQYxzhSsGA3ga7ACKShU6d9_KqSs,731
|
|
128
|
-
klaude_code/protocol/events/lifecycle.py,sha256=
|
|
130
|
+
klaude_code/protocol/events/lifecycle.py,sha256=gykOiAvdxMrvZ9Jm2T_qlve6Iw70C23o2HRooR0rHg4,389
|
|
129
131
|
klaude_code/protocol/events/metadata.py,sha256=VcktYa6k51vIQ1H_KeOqQYCZkX0K9gaCQR1neOAOENs,313
|
|
130
|
-
klaude_code/protocol/events/streaming.py,sha256=
|
|
131
|
-
klaude_code/protocol/events/system.py,sha256=
|
|
132
|
+
klaude_code/protocol/events/streaming.py,sha256=U1plGQSTeGZa3E4fIxW_fHXJpuv_DSIBrmGh1l4Fm54,708
|
|
133
|
+
klaude_code/protocol/events/system.py,sha256=FjAnZso1jpOY2nY7DgehuFvBtu_gh5uZqimmpgKbaMA,1392
|
|
132
134
|
klaude_code/protocol/events/tools.py,sha256=8ds_8Zj-wQWvHNAvNt1-fSIHeDffw1dsLWI7ByrAqcM,617
|
|
133
|
-
klaude_code/protocol/llm_param.py,sha256=
|
|
135
|
+
klaude_code/protocol/llm_param.py,sha256=mFdAcbzJrIFB4T2QCbLyeZxZQ_38lUNCclEZIH3eWtQ,5191
|
|
134
136
|
klaude_code/protocol/message.py,sha256=pu-wvInS781y-qSKbl9MqO7k3CtAN7Yu4hUHJCXKjZQ,6210
|
|
135
137
|
klaude_code/protocol/model.py,sha256=KboyTyfG5DntRMK98oDHomgJfUpHBdeiq51dWXRSqeM,9923
|
|
136
138
|
klaude_code/protocol/op.py,sha256=pYmvSyVrVr6LlJUiSN2GKwXiDX8meCoxYKNYHXdTKGE,5965
|
|
@@ -144,19 +146,20 @@ klaude_code/protocol/sub_agent/web.py,sha256=XOQdqlIp_xno7Q7YVFPFo4AyKU1wbrVKhIi
|
|
|
144
146
|
klaude_code/protocol/tools.py,sha256=T0mzW9EhidVMNkwH-KTeB5FgwMvXBnV_MYE5ytrU1TM,343
|
|
145
147
|
klaude_code/session/__init__.py,sha256=4sw81uQvEd3YUOOjamKk1KqGmxeb4Ic9T1Tee5zztyU,241
|
|
146
148
|
klaude_code/session/codec.py,sha256=a374UZkOusn9MgFCc--yznDljK_4Qfy6yDPfhQq5_P0,1889
|
|
147
|
-
klaude_code/session/export.py,sha256=
|
|
149
|
+
klaude_code/session/export.py,sha256=znoTUCw2tVGgDpl-sT-ba_2Bb2HaH6pvsl4EpLUdYJQ,46102
|
|
148
150
|
klaude_code/session/selector.py,sha256=snBpnz9UQCe_0K8HttSGCJECCE4YEzpWs_Fdmk2P9nI,2195
|
|
149
151
|
klaude_code/session/session.py,sha256=iQdjVoiretvsPvVkUv1rW9z5IDnwPQ6RuFAp-gATF9o,23162
|
|
150
152
|
klaude_code/session/store.py,sha256=HRrmFzwEVdExqDQlT9FBZOhlFtQmM9Im9zco8pzvUMY,6455
|
|
151
|
-
klaude_code/session/templates/export_session.html,sha256=
|
|
153
|
+
klaude_code/session/templates/export_session.html,sha256=y4H2DwYx29MuSeKgT8JWdZKNguemaDKN-b75x0sr0eU,127667
|
|
152
154
|
klaude_code/session/templates/mermaid_viewer.html,sha256=Y_wEWFm4mKWpfAz3YMis5DdLEkhw_2d8CpU6jbvGZow,27842
|
|
155
|
+
klaude_code/skill/.DS_Store,sha256=zy9qIqi2YLGzlZwHNM4oAX8rDoNTg9yxdo22PJOwupg,6148
|
|
153
156
|
klaude_code/skill/__init__.py,sha256=yeWeCfRGPOhT4mx_pjdo4fLondQ_Vx0edBtnFusLhls,839
|
|
157
|
+
klaude_code/skill/assets/.DS_Store,sha256=1lFlJ5EFymdzGAUAaI30vcaaLHt3F1LwpG7xILf9jsM,6148
|
|
154
158
|
klaude_code/skill/assets/create-plan/SKILL.md,sha256=g_SLyBid2dwj56FBzh87lZGu1t08edLs0plimT2uNzs,2481
|
|
155
159
|
klaude_code/skill/assets/deslop/SKILL.md,sha256=XMBER6gOyYnZof_u7l30CZSzmDcINe8XP-n_loah0EQ,873
|
|
156
160
|
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
161
|
klaude_code/skill/assets/skill-creator/SKILL.md,sha256=0ByoWb9ao0UKSoM5Tmz-Qe5CAPliTrVpUK0gPd9TFqo,5520
|
|
159
|
-
klaude_code/skill/loader.py,sha256=
|
|
162
|
+
klaude_code/skill/loader.py,sha256=Lcj3j5H9-5wERkvOz77J9Z0uWJ3skrpVQvnzYqrpRJU,8644
|
|
160
163
|
klaude_code/skill/manager.py,sha256=GcE6IGooYmWn75wWa2TfJj8VRaBgAlABeK3sD_bIgBY,3448
|
|
161
164
|
klaude_code/skill/system_skills.py,sha256=ryGN07t0Xv2Yn_Prfq072tdIN0Dp4ZpdXLTl7O7rCkg,6122
|
|
162
165
|
klaude_code/tui/__init__.py,sha256=Q8-0D-uesw3oFwHcFLD5UaWlTFbrj8qV7dSn6C6_g_o,274
|
|
@@ -172,7 +175,7 @@ klaude_code/tui/command/model_cmd.py,sha256=EnUcr_nnUm433G2HwEKKNssVE767IgQFNoc9
|
|
|
172
175
|
klaude_code/tui/command/model_picker.py,sha256=BAQzMHuRuK0o7q3zM5x1p2pawUuhmYDAHcSLmgKwLZg,5700
|
|
173
176
|
klaude_code/tui/command/prompt-init.md,sha256=a4_FQ3gKizqs2vl9oEY5jtG6HNhv3f-1b5RSCFq0A18,1873
|
|
174
177
|
klaude_code/tui/command/prompt_command.py,sha256=PGGoH_ZgA-0kTtpjk19rDSsWjiZyAEoUlxnSp8B8GRQ,2764
|
|
175
|
-
klaude_code/tui/command/refresh_cmd.py,sha256=
|
|
178
|
+
klaude_code/tui/command/refresh_cmd.py,sha256=_nY7Iko7GSpHmc9t2vKK2DcXRYbXfUnbGzwsmNc-yPI,1405
|
|
176
179
|
klaude_code/tui/command/registry.py,sha256=2HDrC6ZqGKSdzQAYra2TSFt1kc3tDliobjrWfgrTdX8,7028
|
|
177
180
|
klaude_code/tui/command/resume_cmd.py,sha256=eOEJI-vchrOP0zrLDTip7KYb1oRJp9te5aiHFtwOdFQ,3771
|
|
178
181
|
klaude_code/tui/command/status_cmd.py,sha256=yALYGxyUX7iVdSRAKdG526YkqOvGV9F0CJNwk8nmzu4,5164
|
|
@@ -189,12 +192,12 @@ klaude_code/tui/components/developer.py,sha256=1hDr7boJN1z_JyvvFNn8m7MAf4lPDN3eo
|
|
|
189
192
|
klaude_code/tui/components/diffs.py,sha256=JUokkkJeTIoKD0b-c-chMzIDmMjivBQqH8DYXIA3hHs,10411
|
|
190
193
|
klaude_code/tui/components/errors.py,sha256=_9ojf-23ThR-BoMwNEYG68rzILwA_O59muGvofYL10w,669
|
|
191
194
|
klaude_code/tui/components/mermaid_viewer.py,sha256=MstufMnTauMKzI8cKngXpFqVo-qya20P8ReNkplYtEw,3098
|
|
192
|
-
klaude_code/tui/components/metadata.py,sha256=
|
|
195
|
+
klaude_code/tui/components/metadata.py,sha256=ESNZ7l0fCDF8BUdAWEsgoW0iG3HPnvJ2GSrpCSXIhCM,7221
|
|
193
196
|
klaude_code/tui/components/rich/__init__.py,sha256=zEZjnHR3Fnv_sFMxwIMjoJfwDoC4GRGv3lHJzAGRq_o,236
|
|
194
197
|
klaude_code/tui/components/rich/cjk_wrap.py,sha256=eMqBxftUtll7zrytUb9WtJ6naYLyax0W4KJRpGwWulM,7602
|
|
195
198
|
klaude_code/tui/components/rich/code_panel.py,sha256=ZKuJHh-kh-hIkBXSGLERLaDbJ7I9hvtvmYKocJn39_w,4744
|
|
196
199
|
klaude_code/tui/components/rich/live.py,sha256=xiMT6dPsxM_jaazddKrV9CMJQWwpe2t9OdjffHvo1JU,2821
|
|
197
|
-
klaude_code/tui/components/rich/markdown.py,sha256=
|
|
200
|
+
klaude_code/tui/components/rich/markdown.py,sha256=dkSzovKFY8zMQqRhad9k-fpV3Iot1CxKvxe202aaP4w,19512
|
|
198
201
|
klaude_code/tui/components/rich/quote.py,sha256=gTLwxSPQd9nlp73P1ysQIEgOb-BoTE2gzyiPBLMiHcY,3834
|
|
199
202
|
klaude_code/tui/components/rich/searchable_text.py,sha256=PUe6MotKxSBY4FlPeojVjVQgxCsx_jiQ41bCzLp8WvE,2271
|
|
200
203
|
klaude_code/tui/components/rich/status.py,sha256=kNt08FQGvMZJB-zUhT5UyVFA7jvuRBNqf6yDXLEhb9c,14756
|
|
@@ -203,15 +206,15 @@ klaude_code/tui/components/sub_agent.py,sha256=afkDbndByQmrxO3lvWR3rSvlbIE0wktbj
|
|
|
203
206
|
klaude_code/tui/components/thinking.py,sha256=AXC7Xpyiu7ST-eWGLRGY7N8Dak2ny3lV3mvznmfqKmM,2890
|
|
204
207
|
klaude_code/tui/components/tools.py,sha256=Up8DQbXuiPfcbiFVZD6gmZO0YBz2SExWS-tE_xeriX4,25060
|
|
205
208
|
klaude_code/tui/components/user_input.py,sha256=6VHH77xwUUW0rW7yv8hOwGXsmK52HEsBg9-QZVbOm1A,3427
|
|
206
|
-
klaude_code/tui/components/welcome.py,sha256=
|
|
209
|
+
klaude_code/tui/components/welcome.py,sha256=ZSCcT-wFdSp3L1Fq7shWWz4Rk-BAXvsKisfvIUnP8a4,3665
|
|
207
210
|
klaude_code/tui/display.py,sha256=ovM1F8GDG0gTQjOV2KaXnjE9HFHf7AtThqSIXkP6JQY,3073
|
|
208
211
|
klaude_code/tui/input/__init__.py,sha256=cAB38ypo7dHo_jgXUCnoBTUKHtiriVaKCv4YepSU9SU,276
|
|
209
212
|
klaude_code/tui/input/clipboard.py,sha256=HjThFB9MG_YdJ76CQv7B-IUoz5JarbWUZDbUVkH1LpY,5106
|
|
210
213
|
klaude_code/tui/input/completers.py,sha256=lkDBjnqYPLMgR6AZHhx2bfT_vMW-fbV6aqY9SqRwq74,32571
|
|
211
214
|
klaude_code/tui/input/key_bindings.py,sha256=2uN48J1HRHeCBqq7WrH5J82NIU59oQscce0HquAiYCI,18876
|
|
212
215
|
klaude_code/tui/input/prompt_toolkit.py,sha256=ZwkQodc3GufGo7SMmebaOiVopkqxkMDC48y8RFeGuLk,28551
|
|
213
|
-
klaude_code/tui/machine.py,sha256=
|
|
214
|
-
klaude_code/tui/renderer.py,sha256=
|
|
216
|
+
klaude_code/tui/machine.py,sha256=S1OKLx1YlAIQfjUAIYFJPRK-5X8cI_1mSpBqEU0NJwM,25291
|
|
217
|
+
klaude_code/tui/renderer.py,sha256=SUhxIbTCHK_VR_MVfFUebRv7OaMmQG0Rrrhfgv_klGY,29485
|
|
215
218
|
klaude_code/tui/runner.py,sha256=nOq8wC78HzgqHLRgHC8OgYubH--2gPcDqA6GoV913Yc,11270
|
|
216
219
|
klaude_code/tui/terminal/__init__.py,sha256=GIMnsEcIAGT_vBHvTlWEdyNmAEpruyscUA6M_j3GQZU,1412
|
|
217
220
|
klaude_code/tui/terminal/color.py,sha256=6SJR2RA8cqJINNoRz65w0HL3x9g46ydIvDOGWMeNnQU,7195
|
|
@@ -229,7 +232,7 @@ klaude_code/ui/debug_mode.py,sha256=ZvqbOx4c_rUerMbEZzOfcbNf9leqEDFjqJUlALtzF9Y,
|
|
|
229
232
|
klaude_code/ui/terminal/__init__.py,sha256=5OeAzr994r8-peWsLON0iXsAvJ2pexwMp36JY7FKGDc,179
|
|
230
233
|
klaude_code/ui/terminal/title.py,sha256=EZpLXTMhunsZPVGaxP317lH0Ad2oOh7OsjbV3yRD5is,1115
|
|
231
234
|
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.
|
|
235
|
+
klaude_code-2.5.2.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
|
|
236
|
+
klaude_code-2.5.2.dist-info/entry_points.txt,sha256=kkXIXedaTOtjXPr2rVjRVVXZYlFUcBHELaqmyVlWUFA,92
|
|
237
|
+
klaude_code-2.5.2.dist-info/METADATA,sha256=kAGfNopTOaVeDvTsAYH3-FV64kfRjSnqOpQ9iia2TuA,10249
|
|
238
|
+
klaude_code-2.5.2.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
|