klaude-code 2.2.0__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.
Files changed (52) hide show
  1. klaude_code/app/runtime.py +2 -15
  2. klaude_code/cli/list_model.py +27 -10
  3. klaude_code/cli/main.py +25 -9
  4. klaude_code/config/assets/builtin_config.yaml +25 -16
  5. klaude_code/config/config.py +144 -7
  6. klaude_code/config/select_model.py +38 -13
  7. klaude_code/config/sub_agent_model_helper.py +217 -0
  8. klaude_code/const.py +1 -1
  9. klaude_code/core/agent_profile.py +43 -5
  10. klaude_code/core/executor.py +75 -0
  11. klaude_code/core/manager/llm_clients_builder.py +17 -11
  12. klaude_code/core/prompts/prompt-nano-banana.md +1 -1
  13. klaude_code/core/tool/sub_agent_tool.py +2 -1
  14. klaude_code/llm/anthropic/client.py +7 -4
  15. klaude_code/llm/anthropic/input.py +54 -29
  16. klaude_code/llm/google/client.py +1 -1
  17. klaude_code/llm/google/input.py +23 -2
  18. klaude_code/llm/openai_compatible/input.py +22 -13
  19. klaude_code/llm/openrouter/input.py +37 -25
  20. klaude_code/llm/responses/input.py +96 -57
  21. klaude_code/protocol/commands.py +1 -2
  22. klaude_code/protocol/events/system.py +4 -0
  23. klaude_code/protocol/op.py +17 -0
  24. klaude_code/protocol/op_handler.py +5 -0
  25. klaude_code/protocol/sub_agent/AGENTS.md +28 -0
  26. klaude_code/protocol/sub_agent/__init__.py +10 -14
  27. klaude_code/protocol/sub_agent/image_gen.py +2 -1
  28. klaude_code/session/codec.py +2 -6
  29. klaude_code/session/session.py +9 -1
  30. klaude_code/skill/assets/create-plan/SKILL.md +3 -5
  31. klaude_code/tui/command/__init__.py +3 -6
  32. klaude_code/tui/command/model_cmd.py +6 -43
  33. klaude_code/tui/command/model_select.py +75 -15
  34. klaude_code/tui/command/sub_agent_model_cmd.py +190 -0
  35. klaude_code/tui/components/bash_syntax.py +1 -1
  36. klaude_code/tui/components/common.py +1 -1
  37. klaude_code/tui/components/developer.py +0 -5
  38. klaude_code/tui/components/metadata.py +1 -63
  39. klaude_code/tui/components/rich/cjk_wrap.py +3 -2
  40. klaude_code/tui/components/rich/status.py +49 -3
  41. klaude_code/tui/components/rich/theme.py +2 -0
  42. klaude_code/tui/components/sub_agent.py +25 -46
  43. klaude_code/tui/components/welcome.py +99 -0
  44. klaude_code/tui/input/prompt_toolkit.py +14 -1
  45. klaude_code/tui/renderer.py +2 -3
  46. klaude_code/tui/terminal/selector.py +5 -3
  47. {klaude_code-2.2.0.dist-info → klaude_code-2.3.0.dist-info}/METADATA +1 -1
  48. {klaude_code-2.2.0.dist-info → klaude_code-2.3.0.dist-info}/RECORD +50 -48
  49. klaude_code/tui/command/help_cmd.py +0 -51
  50. klaude_code/tui/command/release_notes_cmd.py +0 -85
  51. {klaude_code-2.2.0.dist-info → klaude_code-2.3.0.dist-info}/WHEEL +0 -0
  52. {klaude_code-2.2.0.dist-info → klaude_code-2.3.0.dist-info}/entry_points.txt +0 -0
@@ -54,7 +54,9 @@ def build_model_select_items(models: list[Any]) -> list[SelectItem[str]]:
54
54
  items: list[SelectItem[str]] = []
55
55
  for idx, m in enumerate(models, 1):
56
56
  model_id = m.model_params.model or "N/A"
57
- first_line_prefix = f"{m.model_name:<{max_model_name_length}} "
57
+ # Display the base model name only; provider stays in the meta section.
58
+ display_name = m.model_name
59
+ first_line_prefix = f"{display_name:<{max_model_name_length}} → "
58
60
  meta_parts: list[str] = [m.provider]
