klaude-code 1.2.26__tar.gz → 1.2.28__tar.gz
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-1.2.26 → klaude_code-1.2.28}/PKG-INFO +121 -127
- {klaude_code-1.2.26 → klaude_code-1.2.28}/README.md +119 -125
- {klaude_code-1.2.26 → klaude_code-1.2.28}/pyproject.toml +3 -2
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/cli/config_cmd.py +1 -5
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/cli/debug.py +9 -1
- klaude_code-1.2.28/src/klaude_code/cli/list_model.py +256 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/cli/main.py +76 -19
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/cli/runtime.py +15 -11
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/cli/self_update.py +2 -1
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/cli/session_cmd.py +1 -1
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/command/__init__.py +3 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/command/export_online_cmd.py +15 -12
- klaude_code-1.2.28/src/klaude_code/command/fork_session_cmd.py +42 -0
- klaude_code-1.2.28/src/klaude_code/config/__init__.py +9 -0
- klaude_code-1.2.28/src/klaude_code/config/assets/__init__.py +1 -0
- klaude_code-1.2.28/src/klaude_code/config/assets/builtin_config.yaml +233 -0
- klaude_code-1.2.28/src/klaude_code/config/builtin_config.py +37 -0
- klaude_code-1.2.28/src/klaude_code/config/config.py +423 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/config/select_model.py +46 -8
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/executor.py +6 -3
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/manager/llm_clients_builder.py +4 -1
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/reminders.py +52 -16
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/file/edit_tool.py +4 -4
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/file/write_tool.py +4 -4
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/shell/bash_tool.py +2 -2
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/web/mermaid_tool.md +17 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/web/mermaid_tool.py +2 -2
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/openai_compatible/stream.py +2 -1
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/openai_compatible/tool_call_accumulator.py +17 -1
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/protocol/commands.py +1 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/protocol/model.py +1 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/session/export.py +52 -7
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/session/selector.py +2 -2
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/session/session.py +26 -4
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/trace/log.py +7 -1
- klaude_code-1.2.28/src/klaude_code/ui/modes/repl/__init__.py +6 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/modes/repl/completers.py +39 -7
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/modes/repl/event_handler.py +8 -6
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/modes/repl/input_prompt_toolkit.py +33 -66
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/modes/repl/key_bindings.py +4 -4
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/modes/repl/renderer.py +1 -6
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/renderers/common.py +11 -4
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/renderers/developer.py +17 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/renderers/diffs.py +1 -1
- klaude_code-1.2.28/src/klaude_code/ui/renderers/errors.py +21 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/renderers/metadata.py +2 -2
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/renderers/tools.py +8 -4
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/rich/markdown.py +5 -5
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/rich/theme.py +7 -3
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/terminal/color.py +1 -1
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/terminal/control.py +4 -4
- klaude_code-1.2.26/src/klaude_code/cli/list_model.py +0 -215
- klaude_code-1.2.26/src/klaude_code/config/__init__.py +0 -7
- klaude_code-1.2.26/src/klaude_code/config/config.py +0 -203
- klaude_code-1.2.26/src/klaude_code/ui/modes/repl/__init__.py +0 -47
- klaude_code-1.2.26/src/klaude_code/ui/renderers/errors.py +0 -16
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/auth/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/auth/codex/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/auth/codex/exceptions.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/auth/codex/jwt_utils.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/auth/codex/oauth.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/auth/codex/token_manager.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/cli/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/cli/auth_cmd.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/command/clear_cmd.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/command/command_abc.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/command/debug_cmd.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/command/export_cmd.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/command/help_cmd.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/command/model_cmd.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/command/prompt-init.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/command/prompt-jj-describe.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/command/prompt_command.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/command/refresh_cmd.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/command/registry.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/command/release_notes_cmd.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/command/status_cmd.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/command/terminal_setup_cmd.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/command/thinking_cmd.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/const.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/agent.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/manager/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/manager/llm_clients.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/manager/sub_agent_manager.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/prompt.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/prompts/prompt-claude-code.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/prompts/prompt-codex-gpt-5-1-codex-max.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/prompts/prompt-codex-gpt-5-2-codex.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/prompts/prompt-codex.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/prompts/prompt-gemini.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/prompts/prompt-minimal.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/prompts/prompt-sub-agent-explore.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/prompts/prompt-sub-agent-oracle.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/prompts/prompt-sub-agent-web.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/prompts/prompt-sub-agent.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/task.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/file/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/file/_utils.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/file/apply_patch.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/file/apply_patch_tool.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/file/apply_patch_tool.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/file/diff_builder.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/file/edit_tool.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/file/read_tool.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/file/read_tool.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/file/write_tool.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/report_back_tool.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/shell/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/shell/bash_tool.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/shell/command_safety.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/skill/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/skill/skill_tool.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/skill/skill_tool.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/sub_agent_tool.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/todo/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/todo/todo_write_tool.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/todo/todo_write_tool.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/todo/todo_write_tool_raw.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/todo/update_plan_tool.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/todo/update_plan_tool.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/tool_abc.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/tool_context.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/tool_registry.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/tool_runner.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/truncation.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/web/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/web/web_fetch_tool.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/web/web_fetch_tool.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/web/web_search_tool.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/tool/web/web_search_tool.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/core/turn.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/anthropic/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/anthropic/client.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/anthropic/input.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/client.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/codex/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/codex/client.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/input_common.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/openai_compatible/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/openai_compatible/client.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/openai_compatible/input.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/openrouter/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/openrouter/client.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/openrouter/input.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/openrouter/reasoning.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/registry.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/responses/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/responses/client.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/responses/input.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/llm/usage.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/protocol/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/protocol/events.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/protocol/llm_param.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/protocol/op.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/protocol/op_handler.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/protocol/sub_agent/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/protocol/sub_agent/explore.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/protocol/sub_agent/oracle.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/protocol/sub_agent/task.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/protocol/sub_agent/web.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/protocol/tools.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/session/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/session/codec.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/session/store.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/session/templates/export_session.html +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/skill/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/skill/assets/deslop/SKILL.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/skill/assets/dev-docs/SKILL.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/skill/assets/handoff/SKILL.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/skill/assets/jj-workspace/SKILL.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/skill/assets/skill-creator/SKILL.md +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/skill/loader.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/skill/manager.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/skill/system_skills.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/trace/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/core/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/core/display.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/core/input.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/core/stage_manager.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/modes/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/modes/debug/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/modes/debug/display.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/modes/exec/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/modes/exec/display.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/modes/repl/clipboard.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/modes/repl/display.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/renderers/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/renderers/assistant.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/renderers/sub_agent.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/renderers/thinking.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/renderers/user_input.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/rich/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/rich/cjk_wrap.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/rich/code_panel.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/rich/live.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/rich/quote.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/rich/searchable_text.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/rich/status.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/terminal/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/terminal/notifier.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/terminal/progress_bar.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/utils/__init__.py +0 -0
- {klaude_code-1.2.26 → klaude_code-1.2.28}/src/klaude_code/ui/utils/common.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: klaude-code
|
|
3
|
-
Version: 1.2.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 1.2.28
|
|
4
|
+
Summary: Minimal code agent CLI
|
|
5
5
|
Requires-Dist: anthropic>=0.66.0
|
|
6
6
|
Requires-Dist: chardet>=5.2.0
|
|
7
7
|
Requires-Dist: ddgs>=9.9.3
|
|
@@ -21,7 +21,7 @@ Description-Content-Type: text/markdown
|
|
|
21
21
|
|
|
22
22
|
# Klaude Code
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
Minimal code agent CLI.
|
|
25
25
|
|
|
26
26
|
## Features
|
|
27
27
|
- **Multi-provider**: Anthropic, OpenAI Responses API, OpenRouter
|
|
@@ -92,147 +92,141 @@ klaude [--model <name>] [--select-model]
|
|
|
92
92
|
|
|
93
93
|
### Configuration
|
|
94
94
|
|
|
95
|
-
|
|
95
|
+
#### Quick Start (Zero Config)
|
|
96
96
|
|
|
97
|
-
|
|
97
|
+
Klaude comes with built-in provider configurations. Just set an API key environment variable and start using it:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
# Pick one (or more) of these:
|
|
101
|
+
export ANTHROPIC_API_KEY=sk-ant-xxx # Claude models
|
|
102
|
+
export OPENAI_API_KEY=sk-xxx # GPT models
|
|
103
|
+
export OPENROUTER_API_KEY=sk-or-xxx # OpenRouter (multi-provider)
|
|
104
|
+
export DEEPSEEK_API_KEY=sk-xxx # DeepSeek models
|
|
105
|
+
export MOONSHOT_API_KEY=sk-xxx # Moonshot/Kimi models
|
|
106
|
+
|
|
107
|
+
# Then just run:
|
|
108
|
+
klaude
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
On first run, you'll be prompted to select a model. Your choice is saved as `main_model`.
|
|
112
|
+
|
|
113
|
+
#### Built-in Providers
|
|
114
|
+
|
|
115
|
+
| Provider | Env Variable | Models |
|
|
116
|
+
|-------------|-----------------------|-------------------------------------------------------------------------------|
|
|
117
|
+
| anthropic | `ANTHROPIC_API_KEY` | sonnet, opus |
|
|
118
|
+
| openai | `OPENAI_API_KEY` | gpt-5.2 |
|
|
119
|
+
| openrouter | `OPENROUTER_API_KEY` | gpt-5.2, gpt-5.2-fast, gpt-5.1-codex-max, sonnet, opus, haiku, kimi, gemini-* |
|
|
120
|
+
| deepseek | `DEEPSEEK_API_KEY` | deepseek |
|
|
121
|
+
| moonshot | `MOONSHOT_API_KEY` | kimi@moonshot |
|
|
122
|
+
| codex | N/A (OAuth) | gpt-5.2-codex |
|
|
123
|
+
|
|
124
|
+
List all configured providers and models:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
klaude list
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Models from providers without a valid API key are shown as dimmed/unavailable.
|
|
131
|
+
|
|
132
|
+
#### Custom Configuration
|
|
133
|
+
|
|
134
|
+
User config file: `~/.klaude/klaude-config.yaml`
|
|
135
|
+
|
|
136
|
+
Open in editor:
|
|
98
137
|
|
|
99
138
|
```bash
|
|
100
139
|
klaude config
|
|
101
140
|
```
|
|
102
141
|
|
|
103
|
-
|
|
142
|
+
##### Adding Models to Built-in Providers
|
|
143
|
+
|
|
144
|
+
You can add custom models to existing providers without redefining the entire provider:
|
|
104
145
|
|
|
105
146
|
```yaml
|
|
147
|
+
# Just specify provider_name and your new models - no need for protocol/api_key
|
|
106
148
|
provider_list:
|
|
107
|
-
- provider_name: openrouter
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
-
|
|
116
|
-
protocol: anthropic
|
|
117
|
-
api_key: <your-anthropic-api-key>
|
|
118
|
-
|
|
119
|
-
- provider_name: moonshot
|
|
120
|
-
protocol: anthropic
|
|
121
|
-
base_url: https://api.moonshot.cn/anthropic
|
|
122
|
-
api_key: <your-api-key>
|
|
123
|
-
|
|
124
|
-
- provider_name: deepseek
|
|
125
|
-
protocol: anthropic
|
|
126
|
-
base_url: https://api.deepseek.com/anthropic
|
|
127
|
-
api_key: <your-api-key>
|
|
128
|
-
|
|
129
|
-
model_list:
|
|
130
|
-
|
|
131
|
-
- model_name: deepseek
|
|
132
|
-
provider: deepseek
|
|
133
|
-
model_params:
|
|
134
|
-
model: deepseek-reasoner
|
|
135
|
-
context_limit: 128000
|
|
136
|
-
thinking:
|
|
137
|
-
type: enabled
|
|
138
|
-
budget_tokens: 8192
|
|
139
|
-
cost:
|
|
140
|
-
currency: CNY
|
|
141
|
-
input: 2
|
|
142
|
-
output: 3
|
|
143
|
-
cache_read: 0.2
|
|
144
|
-
|
|
145
|
-
- model_name: codex-max
|
|
146
|
-
provider: openai-responses
|
|
147
|
-
model_params:
|
|
148
|
-
model: gpt-5.1-codex-max
|
|
149
|
-
thinking:
|
|
150
|
-
reasoning_effort: medium
|
|
151
|
-
context_limit: 400000
|
|
152
|
-
max_tokens: 128000
|
|
153
|
-
cost:
|
|
154
|
-
input: 1.25
|
|
155
|
-
output: 10
|
|
156
|
-
cache_read: 0.13
|
|
157
|
-
|
|
158
|
-
- model_name: gpt-5.1
|
|
159
|
-
provider: openrouter
|
|
160
|
-
model_params:
|
|
161
|
-
model: openai/gpt-5.1
|
|
162
|
-
context_limit: 400000
|
|
163
|
-
max_tokens: 128000
|
|
164
|
-
verbosity: high
|
|
165
|
-
thinking:
|
|
166
|
-
reasoning_effort: high
|
|
167
|
-
cost:
|
|
168
|
-
input: 1.25
|
|
169
|
-
output: 10
|
|
170
|
-
cache_read: 0.13
|
|
171
|
-
|
|
172
|
-
- model_name: kimi@moonshot
|
|
173
|
-
provider: moonshot
|
|
174
|
-
model_params:
|
|
175
|
-
model: kimi-k2-thinking
|
|
176
|
-
context_limit: 262144
|
|
177
|
-
thinking:
|
|
178
|
-
type: enabled
|
|
179
|
-
budget_tokens: 8192
|
|
180
|
-
cost:
|
|
181
|
-
currency: CNY
|
|
182
|
-
input: 4
|
|
183
|
-
output: 16
|
|
184
|
-
cache_read: 1
|
|
185
|
-
|
|
186
|
-
- model_name: opus
|
|
187
|
-
provider: openrouter
|
|
188
|
-
model_params:
|
|
189
|
-
model: anthropic/claude-4.5-opus
|
|
190
|
-
context_limit: 200000
|
|
191
|
-
provider_routing:
|
|
192
|
-
only: [ google-vertex ]
|
|
193
|
-
verbosity: high
|
|
194
|
-
thinking:
|
|
195
|
-
type: enabled
|
|
196
|
-
budget_tokens: 31999
|
|
197
|
-
cost:
|
|
198
|
-
input: 5
|
|
199
|
-
output: 25
|
|
200
|
-
cache_read: 0.5
|
|
201
|
-
cache_write: 6.25
|
|
202
|
-
|
|
203
|
-
- model_name: gemini
|
|
204
|
-
provider: openrouter
|
|
205
|
-
model_params:
|
|
206
|
-
model: google/gemini-3-pro-preview
|
|
207
|
-
context_limit: 1048576
|
|
208
|
-
thinking:
|
|
209
|
-
reasoning_effort: medium
|
|
210
|
-
cost:
|
|
211
|
-
input: 2
|
|
212
|
-
output: 12
|
|
213
|
-
cache_read: 0.2
|
|
214
|
-
|
|
215
|
-
- model_name: haiku
|
|
216
|
-
provider: anthropic
|
|
217
|
-
model_params:
|
|
218
|
-
model: claude-haiku-4-5-20251001
|
|
219
|
-
context_limit: 200000
|
|
220
|
-
cost:
|
|
221
|
-
input: 1
|
|
222
|
-
output: 5
|
|
223
|
-
cache_read: 0.1
|
|
224
|
-
cache_write: 1.25
|
|
149
|
+
- provider_name: openrouter
|
|
150
|
+
model_list:
|
|
151
|
+
- model_name: my-custom-model
|
|
152
|
+
model_params:
|
|
153
|
+
model: some-provider/some-model-id
|
|
154
|
+
context_limit: 200000
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Your models are merged with built-in models. To override a built-in model, use the same `model_name`.
|
|
225
158
|
|
|
159
|
+
##### Overriding Provider Settings
|
|
160
|
+
|
|
161
|
+
Override provider-level settings (like api_key) while keeping built-in models:
|
|
162
|
+
|
|
163
|
+
```yaml
|
|
164
|
+
provider_list:
|
|
165
|
+
- provider_name: anthropic
|
|
166
|
+
api_key: sk-my-custom-key # Override the default ${ANTHROPIC_API_KEY}
|
|
167
|
+
# Built-in models (sonnet, opus) are still available
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
##### Adding New Providers
|
|
171
|
+
|
|
172
|
+
For providers not in the built-in list, you must specify `protocol`:
|
|
173
|
+
|
|
174
|
+
```yaml
|
|
175
|
+
provider_list:
|
|
176
|
+
- provider_name: my-azure-openai
|
|
177
|
+
protocol: openai
|
|
178
|
+
api_key: ${AZURE_OPENAI_KEY}
|
|
179
|
+
base_url: https://my-instance.openai.azure.com/
|
|
180
|
+
is_azure: true
|
|
181
|
+
azure_api_version: "2024-02-15-preview"
|
|
182
|
+
model_list:
|
|
183
|
+
- model_name: gpt-4-azure
|
|
184
|
+
model_params:
|
|
185
|
+
model: gpt-4
|
|
186
|
+
context_limit: 128000
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
##### Full Example
|
|
190
|
+
|
|
191
|
+
```yaml
|
|
192
|
+
# User configuration - merged with built-in config
|
|
226
193
|
main_model: opus
|
|
227
194
|
|
|
228
195
|
sub_agent_models:
|
|
229
|
-
oracle: gpt-
|
|
230
|
-
explore:
|
|
196
|
+
oracle: gpt-4.1
|
|
197
|
+
explore: sonnet
|
|
231
198
|
task: opus
|
|
232
|
-
webagent:
|
|
199
|
+
webagent: sonnet
|
|
233
200
|
|
|
201
|
+
provider_list:
|
|
202
|
+
# Add models to built-in openrouter
|
|
203
|
+
- provider_name: openrouter
|
|
204
|
+
model_list:
|
|
205
|
+
- model_name: qwen-coder
|
|
206
|
+
model_params:
|
|
207
|
+
model: qwen/qwen-2.5-coder-32b-instruct
|
|
208
|
+
context_limit: 131072
|
|
209
|
+
|
|
210
|
+
# Add a completely new provider
|
|
211
|
+
- provider_name: local-ollama
|
|
212
|
+
protocol: openai
|
|
213
|
+
base_url: http://localhost:11434/v1
|
|
214
|
+
api_key: ollama
|
|
215
|
+
model_list:
|
|
216
|
+
- model_name: local-llama
|
|
217
|
+
model_params:
|
|
218
|
+
model: llama3.2
|
|
219
|
+
context_limit: 8192
|
|
234
220
|
```
|
|
235
221
|
|
|
222
|
+
##### Supported Protocols
|
|
223
|
+
|
|
224
|
+
- `anthropic` - Anthropic Claude API
|
|
225
|
+
- `openai` - OpenAI-compatible API
|
|
226
|
+
- `responses` - OpenAI Responses API (for o-series, GPT-5, Codex)
|
|
227
|
+
- `openrouter` - OpenRouter API
|
|
228
|
+
- `codex` - OpenAI Codex CLI (OAuth-based)
|
|
229
|
+
|
|
236
230
|
List configured providers and models:
|
|
237
231
|
|
|
238
232
|
```bash
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Klaude Code
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Minimal code agent CLI.
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
- **Multi-provider**: Anthropic, OpenAI Responses API, OpenRouter
|
|
@@ -71,147 +71,141 @@ klaude [--model <name>] [--select-model]
|
|
|
71
71
|
|
|
72
72
|
### Configuration
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
#### Quick Start (Zero Config)
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
Klaude comes with built-in provider configurations. Just set an API key environment variable and start using it:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# Pick one (or more) of these:
|
|
80
|
+
export ANTHROPIC_API_KEY=sk-ant-xxx # Claude models
|
|
81
|
+
export OPENAI_API_KEY=sk-xxx # GPT models
|
|
82
|
+
export OPENROUTER_API_KEY=sk-or-xxx # OpenRouter (multi-provider)
|
|
83
|
+
export DEEPSEEK_API_KEY=sk-xxx # DeepSeek models
|
|
84
|
+
export MOONSHOT_API_KEY=sk-xxx # Moonshot/Kimi models
|
|
85
|
+
|
|
86
|
+
# Then just run:
|
|
87
|
+
klaude
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
On first run, you'll be prompted to select a model. Your choice is saved as `main_model`.
|
|
91
|
+
|
|
92
|
+
#### Built-in Providers
|
|
93
|
+
|
|
94
|
+
| Provider | Env Variable | Models |
|
|
95
|
+
|-------------|-----------------------|-------------------------------------------------------------------------------|
|
|
96
|
+
| anthropic | `ANTHROPIC_API_KEY` | sonnet, opus |
|
|
97
|
+
| openai | `OPENAI_API_KEY` | gpt-5.2 |
|
|
98
|
+
| openrouter | `OPENROUTER_API_KEY` | gpt-5.2, gpt-5.2-fast, gpt-5.1-codex-max, sonnet, opus, haiku, kimi, gemini-* |
|
|
99
|
+
| deepseek | `DEEPSEEK_API_KEY` | deepseek |
|
|
100
|
+
| moonshot | `MOONSHOT_API_KEY` | kimi@moonshot |
|
|
101
|
+
| codex | N/A (OAuth) | gpt-5.2-codex |
|
|
102
|
+
|
|
103
|
+
List all configured providers and models:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
klaude list
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Models from providers without a valid API key are shown as dimmed/unavailable.
|
|
110
|
+
|
|
111
|
+
#### Custom Configuration
|
|
112
|
+
|
|
113
|
+
User config file: `~/.klaude/klaude-config.yaml`
|
|
114
|
+
|
|
115
|
+
Open in editor:
|
|
77
116
|
|
|
78
117
|
```bash
|
|
79
118
|
klaude config
|
|
80
119
|
```
|
|
81
120
|
|
|
82
|
-
|
|
121
|
+
##### Adding Models to Built-in Providers
|
|
122
|
+
|
|
123
|
+
You can add custom models to existing providers without redefining the entire provider:
|
|
83
124
|
|
|
84
125
|
```yaml
|
|
126
|
+
# Just specify provider_name and your new models - no need for protocol/api_key
|
|
85
127
|
provider_list:
|
|
86
|
-
- provider_name: openrouter
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
-
|
|
95
|
-
protocol: anthropic
|
|
96
|
-
api_key: <your-anthropic-api-key>
|
|
97
|
-
|
|
98
|
-
- provider_name: moonshot
|
|
99
|
-
protocol: anthropic
|
|
100
|
-
base_url: https://api.moonshot.cn/anthropic
|
|
101
|
-
api_key: <your-api-key>
|
|
102
|
-
|
|
103
|
-
- provider_name: deepseek
|
|
104
|
-
protocol: anthropic
|
|
105
|
-
base_url: https://api.deepseek.com/anthropic
|
|
106
|
-
api_key: <your-api-key>
|
|
107
|
-
|
|
108
|
-
model_list:
|
|
109
|
-
|
|
110
|
-
- model_name: deepseek
|
|
111
|
-
provider: deepseek
|
|
112
|
-
model_params:
|
|
113
|
-
model: deepseek-reasoner
|
|
114
|
-
context_limit: 128000
|
|
115
|
-
thinking:
|
|
116
|
-
type: enabled
|
|
117
|
-
budget_tokens: 8192
|
|
118
|
-
cost:
|
|
119
|
-
currency: CNY
|
|
120
|
-
input: 2
|
|
121
|
-
output: 3
|
|
122
|
-
cache_read: 0.2
|
|
123
|
-
|
|
124
|
-
- model_name: codex-max
|
|
125
|
-
provider: openai-responses
|
|
126
|
-
model_params:
|
|
127
|
-
model: gpt-5.1-codex-max
|
|
128
|
-
thinking:
|
|
129
|
-
reasoning_effort: medium
|
|
130
|
-
context_limit: 400000
|
|
131
|
-
max_tokens: 128000
|
|
132
|
-
cost:
|
|
133
|
-
input: 1.25
|
|
134
|
-
output: 10
|
|
135
|
-
cache_read: 0.13
|
|
136
|
-
|
|
137
|
-
- model_name: gpt-5.1
|
|
138
|
-
provider: openrouter
|
|
139
|
-
model_params:
|
|
140
|
-
model: openai/gpt-5.1
|
|
141
|
-
context_limit: 400000
|
|
142
|
-
max_tokens: 128000
|
|
143
|
-
verbosity: high
|
|
144
|
-
thinking:
|
|
145
|
-
reasoning_effort: high
|
|
146
|
-
cost:
|
|
147
|
-
input: 1.25
|
|
148
|
-
output: 10
|
|
149
|
-
cache_read: 0.13
|
|
150
|
-
|
|
151
|
-
- model_name: kimi@moonshot
|
|
152
|
-
provider: moonshot
|
|
153
|
-
model_params:
|
|
154
|
-
model: kimi-k2-thinking
|
|
155
|
-
context_limit: 262144
|
|
156
|
-
thinking:
|
|
157
|
-
type: enabled
|
|
158
|
-
budget_tokens: 8192
|
|
159
|
-
cost:
|
|
160
|
-
currency: CNY
|
|
161
|
-
input: 4
|
|
162
|
-
output: 16
|
|
163
|
-
cache_read: 1
|
|
164
|
-
|
|
165
|
-
- model_name: opus
|
|
166
|
-
provider: openrouter
|
|
167
|
-
model_params:
|
|
168
|
-
model: anthropic/claude-4.5-opus
|
|
169
|
-
context_limit: 200000
|
|
170
|
-
provider_routing:
|
|
171
|
-
only: [ google-vertex ]
|
|
172
|
-
verbosity: high
|
|
173
|
-
thinking:
|
|
174
|
-
type: enabled
|
|
175
|
-
budget_tokens: 31999
|
|
176
|
-
cost:
|
|
177
|
-
input: 5
|
|
178
|
-
output: 25
|
|
179
|
-
cache_read: 0.5
|
|
180
|
-
cache_write: 6.25
|
|
181
|
-
|
|
182
|
-
- model_name: gemini
|
|
183
|
-
provider: openrouter
|
|
184
|
-
model_params:
|
|
185
|
-
model: google/gemini-3-pro-preview
|
|
186
|
-
context_limit: 1048576
|
|
187
|
-
thinking:
|
|
188
|
-
reasoning_effort: medium
|
|
189
|
-
cost:
|
|
190
|
-
input: 2
|
|
191
|
-
output: 12
|
|
192
|
-
cache_read: 0.2
|
|
193
|
-
|
|
194
|
-
- model_name: haiku
|
|
195
|
-
provider: anthropic
|
|
196
|
-
model_params:
|
|
197
|
-
model: claude-haiku-4-5-20251001
|
|
198
|
-
context_limit: 200000
|
|
199
|
-
cost:
|
|
200
|
-
input: 1
|
|
201
|
-
output: 5
|
|
202
|
-
cache_read: 0.1
|
|
203
|
-
cache_write: 1.25
|
|
128
|
+
- provider_name: openrouter
|
|
129
|
+
model_list:
|
|
130
|
+
- model_name: my-custom-model
|
|
131
|
+
model_params:
|
|
132
|
+
model: some-provider/some-model-id
|
|
133
|
+
context_limit: 200000
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Your models are merged with built-in models. To override a built-in model, use the same `model_name`.
|
|
204
137
|
|
|
138
|
+
##### Overriding Provider Settings
|
|
139
|
+
|
|
140
|
+
Override provider-level settings (like api_key) while keeping built-in models:
|
|
141
|
+
|
|
142
|
+
```yaml
|
|
143
|
+
provider_list:
|
|
144
|
+
- provider_name: anthropic
|
|
145
|
+
api_key: sk-my-custom-key # Override the default ${ANTHROPIC_API_KEY}
|
|
146
|
+
# Built-in models (sonnet, opus) are still available
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
##### Adding New Providers
|
|
150
|
+
|
|
151
|
+
For providers not in the built-in list, you must specify `protocol`:
|
|
152
|
+
|
|
153
|
+
```yaml
|
|
154
|
+
provider_list:
|
|
155
|
+
- provider_name: my-azure-openai
|
|
156
|
+
protocol: openai
|
|
157
|
+
api_key: ${AZURE_OPENAI_KEY}
|
|
158
|
+
base_url: https://my-instance.openai.azure.com/
|
|
159
|
+
is_azure: true
|
|
160
|
+
azure_api_version: "2024-02-15-preview"
|
|
161
|
+
model_list:
|
|
162
|
+
- model_name: gpt-4-azure
|
|
163
|
+
model_params:
|
|
164
|
+
model: gpt-4
|
|
165
|
+
context_limit: 128000
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
##### Full Example
|
|
169
|
+
|
|
170
|
+
```yaml
|
|
171
|
+
# User configuration - merged with built-in config
|
|
205
172
|
main_model: opus
|
|
206
173
|
|
|
207
174
|
sub_agent_models:
|
|
208
|
-
oracle: gpt-
|
|
209
|
-
explore:
|
|
175
|
+
oracle: gpt-4.1
|
|
176
|
+
explore: sonnet
|
|
210
177
|
task: opus
|
|
211
|
-
webagent:
|
|
178
|
+
webagent: sonnet
|
|
212
179
|
|
|
180
|
+
provider_list:
|
|
181
|
+
# Add models to built-in openrouter
|
|
182
|
+
- provider_name: openrouter
|
|
183
|
+
model_list:
|
|
184
|
+
- model_name: qwen-coder
|
|
185
|
+
model_params:
|
|
186
|
+
model: qwen/qwen-2.5-coder-32b-instruct
|
|
187
|
+
context_limit: 131072
|
|
188
|
+
|
|
189
|
+
# Add a completely new provider
|
|
190
|
+
- provider_name: local-ollama
|
|
191
|
+
protocol: openai
|
|
192
|
+
base_url: http://localhost:11434/v1
|
|
193
|
+
api_key: ollama
|
|
194
|
+
model_list:
|
|
195
|
+
- model_name: local-llama
|
|
196
|
+
model_params:
|
|
197
|
+
model: llama3.2
|
|
198
|
+
context_limit: 8192
|
|
213
199
|
```
|
|
214
200
|
|
|
201
|
+
##### Supported Protocols
|
|
202
|
+
|
|
203
|
+
- `anthropic` - Anthropic Claude API
|
|
204
|
+
- `openai` - OpenAI-compatible API
|
|
205
|
+
- `responses` - OpenAI Responses API (for o-series, GPT-5, Codex)
|
|
206
|
+
- `openrouter` - OpenRouter API
|
|
207
|
+
- `codex` - OpenAI Codex CLI (OAuth-based)
|
|
208
|
+
|
|
215
209
|
List configured providers and models:
|
|
216
210
|
|
|
217
211
|
```bash
|
|
@@ -4,8 +4,8 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "klaude-code"
|
|
7
|
-
version = "1.2.
|
|
8
|
-
description = "
|
|
7
|
+
version = "1.2.28"
|
|
8
|
+
description = "Minimal code agent CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13"
|
|
11
11
|
dependencies = [
|
|
@@ -27,6 +27,7 @@ dependencies = [
|
|
|
27
27
|
|
|
28
28
|
[project.scripts]
|
|
29
29
|
klaude = "klaude_code.cli.main:app"
|
|
30
|
+
klaude-code = "klaude_code.cli.main:app"
|
|
30
31
|
|
|
31
32
|
[tool.uv.build-backend]
|
|
32
33
|
module-name = "klaude_code"
|
|
@@ -16,8 +16,6 @@ def list_models() -> None:
|
|
|
16
16
|
from klaude_code.ui.terminal.color import is_light_terminal_background
|
|
17
17
|
|
|
18
18
|
config = load_config()
|
|
19
|
-
if config is None:
|
|
20
|
-
raise typer.Exit(1)
|
|
21
19
|
|
|
22
20
|
# Auto-detect theme when not explicitly set in config, to match other CLI entrypoints.
|
|
23
21
|
if config.theme is None:
|
|
@@ -60,9 +58,7 @@ def edit_config() -> None:
|
|
|
60
58
|
editor = "xdg-open"
|
|
61
59
|
|
|
62
60
|
# Ensure config file exists
|
|
63
|
-
|
|
64
|
-
if config is None:
|
|
65
|
-
raise typer.Exit(1)
|
|
61
|
+
load_config()
|
|
66
62
|
|
|
67
63
|
try:
|
|
68
64
|
if editor == "open -a TextEdit":
|
|
@@ -63,7 +63,15 @@ def open_log_file_in_editor(path: Path) -> None:
|
|
|
63
63
|
editor = "xdg-open"
|
|
64
64
|
|
|
65
65
|
try:
|
|
66
|
-
|
|
66
|
+
# Detach stdin to prevent the editor from interfering with terminal input state.
|
|
67
|
+
# Without this, the spawned process inherits the parent's TTY and can disrupt
|
|
68
|
+
# prompt_toolkit's keyboard handling (e.g., history navigation with up/down keys).
|
|
69
|
+
subprocess.Popen(
|
|
70
|
+
[editor, str(path)],
|
|
71
|
+
stdin=subprocess.DEVNULL,
|
|
72
|
+
stdout=subprocess.DEVNULL,
|
|
73
|
+
stderr=subprocess.DEVNULL,
|
|
74
|
+
)
|
|
67
75
|
except FileNotFoundError:
|
|
68
76
|
log((f"Error: Editor '{editor}' not found", "red"))
|
|
69
77
|
except Exception as exc: # pragma: no cover - best effort
|