klaude-code 2.2.0__py3-none-any.whl → 2.4.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 (82) hide show
  1. klaude_code/app/runtime.py +2 -15
  2. klaude_code/cli/list_model.py +30 -13
  3. klaude_code/cli/main.py +26 -10
  4. klaude_code/config/assets/builtin_config.yaml +177 -310
  5. klaude_code/config/config.py +158 -21
  6. klaude_code/config/{select_model.py → model_matcher.py} +41 -16
  7. klaude_code/config/sub_agent_model_helper.py +217 -0
  8. klaude_code/config/thinking.py +2 -2
  9. klaude_code/const.py +1 -1
  10. klaude_code/core/agent_profile.py +43 -5
  11. klaude_code/core/executor.py +129 -47
  12. klaude_code/core/manager/llm_clients_builder.py +17 -11
  13. klaude_code/core/prompts/prompt-nano-banana.md +1 -1
  14. klaude_code/core/tool/file/diff_builder.py +25 -18
  15. klaude_code/core/tool/sub_agent_tool.py +2 -1
  16. klaude_code/llm/anthropic/client.py +12 -9
  17. klaude_code/llm/anthropic/input.py +54 -29
  18. klaude_code/llm/client.py +1 -1
  19. klaude_code/llm/codex/client.py +2 -2
  20. klaude_code/llm/google/client.py +7 -7
  21. klaude_code/llm/google/input.py +23 -2
  22. klaude_code/llm/input_common.py +2 -2
  23. klaude_code/llm/openai_compatible/client.py +3 -3
  24. klaude_code/llm/openai_compatible/input.py +22 -13
  25. klaude_code/llm/openai_compatible/stream.py +1 -1
  26. klaude_code/llm/openrouter/client.py +4 -4
  27. klaude_code/llm/openrouter/input.py +35 -25
  28. klaude_code/llm/responses/client.py +5 -5
  29. klaude_code/llm/responses/input.py +96 -57
  30. klaude_code/protocol/commands.py +1 -2
  31. klaude_code/protocol/events/__init__.py +7 -1
  32. klaude_code/protocol/events/chat.py +10 -0
  33. klaude_code/protocol/events/system.py +4 -0
  34. klaude_code/protocol/llm_param.py +1 -1
  35. klaude_code/protocol/model.py +0 -26
  36. klaude_code/protocol/op.py +17 -5
  37. klaude_code/protocol/op_handler.py +5 -0
  38. klaude_code/protocol/sub_agent/AGENTS.md +28 -0
  39. klaude_code/protocol/sub_agent/__init__.py +10 -14
  40. klaude_code/protocol/sub_agent/image_gen.py +2 -1
  41. klaude_code/session/codec.py +2 -6
  42. klaude_code/session/session.py +13 -3
  43. klaude_code/skill/assets/create-plan/SKILL.md +3 -5
  44. klaude_code/tui/command/__init__.py +3 -6
  45. klaude_code/tui/command/clear_cmd.py +0 -1
  46. klaude_code/tui/command/command_abc.py +6 -4
  47. klaude_code/tui/command/copy_cmd.py +10 -10
  48. klaude_code/tui/command/debug_cmd.py +11 -10
  49. klaude_code/tui/command/export_online_cmd.py +18 -23
  50. klaude_code/tui/command/fork_session_cmd.py +39 -43
  51. klaude_code/tui/command/model_cmd.py +10 -49
  52. klaude_code/tui/command/model_picker.py +142 -0
  53. klaude_code/tui/command/refresh_cmd.py +0 -1
  54. klaude_code/tui/command/registry.py +15 -21
  55. klaude_code/tui/command/resume_cmd.py +10 -16
  56. klaude_code/tui/command/status_cmd.py +8 -12
  57. klaude_code/tui/command/sub_agent_model_cmd.py +185 -0
  58. klaude_code/tui/command/terminal_setup_cmd.py +8 -11
  59. klaude_code/tui/command/thinking_cmd.py +4 -6
  60. klaude_code/tui/commands.py +5 -0
  61. klaude_code/tui/components/bash_syntax.py +1 -1
  62. klaude_code/tui/components/command_output.py +96 -0
  63. klaude_code/tui/components/common.py +1 -1
  64. klaude_code/tui/components/developer.py +3 -115
  65. klaude_code/tui/components/metadata.py +1 -63
  66. klaude_code/tui/components/rich/cjk_wrap.py +3 -2
  67. klaude_code/tui/components/rich/status.py +49 -3
  68. klaude_code/tui/components/rich/theme.py +2 -0
  69. klaude_code/tui/components/sub_agent.py +25 -46
  70. klaude_code/tui/components/welcome.py +99 -0
  71. klaude_code/tui/input/prompt_toolkit.py +19 -8
  72. klaude_code/tui/machine.py +5 -0
  73. klaude_code/tui/renderer.py +7 -8
  74. klaude_code/tui/runner.py +0 -6
  75. klaude_code/tui/terminal/selector.py +8 -6
  76. {klaude_code-2.2.0.dist-info → klaude_code-2.4.0.dist-info}/METADATA +21 -74
  77. {klaude_code-2.2.0.dist-info → klaude_code-2.4.0.dist-info}/RECORD +79 -76
  78. klaude_code/tui/command/help_cmd.py +0 -51
  79. klaude_code/tui/command/model_select.py +0 -84
  80. klaude_code/tui/command/release_notes_cmd.py +0 -85
  81. {klaude_code-2.2.0.dist-info → klaude_code-2.4.0.dist-info}/WHEEL +0 -0
  82. {klaude_code-2.2.0.dist-info → klaude_code-2.4.0.dist-info}/entry_points.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: klaude-code