59
61
  meta_parts.extend(format_model_params(m.model_params))
60
62
  meta_str = " · ".join(meta_parts)
@@ -64,8 +66,8 @@ def build_model_select_items(models: list[Any]) -> list[SelectItem[str]]:
64
66
  ("class:msg bold", model_id),
65
67
  ("class:meta", f" {meta_str}\n"),
66
68
  ]
67
- search_text = f"{m.model_name} {model_id} {m.provider}"
68
- items.append(SelectItem(title=title, value=m.model_name, search_text=search_text))
69
+ search_text = f"{m.selector} {m.model_name} {model_id} {m.provider}"
70
+ items.append(SelectItem(title=title, value=m.selector, search_text=search_text))
69
71
 
70
72
  return items
71
73
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: klaude-code
3
- Version: 2.2.0
3
+ Version: 2.3.0
4
4
  Summary: Minimal code agent CLI
5
5
  Requires-Dist: anthropic>=0.66.0
6
6
  Requires-Dist: chardet>=5.2.0
@@ -1,6 +1,6 @@
1
1
  klaude_code/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  klaude_code/app/__init__.py,sha256=7mgWpN9SFDqe8AW44bBn9M19nVsBcZURrsGB_8l2hrU,264
3
- klaude_code/app/runtime.py,sha256=cibsTZsdSbITirv1waHUPNoFr-XGu_5lLutHWktyx8E,6746
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=IXYsrkwbvPF89jNDpbppIlyA7b_oNt0--TNN2LPGwAA,12811
21
- klaude_code/cli/main.py,sha256=SzBHYpPj0WO-yv6t9n7gx-sqU6Extp5c7rgaqpMzC2w,7873
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=wxzA5coCP0hYK7M4x6Z0BOj1ui5qYuT0qOFjtubSKDo,8477
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=aDMEIcjiNk-DdtybnOHPFViUgwdXp4xb-5osAMBjTzs,18209
29
- klaude_code/config/select_model.py,sha256=TZLs195a3fsu5JeXfoZAgz-UlRqVgJG6cwH69ovHOsM,5181
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=FmTyqqfcJN3CbrUHG-8FJNTP-Xu2C_5TDWhm-bLCDpE,10907
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=5330DD1kTFp9yzCDjOOPMiCzXWyLuMY6JgsvoeWPMUM,10609
35
- klaude_code/core/executor.py,sha256=CQ1HyrEpemNQIFYUhgd6ZIxC-h0UJAjYD7yJR0bbX3Y,31275
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=pwo0KeFWq3L4F_aq3L_Wwbu67UZOdJeK0rU-qlPnr-A,1635
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,7 +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
46
- klaude_code/core/prompts/prompt-nano-banana.md,sha256=Rk9a1YIoxYxJsIAHIt4Pa5VTVfafX9ckI0kURMVEVgk,30
47
+ klaude_code/core/prompts/prompt-nano-banana.md,sha256=3e5GUmtW41eX3pCUBB1j5TFgAM71XlFVyIsix66GEvY,81
47
48
  klaude_code/core/prompts/prompt-sub-agent-explore.md,sha256=21kFodjhvN0L-c_ZFo4yVhJOyzfgES-Dty9Vz_Ew9q8,2629
48
49
  klaude_code/core/prompts/prompt-sub-agent-image-gen.md,sha256=tXYKSzFd04OiC0dmVO9suMKeD5f9qo_4NsvqGo7irfI,78
49
50
  klaude_code/core/prompts/prompt-sub-agent-web.md,sha256=n7fcIs26Xnu_CvHda_S_k5LGTpV3njY04yo88FT_S9A,3602
@@ -69,7 +70,7 @@ klaude_code/core/tool/shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMp
69
70
  klaude_code/core/tool/shell/bash_tool.md,sha256=ILKpnRCBTkU2uSDEdZQjNYo1l6hsM4TO-3RD5zWC61c,3935
70
71
  klaude_code/core/tool/shell/bash_tool.py,sha256=LPF-Iqypzfq9IMkumErTSBDgCYYNz8vvZYe7ZobqjYk,14779
71
72
  klaude_code/core/tool/shell/command_safety.py,sha256=-x-qs1ctciEvFrBNn2JQq9540lSGacaS5R7e1MmB1y4,6457
