klaude-code 2.1.1__py3-none-any.whl → 2.3.0__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/app/__init__.py +1 -2
- klaude_code/app/runtime.py +13 -41
- klaude_code/cli/list_model.py +27 -10
- klaude_code/cli/main.py +42 -159
- klaude_code/config/assets/builtin_config.yaml +36 -14
- klaude_code/config/config.py +144 -7
- klaude_code/config/select_model.py +38 -13
- klaude_code/config/sub_agent_model_helper.py +217 -0
- klaude_code/const.py +2 -2
- klaude_code/core/agent_profile.py +71 -5
- klaude_code/core/executor.py +75 -0
- klaude_code/core/manager/llm_clients_builder.py +18 -12
- klaude_code/core/prompts/prompt-nano-banana.md +1 -0
- klaude_code/core/tool/shell/command_safety.py +4 -189
- klaude_code/core/tool/sub_agent_tool.py +2 -1
- klaude_code/core/turn.py +1 -1
- klaude_code/llm/anthropic/client.py +8 -5
- klaude_code/llm/anthropic/input.py +54 -29
- klaude_code/llm/google/client.py +2 -2
- klaude_code/llm/google/input.py +23 -2
- klaude_code/llm/openai_compatible/input.py +22 -13
- klaude_code/llm/openai_compatible/stream.py +1 -1
- klaude_code/llm/openrouter/input.py +37 -25
- klaude_code/llm/responses/client.py +1 -1
- klaude_code/llm/responses/input.py +96 -57
- klaude_code/protocol/commands.py +1 -2
- klaude_code/protocol/events/system.py +4 -0
- klaude_code/protocol/message.py +2 -2
- klaude_code/protocol/op.py +17 -0
- klaude_code/protocol/op_handler.py +5 -0
- klaude_code/protocol/sub_agent/AGENTS.md +28 -0
- klaude_code/protocol/sub_agent/__init__.py +10 -14
- klaude_code/protocol/sub_agent/image_gen.py +2 -1
- klaude_code/session/codec.py +2 -6
- klaude_code/session/session.py +9 -1
- klaude_code/skill/assets/create-plan/SKILL.md +3 -5
- klaude_code/tui/command/__init__.py +7 -10
- klaude_code/tui/command/clear_cmd.py +1 -1
- klaude_code/tui/command/command_abc.py +1 -2
- klaude_code/tui/command/copy_cmd.py +1 -2
- klaude_code/tui/command/fork_session_cmd.py +4 -4
- klaude_code/tui/command/model_cmd.py +6 -43
- klaude_code/tui/command/model_select.py +75 -15
- klaude_code/tui/command/refresh_cmd.py +1 -2
- klaude_code/tui/command/resume_cmd.py +3 -4
- klaude_code/tui/command/status_cmd.py +1 -1
- klaude_code/tui/command/sub_agent_model_cmd.py +190 -0
- klaude_code/tui/components/bash_syntax.py +1 -1
- klaude_code/tui/components/common.py +1 -1
- klaude_code/tui/components/developer.py +10 -15
- klaude_code/tui/components/metadata.py +2 -64
- klaude_code/tui/components/rich/cjk_wrap.py +3 -2
- klaude_code/tui/components/rich/status.py +49 -3
- klaude_code/tui/components/rich/theme.py +4 -2
- klaude_code/tui/components/sub_agent.py +25 -46
- klaude_code/tui/components/user_input.py +9 -21
- klaude_code/tui/components/welcome.py +99 -0
- klaude_code/tui/input/prompt_toolkit.py +14 -1
- klaude_code/tui/renderer.py +2 -3
- klaude_code/tui/runner.py +2 -2
- klaude_code/tui/terminal/selector.py +8 -18
- klaude_code/ui/__init__.py +0 -24
- klaude_code/ui/common.py +3 -2
- klaude_code/ui/core/display.py +2 -2
- {klaude_code-2.1.1.dist-info → klaude_code-2.3.0.dist-info}/METADATA +16 -81
- {klaude_code-2.1.1.dist-info → klaude_code-2.3.0.dist-info}/RECORD +68 -67
- klaude_code/tui/command/help_cmd.py +0 -51
- klaude_code/tui/command/prompt-commit.md +0 -82
- klaude_code/tui/command/release_notes_cmd.py +0 -85
- klaude_code/ui/exec_mode.py +0 -60
- {klaude_code-2.1.1.dist-info → klaude_code-2.3.0.dist-info}/WHEEL +0 -0
- {klaude_code-2.1.1.dist-info → klaude_code-2.3.0.dist-info}/entry_points.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
klaude_code/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
klaude_code/app/__init__.py,sha256=
|
|
3
|
-
klaude_code/app/runtime.py,sha256=
|
|
2
|
+
klaude_code/app/__init__.py,sha256=7mgWpN9SFDqe8AW44bBn9M19nVsBcZURrsGB_8l2hrU,264
|
|
3
|
+
klaude_code/app/runtime.py,sha256=RBWNnB_CgFu9FsKX4YOPjIdzHOdNN0lIoUl_LMT9-SM,6152
|
|
4
4
|
klaude_code/auth/__init__.py,sha256=jLUgi4V4m0t2BlVuuni7iANOErpJgAeEqByuD1sKUvQ,480
|
|
5
5
|
klaude_code/auth/base.py,sha256=ccH2sC0TWB5lPpGm4FSjCgnehwn9riYiXxHCh2iFJe0,3011
|
|
6
6
|
klaude_code/auth/claude/__init__.py,sha256=h1oyqEttDM5TAF6w1Stk6YXYMsbATjODCsi6GhU4zAA,218
|
|
@@ -17,25 +17,26 @@ klaude_code/cli/auth_cmd.py,sha256=4h59A0UrNBCAf_IL_tVU3GY4kxraoab3CTjgCdKvJGM,6
|
|
|
17
17
|
klaude_code/cli/config_cmd.py,sha256=ZDNt1qtXbiWtFJBIaqtfqKrGHXQ1X-NHBeu1k1DoO1o,3391
|
|
18
18
|
klaude_code/cli/cost_cmd.py,sha256=6bL22amGEB2gfCV9KXQfN5cZYyPL6J6JVIjV65_QjJo,12471
|
|
19
19
|
klaude_code/cli/debug.py,sha256=vEHOjObhrIHDAXk3q6cOgeW2NZxCx5AWM1rJ6FiJnVU,1901
|
|
20
|
-
klaude_code/cli/list_model.py,sha256=
|
|
21
|
-
klaude_code/cli/main.py,sha256=
|
|
20
|
+
klaude_code/cli/list_model.py,sha256=QujNuxIRjW3xJplwz1ysZ5wtoyhTc5KQacuPIWMOJoo,13291
|
|
21
|
+
klaude_code/cli/main.py,sha256=QUTsCqgVphSMFfuLd9apR5SdAhp_YrhHZAHjckQu8Mg,8748
|
|
22
22
|
klaude_code/cli/self_update.py,sha256=mn1B7Xn1keQkbwoDURzsM2fFjorzJTNLlV-Y_NYa6fA,2708
|
|
23
23
|
klaude_code/cli/session_cmd.py,sha256=IyuSkqHOLldcm8qraJWJZEme9TY5Rfqmld9NmVJuHnc,3198
|
|
24
24
|
klaude_code/config/__init__.py,sha256=Qe1BeMekBfO2-Zd30x33lB70hdM1QQZGrp4DbWSQ-II,353
|
|
25
25
|
klaude_code/config/assets/__init__.py,sha256=uMUfmXT3I-gYiI-HVr1DrE60mx5cY1o8V7SYuGqOmvY,32
|
|
26
|
-
klaude_code/config/assets/builtin_config.yaml,sha256=
|
|
26
|
+
klaude_code/config/assets/builtin_config.yaml,sha256=EmYDfsQlBVWUh7_zITAr1U3TD9BpNQ36ofxZTGHEQHA,8596
|
|
27
27
|
klaude_code/config/builtin_config.py,sha256=1rHcFWmS0k6rXeIqR6sF_OgGXSbEd4ugh9bh2N6VSS0,1494
|
|
28
|
-
klaude_code/config/config.py,sha256=
|
|
29
|
-
klaude_code/config/select_model.py,sha256=
|
|
28
|
+
klaude_code/config/config.py,sha256=tzLb_GK-vORBwcg2qH2TLTX7eTSTOWeK4E0kG04XzsI,24003
|
|
29
|
+
klaude_code/config/select_model.py,sha256=NZvwUE_F5ii3NaTAZ0HR16UIUuJGIl2zlSydvv_m9kc,6170
|
|
30
|
+
klaude_code/config/sub_agent_model_helper.py,sha256=Yd74gxA8OW5X5ijeKUfRdQvrmtRH4hwgBGPeh8OsDfs,8544
|
|
30
31
|
klaude_code/config/thinking.py,sha256=1FFN9UgPVEFyTzahTvNOM5Y4b8Bo7G1jIc93xjX3Uvk,9323
|
|
31
|
-
klaude_code/const.py,sha256=
|
|
32
|
+
klaude_code/const.py,sha256=vdp49j8uIjKJ_H3YrRuE3jcAEhm57EL73C--By6ZXtU,10907
|
|
32
33
|
klaude_code/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
34
|
klaude_code/core/agent.py,sha256=_jfe3WLE8T2twYaMpgjrFM7pwzMerirsq7YTLqpoufM,3560
|
|
34
|
-
klaude_code/core/agent_profile.py,sha256=
|
|
35
|
-
klaude_code/core/executor.py,sha256=
|
|
35
|
+
klaude_code/core/agent_profile.py,sha256=M3O6Ffb0WureNN_SDv5fvCrtAkpsTgFSvWitYWxyhrE,12051
|
|
36
|
+
klaude_code/core/executor.py,sha256=k6hs1itNzT71mXxY1F5F0Y_8i4W7GZLXhzlSZa8Xk1Y,34880
|
|
36
37
|
klaude_code/core/manager/__init__.py,sha256=hdIbpnYj6i18byiWjtJIm5l7NYYDQMvafw8fePVPydc,562
|
|
37
38
|
klaude_code/core/manager/llm_clients.py,sha256=X2oMFWgJcP0tK8GEtMMDYR3HyR6_H8FuyCqpzWF5x2k,871
|
|
38
|
-
klaude_code/core/manager/llm_clients_builder.py,sha256=
|
|
39
|
+
klaude_code/core/manager/llm_clients_builder.py,sha256=_88MvbjNK-4s3wKTdzP-GmoUVGKyD88oWXZ7oqRWF8A,1902
|
|
39
40
|
klaude_code/core/manager/sub_agent_manager.py,sha256=URzvged6ra6eY0jx1yQlvq8WdhBEsMvirWtOPCcsHNM,6991
|
|
40
41
|
klaude_code/core/prompts/prompt-claude-code.md,sha256=uuWBv6GrG63mdmBedAHT5U9yOpbHSKFYbbS2xBnUzOE,8290
|
|
41
42
|
klaude_code/core/prompts/prompt-codex-gpt-5-1-codex-max.md,sha256=SW-y8AmR99JL_9j26k9YVAOQuZ18vR12aT5CWHkZDc4,11741
|
|
@@ -43,6 +44,7 @@ klaude_code/core/prompts/prompt-codex-gpt-5-2-codex.md,sha256=GA1pIIF6JuAl4P3FIW
|
|
|
43
44
|
klaude_code/core/prompts/prompt-codex.md,sha256=ybL6CXrGnK6Cw9KuEicQg4kKllIcVa2NwUyuUWitPzk,21672
|
|
44
45
|
klaude_code/core/prompts/prompt-gemini.md,sha256=JjE1tHSByGKJzjn4Gpj1zekT7ry1Yqbwx5qx3fZy2gE,3901
|
|
45
46
|
klaude_code/core/prompts/prompt-minimal.md,sha256=6-ZmQQkE3f92W_3V2wS7ocB13wLog1_UojCjZG0K4v8,1559
|
|
47
|
+
klaude_code/core/prompts/prompt-nano-banana.md,sha256=3e5GUmtW41eX3pCUBB1j5TFgAM71XlFVyIsix66GEvY,81
|
|
46
48
|
klaude_code/core/prompts/prompt-sub-agent-explore.md,sha256=21kFodjhvN0L-c_ZFo4yVhJOyzfgES-Dty9Vz_Ew9q8,2629
|
|
47
49
|
klaude_code/core/prompts/prompt-sub-agent-image-gen.md,sha256=tXYKSzFd04OiC0dmVO9suMKeD5f9qo_4NsvqGo7irfI,78
|
|
48
50
|
klaude_code/core/prompts/prompt-sub-agent-web.md,sha256=n7fcIs26Xnu_CvHda_S_k5LGTpV3njY04yo88FT_S9A,3602
|
|
@@ -67,8 +69,8 @@ klaude_code/core/tool/report_back_tool.py,sha256=SkuRhfLpVwTOSpIj7XwYfGDNBp8YsCU
|
|
|
67
69
|
klaude_code/core/tool/shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
68
70
|
klaude_code/core/tool/shell/bash_tool.md,sha256=ILKpnRCBTkU2uSDEdZQjNYo1l6hsM4TO-3RD5zWC61c,3935
|
|
69
71
|
klaude_code/core/tool/shell/bash_tool.py,sha256=LPF-Iqypzfq9IMkumErTSBDgCYYNz8vvZYe7ZobqjYk,14779
|
|
70
|
-
klaude_code/core/tool/shell/command_safety.py,sha256
|
|
71
|
-
klaude_code/core/tool/sub_agent_tool.py,sha256=
|
|
72
|
+
klaude_code/core/tool/shell/command_safety.py,sha256=-x-qs1ctciEvFrBNn2JQq9540lSGacaS5R7e1MmB1y4,6457
|
|
73
|
+
klaude_code/core/tool/sub_agent_tool.py,sha256=yTNcsBOElbDRzMNQyslVBDAe179ACCMMgKLP4sKbbwE,4674
|
|
72
74
|
klaude_code/core/tool/todo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
73
75
|
klaude_code/core/tool/todo/todo_write_tool.md,sha256=BFP9qIkzkakzskHwIOPVtDhehkh0F90A5oosyDuC_BE,1682
|
|
74
76
|
klaude_code/core/tool/todo/todo_write_tool.py,sha256=_94zgZ7N43lQN1x5nD-kd4ayNEwjTQXUiSWLv6MW4FE,4222
|
|
@@ -86,11 +88,11 @@ klaude_code/core/tool/web/web_fetch_tool.md,sha256=jIrW-EAmfl50bBevcfioQ3Vrg8kWl
|
|
|
86
88
|
klaude_code/core/tool/web/web_fetch_tool.py,sha256=MpAfiRVg4CNvLQlve4jphpX4juN81aR7XWOZi0I5-UQ,10323
|
|
87
89
|
klaude_code/core/tool/web/web_search_tool.md,sha256=l5gGPx-fXHFel1zLBljm8isy9pwEYXGrq5cFzzw1VBw,1135
|
|
88
90
|
klaude_code/core/tool/web/web_search_tool.py,sha256=ljkgXxP6L5nJnbYB_IOUtPUN9zA_h5hBD55lhNAja08,4293
|
|
89
|
-
klaude_code/core/turn.py,sha256=
|
|
91
|
+
klaude_code/core/turn.py,sha256=Xjg8PCcpug3Okl12ciWBO7EiqZxlBYtGuY2gAKV3GFk,18081
|
|
90
92
|
klaude_code/llm/__init__.py,sha256=b4AsqnrMIs0a5qR_ti6rZcHwFzAReTwOW96EqozEoSo,287
|
|
91
93
|
klaude_code/llm/anthropic/__init__.py,sha256=PWETvaeNAAX3ue0ww1uRUIxTJG0RpWiutkn7MlwKxBs,67
|
|
92
|
-
klaude_code/llm/anthropic/client.py,sha256=
|
|
93
|
-
klaude_code/llm/anthropic/input.py,sha256=
|
|
94
|
+
klaude_code/llm/anthropic/client.py,sha256=Mch_Q1Vtzh-Mw4hPedFm2BCgGivmq4r3IJXx_w7F3Pg,12341
|
|
95
|
+
klaude_code/llm/anthropic/input.py,sha256=FeNhPwP0QJS7E7kICqhRBe2hUNCYkqLf_YP5qWcI_ao,9474
|
|
94
96
|
klaude_code/llm/bedrock/__init__.py,sha256=UmXPBXMmigAJ7euIh59iivSeUdrYJwum0RYU7okkkPM,86
|
|
95
97
|
klaude_code/llm/bedrock/client.py,sha256=n78PIMONAMiRc-l4-mY9qOu0dhUuirmaRpmvuzWdEsk,2400
|
|
96
98
|
klaude_code/llm/claude/__init__.py,sha256=8VCvvEjQQI-RpAMfHCl5ct4zlDU_jgbAuLOc9p9u-B4,61
|
|
@@ -99,56 +101,57 @@ klaude_code/llm/client.py,sha256=yZ_ob0BERRjrOc3t_kJioIdMioghXdOYUErH67zME2k,100
|
|
|
99
101
|
klaude_code/llm/codex/__init__.py,sha256=8vN2j2ezWB_UVpfqQ8ooStsBeLL5SY4SUMXOXdWiMaI,132
|
|
100
102
|
klaude_code/llm/codex/client.py,sha256=kLHAmNwyijwzAKsFnC-5NBXboJTVvEqMcQylQLO-P4M,5522
|
|
101
103
|
klaude_code/llm/google/__init__.py,sha256=tQtf_mh_mC3E4S9XAsnhS2JZXGRnYUsBKF0jpXZTvM0,61
|
|
102
|
-
klaude_code/llm/google/client.py,sha256=
|
|
103
|
-
klaude_code/llm/google/input.py,sha256=
|
|
104
|
+
klaude_code/llm/google/client.py,sha256=SfNgAHKYcL-V4NGEET34lFkSTFE5NdHjsRJK4h1lZeI,13721
|
|
105
|
+
klaude_code/llm/google/input.py,sha256=EVO-EHbLeD8mSW_3sglfboJzGUwGt2zXqoNRmw__Cbo,8378
|
|
104
106
|
klaude_code/llm/image.py,sha256=jt9FBPFhAIo48pauIEJMIhB9WuDt4wwNs9s3LiEsETE,4272
|
|
105
107
|
klaude_code/llm/input_common.py,sha256=B1QtRJspDXLdbvzykSn-FWjyi1047GeTmQnaAicCCAg,6219
|
|
106
108
|
klaude_code/llm/openai_compatible/__init__.py,sha256=ACGpnki7k53mMcCl591aw99pm9jZOZk0ghr7atOfNps,81
|
|
107
109
|
klaude_code/llm/openai_compatible/client.py,sha256=jAcIJc7SPd7IgpFNbp-rBcPFVNcRqgSEar-shf8z1RI,5007
|
|
108
|
-
klaude_code/llm/openai_compatible/input.py,sha256=
|
|
109
|
-
klaude_code/llm/openai_compatible/stream.py,sha256=
|
|
110
|
+
klaude_code/llm/openai_compatible/input.py,sha256=VpgT2wbph6bFsB6OFWKnIdjE32W_gKA_p39T-xuJPrE,3217
|
|
111
|
+
klaude_code/llm/openai_compatible/stream.py,sha256=1z3d5rEX-RxNse2aSlqiF_EsUiNTGb4WleNeIF6HXaI,12986
|
|
110
112
|
klaude_code/llm/openai_compatible/tool_call_accumulator.py,sha256=quajimkUR1uSIPVXYsVNiQSTnOSVt7WuyZ23RyT7lJs,4906
|
|
111
113
|
klaude_code/llm/openrouter/__init__.py,sha256=_As8lHjwj6vapQhLorZttTpukk5ZiCdhFdGT38_ASPo,69
|
|
112
114
|
klaude_code/llm/openrouter/client.py,sha256=49kXzl4vsddU5zaTfM8dpTezgwd8LIpVPJ9ACK7Dro0,6017
|
|
113
|
-
klaude_code/llm/openrouter/input.py,sha256=
|
|
115
|
+
klaude_code/llm/openrouter/input.py,sha256=qlBCkPCQEZTZU_aWWPf-11zjwHh9qa468xgk9jIVg04,6198
|
|
114
116
|
klaude_code/llm/openrouter/reasoning.py,sha256=S0s3OAyfFVm5lHYmQqB3ZIUZlbnlV5zB2gNT3ZRbDZs,4335
|
|
115
117
|
klaude_code/llm/registry.py,sha256=wEf9wvbb9CMvlNDtndKzKY5LN3zqEJYPI2v9kIrqfGI,2235
|
|
116
118
|
klaude_code/llm/responses/__init__.py,sha256=WsiyvnNiIytaYcaAqNiB8GI-5zcpjjeODPbMlteeFjA,67
|
|
117
|
-
klaude_code/llm/responses/client.py,sha256=
|
|
118
|
-
klaude_code/llm/responses/input.py,sha256=
|
|
119
|
+
klaude_code/llm/responses/client.py,sha256=vb8w749A7xJyRSj6mlVw51rFRgCtpDvhMApJzU07Vjo,12581
|
|
120
|
+
klaude_code/llm/responses/input.py,sha256=T2mAzSR7-z7AFkUjw33c1U3UCBkGX9hlLJVJk5EUnzg,9178
|
|
119
121
|
klaude_code/llm/usage.py,sha256=Hukt4hKGUb2EnmwGy2-1Ku0oxEI6J7gOU0EsOSBBJAk,5034
|
|
120
122
|
klaude_code/log.py,sha256=vyCuV18DX0miengbJF9510UsBrWidSln-CM6pVCe0GA,9301
|
|
121
123
|
klaude_code/protocol/__init__.py,sha256=TTPnuyQ22RypoTGKdoiS7ZEgHzinuaRHUrauzHDh7Xo,246
|
|
122
|
-
klaude_code/protocol/commands.py,sha256=
|
|
124
|
+
klaude_code/protocol/commands.py,sha256=HuAwIUHfw77F2mKTKO2xnrOkmrnJPvoFE78ELJ2RDJQ,962
|
|
123
125
|
klaude_code/protocol/events/__init__.py,sha256=2KaHK32Bpo17eHiwVNEHmbdJOtjG3vO0NrbyLxJlkg8,1606
|
|
124
126
|
klaude_code/protocol/events/base.py,sha256=QfqgksjA2Hj-ClmwKVeJ7QA6Z7YdzjswO1NfAVnPCoI,335
|
|
125
127
|
klaude_code/protocol/events/chat.py,sha256=FB-fLLii7TN7r0FrvfgrhZT2x4sRsivjKHV8J2b5Bsw,426
|
|
126
128
|
klaude_code/protocol/events/lifecycle.py,sha256=5csZkv3oZIuLzs_7H84v8HgAYwbjIjkZOHfjxq9YfxM,357
|
|
127
129
|
klaude_code/protocol/events/metadata.py,sha256=oVZ1zanGcTEFkHW8fLEqS2Z1A9e1MMcjLOcNwUUuCBI,285
|
|
128
130
|
klaude_code/protocol/events/streaming.py,sha256=U1plGQSTeGZa3E4fIxW_fHXJpuv_DSIBrmGh1l4Fm54,708
|
|
129
|
-
klaude_code/protocol/events/system.py,sha256=
|
|
131
|
+
klaude_code/protocol/events/system.py,sha256=ihWZLNyPO0xvHAVjMkbGt2FqL8m-ZVreq-MTZLfxQnc,1453
|
|
130
132
|
klaude_code/protocol/events/tools.py,sha256=8ds_8Zj-wQWvHNAvNt1-fSIHeDffw1dsLWI7ByrAqcM,617
|
|
131
133
|
klaude_code/protocol/llm_param.py,sha256=nyk5bW3AF8KziDawcImwDLiFiv07bu1ci62TslWxUkg,5161
|
|
132
|
-
klaude_code/protocol/message.py,sha256=
|
|
134
|
+
klaude_code/protocol/message.py,sha256=pu-wvInS781y-qSKbl9MqO7k3CtAN7Yu4hUHJCXKjZQ,6210
|
|
133
135
|
klaude_code/protocol/model.py,sha256=tBwvGlmsI_GPsYrCuk5-QHqC-v0UgBSdm9UjEPOvTiM,10805
|
|
134
|
-
klaude_code/protocol/op.py,sha256=
|
|
135
|
-
klaude_code/protocol/op_handler.py,sha256=
|
|
136
|
-
klaude_code/protocol/sub_agent/
|
|
136
|
+
klaude_code/protocol/op.py,sha256=_H4l6POFukwOW-Bkps58RWePuRMNNtKEQ0mxwcBxnGU,6314
|
|
137
|
+
klaude_code/protocol/op_handler.py,sha256=B-dmye-6fgQNUDSa2s9cnHogz_Jl4yoQ9EiNgkgjjtA,1973
|
|
138
|
+
klaude_code/protocol/sub_agent/AGENTS.md,sha256=DHeHl11PYprTOQxInENCEnwnh3kIztBLjvETkwWAO08,1299
|
|
139
|
+
klaude_code/protocol/sub_agent/__init__.py,sha256=RKPFJawd0AB7nRYBxdwuG-14D8pT6HF1-DPCTAxwohI,3784
|
|
137
140
|
klaude_code/protocol/sub_agent/explore.py,sha256=beDpcPFUds54JLhQyVEpuhVp5xm5hRnkp6F3gMCIvw8,2712
|
|
138
|
-
klaude_code/protocol/sub_agent/image_gen.py,sha256=
|
|
141
|
+
klaude_code/protocol/sub_agent/image_gen.py,sha256=T6zf29-rDiO8qg8VG-Mdpe0fEAnNB6kx1iZLyZW0ZMY,4897
|
|
139
142
|
klaude_code/protocol/sub_agent/task.py,sha256=96XHxbySu_zdM2K6WjlkPFGXoVDVrLiK2hew1cmwGS4,4290
|
|
140
143
|
klaude_code/protocol/sub_agent/web.py,sha256=XZEfY-bKhpw9RZPkrcohLQDMufQITeeweW7ZOHgk2Ao,3200
|
|
141
144
|
klaude_code/protocol/tools.py,sha256=T0mzW9EhidVMNkwH-KTeB5FgwMvXBnV_MYE5ytrU1TM,343
|
|
142
145
|
klaude_code/session/__init__.py,sha256=4sw81uQvEd3YUOOjamKk1KqGmxeb4Ic9T1Tee5zztyU,241
|
|
143
|
-
klaude_code/session/codec.py,sha256=
|
|
146
|
+
klaude_code/session/codec.py,sha256=a374UZkOusn9MgFCc--yznDljK_4Qfy6yDPfhQq5_P0,1889
|
|
144
147
|
klaude_code/session/export.py,sha256=Oa0BdrqipFGkGp62dAsvQ-bPQr0HFAQBpAb7OmgaNno,38926
|
|
145
148
|
klaude_code/session/selector.py,sha256=snBpnz9UQCe_0K8HttSGCJECCE4YEzpWs_Fdmk2P9nI,2195
|
|
146
|
-
klaude_code/session/session.py,sha256=
|
|
149
|
+
klaude_code/session/session.py,sha256=j7BwWWiop-TofhRlrGrQOHB5Fa1UUHOoj3WFrLEQ19c,23117
|
|
147
150
|
klaude_code/session/store.py,sha256=HRrmFzwEVdExqDQlT9FBZOhlFtQmM9Im9zco8pzvUMY,6455
|
|
148
151
|
klaude_code/session/templates/export_session.html,sha256=GRSx1dfRKCSNgKqP51Rs6mT6xWo_ntZrep4-ZzlKru8,125862
|
|
149
152
|
klaude_code/session/templates/mermaid_viewer.html,sha256=Y_wEWFm4mKWpfAz3YMis5DdLEkhw_2d8CpU6jbvGZow,27842
|
|
150
153
|
klaude_code/skill/__init__.py,sha256=yeWeCfRGPOhT4mx_pjdo4fLondQ_Vx0edBtnFusLhls,839
|
|
151
|
-
klaude_code/skill/assets/create-plan/SKILL.md,sha256=
|
|
154
|
+
klaude_code/skill/assets/create-plan/SKILL.md,sha256=g_SLyBid2dwj56FBzh87lZGu1t08edLs0plimT2uNzs,2481
|
|
152
155
|
klaude_code/skill/assets/deslop/SKILL.md,sha256=XMBER6gOyYnZof_u7l30CZSzmDcINe8XP-n_loah0EQ,873
|
|
153
156
|
klaude_code/skill/assets/handoff/SKILL.md,sha256=GDHrEqWUeAQy7gGhha_y5jzjpv8C-xhk0hqMH5h59v8,1712
|
|
154
157
|
klaude_code/skill/assets/jj-workspace/SKILL.md,sha256=toxoyrBBoGl9Yv4PYrw_gD071LLZ2RoepUR8qTDRn1M,977
|
|
@@ -157,77 +160,75 @@ klaude_code/skill/loader.py,sha256=dq-92iX4RWUZd8sFO3KZySOVf5-M6xev29tJlaC0Ivw,8
|
|
|
157
160
|
klaude_code/skill/manager.py,sha256=qPUaZmbKO6f6kF-a948spinRQTCHB4ek7k9TV3elaTE,3448
|
|
158
161
|
klaude_code/skill/system_skills.py,sha256=ryGN07t0Xv2Yn_Prfq072tdIN0Dp4ZpdXLTl7O7rCkg,6122
|
|
159
162
|
klaude_code/tui/__init__.py,sha256=Q8-0D-uesw3oFwHcFLD5UaWlTFbrj8qV7dSn6C6_g_o,274
|
|
160
|
-
klaude_code/tui/command/__init__.py,sha256=
|
|
161
|
-
klaude_code/tui/command/clear_cmd.py,sha256=
|
|
162
|
-
klaude_code/tui/command/command_abc.py,sha256=
|
|
163
|
-
klaude_code/tui/command/copy_cmd.py,sha256=
|
|
163
|
+
klaude_code/tui/command/__init__.py,sha256=qeQYDQ93mCOgP4SdHTXcMvrqQ8xdmMiNH-nBzmMUqIw,3477
|
|
164
|
+
klaude_code/tui/command/clear_cmd.py,sha256=Z3fk7KskzmxdLTcHcJwNkk6C8cKszDQ9FjuHBSAIpHQ,771
|
|
165
|
+
klaude_code/tui/command/command_abc.py,sha256=CcF3P5jXIecANWovwloDp3YbIp8So5X_6AFFrc6KObc,2497
|
|
166
|
+
klaude_code/tui/command/copy_cmd.py,sha256=hx47q08W5aVbbIzA_-EaB3pTn86gIYWlx9jOQsj3aVg,1879
|
|
164
167
|
klaude_code/tui/command/debug_cmd.py,sha256=KkVsspq3o_b4fB2u9Qms-LJQYVI7ZGn6uvSkp3pZZgE,2744
|
|
165
168
|
klaude_code/tui/command/export_cmd.py,sha256=KdFlOMJ6gruKYnd_24eWJJb21t9gLVwI1FnN1s08m5U,1609
|
|
166
169
|
klaude_code/tui/command/export_online_cmd.py,sha256=26cPEh6lJW8hwUV1i4q3Be3AThzbPHJI9FuvTfhtJFU,6163
|
|
167
|
-
klaude_code/tui/command/fork_session_cmd.py,sha256=
|
|
168
|
-
klaude_code/tui/command/
|
|
169
|
-
klaude_code/tui/command/
|
|
170
|
-
klaude_code/tui/command/model_select.py,sha256=gmttq2I-KDDyU-mCZd4WnqkVkMMpsBP7-fOo0ONjxZ8,3189
|
|
171
|
-
klaude_code/tui/command/prompt-commit.md,sha256=6hv1lrf8SkwNp1ptw0wn8uNydg5uxgna88eUo6Uqr3w,2400
|
|
170
|
+
klaude_code/tui/command/fork_session_cmd.py,sha256=S64v9P7GXrHQaFb4mVqqy4hRfHDH5-2cPLSFP_i1LX8,10084
|
|
171
|
+
klaude_code/tui/command/model_cmd.py,sha256=BQOhhvNJEiqPdRdkz4_54J1w5Jr7nq5Z7ePmlPZ3lDE,1891
|
|
172
|
+
klaude_code/tui/command/model_select.py,sha256=gN7YNI4VA3iybefLfVPztcRymhRoqbWC9thEyq1UrHo,5743
|
|
172
173
|
klaude_code/tui/command/prompt-init.md,sha256=a4_FQ3gKizqs2vl9oEY5jtG6HNhv3f-1b5RSCFq0A18,1873
|
|
173
174
|
klaude_code/tui/command/prompt_command.py,sha256=PGGoH_ZgA-0kTtpjk19rDSsWjiZyAEoUlxnSp8B8GRQ,2764
|
|
174
|
-
klaude_code/tui/command/refresh_cmd.py,sha256=
|
|
175
|
+
klaude_code/tui/command/refresh_cmd.py,sha256=qGFyzGrlUO2MpdVqKr14JEmyVL_q0C5mFh0H53AUR0E,1282
|
|
175
176
|
klaude_code/tui/command/registry.py,sha256=LdVGBTK64XqGtCj2eUqU2rNdX4tbiWvmTv25HuQPnBU,7253
|
|
176
|
-
klaude_code/tui/command/
|
|
177
|
-
klaude_code/tui/command/
|
|
178
|
-
klaude_code/tui/command/
|
|
177
|
+
klaude_code/tui/command/resume_cmd.py,sha256=hARQaE6R0bH8gAAFoCEpbgr_3bCOHCwmgNHVra30jRY,4133
|
|
178
|
+
klaude_code/tui/command/status_cmd.py,sha256=laqho0wP6G2OioEMQrF87RFcp2pEveCdmqxar9peHpY,5384
|
|
179
|
+
klaude_code/tui/command/sub_agent_model_cmd.py,sha256=czf78k_9lL6XcswQLOjnA1kqT7q9vkhboL8u7TsP6Xs,6310
|
|
179
180
|
klaude_code/tui/command/terminal_setup_cmd.py,sha256=C2kXelp8DZsMYZ08Gun-kgvtr07HIclcCNfwQtXgY18,10910
|
|
180
181
|
klaude_code/tui/command/thinking_cmd.py,sha256=Lf4SgLi7-mtr6sIJDqOz9Zzeue_cHwWzCCl0NLE_bpY,3072
|
|
181
182
|
klaude_code/tui/commands.py,sha256=jIQHE9Nk7bIxbNJ2cgnUgGbitRA1O8HSSceXfqjyLMk,3261
|
|
182
183
|
klaude_code/tui/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
183
184
|
klaude_code/tui/components/assistant.py,sha256=3VUIGf_BJhmoWZ5bHw-QUTMElUxp-MZQKUMWNimHKLE,904
|
|
184
|
-
klaude_code/tui/components/bash_syntax.py,sha256=
|
|
185
|
-
klaude_code/tui/components/common.py,sha256=
|
|
186
|
-
klaude_code/tui/components/developer.py,sha256=
|
|
185
|
+
klaude_code/tui/components/bash_syntax.py,sha256=0Pceo8w7jbK56smaVSBzkZYgCXzqqy7Qnx6kDZOh1yA,7450
|
|
186
|
+
klaude_code/tui/components/common.py,sha256=ajslaejKj-ZnHFGcMenkmUN3k7PNKrIEZZIB74VE-rQ,4663
|
|
187
|
+
klaude_code/tui/components/developer.py,sha256=aBgNJ-a3c3UQJIrleoqtVHB05grg0EOH-Gg-383RQek,9756
|
|
187
188
|
klaude_code/tui/components/diffs.py,sha256=JUokkkJeTIoKD0b-c-chMzIDmMjivBQqH8DYXIA3hHs,10411
|
|
188
189
|
klaude_code/tui/components/errors.py,sha256=_9ojf-23ThR-BoMwNEYG68rzILwA_O59muGvofYL10w,669
|
|
189
190
|
klaude_code/tui/components/mermaid_viewer.py,sha256=MstufMnTauMKzI8cKngXpFqVo-qya20P8ReNkplYtEw,3098
|
|
190
|
-
klaude_code/tui/components/metadata.py,sha256=
|
|
191
|
+
klaude_code/tui/components/metadata.py,sha256=fhfXia7EN8r7IXpzKxflTJy5M6cL9hDFMXbhwnnNR6U,7235
|
|
191
192
|
klaude_code/tui/components/rich/__init__.py,sha256=zEZjnHR3Fnv_sFMxwIMjoJfwDoC4GRGv3lHJzAGRq_o,236
|
|
192
|
-
klaude_code/tui/components/rich/cjk_wrap.py,sha256=
|
|
193
|
+
klaude_code/tui/components/rich/cjk_wrap.py,sha256=eMqBxftUtll7zrytUb9WtJ6naYLyax0W4KJRpGwWulM,7602
|
|
193
194
|
klaude_code/tui/components/rich/code_panel.py,sha256=ZKuJHh-kh-hIkBXSGLERLaDbJ7I9hvtvmYKocJn39_w,4744
|
|
194
195
|
klaude_code/tui/components/rich/live.py,sha256=xiMT6dPsxM_jaazddKrV9CMJQWwpe2t9OdjffHvo1JU,2821
|
|
195
196
|
klaude_code/tui/components/rich/markdown.py,sha256=wgTRzDJTcI2u5vr_WbAnoBjQHcSe4RIrpOdynw1nBB8,19286
|
|
196
197
|
klaude_code/tui/components/rich/quote.py,sha256=gTLwxSPQd9nlp73P1ysQIEgOb-BoTE2gzyiPBLMiHcY,3834
|
|
197
198
|
klaude_code/tui/components/rich/searchable_text.py,sha256=PUe6MotKxSBY4FlPeojVjVQgxCsx_jiQ41bCzLp8WvE,2271
|
|
198
|
-
klaude_code/tui/components/rich/status.py,sha256=
|
|
199
|
-
klaude_code/tui/components/rich/theme.py,sha256=
|
|
200
|
-
klaude_code/tui/components/sub_agent.py,sha256=
|
|
199
|
+
klaude_code/tui/components/rich/status.py,sha256=kNt08FQGvMZJB-zUhT5UyVFA7jvuRBNqf6yDXLEhb9c,14756
|
|
200
|
+
klaude_code/tui/components/rich/theme.py,sha256=KCPY3Kv5uYpnlULv131XSvW7yDe2z3lx1P2kxLNcCRs,15151
|
|
201
|
+
klaude_code/tui/components/sub_agent.py,sha256=YfcmFzyNKuFNr0pqaJHTEf_AmkKyEN0xnx7bfHPNYA0,6079
|
|
201
202
|
klaude_code/tui/components/thinking.py,sha256=AXC7Xpyiu7ST-eWGLRGY7N8Dak2ny3lV3mvznmfqKmM,2890
|
|
202
203
|
klaude_code/tui/components/tools.py,sha256=xqrWBDPsVtOeyE-qF_Idzr1Dhf5bjgrvl-v6svv-H3Q,26230
|
|
203
|
-
klaude_code/tui/components/user_input.py,sha256=
|
|
204
|
+
klaude_code/tui/components/user_input.py,sha256=6VHH77xwUUW0rW7yv8hOwGXsmK52HEsBg9-QZVbOm1A,3427
|
|
205
|
+
klaude_code/tui/components/welcome.py,sha256=GXws5bejMcQfChA631m8v_OWSpTuQ9P9hhaqJrY0nyg,3768
|
|
204
206
|
klaude_code/tui/display.py,sha256=ovM1F8GDG0gTQjOV2KaXnjE9HFHf7AtThqSIXkP6JQY,3073
|
|
205
207
|
klaude_code/tui/input/__init__.py,sha256=cAB38ypo7dHo_jgXUCnoBTUKHtiriVaKCv4YepSU9SU,276
|
|
206
208
|
klaude_code/tui/input/clipboard.py,sha256=HjThFB9MG_YdJ76CQv7B-IUoz5JarbWUZDbUVkH1LpY,5106
|
|
207
209
|
klaude_code/tui/input/completers.py,sha256=lkDBjnqYPLMgR6AZHhx2bfT_vMW-fbV6aqY9SqRwq74,32571
|
|
208
210
|
klaude_code/tui/input/key_bindings.py,sha256=2uN48J1HRHeCBqq7WrH5J82NIU59oQscce0HquAiYCI,18876
|
|
209
|
-
klaude_code/tui/input/prompt_toolkit.py,sha256=
|
|
211
|
+
klaude_code/tui/input/prompt_toolkit.py,sha256=2Yz9gn-hbFHVnjaeHod5heX2NutHTuvbo6IjuPDI_Ls,27815
|
|
210
212
|
klaude_code/tui/machine.py,sha256=1aA2iYjCjF6VQ1x62wWtiY4Jqzn2R8-hkDOb2vNw6e8,23355
|
|
211
|
-
klaude_code/tui/renderer.py,sha256=
|
|
212
|
-
klaude_code/tui/runner.py,sha256=
|
|
213
|
+
klaude_code/tui/renderer.py,sha256=WD2-oHCAltp9-7EJ5KwivXmVIQydwe3JT33N_TuJcUo,29424
|
|
214
|
+
klaude_code/tui/runner.py,sha256=crdwlPcqSrqG0HNsuzd6yfrFHMTZa4GNAeQzjq788eA,11542
|
|
213
215
|
klaude_code/tui/terminal/__init__.py,sha256=GIMnsEcIAGT_vBHvTlWEdyNmAEpruyscUA6M_j3GQZU,1412
|
|
214
216
|
klaude_code/tui/terminal/color.py,sha256=6SJR2RA8cqJINNoRz65w0HL3x9g46ydIvDOGWMeNnQU,7195
|
|
215
217
|
klaude_code/tui/terminal/control.py,sha256=m2fL6uHum5Li25X2IPnI4z_oVzMpVYcSldB-r0NLLzk,4920
|
|
216
218
|
klaude_code/tui/terminal/image.py,sha256=ytzmw1J3fmaq49nWTDRmK_7aMIGbdUPCtVccSpVRHxY,1195
|
|
217
219
|
klaude_code/tui/terminal/notifier.py,sha256=-aTtgRvpzQcfbkOfbeDOfUs3l9smNBZX-60G9f0326Y,4643
|
|
218
220
|
klaude_code/tui/terminal/progress_bar.py,sha256=Go-0_ZodrmJVaQodaPnyxVU2nkpkBaYLnZBqwAUQukE,2133
|
|
219
|
-
klaude_code/tui/terminal/selector.py,sha256=
|
|
220
|
-
klaude_code/ui/__init__.py,sha256=
|
|
221
|
-
klaude_code/ui/common.py,sha256=
|
|
221
|
+
klaude_code/tui/terminal/selector.py,sha256=mxsk4PHSmVfUxikzcTCivUePdy3pPdOE4IwatZeioXA,24057
|
|
222
|
+
klaude_code/ui/__init__.py,sha256=3k9Sbesq0nNN3jcSMDqJ4zUcys4PKzGg4Xsum-6dZis,451
|
|
223
|
+
klaude_code/ui/common.py,sha256=_KmCNM-U8VowObYkfq8e9cyuvN1dF85P56hG8tGYlts,4309
|
|
222
224
|
klaude_code/ui/core/__init__.py,sha256=2NakrTDcxem5D0atyEY_Rxv1BbKCeZweF63L6AAq6r8,23
|
|
223
|
-
klaude_code/ui/core/display.py,sha256=
|
|
225
|
+
klaude_code/ui/core/display.py,sha256=wk3_4-SE93BpxJOrx9MzEouMc4wTsYo7bBj9eeJO-ik,3569
|
|
224
226
|
klaude_code/ui/core/input.py,sha256=8wXszl2Es6BbpqUjXMZka-7zc1d0kuySCxJUiDGHTaY,2593
|
|
225
227
|
klaude_code/ui/debug_mode.py,sha256=ZvqbOx4c_rUerMbEZzOfcbNf9leqEDFjqJUlALtzF9Y,1111
|
|
226
|
-
klaude_code/ui/exec_mode.py,sha256=8-eGJeoJo1ke9Atpeu4JErh4A0GcrHYvALktfnqQygE,1765
|
|
227
228
|
klaude_code/ui/terminal/__init__.py,sha256=5OeAzr994r8-peWsLON0iXsAvJ2pexwMp36JY7FKGDc,179
|
|
228
229
|
klaude_code/ui/terminal/title.py,sha256=EZpLXTMhunsZPVGaxP317lH0Ad2oOh7OsjbV3yRD5is,1115
|
|
229
230
|
klaude_code/update.py,sha256=QER816AZe9u3RhRvP0Z37Jh2Ch5RLy9PREyDsI0e1dA,4480
|
|
230
|
-
klaude_code-2.
|
|
231
|
-
klaude_code-2.
|
|
232
|
-
klaude_code-2.
|
|
233
|
-
klaude_code-2.
|
|
231
|
+
klaude_code-2.3.0.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
|
|
232
|
+
klaude_code-2.3.0.dist-info/entry_points.txt,sha256=kkXIXedaTOtjXPr2rVjRVVXZYlFUcBHELaqmyVlWUFA,92
|
|
233
|
+
klaude_code-2.3.0.dist-info/METADATA,sha256=RHeaq1sIMCIPbyRqGULF_QG7VD3lJzueAmfMCtKK9zk,11498
|
|
234
|
+
klaude_code-2.3.0.dist-info/RECORD,,
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
from klaude_code.protocol import commands, events, message, model
|
|
2
|
-
|
|
3
|
-
from .command_abc import Agent, CommandABC, CommandResult
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class HelpCommand(CommandABC):
|
|
7
|
-
"""Display help information for all available slash commands."""
|
|
8
|
-
|
|
9
|
-
@property
|
|
10
|
-
def name(self) -> commands.CommandName:
|
|
11
|
-
return commands.CommandName.HELP
|
|
12
|
-
|
|
13
|
-
@property
|
|
14
|
-
def summary(self) -> str:
|
|
15
|
-
return "Show help and available commands"
|
|
16
|
-
|
|
17
|
-
async def run(self, agent: Agent, user_input: message.UserInputPayload) -> CommandResult:
|
|
18
|
-
del user_input # unused
|
|
19
|
-
lines: list[str] = [
|
|
20
|
-
"""
|
|
21
|
-
Usage:
|
|
22
|
-
[b]@[/b] to mention file
|
|
23
|
-
[b]esc[/b] to interrupt agent task
|
|
24
|
-
[b]shift-enter[/b] or [b]ctrl-j[/b] for new line
|
|
25
|
-
[b]ctrl-v[/b] for pasting image
|
|
26
|
-
[b]ctrl-l[/b] to switch model
|
|
27
|
-
[b]ctrl-t[/b] to switch thinking level
|
|
28
|
-
[b]--continue[/b] or [b]--resume[/b] to continue an old session
|
|
29
|
-
|
|
30
|
-
Available slash commands:"""
|
|
31
|
-
]
|
|
32
|
-
|
|
33
|
-
# Import here to avoid circular dependency
|
|
34
|
-
from .registry import get_commands
|
|
35
|
-
|
|
36
|
-
commands = get_commands()
|
|
37
|
-
|
|
38
|
-
if commands:
|
|
39
|
-
for cmd_name, cmd_obj in sorted(commands.items()):
|
|
40
|
-
placeholder = f" \\[{cmd_obj.placeholder}]" if cmd_obj.support_addition_params else ""
|
|
41
|
-
lines.append(f" [b]/{cmd_name}[/b]{placeholder} — {cmd_obj.summary}")
|
|
42
|
-
|
|
43
|
-
event = events.DeveloperMessageEvent(
|
|
44
|
-
session_id=agent.session.id,
|
|
45
|
-
item=message.DeveloperMessage(
|
|
46
|
-
parts=message.text_parts_from_str("\n".join(lines)),
|
|
47
|
-
ui_extra=model.build_command_output_extra(self.name),
|
|
48
|
-
),
|
|
49
|
-
)
|
|
50
|
-
|
|
51
|
-
return CommandResult(events=[event])
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Commit current git changes
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
## Workflow
|
|
6
|
-
|
|
7
|
-
### Step 1: Detect version control system
|
|
8
|
-
|
|
9
|
-
Check if `jj` is available in the current environment. (check in your <env> tag)
|
|
10
|
-
|
|
11
|
-
### Step 2: Run pre-commit checks
|
|
12
|
-
|
|
13
|
-
Before creating a commit, run the following checks:
|
|
14
|
-
|
|
15
|
-
1. Run the project's linter to check and fix code style issues
|
|
16
|
-
2. Run the project's test suite to ensure all tests pass
|
|
17
|
-
3. If either check fails, stop the commit process and report the errors to the user
|
|
18
|
-
4. If both checks pass, proceed to the next step
|
|
19
|
-
|
|
20
|
-
### Step 3A: If jj is available
|
|
21
|
-
|
|
22
|
-
1. Run `jj status` and `jj log -r 'ancestors(@, 10)'` to see working copy changes and the last 10 changes
|
|
23
|
-
2. For each change that has no description (shows as "(no description set)"):
|
|
24
|
-
- Run `jj diff -r <change_id> --git` to view the diff
|
|
25
|
-
- Read related files if needed to understand the context
|
|
26
|
-
- Use `jj describe -r <change_id>` to add a meaningful description
|
|
27
|
-
|
|
28
|
-
### Step 2B: If jj is not available (git)
|
|
29
|
-
|
|
30
|
-
1. Run `git status` to check working directory state
|
|
31
|
-
2. Run `git diff --cached` to check if there are staged changes
|
|
32
|
-
3. If staging area has content:
|
|
33
|
-
- Ask the user: "Staging area has changes. Commit only staged changes, or stage and commit all changes?"
|
|
34
|
-
- If user chooses staged only: proceed with staged changes
|
|
35
|
-
- If user chooses all: run `git add -A` first
|
|
36
|
-
4. If staging area is empty:
|
|
37
|
-
- Run `git add -A` to stage all changes
|
|
38
|
-
5. Review the changes with `git diff --cached`
|
|
39
|
-
6. Create the commit
|
|
40
|
-
|
|
41
|
-
## Commit Message Format
|
|
42
|
-
|
|
43
|
-
In order to ensure good formatting, ALWAYS pass the commit message via a HEREDOC:
|
|
44
|
-
|
|
45
|
-
For jj:
|
|
46
|
-
```bash
|
|
47
|
-
jj describe -m "$(cat <<'EOF'
|
|
48
|
-
Commit message here.
|
|
49
|
-
EOF
|
|
50
|
-
)"
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
For git:
|
|
54
|
-
```bash
|
|
55
|
-
git commit -m "$(cat <<'EOF'
|
|
56
|
-
Commit message here.
|
|
57
|
-
EOF
|
|
58
|
-
)"
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## Message Style
|
|
62
|
-
|
|
63
|
-
Follow the [Conventional Commits](https://www.conventionalcommits.org/) specification:
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
<type>(<scope>): <description>
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
Types:
|
|
70
|
-
- `feat`: New feature
|
|
71
|
-
- `fix`: Bug fix
|
|
72
|
-
- `docs`: Documentation changes
|
|
73
|
-
- `style`: Code style changes (formatting, no logic change)
|
|
74
|
-
- `refactor`: Code refactoring (no feature or fix)
|
|
75
|
-
- `test`: Adding or updating tests
|
|
76
|
-
- `chore`: Build process, dependencies, or tooling changes
|
|
77
|
-
|
|
78
|
-
Examples:
|
|
79
|
-
- `feat(cli): add --verbose flag for debug output`
|
|
80
|
-
- `fix(llm): handle API timeout errors gracefully`
|
|
81
|
-
- `docs(readme): update installation instructions`
|
|
82
|
-
- `refactor(core): simplify session state management`
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
|
-
|
|
3
|
-
from klaude_code.protocol import commands, events, message, model
|
|
4
|
-
|
|
5
|
-
from .command_abc import Agent, CommandABC, CommandResult
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def _read_changelog() -> str:
|
|
9
|
-
"""Read CHANGELOG.md from project root."""
|
|
10
|
-
changelog_path = Path(__file__).parent.parent.parent.parent / "CHANGELOG.md"
|
|
11
|
-
if not changelog_path.exists():
|
|
12
|
-
return "CHANGELOG.md not found"
|
|
13
|
-
return changelog_path.read_text(encoding="utf-8")
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def _extract_releases(changelog: str, count: int = 1) -> str:
|
|
17
|
-
"""Extract release sections from changelog in reverse order (oldest first).
|
|
18
|
-
|
|
19
|
-
Args:
|
|
20
|
-
changelog: The full changelog content.
|
|
21
|
-
count: Number of releases to extract (default 1).
|
|
22
|
-
|
|
23
|
-
Returns:
|
|
24
|
-
The content of the specified number of releases, with newest at bottom.
|
|
25
|
-
"""
|
|
26
|
-
lines = changelog.split("\n")
|
|
27
|
-
releases: list[list[str]] = []
|
|
28
|
-
current_release: list[str] = []
|
|
29
|
-
version_count = 0
|
|
30
|
-
|
|
31
|
-
for line in lines:
|
|
32
|
-
# Skip [Unreleased] section header
|
|
33
|
-
if line.startswith("## [Unreleased]"):
|
|
34
|
-
continue
|
|
35
|
-
|
|
36
|
-
# Check for version header (e.g., ## [1.2.8] - 2025-12-01)
|
|
37
|
-
if line.startswith("## [") and "]" in line:
|
|
38
|
-
if current_release:
|
|
39
|
-
releases.append(current_release)
|
|
40
|
-
version_count += 1
|
|
41
|
-
if version_count > count:
|
|
42
|
-
break
|
|
43
|
-
current_release = [line]
|
|
44
|
-
continue
|
|
45
|
-
|
|
46
|
-
if version_count > 0:
|
|
47
|
-
current_release.append(line)
|
|
48
|
-
|
|
49
|
-
# Append the last release if exists
|
|
50
|
-
if current_release and version_count <= count:
|
|
51
|
-
releases.append(current_release)
|
|
52
|
-
|
|
53
|
-
if not releases:
|
|
54
|
-
return "No release notes found"
|
|
55
|
-
|
|
56
|
-
# Reverse to show oldest first, newest last
|
|
57
|
-
releases.reverse()
|
|
58
|
-
return "\n".join("\n".join(release) for release in releases).strip()
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
class ReleaseNotesCommand(CommandABC):
|
|
62
|
-
"""Display the latest release notes from CHANGELOG.md."""
|
|
63
|
-
|
|
64
|
-
@property
|
|
65
|
-
def name(self) -> commands.CommandName:
|
|
66
|
-
return commands.CommandName.RELEASE_NOTES
|
|
67
|
-
|
|
68
|
-
@property
|
|
69
|
-
def summary(self) -> str:
|
|
70
|
-
return "Show the latest release notes"
|
|
71
|
-
|
|
72
|
-
async def run(self, agent: Agent, user_input: message.UserInputPayload) -> CommandResult:
|
|
73
|
-
del user_input # unused
|
|
74
|
-
changelog = _read_changelog()
|
|
75
|
-
content = _extract_releases(changelog, count=10)
|
|
76
|
-
|
|
77
|
-
event = events.DeveloperMessageEvent(
|
|
78
|
-
session_id=agent.session.id,
|
|
79
|
-
item=message.DeveloperMessage(
|
|
80
|
-
parts=message.text_parts_from_str(content),
|
|
81
|
-
ui_extra=model.build_command_output_extra(self.name),
|
|
82
|
-
),
|
|
83
|
-
)
|
|
84
|
-
|
|
85
|
-
return CommandResult(events=[event])
|
klaude_code/ui/exec_mode.py
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import sys
|
|
2
|
-
from typing import override
|
|
3
|
-
|
|
4
|
-
from klaude_code.protocol import events
|
|
5
|
-
from klaude_code.ui.core.display import DisplayABC
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class ExecDisplay(DisplayABC):
|
|
9
|
-
"""A display implementation for exec mode - only handles TaskFinishEvent."""
|
|
10
|
-
|
|
11
|
-
@override
|
|
12
|
-
async def consume_event(self, event: events.Event) -> None:
|
|
13
|
-
"""Only handle TaskFinishEvent."""
|
|
14
|
-
match event:
|
|
15
|
-
case events.TaskStartEvent():
|
|
16
|
-
pass
|
|
17
|
-
case events.ErrorEvent() as e:
|
|
18
|
-
print(f"Error: {e.error_message}")
|
|
19
|
-
case events.TaskFinishEvent() as e:
|
|
20
|
-
# Print the task result when task finishes
|
|
21
|
-
if e.task_result.strip():
|
|
22
|
-
print(e.task_result)
|
|
23
|
-
case _:
|
|
24
|
-
# Ignore all other events
|
|
25
|
-
pass
|
|
26
|
-
|
|
27
|
-
@override
|
|
28
|
-
async def start(self) -> None:
|
|
29
|
-
"""Do nothing on start."""
|
|
30
|
-
pass
|
|
31
|
-
|
|
32
|
-
@override
|
|
33
|
-
async def stop(self) -> None:
|
|
34
|
-
"""Do nothing on stop."""
|
|
35
|
-
pass
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
class StreamJsonDisplay(DisplayABC):
|
|
39
|
-
"""A display implementation that streams all events as JSON lines."""
|
|
40
|
-
|
|
41
|
-
@override
|
|
42
|
-
async def consume_event(self, event: events.Event) -> None:
|
|
43
|
-
"""Stream each event as a JSON line."""
|
|
44
|
-
if isinstance(event, events.EndEvent):
|
|
45
|
-
return
|
|
46
|
-
event_type = type(event).__name__
|
|
47
|
-
json_data = event.model_dump_json()
|
|
48
|
-
# Output format: {"type": "EventName", "data": {...}}
|
|
49
|
-
print(f'{{"type": "{event_type}", "data": {json_data}}}', flush=True)
|
|
50
|
-
sys.stdout.flush()
|
|
51
|
-
|
|
52
|
-
@override
|
|
53
|
-
async def start(self) -> None:
|
|
54
|
-
"""Do nothing on start."""
|
|
55
|
-
pass
|
|
56
|
-
|
|
57
|
-
@override
|
|
58
|
-
async def stop(self) -> None:
|
|
59
|
-
"""Do nothing on stop."""
|
|
60
|
-
pass
|
|
File without changes
|
|
File without changes
|