3
- Version: 2.2.0
3
+ Version: 2.4.0
4
4
  Summary: Minimal code agent CLI
5
5
  Requires-Dist: anthropic>=0.66.0
6
6
  Requires-Dist: chardet>=5.2.0
@@ -155,95 +155,42 @@ Open in editor:
155
155
  klaude config
156
156
  ```
157
157
 
158
- ##### Adding Models to Built-in Providers
158
+ ##### Model Configuration
159
159
 
160
- You can add custom models to existing built-in providers without redefining the entire provider. Just reference the `provider_name` and add your `model_list`:
160
+ You can add custom models to built-in providers or define new ones. Configuration is inherited from built-in providers by matching `provider_name`.
161
161
 
162
162
  ```yaml
163
163
  # ~/.klaude/klaude-config.yaml
164
164
  provider_list:
165
- - provider_name: openrouter # Reference existing built-in provider
166
- model_list:
167
- - model_name: seed
168
- model_params:
169
- model: bytedance-seed/seed-1.6 # Model ID from OpenRouter
170
- context_limit: 262000
171
- cost:
172
- input: 0.25
173
- output: 2
174
- ```
175
-
176
- **How merging works:**
177
- - Your models are merged with the built-in models for that provider
178
- - You only need `provider_name` and `model_list` - protocol, api_key, etc. are inherited from the built-in config
179
- - To override a built-in model, use the same `model_name` (e.g., `sonnet` to customize the built-in sonnet)
180
-
181
- **More examples:**
182
-
183
- ```yaml
184
- provider_list:
185
- # Add multiple models to OpenRouter
165
+ # Add/Override models for built-in OpenRouter provider
186
166
  - provider_name: openrouter
187
167
  model_list:
188
168
  - model_name: qwen-coder
189
- model_params:
190
- model: qwen/qwen-2.5-coder-32b-instruct
191
- context_limit: 131072
192
- cost:
193
- input: 0.3
194
- output: 0.9
195
- - model_name: llama-405b
196
- model_params:
197
- model: meta-llama/llama-3.1-405b-instruct
198
- context_limit: 131072
199
- cost:
200
- input: 0.8
201
- output: 0.8
202
-
203
- # Add models to Anthropic provider
204
- - provider_name: anthropic
205
- model_list:
206
- - model_name: haiku@ant
207
- model_params:
208
- model: claude-3-5-haiku-20241022
209
- context_limit: 200000
210
- cost:
211
- input: 1.0
212
- output: 5.0
213
- ```
214
-
215
- After adding models, run `klaude list` to verify they appear in the model list.
216
-
217
- ##### Overriding Provider Settings
218
-
219
- Override provider-level settings (like api_key) while keeping built-in models:
220
-
221
- ```yaml
222
- provider_list:
223
- - provider_name: anthropic
224
- api_key: sk-my-custom-key # Override the default ${ANTHROPIC_API_KEY}
225
- # Built-in models (sonnet, opus) are still available
226
- ```
227
-
228
- ##### Adding New Providers
229
-
230
- For providers not in the built-in list, you must specify `protocol`:
231
-
232
- ```yaml
233
- provider_list:
234
- - provider_name: my-azure-openai
169
+ model_id: qwen/qwen-2.5-coder-32b-instruct
170
+ context_limit: 131072
171
+ cost: { input: 0.3, output: 0.9 }
172
+ - model_name: sonnet # Override built-in sonnet params
173
+ model_id: anthropic/claude-3.5-sonnet
174
+ context_limit: 200000
175
+
176
+ # Add a completely new provider
177
+ - provider_name: my-azure
235
178
  protocol: openai