72
- klaude_code/core/tool/sub_agent_tool.py,sha256=zMcPXdPEU0RC_jJgRmKmHF6TCWOH2MNB15K5rIlVWQQ,4620
73
+ klaude_code/core/tool/sub_agent_tool.py,sha256=yTNcsBOElbDRzMNQyslVBDAe179ACCMMgKLP4sKbbwE,4674
73
74
  klaude_code/core/tool/todo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
75
  klaude_code/core/tool/todo/todo_write_tool.md,sha256=BFP9qIkzkakzskHwIOPVtDhehkh0F90A5oosyDuC_BE,1682
75
76
  klaude_code/core/tool/todo/todo_write_tool.py,sha256=_94zgZ7N43lQN1x5nD-kd4ayNEwjTQXUiSWLv6MW4FE,4222
@@ -90,8 +91,8 @@ klaude_code/core/tool/web/web_search_tool.py,sha256=ljkgXxP6L5nJnbYB_IOUtPUN9zA_
90
91
  klaude_code/core/turn.py,sha256=Xjg8PCcpug3Okl12ciWBO7EiqZxlBYtGuY2gAKV3GFk,18081
91
92
  klaude_code/llm/__init__.py,sha256=b4AsqnrMIs0a5qR_ti6rZcHwFzAReTwOW96EqozEoSo,287
92
93
  klaude_code/llm/anthropic/__init__.py,sha256=PWETvaeNAAX3ue0ww1uRUIxTJG0RpWiutkn7MlwKxBs,67
93
- klaude_code/llm/anthropic/client.py,sha256=TpL_8UYzr9oum1z_hK4DcMv9v2ha0_gPHjXoHcjX59o,12212
94
- klaude_code/llm/anthropic/input.py,sha256=0DG33g-8qXD5rP43zYsIF7UiZML0IKJxZfr6fcOlfNQ,8365
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
95
96
  klaude_code/llm/bedrock/__init__.py,sha256=UmXPBXMmigAJ7euIh59iivSeUdrYJwum0RYU7okkkPM,86
96
97
  klaude_code/llm/bedrock/client.py,sha256=n78PIMONAMiRc-l4-mY9qOu0dhUuirmaRpmvuzWdEsk,2400
97
98
  klaude_code/llm/claude/__init__.py,sha256=8VCvvEjQQI-RpAMfHCl5ct4zlDU_jgbAuLOc9p9u-B4,61
@@ -100,56 +101,57 @@ klaude_code/llm/client.py,sha256=yZ_ob0BERRjrOc3t_kJioIdMioghXdOYUErH67zME2k,100
100
101
  klaude_code/llm/codex/__init__.py,sha256=8vN2j2ezWB_UVpfqQ8ooStsBeLL5SY4SUMXOXdWiMaI,132
101
102
  klaude_code/llm/codex/client.py,sha256=kLHAmNwyijwzAKsFnC-5NBXboJTVvEqMcQylQLO-P4M,5522
102
103
  klaude_code/llm/google/__init__.py,sha256=tQtf_mh_mC3E4S9XAsnhS2JZXGRnYUsBKF0jpXZTvM0,61
103
- klaude_code/llm/google/client.py,sha256=RTr0GUAwwu5Xra-hm1lgFI3RZg2_U7GcJKU-noK6-Y0,13695
104
- klaude_code/llm/google/input.py,sha256=yBeqMk9E5nS-0jl1kEAALwnuqgKZdXApRG2KdAhPQqE,7519
104
+ klaude_code/llm/google/client.py,sha256=SfNgAHKYcL-V4NGEET34lFkSTFE5NdHjsRJK4h1lZeI,13721
105
+ klaude_code/llm/google/input.py,sha256=EVO-EHbLeD8mSW_3sglfboJzGUwGt2zXqoNRmw__Cbo,8378
105
106
  klaude_code/llm/image.py,sha256=jt9FBPFhAIo48pauIEJMIhB9WuDt4wwNs9s3LiEsETE,4272
106
107
  klaude_code/llm/input_common.py,sha256=B1QtRJspDXLdbvzykSn-FWjyi1047GeTmQnaAicCCAg,6219
107
108
  klaude_code/llm/openai_compatible/__init__.py,sha256=ACGpnki7k53mMcCl591aw99pm9jZOZk0ghr7atOfNps,81
