klaude-code 1.2.20__tar.gz → 1.2.21__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.20 → klaude_code-1.2.21}/PKG-INFO +1 -1
- {klaude_code-1.2.20 → klaude_code-1.2.21}/pyproject.toml +1 -1
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/cli/main.py +23 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/cli/runtime.py +13 -1
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/thinking_cmd.py +10 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/shell/bash_tool.py +4 -3
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/web/mermaid_tool.md +26 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/session/session.py +7 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/README.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/auth/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/auth/codex/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/auth/codex/exceptions.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/auth/codex/jwt_utils.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/auth/codex/oauth.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/auth/codex/token_manager.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/cli/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/cli/auth_cmd.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/cli/config_cmd.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/cli/debug.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/cli/list_model.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/cli/self_update.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/cli/session_cmd.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/clear_cmd.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/command_abc.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/debug_cmd.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/diff_cmd.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/export_cmd.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/export_online_cmd.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/help_cmd.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/model_cmd.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/prompt-deslop.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/prompt-dev-docs-update.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/prompt-dev-docs.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/prompt-handoff.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/prompt-init.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/prompt-jj-workspace.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/prompt_command.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/refresh_cmd.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/registry.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/release_notes_cmd.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/status_cmd.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/command/terminal_setup_cmd.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/config/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/config/config.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/config/select_model.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/const/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/agent.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/executor.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/manager/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/manager/llm_clients.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/manager/llm_clients_builder.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/manager/sub_agent_manager.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/prompt.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/prompts/prompt-claude-code.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/prompts/prompt-codex-gpt-5-1-codex-max.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/prompts/prompt-codex-gpt-5-1.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/prompts/prompt-gemini.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/prompts/prompt-minimal.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/prompts/prompt-sub-agent-explore.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/prompts/prompt-sub-agent-oracle.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/prompts/prompt-sub-agent-web.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/prompts/prompt-sub-agent.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/reminders.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/task.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/file/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/file/_utils.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/file/apply_patch.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/file/apply_patch_tool.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/file/apply_patch_tool.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/file/edit_tool.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/file/edit_tool.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/file/multi_edit_tool.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/file/multi_edit_tool.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/file/read_tool.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/file/read_tool.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/file/write_tool.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/file/write_tool.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/memory/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/memory/memory_tool.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/memory/memory_tool.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/memory/skill_loader.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/memory/skill_tool.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/memory/skill_tool.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/report_back_tool.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/shell/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/shell/bash_tool.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/shell/command_safety.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/sub_agent_tool.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/todo/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/todo/todo_write_tool.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/todo/todo_write_tool.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/todo/todo_write_tool_raw.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/todo/update_plan_tool.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/todo/update_plan_tool.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/tool_abc.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/tool_context.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/tool_registry.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/tool_runner.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/truncation.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/web/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/web/mermaid_tool.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/web/web_fetch_tool.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/web/web_fetch_tool.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/web/web_search_tool.md +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/web/web_search_tool.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/turn.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/anthropic/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/anthropic/client.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/anthropic/input.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/client.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/codex/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/codex/client.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/input_common.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/openai_compatible/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/openai_compatible/client.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/openai_compatible/input.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/openai_compatible/stream_processor.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/openai_compatible/tool_call_accumulator.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/openrouter/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/openrouter/client.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/openrouter/input.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/openrouter/reasoning_handler.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/registry.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/responses/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/responses/client.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/responses/input.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/usage.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/protocol/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/protocol/commands.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/protocol/events.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/protocol/llm_param.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/protocol/model.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/protocol/op.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/protocol/op_handler.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/protocol/sub_agent/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/protocol/sub_agent/explore.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/protocol/sub_agent/oracle.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/protocol/sub_agent/task.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/protocol/sub_agent/web.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/protocol/tools.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/session/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/session/codec.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/session/export.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/session/selector.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/session/store.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/session/templates/export_session.html +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/trace/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/trace/log.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/core/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/core/display.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/core/input.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/core/stage_manager.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/modes/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/modes/debug/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/modes/debug/display.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/modes/exec/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/modes/exec/display.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/modes/repl/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/modes/repl/clipboard.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/modes/repl/completers.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/modes/repl/display.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/modes/repl/event_handler.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/modes/repl/input_prompt_toolkit.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/modes/repl/key_bindings.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/modes/repl/renderer.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/renderers/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/renderers/assistant.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/renderers/common.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/renderers/developer.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/renderers/diffs.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/renderers/errors.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/renderers/metadata.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/renderers/sub_agent.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/renderers/thinking.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/renderers/tools.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/renderers/user_input.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/rich/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/rich/cjk_wrap.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/rich/code_panel.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/rich/live.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/rich/markdown.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/rich/quote.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/rich/searchable_text.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/rich/status.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/rich/theme.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/terminal/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/terminal/color.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/terminal/control.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/terminal/notifier.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/terminal/progress_bar.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/utils/__init__.py +0 -0
- {klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/utils/common.py +0 -0
|
@@ -194,6 +194,11 @@ def main_callback(
|
|
|
194
194
|
),
|
|
195
195
|
continue_: bool = typer.Option(False, "--continue", "-c", help="Continue from latest session"),
|
|
196
196
|
resume: bool = typer.Option(False, "--resume", "-r", help="Select a session to resume for this project"),
|
|
197
|
+
resume_by_id: str | None = typer.Option(
|
|
198
|
+
None,
|
|
199
|
+
"--resume-by-id",
|
|
200
|
+
help="Resume a session by its ID (must exist)",
|
|
201
|
+
),
|
|
197
202
|
select_model: bool = typer.Option(
|
|
198
203
|
False,
|
|
199
204
|
"--select-model",
|
|
@@ -224,6 +229,7 @@ def main_callback(
|
|
|
224
229
|
if ctx.invoked_subcommand is None:
|
|
225
230
|
from klaude_code.cli.runtime import AppInitConfig, run_interactive
|
|
226
231
|
from klaude_code.config.select_model import select_model_from_config
|
|
232
|
+
from klaude_code.trace import log
|
|
227
233
|
|
|
228
234
|
update_terminal_title()
|
|
229
235
|
|
|
@@ -236,6 +242,16 @@ def main_callback(
|
|
|
236
242
|
# Resolve session id before entering asyncio loop
|
|
237
243
|
# session_id=None means create a new session
|
|
238
244
|
session_id: str | None = None
|
|
245
|
+
|
|
246
|
+
resume_by_id_value = resume_by_id.strip() if resume_by_id is not None else None
|
|
247
|
+
if resume_by_id_value == "":
|
|
248
|
+
log(("Error: --resume-by-id cannot be empty", "red"))
|
|
249
|
+
raise typer.Exit(2)
|
|
250
|
+
|
|
251
|
+
if resume_by_id_value is not None and (resume or continue_):
|
|
252
|
+
log(("Error: --resume-by-id cannot be combined with --resume/--continue", "red"))
|
|
253
|
+
raise typer.Exit(2)
|
|
254
|
+
|
|
239
255
|
if resume:
|
|
240
256
|
session_id = resume_select_session()
|
|
241
257
|
if session_id is None:
|
|
@@ -243,6 +259,13 @@ def main_callback(
|
|
|
243
259
|
# If user didn't pick, allow fallback to --continue
|
|
244
260
|
if session_id is None and continue_:
|
|
245
261
|
session_id = Session.most_recent_session_id()
|
|
262
|
+
|
|
263
|
+
if resume_by_id_value is not None:
|
|
264
|
+
if not Session.exists(resume_by_id_value):
|
|
265
|
+
log((f"Error: session id '{resume_by_id_value}' not found for this project", "red"))
|
|
266
|
+
log(("Hint: run `klaude --resume` to select an existing session", "yellow"))
|
|
267
|
+
raise typer.Exit(2)
|
|
268
|
+
session_id = resume_by_id_value
|
|
246
269
|
# If still no session_id, leave as None to create a new session
|
|
247
270
|
|
|
248
271
|
if session_id is not None and chosen_model is None:
|
|
@@ -17,7 +17,7 @@ from klaude_code.core.executor import Executor
|
|
|
17
17
|
from klaude_code.core.manager import build_llm_clients
|
|
18
18
|
from klaude_code.protocol import events, op
|
|
19
19
|
from klaude_code.protocol.model import UserInputPayload
|
|
20
|
-
from klaude_code.session.session import close_default_store
|
|
20
|
+
from klaude_code.session.session import Session, close_default_store
|
|
21
21
|
from klaude_code.trace import DebugType, log, set_debug_logging
|
|
22
22
|
from klaude_code.ui.modes.repl import build_repl_status_snapshot
|
|
23
23
|
from klaude_code.ui.modes.repl.input_prompt_toolkit import REPLStatusSnapshot
|
|
@@ -212,6 +212,9 @@ async def _handle_keyboard_interrupt(executor: Executor) -> None:
|
|
|
212
212
|
"""Handle Ctrl+C by logging and sending a global interrupt."""
|
|
213
213
|
|
|
214
214
|
log("Bye!")
|
|
215
|
+
session_id = executor.context.current_session_id()
|
|
216
|
+
if session_id and Session.exists(session_id):
|
|
217
|
+
log(("Resume with:", "dim"), (f"klaude --resume-by-id {session_id}", "green"))
|
|
215
218
|
# Executor might already be stopping
|
|
216
219
|
with contextlib.suppress(Exception):
|
|
217
220
|
await executor.submit(op.InterruptOperation(target_session_id=None))
|
|
@@ -296,6 +299,8 @@ async def run_interactive(init_config: AppInitConfig, session_id: str | None = N
|
|
|
296
299
|
|
|
297
300
|
restore_sigint = install_sigint_double_press_exit(_show_toast_once, _hide_progress)
|
|
298
301
|
|
|
302
|
+
exit_hint_printed = False
|
|
303
|
+
|
|
299
304
|
try:
|
|
300
305
|
await initialize_session(components.executor, components.event_queue, session_id=session_id)
|
|
301
306
|
_backfill_session_model_config(
|
|
@@ -347,8 +352,15 @@ async def run_interactive(init_config: AppInitConfig, session_id: str | None = N
|
|
|
347
352
|
|
|
348
353
|
except KeyboardInterrupt:
|
|
349
354
|
await _handle_keyboard_interrupt(components.executor)
|
|
355
|
+
exit_hint_printed = True
|
|
350
356
|
finally:
|
|
351
357
|
# Restore original SIGINT handler
|
|
352
358
|
with contextlib.suppress(Exception):
|
|
353
359
|
restore_sigint()
|
|
354
360
|
await cleanup_app_components(components)
|
|
361
|
+
|
|
362
|
+
if not exit_hint_printed:
|
|
363
|
+
active_session_id = components.executor.context.current_session_id()
|
|
364
|
+
if active_session_id and Session.exists(active_session_id):
|
|
365
|
+
log(f"Session ID: {active_session_id}")
|
|
366
|
+
log(f"Resume with: klaude --resume-by-id {active_session_id}")
|
|
@@ -10,6 +10,7 @@ RESPONSES_LEVELS = ["low", "medium", "high"]
|
|
|
10
10
|
RESPONSES_GPT51_LEVELS = ["none", "low", "medium", "high"]
|
|
11
11
|
RESPONSES_GPT52_LEVELS = ["none", "low", "medium", "high", "xhigh"]
|
|
12
12
|
RESPONSES_CODEX_MAX_LEVELS = ["medium", "high", "xhigh"]
|
|
13
|
+
RESPONSES_GEMINI_FLASH_LEVELS = ["minimal", "low", "medium", "high"]
|
|
13
14
|
|
|
14
15
|
ANTHROPIC_LEVELS: list[tuple[str, int | None]] = [
|
|
15
16
|
("off", 0),
|
|
@@ -48,6 +49,13 @@ def _is_codex_max_model(model_name: str | None) -> bool:
|
|
|
48
49
|
return "codex-max" in model_name.lower()
|
|
49
50
|
|
|
50
51
|
|
|
52
|
+
def _is_gemini_flash_model(model_name: str | None) -> bool:
|
|
53
|
+
"""Check if the model is Gemini 3 Flash."""
|
|
54
|
+
if not model_name:
|
|
55
|
+
return False
|
|
56
|
+
return "gemini-3-flash" in model_name.lower()
|
|
57
|
+
|
|
58
|
+
|
|
51
59
|
def _get_levels_for_responses(model_name: str | None) -> list[str]:
|
|
52
60
|
"""Get thinking levels for responses protocol."""
|
|
53
61
|
if _is_codex_max_model(model_name):
|
|
@@ -56,6 +64,8 @@ def _get_levels_for_responses(model_name: str | None) -> list[str]:
|
|
|
56
64
|
return RESPONSES_GPT52_LEVELS
|
|
57
65
|
if _is_gpt51_model(model_name):
|
|
58
66
|
return RESPONSES_GPT51_LEVELS
|
|
67
|
+
if _is_gemini_flash_model(model_name):
|
|
68
|
+
return RESPONSES_GEMINI_FLASH_LEVELS
|
|
59
69
|
return RESPONSES_LEVELS
|
|
60
70
|
|
|
61
71
|
|
|
@@ -5,6 +5,7 @@ import re
|
|
|
5
5
|
import signal
|
|
6
6
|
import subprocess
|
|
7
7
|
from pathlib import Path
|
|
8
|
+
from typing import Any
|
|
8
9
|
|
|
9
10
|
from pydantic import BaseModel
|
|
10
11
|
|
|
@@ -122,7 +123,7 @@ class BashTool(ToolABC):
|
|
|
122
123
|
return
|
|
123
124
|
|
|
124
125
|
try:
|
|
125
|
-
if os.name == "posix"
|
|
126
|
+
if os.name == "posix":
|
|
126
127
|
os.killpg(proc.pid, signal.SIGTERM)
|
|
127
128
|
else:
|
|
128
129
|
proc.terminate()
|
|
@@ -138,7 +139,7 @@ class BashTool(ToolABC):
|
|
|
138
139
|
|
|
139
140
|
# Escalate to hard kill if it didn't exit quickly.
|
|
140
141
|
with contextlib.suppress(Exception):
|
|
141
|
-
if os.name == "posix"
|
|
142
|
+
if os.name == "posix":
|
|
142
143
|
os.killpg(proc.pid, signal.SIGKILL)
|
|
143
144
|
else:
|
|
144
145
|
proc.kill()
|
|
@@ -148,7 +149,7 @@ class BashTool(ToolABC):
|
|
|
148
149
|
try:
|
|
149
150
|
# Create a dedicated process group so we can terminate the whole tree.
|
|
150
151
|
# (macOS/Linux support start_new_session; Windows does not.)
|
|
151
|
-
kwargs: dict[str,
|
|
152
|
+
kwargs: dict[str, Any] = {
|
|
152
153
|
"stdin": asyncio.subprocess.DEVNULL,
|
|
153
154
|
"stdout": asyncio.subprocess.PIPE,
|
|
154
155
|
"stderr": asyncio.subprocess.PIPE,
|
|
@@ -17,5 +17,31 @@ Diagrams are especially valuable for visualizing:
|
|
|
17
17
|
- Sequence and timing of operations
|
|
18
18
|
- Decision trees and conditional logic
|
|
19
19
|
|
|
20
|
+
# Syntax
|
|
21
|
+
- ALWAYS wrap node labels in double quotes, especially when they contain spaces, special characters, or non-ASCII text
|
|
22
|
+
- This applies to all node types: regular nodes, subgraph titles, and edge labels
|
|
23
|
+
|
|
24
|
+
Examples:
|
|
25
|
+
```mermaid
|
|
26
|
+
graph LR
|
|
27
|
+
A["User Input"] --> B["Process Data"]
|
|
28
|
+
B --> C["Output Result"]
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```mermaid
|
|
32
|
+
flowchart TD
|
|
33
|
+
subgraph auth["Authentication Module"]
|
|
34
|
+
login["Login Service"]
|
|
35
|
+
oauth["OAuth Provider"]
|
|
36
|
+
end
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```mermaid
|
|
40
|
+
sequenceDiagram
|
|
41
|
+
participant client as "Web Client"
|
|
42
|
+
participant server as "API Server"
|
|
43
|
+
client ->> server: "Send Request"
|
|
44
|
+
```
|
|
45
|
+
|
|
20
46
|
# Styling
|
|
21
47
|
- When defining custom classDefs, always define fill color, stroke color, and text color ("fill", "stroke", "color") explicitly
|
|
@@ -86,6 +86,13 @@ class Session(BaseModel):
|
|
|
86
86
|
def paths(cls) -> ProjectPaths:
|
|
87
87
|
return get_default_store().paths
|
|
88
88
|
|
|
89
|
+
@classmethod
|
|
90
|
+
def exists(cls, id: str) -> bool:
|
|
91
|
+
"""Return True if a persisted session exists for the current project."""
|
|
92
|
+
|
|
93
|
+
paths = cls.paths()
|
|
94
|
+
return paths.meta_file(id).exists() or paths.events_file(id).exists()
|
|
95
|
+
|
|
89
96
|
@classmethod
|
|
90
97
|
def create(cls, id: str | None = None, *, work_dir: Path | None = None) -> Session:
|
|
91
98
|
session = Session(id=id or uuid.uuid4().hex, work_dir=work_dir or Path.cwd())
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/manager/llm_clients_builder.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/prompts/prompt-claude-code.md
RENAMED
|
File without changes
|
|
File without changes
|
{klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/prompts/prompt-codex-gpt-5-1.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/prompts/prompt-sub-agent-explore.md
RENAMED
|
File without changes
|
{klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/prompts/prompt-sub-agent-oracle.md
RENAMED
|
File without changes
|
{klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/prompts/prompt-sub-agent-web.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/file/apply_patch_tool.md
RENAMED
|
File without changes
|
{klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/file/apply_patch_tool.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/todo/todo_write_tool_raw.md
RENAMED
|
File without changes
|
{klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/todo/update_plan_tool.md
RENAMED
|
File without changes
|
{klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/core/tool/todo/update_plan_tool.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/openai_compatible/stream_processor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/llm/openrouter/reasoning_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/session/templates/export_session.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{klaude_code-1.2.20 → klaude_code-1.2.21}/src/klaude_code/ui/modes/repl/input_prompt_toolkit.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|