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.
- klaude_code/app/runtime.py +2 -15
- klaude_code/cli/list_model.py +30 -13
- klaude_code/cli/main.py +26 -10
- klaude_code/config/assets/builtin_config.yaml +177 -310
- klaude_code/config/config.py +158 -21
- klaude_code/config/{select_model.py → model_matcher.py} +41 -16
- klaude_code/config/sub_agent_model_helper.py +217 -0
- klaude_code/config/thinking.py +2 -2
- klaude_code/const.py +1 -1
- klaude_code/core/agent_profile.py +43 -5
- klaude_code/core/executor.py +129 -47
- klaude_code/core/manager/llm_clients_builder.py +17 -11
- klaude_code/core/prompts/prompt-nano-banana.md +1 -1
- klaude_code/core/tool/file/diff_builder.py +25 -18
- klaude_code/core/tool/sub_agent_tool.py +2 -1
- klaude_code/llm/anthropic/client.py +12 -9
- klaude_code/llm/anthropic/input.py +54 -29
- klaude_code/llm/client.py +1 -1
- klaude_code/llm/codex/client.py +2 -2
- klaude_code/llm/google/client.py +7 -7
- klaude_code/llm/google/input.py +23 -2
- klaude_code/llm/input_common.py +2 -2
- klaude_code/llm/openai_compatible/client.py +3 -3
- klaude_code/llm/openai_compatible/input.py +22 -13
- klaude_code/llm/openai_compatible/stream.py +1 -1
- klaude_code/llm/openrouter/client.py +4 -4
- klaude_code/llm/openrouter/input.py +35 -25
- klaude_code/llm/responses/client.py +5 -5
- klaude_code/llm/responses/input.py +96 -57
- klaude_code/protocol/commands.py +1 -2
- klaude_code/protocol/events/__init__.py +7 -1
- klaude_code/protocol/events/chat.py +10 -0
- klaude_code/protocol/events/system.py +4 -0
- klaude_code/protocol/llm_param.py +1 -1
- klaude_code/protocol/model.py +0 -26
- klaude_code/protocol/op.py +17 -5
- 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 +13 -3
- klaude_code/skill/assets/create-plan/SKILL.md +3 -5
- klaude_code/tui/command/__init__.py +3 -6
- klaude_code/tui/command/clear_cmd.py +0 -1
- klaude_code/tui/command/command_abc.py +6 -4
- klaude_code/tui/command/copy_cmd.py +10 -10
- klaude_code/tui/command/debug_cmd.py +11 -10
- klaude_code/tui/command/export_online_cmd.py +18 -23
- klaude_code/tui/command/fork_session_cmd.py +39 -43
- klaude_code/tui/command/model_cmd.py +10 -49
- klaude_code/tui/command/model_picker.py +142 -0
- klaude_code/tui/command/refresh_cmd.py +0 -1
- klaude_code/tui/command/registry.py +15 -21
- klaude_code/tui/command/resume_cmd.py +10 -16
- klaude_code/tui/command/status_cmd.py +8 -12
- klaude_code/tui/command/sub_agent_model_cmd.py +185 -0
- klaude_code/tui/command/terminal_setup_cmd.py +8 -11
- klaude_code/tui/command/thinking_cmd.py +4 -6
- klaude_code/tui/commands.py +5 -0
- klaude_code/tui/components/bash_syntax.py +1 -1
- klaude_code/tui/components/command_output.py +96 -0
- klaude_code/tui/components/common.py +1 -1
- klaude_code/tui/components/developer.py +3 -115
- klaude_code/tui/components/metadata.py +1 -63
- 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 +2 -0
- klaude_code/tui/components/sub_agent.py +25 -46
- klaude_code/tui/components/welcome.py +99 -0
- klaude_code/tui/input/prompt_toolkit.py +19 -8
- klaude_code/tui/machine.py +5 -0
- klaude_code/tui/renderer.py +7 -8
- klaude_code/tui/runner.py +0 -6
- klaude_code/tui/terminal/selector.py +8 -6
- {klaude_code-2.2.0.dist-info → klaude_code-2.4.0.dist-info}/METADATA +21 -74
- {klaude_code-2.2.0.dist-info → klaude_code-2.4.0.dist-info}/RECORD +79 -76
- klaude_code/tui/command/help_cmd.py +0 -51
- klaude_code/tui/command/model_select.py +0 -84
- klaude_code/tui/command/release_notes_cmd.py +0 -85
- {klaude_code-2.2.0.dist-info → klaude_code-2.4.0.dist-info}/WHEEL +0 -0
- {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.
|
|
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
|
-
#####
|
|
158
|
+
##### Model Configuration
|
|
159
159
|
|
|
160
|
-
You can add custom models to
|
|
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
|
-
|
|
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
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
|
242
|
-
|
|
243
|
-
|
|
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=
|
|
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=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=
|
|
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=
|
|
29
|
-
klaude_code/config/
|
|
30
|
-
klaude_code/config/
|
|
31
|
-
klaude_code/
|
|
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=
|
|
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=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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
94
|
-
klaude_code/llm/anthropic/input.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
104
|
-
klaude_code/llm/google/input.py,sha256=
|
|
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
|
|
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=
|
|
109
|
-
klaude_code/llm/openai_compatible/input.py,sha256=
|
|
110
|
-
klaude_code/llm/openai_compatible/stream.py,sha256=
|
|
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=
|
|
114
|
-
klaude_code/llm/openrouter/input.py,sha256=
|
|
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=
|
|
119
|
-
klaude_code/llm/responses/input.py,sha256=
|
|
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=
|
|
124
|
-
klaude_code/protocol/events/__init__.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
135
|
-
klaude_code/protocol/op.py,sha256=
|
|
136
|
-
klaude_code/protocol/op_handler.py,sha256=
|
|
137
|
-
klaude_code/protocol/sub_agent/
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
162
|
-
klaude_code/tui/command/clear_cmd.py,sha256=
|
|
163
|
-
klaude_code/tui/command/command_abc.py,sha256=
|
|
164
|
-
klaude_code/tui/command/copy_cmd.py,sha256=
|
|
165
|
-
klaude_code/tui/command/debug_cmd.py,sha256=
|
|
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=
|
|
168
|
-
klaude_code/tui/command/fork_session_cmd.py,sha256=
|
|
169
|
-
klaude_code/tui/command/
|
|
170
|
-
klaude_code/tui/command/
|
|
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=
|
|
175
|
-
klaude_code/tui/command/registry.py,sha256=
|
|
176
|
-
klaude_code/tui/command/
|
|
177
|
-
klaude_code/tui/command/
|
|
178
|
-
klaude_code/tui/command/
|
|
179
|
-
klaude_code/tui/command/terminal_setup_cmd.py,sha256=
|
|
180
|
-
klaude_code/tui/command/thinking_cmd.py,sha256=
|
|
181
|
-
klaude_code/tui/commands.py,sha256=
|
|
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=
|
|
185
|
-
klaude_code/tui/components/
|
|
186
|
-
klaude_code/tui/components/
|
|
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=
|
|
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=
|
|
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=
|
|
199
|
-
klaude_code/tui/components/rich/theme.py,sha256=
|
|
200
|
-
klaude_code/tui/components/sub_agent.py,sha256=
|
|
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=
|
|
210
|
-
klaude_code/tui/machine.py,sha256=
|
|
211
|
-
klaude_code/tui/renderer.py,sha256=
|
|
212
|
-
klaude_code/tui/runner.py,sha256=
|
|
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=
|
|
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.
|
|
230
|
-
klaude_code-2.
|
|
231
|
-
klaude_code-2.
|
|
232
|
-
klaude_code-2.
|
|
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])
|
|
File without changes
|
|
File without changes
|