108
109
  klaude_code/llm/openai_compatible/client.py,sha256=jAcIJc7SPd7IgpFNbp-rBcPFVNcRqgSEar-shf8z1RI,5007
109
- klaude_code/llm/openai_compatible/input.py,sha256=dNEBeAYD6Sd_-ONLazphGNFYmXkY5YoHIPKGBLAQMXU,2830
110
+ klaude_code/llm/openai_compatible/input.py,sha256=VpgT2wbph6bFsB6OFWKnIdjE32W_gKA_p39T-xuJPrE,3217
110
111
  klaude_code/llm/openai_compatible/stream.py,sha256=1z3d5rEX-RxNse2aSlqiF_EsUiNTGb4WleNeIF6HXaI,12986
111
112
  klaude_code/llm/openai_compatible/tool_call_accumulator.py,sha256=quajimkUR1uSIPVXYsVNiQSTnOSVt7WuyZ23RyT7lJs,4906
112
113
  klaude_code/llm/openrouter/__init__.py,sha256=_As8lHjwj6vapQhLorZttTpukk5ZiCdhFdGT38_ASPo,69
113
114
  klaude_code/llm/openrouter/client.py,sha256=49kXzl4vsddU5zaTfM8dpTezgwd8LIpVPJ9ACK7Dro0,6017
114
- klaude_code/llm/openrouter/input.py,sha256=5XSMcoYGLl_xOJJiP3w0E2F6HJFJ7OeLWi7I4teJUSs,5610
115
+ klaude_code/llm/openrouter/input.py,sha256=qlBCkPCQEZTZU_aWWPf-11zjwHh9qa468xgk9jIVg04,6198
115
116
  klaude_code/llm/openrouter/reasoning.py,sha256=S0s3OAyfFVm5lHYmQqB3ZIUZlbnlV5zB2gNT3ZRbDZs,4335
116
117
  klaude_code/llm/registry.py,sha256=wEf9wvbb9CMvlNDtndKzKY5LN3zqEJYPI2v9kIrqfGI,2235
117
118
  klaude_code/llm/responses/__init__.py,sha256=WsiyvnNiIytaYcaAqNiB8GI-5zcpjjeODPbMlteeFjA,67
118
119
  klaude_code/llm/responses/client.py,sha256=vb8w749A7xJyRSj6mlVw51rFRgCtpDvhMApJzU07Vjo,12581
119
- klaude_code/llm/responses/input.py,sha256=BYZFBh6qa85pQjVrHds9q3A_aMfhSN2GB0e7VX-h8g4,7575
120
+ klaude_code/llm/responses/input.py,sha256=T2mAzSR7-z7AFkUjw33c1U3UCBkGX9hlLJVJk5EUnzg,9178
120
121
  klaude_code/llm/usage.py,sha256=Hukt4hKGUb2EnmwGy2-1Ku0oxEI6J7gOU0EsOSBBJAk,5034
121
122
  klaude_code/log.py,sha256=vyCuV18DX0miengbJF9510UsBrWidSln-CM6pVCe0GA,9301
122
123
  klaude_code/protocol/__init__.py,sha256=TTPnuyQ22RypoTGKdoiS7ZEgHzinuaRHUrauzHDh7Xo,246
123
- klaude_code/protocol/commands.py,sha256=zW16Vgd_90DKWTLRAmegVVXGpK8fnZKUvTNM2u63cnM,976
124
+ klaude_code/protocol/commands.py,sha256=HuAwIUHfw77F2mKTKO2xnrOkmrnJPvoFE78ELJ2RDJQ,962
124
125
  klaude_code/protocol/events/__init__.py,sha256=2KaHK32Bpo17eHiwVNEHmbdJOtjG3vO0NrbyLxJlkg8,1606
125
126
  klaude_code/protocol/events/base.py,sha256=QfqgksjA2Hj-ClmwKVeJ7QA6Z7YdzjswO1NfAVnPCoI,335
126
127
  klaude_code/protocol/events/chat.py,sha256=FB-fLLii7TN7r0FrvfgrhZT2x4sRsivjKHV8J2b5Bsw,426
127
128
  klaude_code/protocol/events/lifecycle.py,sha256=5csZkv3oZIuLzs_7H84v8HgAYwbjIjkZOHfjxq9YfxM,357