236
179
  api_key: ${AZURE_OPENAI_KEY}
237
180
  base_url: https://my-instance.openai.azure.com/
238
181
  is_azure: true
239
182
  azure_api_version: "2024-02-15-preview"
240
183
  model_list:
241
- - model_name: gpt-4-azure
242
- model_params:
243
- model: gpt-4
244
- context_limit: 128000
184
+ - model_name: gpt-4
185
+ model_id: gpt-4-deploy-name
186
+ context_limit: 128000
245
187
  ```
246
188
 
189
+ **Key Tips:**
190
+ - **Merging**: If `provider_name` matches a built-in provider, settings like `protocol` and `api_key` are inherited.
191
+ - **Overriding**: Use the same `model_name` as a built-in model to override its parameters.
192
+ - **Environment Variables**: Use `${VAR_NAME}` syntax for secrets.
193
+
247
194
  ##### Supported Protocols
248
195
 
249
196
  - `anthropic` - Anthropic Messages API
@@ -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=I3dLrbLfh-cy_FvDCYvKnFGGn9x8v04PtOCcpImUv1U,13258
21
+ klaude_code/cli/main.py,sha256=RBmCs-k6Yvcpyw1tjKqSS1HB2Ing7N93qzsr8OwbtJY,8738
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=70SunejGS2fPCw4lxsqtaaCtP53uw1szuWrkvEYoftA,7023
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
30
- klaude_code/config/thinking.py,sha256=1FFN9UgPVEFyTzahTvNOM5Y4b8Bo7G1jIc93xjX3Uvk,9323
31
- klaude_code/const.py,sha256=FmTyqqfcJN3CbrUHG-8FJNTP-Xu2C_5TDWhm-bLCDpE,10907
28
+ klaude_code/config/config.py,sha256=0-CLWK5oGGa5PY6o2mVkLNiaiuoaG8zp1UvQ6q0_Xxc,23948
29
+ klaude_code/config/model_matcher.py,sha256=8pYt7DhEhsjLlYS7G14k6KdDtIzcNj2fYhQQach_JTU,6110
30
+ klaude_code/config/sub_agent_model_helper.py,sha256=TeDfW8EqmAvu-5trAm7tUn0Hf2s2mLVNBHukDKZGVbE,8518
31
+ klaude_code/config/thinking.py,sha256=RDWH8UYbeDoIKPXaCIcvVwPAh07Ntaq8w5Zn_fhm-Fk,9329
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=mbfyFcat67Ox_eHhHXSIxRZKfvhZvVQpbscozldT2s0,34164
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
@@ -57,7 +58,7 @@ klaude_code/core/tool/file/_utils.py,sha256=OG4BE9WyJqzH8ilVCL3D9yvAcHk-r-L9snd-
57
58
  klaude_code/core/tool/file/apply_patch.py,sha256=LZd3pYQ9ow_TxiFnqYuzD216HmvkLX6lW6BoMd9iQRs,17080
58
59
  klaude_code/core/tool/file/apply_patch_tool.md,sha256=KVDsjUiLDa97gym0NrZNVG4jA1_zN-2i-B3upVQyOhU,59
59
60
  klaude_code/core/tool/file/apply_patch_tool.py,sha256=t7zNZW2wYpDyHutxq7nx_xSs7GbPx8UymveSR25F2-8,8079
60
- klaude_code/core/tool/file/diff_builder.py,sha256=d3n0RYBuhOD3yophmqNw4ok-da2kxerNixcTf_IXJHk,5911
61
+ klaude_code/core/tool/file/diff_builder.py,sha256=IH5Ws8LvcU66DnPfI40m_qfDyjN3mH4C1LVjC9eKYJQ,6044
61
62
  klaude_code/core/tool/file/edit_tool.md,sha256=rEcUjJuPC46t1nXWjTDxplDcxWDbzTWsr6_bYt5_aRI,1110
62
63
  klaude_code/core/tool/file/edit_tool.py,sha256=oEwm4LWmqcJbZ93CAbLP7njxZ4wnymyrx2VlBuAN8fk,10898
63
64
  klaude_code/core/tool/file/read_tool.md,sha256=74SLSl1tq3L0por73M0QV_ws41MRIvGXQpfLb8dmtp0,1351
@@ -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,66 +91,67 @@ 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=l0b4aMs7LoaowKYNdwz3_xTZVLyfKwfcKXOHbKnJmRs,12356
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
98
99
  klaude_code/llm/claude/client.py,sha256=naQU8D0Nhj0NfqZMXnJTOSKK59zHQhhSpbaVx8XQ0JU,4026
99
- klaude_code/llm/client.py,sha256=yZ_ob0BERRjrOc3t_kJioIdMioghXdOYUErH67zME2k,1002
100
+ klaude_code/llm/client.py,sha256=NI8ZX0sKbO3L3CGOr2uuVgSQFU7tYPLRpr-xd6jscQk,1005
100
101
  klaude_code/llm/codex/__init__.py,sha256=8vN2j2ezWB_UVpfqQ8ooStsBeLL5SY4SUMXOXdWiMaI,132
101
- klaude_code/llm/codex/client.py,sha256=kLHAmNwyijwzAKsFnC-5NBXboJTVvEqMcQylQLO-P4M,5522
102
+ klaude_code/llm/codex/client.py,sha256=K7AthuwszD4w3TiRCyuJ75MEzxoC-oclt0FNQW3wQQ0,5528
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=P9K6O1Cd2WHozh79HLzufB257x_in-vErMaC_AjfSfk,13739
105
+ klaude_code/llm/google/input.py,sha256=EVO-EHbLeD8mSW_3sglfboJzGUwGt2zXqoNRmw__Cbo,8378
105
106
  klaude_code/llm/image.py,sha256=jt9FBPFhAIo48pauIEJMIhB9WuDt4wwNs9s3LiEsETE,4272
106
- klaude_code/llm/input_common.py,sha256=B1QtRJspDXLdbvzykSn-FWjyi1047GeTmQnaAicCCAg,6219
107
+ klaude_code/llm/input_common.py,sha256=-GnZ87BfzyGqXTP3WYflFOqbRcbKpJjE9mjIv8qKWsQ,6228
107
108
  klaude_code/llm/openai_compatible/__init__.py,sha256=ACGpnki7k53mMcCl591aw99pm9jZOZk0ghr7atOfNps,81
108
- 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/stream.py,sha256=1z3d5rEX-RxNse2aSlqiF_EsUiNTGb4WleNeIF6HXaI,12986
109
+ klaude_code/llm/openai_compatible/client.py,sha256=lG2HzCb27WWc8KgT07brbGMO0SxjXQ3hDDDeEOkae6Y,5016
110
+ klaude_code/llm/openai_compatible/input.py,sha256=VpgT2wbph6bFsB6OFWKnIdjE32W_gKA_p39T-xuJPrE,3217
111
+ klaude_code/llm/openai_compatible/stream.py,sha256=9iNmTuatbVsXpcFwLm3_x980X06vKdQ424vSjEhEpKY,12989
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
- klaude_code/llm/openrouter/client.py,sha256=49kXzl4vsddU5zaTfM8dpTezgwd8LIpVPJ9ACK7Dro0,6017
114
- klaude_code/llm/openrouter/input.py,sha256=5XSMcoYGLl_xOJJiP3w0E2F6HJFJ7OeLWi7I4teJUSs,5610
114
+ klaude_code/llm/openrouter/client.py,sha256=ccxzTgfoRz4gSC4s5R49RULW7C8fYK32_992GQMEP2Q,6029
115
+ klaude_code/llm/openrouter/input.py,sha256=Z_Cf6TnMZ5KQNJ0E5IIDCKK2OWlzi8IW0S5A72BBGT0,6176
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
- klaude_code/llm/responses/client.py,sha256=vb8w749A7xJyRSj6mlVw51rFRgCtpDvhMApJzU07Vjo,12581
119
- klaude_code/llm/responses/input.py,sha256=BYZFBh6qa85pQjVrHds9q3A_aMfhSN2GB0e7VX-h8g4,7575
119
+ klaude_code/llm/responses/client.py,sha256=i4-mgE2kDSBP8ynH0lQiuUVDakEu2ZXwQjPV8t3c4dw,12596
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/events/__init__.py,sha256=2KaHK32Bpo17eHiwVNEHmbdJOtjG3vO0NrbyLxJlkg8,1606
124
+ klaude_code/protocol/commands.py,sha256=HuAwIUHfw77F2mKTKO2xnrOkmrnJPvoFE78ELJ2RDJQ,962
125
+ klaude_code/protocol/events/__init__.py,sha256=5WoUQzj3P7Lih6xO6keaJmaLOyxboO1OtOPavrNNj24,1673
125
126
  klaude_code/protocol/events/base.py,sha256=QfqgksjA2Hj-ClmwKVeJ7QA6Z7YdzjswO1NfAVnPCoI,335
126
- klaude_code/protocol/events/chat.py,sha256=FB-fLLii7TN7r0FrvfgrhZT2x4sRsivjKHV8J2b5Bsw,426
127
+ klaude_code/protocol/events/chat.py,sha256=mI_Ks5IIU1ZiywclQYxzhSsGA3ga7ACKShU6d9_KqSs,731
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
- klaude_code/protocol/llm_param.py,sha256=nyk5bW3AF8KziDawcImwDLiFiv07bu1ci62TslWxUkg,5161
133
+ klaude_code/protocol/llm_param.py,sha256=DSCxBdFSdQV8qOhEjjjYNapgA3v4TBkN5V9HgEWho_k,5164
133
134
  klaude_code/protocol/message.py,sha256=pu-wvInS781y-qSKbl9MqO7k3CtAN7Yu4hUHJCXKjZQ,6210
134
- 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
135
+ klaude_code/protocol/model.py,sha256=JYiJxmtC7FHnUTwHvuikdrtgbjRvx9zRinOEWpetZu0,10117
136
+ klaude_code/protocol/op.py,sha256=pYmvSyVrVr6LlJUiSN2GKwXiDX8meCoxYKNYHXdTKGE,5965
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=iQdjVoiretvsPvVkUv1rW9z5IDnwPQ6RuFAp-gATF9o,23162
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,65 +160,66 @@ 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
162
- klaude_code/tui/command/clear_cmd.py,sha256=Z3fk7KskzmxdLTcHcJwNkk6C8cKszDQ9FjuHBSAIpHQ,771
163
- klaude_code/tui/command/command_abc.py,sha256=CcF3P5jXIecANWovwloDp3YbIp8So5X_6AFFrc6KObc,2497
164
- klaude_code/tui/command/copy_cmd.py,sha256=hx47q08W5aVbbIzA_-EaB3pTn86gIYWlx9jOQsj3aVg,1879
165
- klaude_code/tui/command/debug_cmd.py,sha256=KkVsspq3o_b4fB2u9Qms-LJQYVI7ZGn6uvSkp3pZZgE,2744
163
+ klaude_code/tui/command/__init__.py,sha256=qeQYDQ93mCOgP4SdHTXcMvrqQ8xdmMiNH-nBzmMUqIw,3477
164
+ klaude_code/tui/command/clear_cmd.py,sha256=9stN0blD24sME_xvTae0gN1r9caZA7QmLWnxzhTB4iA,744
165
+ klaude_code/tui/command/command_abc.py,sha256=sTzn0LAJguDKPrXK-0wkiadf0jQuAtuXbDMfDZJ4pqk,2438
166
+ klaude_code/tui/command/copy_cmd.py,sha256=T-r1tWpNCNeixHeTnaR5RWd7bNkjw10CsPERTNRBy3U,1789
167
+ klaude_code/tui/command/debug_cmd.py,sha256=cXi2ymcsbcJVCKfVKPvtUFPOmgNFEpwG-IcLlnkiyZY,2698
166
168
  klaude_code/tui/command/export_cmd.py,sha256=KdFlOMJ6gruKYnd_24eWJJb21t9gLVwI1FnN1s08m5U,1609
167
- klaude_code/tui/command/export_online_cmd.py,sha256=26cPEh6lJW8hwUV1i4q3Be3AThzbPHJI9FuvTfhtJFU,6163
168
- 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
169
+ klaude_code/tui/command/export_online_cmd.py,sha256=34De0K486wNOC5yjjPemcGTILrKQhWld2qfV3c0PUQ8,5664
170
+ klaude_code/tui/command/fork_session_cmd.py,sha256=iOrHBinISPIpX2jdfWnkS7991drUILHkiAJ5uB3pDSg,9668
171
+ klaude_code/tui/command/model_cmd.py,sha256=EnUcr_nnUm433G2HwEKKNssVE767IgQFNoc9etxPpmY,1734
172
+ klaude_code/tui/command/model_picker.py,sha256=BAQzMHuRuK0o7q3zM5x1p2pawUuhmYDAHcSLmgKwLZg,5700
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=qGFyzGrlUO2MpdVqKr14JEmyVL_q0C5mFh0H53AUR0E,1282
175
- klaude_code/tui/command/registry.py,sha256=LdVGBTK64XqGtCj2eUqU2rNdX4tbiWvmTv25HuQPnBU,7253
176
- klaude_code/tui/command/release_notes_cmd.py,sha256=SOjDURB3ML4u7zeR1QVB7oFVQna-S05h3LJrcBXG3J8,2686
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/terminal_setup_cmd.py,sha256=C2kXelp8DZsMYZ08Gun-kgvtr07HIclcCNfwQtXgY18,10910
180
- klaude_code/tui/command/thinking_cmd.py,sha256=Lf4SgLi7-mtr6sIJDqOz9Zzeue_cHwWzCCl0NLE_bpY,3072
181
- klaude_code/tui/commands.py,sha256=jIQHE9Nk7bIxbNJ2cgnUgGbitRA1O8HSSceXfqjyLMk,3261
175
+ klaude_code/tui/command/refresh_cmd.py,sha256=Lisqdbm64Ma5IB7Z2Gv1dBdaGiqYbCDGFX497-gnfBM,1255
176
+ klaude_code/tui/command/registry.py,sha256=2HDrC6ZqGKSdzQAYra2TSFt1kc3tDliobjrWfgrTdX8,7028
177
+ klaude_code/tui/command/resume_cmd.py,sha256=eOEJI-vchrOP0zrLDTip7KYb1oRJp9te5aiHFtwOdFQ,3771
178
+ klaude_code/tui/command/status_cmd.py,sha256=yALYGxyUX7iVdSRAKdG526YkqOvGV9F0CJNwk8nmzu4,5164
179
+ klaude_code/tui/command/sub_agent_model_cmd.py,sha256=1xSgi-s_suC_cPJRFdIgPcV4sjvNxev77HUt9g-jvs8,5892
180
+ klaude_code/tui/command/terminal_setup_cmd.py,sha256=DfusD9c8eVkWPKGtQI0JvTgJnU_686huyzXsYE9TSEM,10639
181
+ klaude_code/tui/command/thinking_cmd.py,sha256=SG3EWNWWpV11I-4KuKpq3cHdC6eamHn6X4J8FRyRMow,2915
182
+ klaude_code/tui/commands.py,sha256=JBGmWFa31nVRmNJnfRUS9YSWIp79uw9XO0s11JY8SIM,3378
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/command_output.py,sha256=n1bxmPTXysJrm2UERNeOxC9fyW57qm-DIjQ5DU10wxE,3737
187
+ klaude_code/tui/components/common.py,sha256=ajslaejKj-ZnHFGcMenkmUN3k7PNKrIEZZIB74VE-rQ,4663
188
+ klaude_code/tui/components/developer.py,sha256=1hDr7boJN1z_JyvvFNn8m7MAf4lPDN3eoqmofE0lv4Y,5414
187
189
  klaude_code/tui/components/diffs.py,sha256=JUokkkJeTIoKD0b-c-chMzIDmMjivBQqH8DYXIA3hHs,10411
188
190
  klaude_code/tui/components/errors.py,sha256=_9ojf-23ThR-BoMwNEYG68rzILwA_O59muGvofYL10w,669
189
191
  klaude_code/tui/components/mermaid_viewer.py,sha256=MstufMnTauMKzI8cKngXpFqVo-qya20P8ReNkplYtEw,3098
190
- klaude_code/tui/components/metadata.py,sha256=dutITAWKrScQN-8ij4w70m8ZlEn11kD9ZRFjHTXyOsg,9392
192
+ klaude_code/tui/components/metadata.py,sha256=fhfXia7EN8r7IXpzKxflTJy5M6cL9hDFMXbhwnnNR6U,7235
191
193
  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
194
+ klaude_code/tui/components/rich/cjk_wrap.py,sha256=eMqBxftUtll7zrytUb9WtJ6naYLyax0W4KJRpGwWulM,7602
193
195
  klaude_code/tui/components/rich/code_panel.py,sha256=ZKuJHh-kh-hIkBXSGLERLaDbJ7I9hvtvmYKocJn39_w,4744
194
196
  klaude_code/tui/components/rich/live.py,sha256=xiMT6dPsxM_jaazddKrV9CMJQWwpe2t9OdjffHvo1JU,2821
195
197
  klaude_code/tui/components/rich/markdown.py,sha256=wgTRzDJTcI2u5vr_WbAnoBjQHcSe4RIrpOdynw1nBB8,19286
196
198
  klaude_code/tui/components/rich/quote.py,sha256=gTLwxSPQd9nlp73P1ysQIEgOb-BoTE2gzyiPBLMiHcY,3834
197
199
  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
200
+ klaude_code/tui/components/rich/status.py,sha256=kNt08FQGvMZJB-zUhT5UyVFA7jvuRBNqf6yDXLEhb9c,14756
201
+ klaude_code/tui/components/rich/theme.py,sha256=KCPY3Kv5uYpnlULv131XSvW7yDe2z3lx1P2kxLNcCRs,15151
202
+ klaude_code/tui/components/sub_agent.py,sha256=YfcmFzyNKuFNr0pqaJHTEf_AmkKyEN0xnx7bfHPNYA0,6079
201
203
  klaude_code/tui/components/thinking.py,sha256=AXC7Xpyiu7ST-eWGLRGY7N8Dak2ny3lV3mvznmfqKmM,2890
202
204
  klaude_code/tui/components/tools.py,sha256=xqrWBDPsVtOeyE-qF_Idzr1Dhf5bjgrvl-v6svv-H3Q,26230
203
205
  klaude_code/tui/components/user_input.py,sha256=6VHH77xwUUW0rW7yv8hOwGXsmK52HEsBg9-QZVbOm1A,3427
206
+ klaude_code/tui/components/welcome.py,sha256=4jYVsX1sGpAqjStM28gEN91MKd_O1quDFbunpLAZnnM,3774
204
207
  klaude_code/tui/display.py,sha256=ovM1F8GDG0gTQjOV2KaXnjE9HFHf7AtThqSIXkP6JQY,3073
205
208
  klaude_code/tui/input/__init__.py,sha256=cAB38ypo7dHo_jgXUCnoBTUKHtiriVaKCv4YepSU9SU,276
206
209
  klaude_code/tui/input/clipboard.py,sha256=HjThFB9MG_YdJ76CQv7B-IUoz5JarbWUZDbUVkH1LpY,5106
207
210
  klaude_code/tui/input/completers.py,sha256=lkDBjnqYPLMgR6AZHhx2bfT_vMW-fbV6aqY9SqRwq74,32571
208
211
  klaude_code/tui/input/key_bindings.py,sha256=2uN48J1HRHeCBqq7WrH5J82NIU59oQscce0HquAiYCI,18876
209
- klaude_code/tui/input/prompt_toolkit.py,sha256=_joijghnXG0-vu8D-Om4eU_jprLiTpyabfNH6aqaqpA,27224
210
- klaude_code/tui/machine.py,sha256=1aA2iYjCjF6VQ1x62wWtiY4Jqzn2R8-hkDOb2vNw6e8,23355
211
- klaude_code/tui/renderer.py,sha256=JzKzYrKjG8HYsJV5Akq7DWtgY8bCebGq3GRrVfcXeBw,29476
212
- klaude_code/tui/runner.py,sha256=crdwlPcqSrqG0HNsuzd6yfrFHMTZa4GNAeQzjq788eA,11542
212
+ klaude_code/tui/input/prompt_toolkit.py,sha256=O3EZG1yOgaxrILbmQf4srVuBqDtkShpkxU3LecMP5o8,27790
213
+ klaude_code/tui/machine.py,sha256=c02JvEuWeBk-TmqPCk9G6efsNhwh7yY_Xi3z6kz-zqw,23512
214
+ klaude_code/tui/renderer.py,sha256=3VXxFe08n0WVkHt5_vOOBCploVPA_SQUgZsXnv5KI_A,29451
215
+ klaude_code/tui/runner.py,sha256=nOq8wC78HzgqHLRgHC8OgYubH--2gPcDqA6GoV913Yc,11270
213
216
  klaude_code/tui/terminal/__init__.py,sha256=GIMnsEcIAGT_vBHvTlWEdyNmAEpruyscUA6M_j3GQZU,1412
214
217
  klaude_code/tui/terminal/color.py,sha256=6SJR2RA8cqJINNoRz65w0HL3x9g46ydIvDOGWMeNnQU,7195
215
218
  klaude_code/tui/terminal/control.py,sha256=m2fL6uHum5Li25X2IPnI4z_oVzMpVYcSldB-r0NLLzk,4920
216
219
  klaude_code/tui/terminal/image.py,sha256=ytzmw1J3fmaq49nWTDRmK_7aMIGbdUPCtVccSpVRHxY,1195
217
220
  klaude_code/tui/terminal/notifier.py,sha256=-aTtgRvpzQcfbkOfbeDOfUs3l9smNBZX-60G9f0326Y,4643
218
221
  klaude_code/tui/terminal/progress_bar.py,sha256=Go-0_ZodrmJVaQodaPnyxVU2nkpkBaYLnZBqwAUQukE,2133
219
- klaude_code/tui/terminal/selector.py,sha256=BbjgqLProZXklziHJSSkWz4pss5Tbli1TrbVmpZLBxs,23930
222
+ klaude_code/tui/terminal/selector.py,sha256=y1Cn7G1uVVcdG9QTJl0uA32T6Hqx81BaoxKL4vFYVfM,24046
220
223
  klaude_code/ui/__init__.py,sha256=3k9Sbesq0nNN3jcSMDqJ4zUcys4PKzGg4Xsum-6dZis,451
221
224
  klaude_code/ui/common.py,sha256=_KmCNM-U8VowObYkfq8e9cyuvN1dF85P56hG8tGYlts,4309
222
225
  klaude_code/ui/core/__init__.py,sha256=2NakrTDcxem5D0atyEY_Rxv1BbKCeZweF63L6AAq6r8,23
@@ -226,7 +229,7 @@ klaude_code/ui/debug_mode.py,sha256=ZvqbOx4c_rUerMbEZzOfcbNf9leqEDFjqJUlALtzF9Y,
226
229
  klaude_code/ui/terminal/__init__.py,sha256=5OeAzr994r8-peWsLON0iXsAvJ2pexwMp36JY7FKGDc,179
227
230
  klaude_code/ui/terminal/title.py,sha256=EZpLXTMhunsZPVGaxP317lH0Ad2oOh7OsjbV3yRD5is,1115
228
231
  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,,
232
+ klaude_code-2.4.0.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
233
+ klaude_code-2.4.0.dist-info/entry_points.txt,sha256=kkXIXedaTOtjXPr2rVjRVVXZYlFUcBHELaqmyVlWUFA,92
234
+ klaude_code-2.4.0.dist-info/METADATA,sha256=vKSVK93BesAQ7jE_cYT3fT3DlF-nb5X9ta3DEmIhIYI,10242
235
+ klaude_code-2.4.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,84 +0,0 @@
1
- """Interactive model selection for CLI."""
2
-
3
- import sys
4
-
5
- from klaude_code.config.config import load_config
6
- from klaude_code.config.select_model import match_model_from_config
7
- from klaude_code.log import log
8
-
9
-
10
- def select_model_interactive(preferred: str | None = None) -> str | None:
11
- """Interactive single-choice model selector.
12
-
13
- This function combines matching logic with interactive UI selection.
14
- For CLI usage.
15
-
16
- If preferred is provided:
17
- - Exact match: return immediately
18
- - Single partial match (case-insensitive): return immediately
19
- - Otherwise: fall through to interactive selection
20
- """
21
- result = match_model_from_config(preferred)
22
-
23
- if result.error_message:
24
- return None
25
-
26
- if result.matched_model:
27
- return result.matched_model
28
-
29
- # Non-interactive environments (CI/pipes) should never enter an interactive prompt.
30
- # If we couldn't resolve to a single model deterministically above, fail with a clear hint.
31
- if not sys.stdin.isatty() or not sys.stdout.isatty():
32
- log(("Error: cannot use interactive model selection without a TTY", "red"))
33
- log(("Hint: pass --model <config-name> or set main_model in ~/.klaude/klaude-config.yaml", "yellow"))
34
- if preferred:
35
- log((f"Hint: '{preferred}' did not resolve to a single configured model", "yellow"))
36
- return None
37
-
38
- # Interactive selection
39
- from prompt_toolkit.styles import Style
40
-
41
- from klaude_code.tui.terminal.selector import build_model_select_items, select_one
42
-
43
- config = load_config()
44
- names = [m.model_name for m in result.filtered_models]
45
-
46
- try:
47
- items = build_model_select_items(result.filtered_models)
48
-
49
- message = f"Select a model (filtered by '{result.filter_hint}'):" if result.filter_hint else "Select a model:"
50
- selected = select_one(
51
- message=message,
52
- items=items,
53
- pointer="→",
54
- use_search_filter=True,
55
- initial_value=config.main_model,
56
- style=Style(
57
- [
58
- ("pointer", "ansigreen"),
59
- ("highlighted", "ansigreen"),
60
- ("msg", ""),
61
- ("meta", "fg:ansibrightblack"),
62
- ("text", "ansibrightblack"),
63
- ("question", "bold"),
64
- ("search_prefix", "ansibrightblack"),
65
- # search filter colors at the bottom
66
- ("search_success", "noinherit fg:ansigreen"),
67
- ("search_none", "noinherit fg:ansired"),
68
- ]
69
- ),
70
- )
71
- if isinstance(selected, str) and selected in names:
72
- return selected
73
- except KeyboardInterrupt:
74
- return None
75
- except Exception as e:
76
- log((f"Failed to use prompt_toolkit for model selection: {e}", "yellow"))
77
- # Never return an unvalidated model name here.
78
- # If we can't interactively select, fall back to a known configured model.
79
- if isinstance(preferred, str) and preferred in names:
80
- return preferred
81
- if config.main_model and config.main_model in names:
82
- return config.main_model
83
-
84
- return None
@@ -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])