128
129
  klaude_code/protocol/events/metadata.py,sha256=oVZ1zanGcTEFkHW8fLEqS2Z1A9e1MMcjLOcNwUUuCBI,285
129
130
  klaude_code/protocol/events/streaming.py,sha256=U1plGQSTeGZa3E4fIxW_fHXJpuv_DSIBrmGh1l4Fm54,708
130
- klaude_code/protocol/events/system.py,sha256=0c3x8WwqAo5Y0JmukKbn7FKtgEv-ErqwJb5PGjuHehk,1294
131
+ klaude_code/protocol/events/system.py,sha256=ihWZLNyPO0xvHAVjMkbGt2FqL8m-ZVreq-MTZLfxQnc,1453
131
132
  klaude_code/protocol/events/tools.py,sha256=8ds_8Zj-wQWvHNAvNt1-fSIHeDffw1dsLWI7ByrAqcM,617
132
133
  klaude_code/protocol/llm_param.py,sha256=nyk5bW3AF8KziDawcImwDLiFiv07bu1ci62TslWxUkg,5161
133
134
  klaude_code/protocol/message.py,sha256=pu-wvInS781y-qSKbl9MqO7k3CtAN7Yu4hUHJCXKjZQ,6210
134
135
  klaude_code/protocol/model.py,sha256=tBwvGlmsI_GPsYrCuk5-QHqC-v0UgBSdm9UjEPOvTiM,10805
135
- klaude_code/protocol/op.py,sha256=Us8O5Nuz6Wx03ftrLYiiLceCuzbNZ1ehwW62e_uMEvU,5646
136
- klaude_code/protocol/op_handler.py,sha256=NgQWyLZwPqRRH93hMvPH-TCK8YbLeDpnKeNVnlt27_o,1765
137
- klaude_code/protocol/sub_agent/__init__.py,sha256=KkSdKAD45DERZoMS7zyTg0AWPgVmK-po0uv5rt_d-zE,3972
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
138
140
  klaude_code/protocol/sub_agent/explore.py,sha256=beDpcPFUds54JLhQyVEpuhVp5xm5hRnkp6F3gMCIvw8,2712
139
- klaude_code/protocol/sub_agent/image_gen.py,sha256=e2iRpGnWUHdZw96wC-f-Ik8HXYnvxTqQRqWXhNtUv2E,4812
141
+ klaude_code/protocol/sub_agent/image_gen.py,sha256=T6zf29-rDiO8qg8VG-Mdpe0fEAnNB6kx1iZLyZW0ZMY,4897
140
142
  klaude_code/protocol/sub_agent/task.py,sha256=96XHxbySu_zdM2K6WjlkPFGXoVDVrLiK2hew1cmwGS4,4290
141
143
  klaude_code/protocol/sub_agent/web.py,sha256=XZEfY-bKhpw9RZPkrcohLQDMufQITeeweW7ZOHgk2Ao,3200
142
144
  klaude_code/protocol/tools.py,sha256=T0mzW9EhidVMNkwH-KTeB5FgwMvXBnV_MYE5ytrU1TM,343
143
145
  klaude_code/session/__init__.py,sha256=4sw81uQvEd3YUOOjamKk1KqGmxeb4Ic9T1Tee5zztyU,241
144
- klaude_code/session/codec.py,sha256=fTtaS20H5G6M7k7vufg55c88ZGAblhFk9xGAm3CvWT0,2007
146
+ klaude_code/session/codec.py,sha256=a374UZkOusn9MgFCc--yznDljK_4Qfy6yDPfhQq5_P0,1889
145
147
  klaude_code/session/export.py,sha256=Oa0BdrqipFGkGp62dAsvQ-bPQr0HFAQBpAb7OmgaNno,38926
146
148
  klaude_code/session/selector.py,sha256=snBpnz9UQCe_0K8HttSGCJECCE4YEzpWs_Fdmk2P9nI,2195
147
- klaude_code/session/session.py,sha256=IUYPe8gd7ipiZPQKINXSXjelysLQIFLfLftPoAJsLN0,22719
149
+ klaude_code/session/session.py,sha256=j7BwWWiop-TofhRlrGrQOHB5Fa1UUHOoj3WFrLEQ19c,23117
148
150
  klaude_code/session/store.py,sha256=HRrmFzwEVdExqDQlT9FBZOhlFtQmM9Im9zco8pzvUMY,6455
149
151
  klaude_code/session/templates/export_session.html,sha256=GRSx1dfRKCSNgKqP51Rs6mT6xWo_ntZrep4-ZzlKru8,125862
150
152
  klaude_code/session/templates/mermaid_viewer.html,sha256=Y_wEWFm4mKWpfAz3YMis5DdLEkhw_2d8CpU6jbvGZow,27842
151
153
  klaude_code/skill/__init__.py,sha256=yeWeCfRGPOhT4mx_pjdo4fLondQ_Vx0edBtnFusLhls,839
152
- klaude_code/skill/assets/create-plan/SKILL.md,sha256=xzKarva3A7fVrmC2518MohapqI8e-5m08o7T3L32-xY,2581
154
+ klaude_code/skill/assets/create-plan/SKILL.md,sha256=g_SLyBid2dwj56FBzh87lZGu1t08edLs0plimT2uNzs,2481
153
155
  klaude_code/skill/assets/deslop/SKILL.md,sha256=XMBER6gOyYnZof_u7l30CZSzmDcINe8XP-n_loah0EQ,873
154
156
  klaude_code/skill/assets/handoff/SKILL.md,sha256=GDHrEqWUeAQy7gGhha_y5jzjpv8C-xhk0hqMH5h59v8,1712
155
157
  klaude_code/skill/assets/jj-workspace/SKILL.md,sha256=toxoyrBBoGl9Yv4PYrw_gD071LLZ2RoepUR8qTDRn1M,977
@@ -158,7 +160,7 @@ klaude_code/skill/loader.py,sha256=dq-92iX4RWUZd8sFO3KZySOVf5-M6xev29tJlaC0Ivw,8
158
160
  klaude_code/skill/manager.py,sha256=qPUaZmbKO6f6kF-a948spinRQTCHB4ek7k9TV3elaTE,3448
159
161
  klaude_code/skill/system_skills.py,sha256=ryGN07t0Xv2Yn_Prfq072tdIN0Dp4ZpdXLTl7O7rCkg,6122
160
162
  klaude_code/tui/__init__.py,sha256=Q8-0D-uesw3oFwHcFLD5UaWlTFbrj8qV7dSn6C6_g_o,274
161
- klaude_code/tui/command/__init__.py,sha256=VnwqxKyIMNRhZhYxvVwQrAofecnQCQTe_U5DOt-koWo,3571
163
+ klaude_code/tui/command/__init__.py,sha256=qeQYDQ93mCOgP4SdHTXcMvrqQ8xdmMiNH-nBzmMUqIw,3477
162
164
  klaude_code/tui/command/clear_cmd.py,sha256=Z3fk7KskzmxdLTcHcJwNkk6C8cKszDQ9FjuHBSAIpHQ,771
163
165
  klaude_code/tui/command/command_abc.py,sha256=CcF3P5jXIecANWovwloDp3YbIp8So5X_6AFFrc6KObc,2497
164
166
  klaude_code/tui/command/copy_cmd.py,sha256=hx47q08W5aVbbIzA_-EaB3pTn86gIYWlx9jOQsj3aVg,1879
@@ -166,49 +168,49 @@ klaude_code/tui/command/debug_cmd.py,sha256=KkVsspq3o_b4fB2u9Qms-LJQYVI7ZGn6uvSk
166
168
  klaude_code/tui/command/export_cmd.py,sha256=KdFlOMJ6gruKYnd_24eWJJb21t9gLVwI1FnN1s08m5U,1609
167
169
  klaude_code/tui/command/export_online_cmd.py,sha256=26cPEh6lJW8hwUV1i4q3Be3AThzbPHJI9FuvTfhtJFU,6163
168
170
  klaude_code/tui/command/fork_session_cmd.py,sha256=S64v9P7GXrHQaFb4mVqqy4hRfHDH5-2cPLSFP_i1LX8,10084
169
- klaude_code/tui/command/help_cmd.py,sha256=nvQ9m6hPcJpwKPx6H7XH4o_C41u6uOYuZiBF0ZsO8uw,1678
170
- klaude_code/tui/command/model_cmd.py,sha256=X07psfW-6aan9nxgqRoRVQ_dvZdhTY9XcU-H-NRbGDg,2950
171
- klaude_code/tui/command/model_select.py,sha256=gmttq2I-KDDyU-mCZd4WnqkVkMMpsBP7-fOo0ONjxZ8,3189
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
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/release_notes_cmd.py,sha256=SOjDURB3ML4u7zeR1QVB7oFVQna-S05h3LJrcBXG3J8,2686
177
177
  klaude_code/tui/command/resume_cmd.py,sha256=hARQaE6R0bH8gAAFoCEpbgr_3bCOHCwmgNHVra30jRY,4133
178
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=zNvge6qvz9ujjMh2nUs2CNKIxSpXLJ5cgOLuvOmEGqY,7420
185
- klaude_code/tui/components/common.py,sha256=RzOiIqVPWCzjX8VMMJSkvP0F-l91g9lMTb_smNpEdDE,4648
186
- klaude_code/tui/components/developer.py,sha256=ufdTpB4vPOzwYaHdwM3s3LXjl2DQGf-5rmgYiFvB7UY,10093
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=dutITAWKrScQN-8ij4w70m8ZlEn11kD9ZRFjHTXyOsg,9392
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=ncmifgTwF6q95iayHQyazGbntt7BRQb_Ed7aXc8JU6Y,7551
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=Dy5GgEJzYNrWNh7QG5PQCfTGS99CllDOdWVqvbCafYE,13320
199
- klaude_code/tui/components/rich/theme.py,sha256=045b8bFlnRCBqo5ceUtGdj_C08aVsJqWyqvULM80Xm0,15032
200
- klaude_code/tui/components/sub_agent.py,sha256=FojxwNnBTwYSSBMG4DmC2IJfr-bLTJiDcViKoL1d0uQ,6955
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
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=_joijghnXG0-vu8D-Om4eU_jprLiTpyabfNH6aqaqpA,27224
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=JzKzYrKjG8HYsJV5Akq7DWtgY8bCebGq3GRrVfcXeBw,29476
213
+ klaude_code/tui/renderer.py,sha256=WD2-oHCAltp9-7EJ5KwivXmVIQydwe3JT33N_TuJcUo,29424
212
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
@@ -216,7 +218,7 @@ klaude_code/tui/terminal/control.py,sha256=m2fL6uHum5Li25X2IPnI4z_oVzMpVYcSldB-r
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=BbjgqLProZXklziHJSSkWz4pss5Tbli1TrbVmpZLBxs,23930
221
+ klaude_code/tui/terminal/selector.py,sha256=mxsk4PHSmVfUxikzcTCivUePdy3pPdOE4IwatZeioXA,24057
220
222
  klaude_code/ui/__init__.py,sha256=3k9Sbesq0nNN3jcSMDqJ4zUcys4PKzGg4Xsum-6dZis,451
221
223
  klaude_code/ui/common.py,sha256=_KmCNM-U8VowObYkfq8e9cyuvN1dF85P56hG8tGYlts,4309
222
224
  klaude_code/ui/core/__init__.py,sha256=2NakrTDcxem5D0atyEY_Rxv1BbKCeZweF63L6AAq6r8,23
@@ -226,7 +228,7 @@ klaude_code/ui/debug_mode.py,sha256=ZvqbOx4c_rUerMbEZzOfcbNf9leqEDFjqJUlALtzF9Y,
226
228
  klaude_code/ui/terminal/__init__.py,sha256=5OeAzr994r8-peWsLON0iXsAvJ2pexwMp36JY7FKGDc,179
227
229
  klaude_code/ui/terminal/title.py,sha256=EZpLXTMhunsZPVGaxP317lH0Ad2oOh7OsjbV3yRD5is,1115
228
230
  klaude_code/update.py,sha256=QER816AZe9u3RhRvP0Z37Jh2Ch5RLy9PREyDsI0e1dA,4480
229
- klaude_code-2.2.0.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
230
- klaude_code-2.2.0.dist-info/entry_points.txt,sha256=kkXIXedaTOtjXPr2rVjRVVXZYlFUcBHELaqmyVlWUFA,92
231
- klaude_code-2.2.0.dist-info/METADATA,sha256=458xxtAI3saCqeI9ix2BiyizQLzcvoViW_s7TH-zzM8,11498
232
- klaude_code-2.2.0.dist-info/RECORD,,
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,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])