klaude-code 1.4.1__tar.gz → 1.4.3__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.4.1 → klaude_code-1.4.3}/PKG-INFO +1 -1
- {klaude_code-1.4.1 → klaude_code-1.4.3}/pyproject.toml +1 -1
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/modes/repl/completers.py +68 -37
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/modes/repl/input_prompt_toolkit.py +145 -8
- {klaude_code-1.4.1 → klaude_code-1.4.3}/README.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/auth/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/auth/codex/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/auth/codex/exceptions.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/auth/codex/jwt_utils.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/auth/codex/oauth.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/auth/codex/token_manager.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/cli/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/cli/auth_cmd.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/cli/config_cmd.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/cli/debug.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/cli/list_model.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/cli/main.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/cli/runtime.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/cli/self_update.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/cli/session_cmd.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/clear_cmd.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/command_abc.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/debug_cmd.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/export_cmd.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/export_online_cmd.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/fork_session_cmd.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/help_cmd.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/model_cmd.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/prompt-init.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/prompt-jj-describe.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/prompt_command.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/refresh_cmd.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/registry.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/release_notes_cmd.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/resume_cmd.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/status_cmd.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/terminal_setup_cmd.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/command/thinking_cmd.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/config/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/config/assets/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/config/assets/builtin_config.yaml +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/config/builtin_config.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/config/config.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/config/select_model.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/const.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/agent.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/executor.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/manager/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/manager/llm_clients.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/manager/llm_clients_builder.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/manager/sub_agent_manager.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/prompt.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/prompts/prompt-claude-code.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/prompts/prompt-codex-gpt-5-1-codex-max.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/prompts/prompt-codex-gpt-5-2-codex.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/prompts/prompt-codex.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/prompts/prompt-gemini.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/prompts/prompt-minimal.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/prompts/prompt-sub-agent-explore.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/prompts/prompt-sub-agent-oracle.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/prompts/prompt-sub-agent-web.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/prompts/prompt-sub-agent.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/reminders.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/task.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/file/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/file/_utils.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/file/apply_patch.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/file/apply_patch_tool.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/file/apply_patch_tool.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/file/diff_builder.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/file/edit_tool.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/file/edit_tool.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/file/move_tool.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/file/move_tool.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/file/read_tool.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/file/read_tool.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/file/write_tool.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/file/write_tool.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/report_back_tool.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/shell/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/shell/bash_tool.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/shell/bash_tool.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/shell/command_safety.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/skill/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/skill/skill_tool.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/skill/skill_tool.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/sub_agent_tool.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/todo/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/todo/todo_write_tool.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/todo/todo_write_tool.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/todo/todo_write_tool_raw.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/todo/update_plan_tool.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/todo/update_plan_tool.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/tool_abc.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/tool_context.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/tool_registry.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/tool_runner.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/truncation.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/web/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/web/mermaid_tool.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/web/mermaid_tool.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/web/web_fetch_tool.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/web/web_fetch_tool.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/web/web_search_tool.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/web/web_search_tool.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/turn.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/anthropic/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/anthropic/client.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/anthropic/input.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/client.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/codex/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/codex/client.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/input_common.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/openai_compatible/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/openai_compatible/client.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/openai_compatible/input.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/openai_compatible/stream.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/openai_compatible/tool_call_accumulator.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/openrouter/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/openrouter/client.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/openrouter/input.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/openrouter/reasoning.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/registry.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/responses/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/responses/client.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/responses/input.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/llm/usage.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/protocol/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/protocol/commands.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/protocol/events.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/protocol/llm_param.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/protocol/model.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/protocol/op.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/protocol/op_handler.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/protocol/sub_agent/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/protocol/sub_agent/explore.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/protocol/sub_agent/oracle.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/protocol/sub_agent/task.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/protocol/sub_agent/web.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/protocol/tools.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/session/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/session/codec.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/session/export.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/session/selector.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/session/session.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/session/store.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/session/templates/export_session.html +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/session/templates/mermaid_viewer.html +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/skill/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/skill/assets/deslop/SKILL.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/skill/assets/dev-docs/SKILL.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/skill/assets/handoff/SKILL.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/skill/assets/jj-workspace/SKILL.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/skill/assets/skill-creator/SKILL.md +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/skill/loader.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/skill/manager.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/skill/system_skills.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/trace/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/trace/log.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/core/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/core/display.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/core/input.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/core/stage_manager.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/modes/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/modes/debug/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/modes/debug/display.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/modes/exec/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/modes/exec/display.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/modes/repl/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/modes/repl/clipboard.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/modes/repl/display.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/modes/repl/event_handler.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/modes/repl/key_bindings.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/modes/repl/renderer.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/renderers/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/renderers/assistant.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/renderers/bash_syntax.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/renderers/common.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/renderers/developer.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/renderers/diffs.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/renderers/errors.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/renderers/mermaid_viewer.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/renderers/metadata.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/renderers/sub_agent.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/renderers/thinking.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/renderers/tools.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/renderers/user_input.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/rich/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/rich/cjk_wrap.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/rich/code_panel.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/rich/live.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/rich/markdown.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/rich/quote.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/rich/searchable_text.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/rich/status.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/rich/theme.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/terminal/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/terminal/color.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/terminal/control.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/terminal/notifier.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/terminal/progress_bar.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/terminal/selector.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/utils/__init__.py +0 -0
- {klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/utils/common.py +0 -0
|
@@ -25,9 +25,9 @@ from typing import NamedTuple
|
|
|
25
25
|
|
|
26
26
|
from prompt_toolkit.completion import Completer, Completion
|
|
27
27
|
from prompt_toolkit.document import Document
|
|
28
|
-
from prompt_toolkit.formatted_text import
|
|
28
|
+
from prompt_toolkit.formatted_text import FormattedText
|
|
29
29
|
|
|
30
|
-
from klaude_code.command import get_commands
|
|
30
|
+
from klaude_code.command import CommandABC, get_commands
|
|
31
31
|
from klaude_code.trace.log import DebugType, log_debug
|
|
32
32
|
|
|
33
33
|
# Pattern to match @token for completion refresh (used by key bindings).
|
|
@@ -88,7 +88,7 @@ class _SlashCommandCompleter(Completer):
|
|
|
88
88
|
commands = get_commands()
|
|
89
89
|
|
|
90
90
|
# Filter commands that match the fragment (preserve registration order)
|
|
91
|
-
matched: list[tuple[str,
|
|
91
|
+
matched: list[tuple[str, CommandABC, str]] = []
|
|
92
92
|
for cmd_name, cmd_obj in commands.items():
|
|
93
93
|
if cmd_name.startswith(frag):
|
|
94
94
|
hint = f" [{cmd_obj.placeholder}]" if cmd_obj.support_addition_params else ""
|
|
@@ -97,25 +97,15 @@ class _SlashCommandCompleter(Completer):
|
|
|
97
97
|
if not matched:
|
|
98
98
|
return
|
|
99
99
|
|
|
100
|
-
# Calculate max width for alignment
|
|
101
|
-
# Find the longest command+hint length
|
|
102
|
-
max_len = max(len(name) + len(hint) for name, _, hint in matched)
|
|
103
|
-
# Set a minimum width (e.g. 20) and add some padding
|
|
104
|
-
align_width = max(max_len, 20) + 2
|
|
105
|
-
|
|
106
100
|
for cmd_name, cmd_obj, hint in matched:
|
|
107
|
-
label_len = len(cmd_name) + len(hint)
|
|
108
|
-
padding = " " * (align_width - label_len)
|
|
109
|
-
|
|
110
|
-
# Using HTML for formatting: bold command name, normal hint, gray summary
|
|
111
|
-
display_text = HTML(
|
|
112
|
-
f"<b>{cmd_name}</b>{hint}{padding}<style color='ansibrightblack'>{cmd_obj.summary}</style>" # pyright: ignore[reportUnknownMemberType, reportAttributeAccessIssue]
|
|
113
|
-
)
|
|
114
101
|
completion_text = f"/{cmd_name} "
|
|
102
|
+
# Use FormattedText to style the hint (placeholder) in bright black
|
|
103
|
+
display = FormattedText([("", cmd_name), ("ansibrightblack", hint)]) if hint else cmd_name
|
|
115
104
|
yield Completion(
|
|
116
105
|
text=completion_text,
|
|
117
106
|
start_position=start_position,
|
|
118
|
-
display=
|
|
107
|
+
display=display,
|
|
108
|
+
display_meta=str(cmd_obj.summary),
|
|
119
109
|
)
|
|
120
110
|
|
|
121
111
|
def is_slash_command_context(self, document: Document) -> bool:
|
|
@@ -171,26 +161,18 @@ class _SkillCompleter(Completer):
|
|
|
171
161
|
if not matched:
|
|
172
162
|
return
|
|
173
163
|
|
|
174
|
-
# Calculate max
|
|
175
|
-
|
|
176
|
-
align_width = max(max_name_len, 20) + 2
|
|
164
|
+
# Calculate max location length for alignment
|
|
165
|
+
max_loc_len = max(len(loc) for _, _, loc in matched)
|
|
177
166
|
|
|
178
167
|
for name, desc, location in matched:
|
|
179
|
-
# Format: name [location] description
|
|
180
|
-
# Align location tags (max length is "project" = 7, plus brackets = 9)
|
|
181
|
-
padding_name = " " * (align_width - len(name))
|
|
182
|
-
location_tag = f"[{location}]".ljust(9)
|
|
183
|
-
|
|
184
|
-
# Using HTML for formatting: bold skill name, cyan location tag, gray description
|
|
185
|
-
display_text = HTML(
|
|
186
|
-
f"<b>{name}</b>{padding_name}<style color='ansicyan'>{location_tag}</style> "
|
|
187
|
-
f"<style color='ansibrightblack'>{desc}</style>"
|
|
188
|
-
)
|
|
189
168
|
completion_text = f"${name} "
|
|
169
|
+
# Pad location to align descriptions
|
|
170
|
+
padded_location = f"[{location}]".ljust(max_loc_len + 2) # +2 for brackets
|
|
190
171
|
yield Completion(
|
|
191
172
|
text=completion_text,
|
|
192
173
|
start_position=start_position,
|
|
193
|
-
display=
|
|
174
|
+
display=name,
|
|
175
|
+
display_meta=f"{padded_location} {desc}",
|
|
194
176
|
)
|
|
195
177
|
|
|
196
178
|
def _get_available_skills(self) -> list[tuple[str, str, str]]:
|
|
@@ -322,7 +304,8 @@ class _AtFilesCompleter(Completer):
|
|
|
322
304
|
yield Completion(
|
|
323
305
|
text=self._format_completion_text(s, is_quoted=is_quoted),
|
|
324
306
|
start_position=start_position,
|
|
325
|
-
display=s,
|
|
307
|
+
display=self._format_display_label(s, 0),
|
|
308
|
+
display_meta=s,
|
|
326
309
|
)
|
|
327
310
|
return [] # type: ignore[reportUnknownVariableType]
|
|
328
311
|
|
|
@@ -338,7 +321,8 @@ class _AtFilesCompleter(Completer):
|
|
|
338
321
|
yield Completion(
|
|
339
322
|
text=self._format_completion_text(s, is_quoted=is_quoted),
|
|
340
323
|
start_position=start_position,
|
|
341
|
-
display=s,
|
|
324
|
+
display=self._format_display_label(s, 0),
|
|
325
|
+
display_meta=s,
|
|
342
326
|
)
|
|
343
327
|
|
|
344
328
|
# ---- Core logic ----
|
|
@@ -457,11 +441,13 @@ class _AtFilesCompleter(Completer):
|
|
|
457
441
|
keyword_norm: str,
|
|
458
442
|
) -> list[str]:
|
|
459
443
|
# Filter to keyword (case-insensitive) and rank by:
|
|
460
|
-
# 1.
|
|
461
|
-
# 2.
|
|
444
|
+
# 1. Hidden files (starting with .) are deprioritized
|
|
445
|
+
# 2. Paths containing "test" are deprioritized
|
|
446
|
+
# 3. Directory depth (shallower first)
|
|
447
|
+
# 4. Basename hit first, then path hit position, then length
|
|
462
448
|
# Since both fd and rg now search from current directory, all paths are relative to cwd
|
|
463
449
|
kn = keyword_norm
|
|
464
|
-
out: list[tuple[str, tuple[int, int, int, int, int]]] = []
|
|
450
|
+
out: list[tuple[str, tuple[int, int, int, int, int, int, int]]] = []
|
|
465
451
|
for p in paths_from_root:
|
|
466
452
|
pl = p.lower()
|
|
467
453
|
if kn not in pl:
|
|
@@ -477,7 +463,15 @@ class _AtFilesCompleter(Completer):
|
|
|
477
463
|
base_pos = base.find(kn)
|
|
478
464
|
path_pos = pl.find(kn)
|
|
479
465
|
depth = rel_to_cwd.rstrip("/").count("/")
|
|
466
|
+
|
|
467
|
+
# Deprioritize hidden files/directories (any path segment starting with .)
|
|
468
|
+
is_hidden = any(seg.startswith(".") for seg in rel_to_cwd.split("/") if seg)
|
|
469
|
+
# Deprioritize paths containing "test"
|
|
470
|
+
has_test = "test" in pl
|
|
471
|
+
|
|
480
472
|
score = (
|
|
473
|
+
1 if is_hidden else 0,
|
|
474
|
+
1 if has_test else 0,
|
|
481
475
|
depth,
|
|
482
476
|
0 if base_pos != -1 else 1,
|
|
483
477
|
base_pos if base_pos != -1 else 10_000,
|
|
@@ -523,6 +517,34 @@ class _AtFilesCompleter(Completer):
|
|
|
523
517
|
return f'@"{suggestion}" '
|
|
524
518
|
return f"@{suggestion} "
|
|
525
519
|
|
|
520
|
+
def _format_display_label(self, suggestion: str, align_width: int) -> str:
|
|
521
|
+
"""Format visible label for a completion option.
|
|
522
|
+
|
|
523
|
+
Keep this unstyled so that the completion menu's selection style can
|
|
524
|
+
fully override the selected row.
|
|
525
|
+
"""
|
|
526
|
+
|
|
527
|
+
_ = align_width
|
|
528
|
+
return self._display_name(suggestion)
|
|
529
|
+
|
|
530
|
+
def _display_align_width(self, suggestions: list[str]) -> int:
|
|
531
|
+
"""Calculate alignment width for display labels."""
|
|
532
|
+
|
|
533
|
+
return max((len(self._display_name(s)) for s in suggestions), default=0)
|
|
534
|
+
|
|
535
|
+
def _display_name(self, suggestion: str) -> str:
|
|
536
|
+
"""Return the basename (with trailing slash for directories) for display."""
|
|
537
|
+
|
|
538
|
+
if not suggestion:
|
|
539
|
+
return suggestion
|
|
540
|
+
|
|
541
|
+
is_dir = suggestion.endswith("/")
|
|
542
|
+
stripped = suggestion.rstrip("/")
|
|
543
|
+
base = stripped.split("/")[-1] if stripped else suggestion
|
|
544
|
+
if is_dir:
|
|
545
|
+
return f"{base}/"
|
|
546
|
+
return base
|
|
547
|
+
|
|
526
548
|
def _same_scope(self, prev_key: str, cur_key: str) -> bool:
|
|
527
549
|
# Consider same scope if they share the same base directory and one prefix startswith the other
|
|
528
550
|
try:
|
|
@@ -677,11 +699,20 @@ class _AtFilesCompleter(Completer):
|
|
|
677
699
|
|
|
678
700
|
Avoids running external tools; shows immediate directories first, then files.
|
|
679
701
|
Filters out .git, .venv, and node_modules to reduce noise.
|
|
702
|
+
Hidden files and paths containing "test" are deprioritized.
|
|
680
703
|
"""
|
|
681
704
|
excluded = {".git", ".venv", "node_modules"}
|
|
682
705
|
items: list[str] = []
|
|
683
706
|
try:
|
|
684
|
-
|
|
707
|
+
# Sort by: hidden files last, test paths last, directories first, then name
|
|
708
|
+
def sort_key(p: Path) -> tuple[int, int, int, str]:
|
|
709
|
+
name = p.name
|
|
710
|
+
is_hidden = name.startswith(".")
|
|
711
|
+
has_test = "test" in name.lower()
|
|
712
|
+
is_file = not p.is_dir()
|
|
713
|
+
return (1 if is_hidden else 0, 1 if has_test else 0, 1 if is_file else 0, name.lower())
|
|
714
|
+
|
|
715
|
+
for p in sorted(cwd.iterdir(), key=sort_key):
|
|
685
716
|
name = p.name
|
|
686
717
|
if name in excluded:
|
|
687
718
|
continue
|
{klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/ui/modes/repl/input_prompt_toolkit.py
RENAMED
|
@@ -6,13 +6,20 @@ from collections.abc import AsyncIterator, Callable
|
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
from typing import NamedTuple, override
|
|
8
8
|
|
|
9
|
+
import prompt_toolkit.layout.menus as pt_menus
|
|
9
10
|
from prompt_toolkit import PromptSession
|
|
10
|
-
from prompt_toolkit.
|
|
11
|
+
from prompt_toolkit.application.current import get_app
|
|
12
|
+
from prompt_toolkit.completion import Completion, ThreadedCompleter
|
|
11
13
|
from prompt_toolkit.cursor_shapes import CursorShape
|
|
12
|
-
from prompt_toolkit.
|
|
14
|
+
from prompt_toolkit.data_structures import Point
|
|
15
|
+
from prompt_toolkit.formatted_text import FormattedText, StyleAndTextTuples, to_formatted_text
|
|
13
16
|
from prompt_toolkit.history import FileHistory
|
|
17
|
+
from prompt_toolkit.layout.containers import Container, FloatContainer, Window
|
|
18
|
+
from prompt_toolkit.layout.controls import UIContent
|
|
19
|
+
from prompt_toolkit.layout.menus import CompletionsMenu, MultiColumnCompletionsMenu
|
|
14
20
|
from prompt_toolkit.patch_stdout import patch_stdout
|
|
15
21
|
from prompt_toolkit.styles import Style
|
|
22
|
+
from prompt_toolkit.utils import get_cwidth
|
|
16
23
|
|
|
17
24
|
from klaude_code.protocol.model import UserInputPayload
|
|
18
25
|
from klaude_code.ui.core.input import InputProviderABC
|
|
@@ -29,9 +36,9 @@ class REPLStatusSnapshot(NamedTuple):
|
|
|
29
36
|
update_message: str | None = None
|
|
30
37
|
|
|
31
38
|
|
|
32
|
-
COMPLETION_SELECTED_DARK_BG = "
|
|
33
|
-
COMPLETION_SELECTED_LIGHT_BG = "
|
|
34
|
-
COMPLETION_SELECTED_UNKNOWN_BG = "
|
|
39
|
+
COMPLETION_SELECTED_DARK_BG = "ansigreen"
|
|
40
|
+
COMPLETION_SELECTED_LIGHT_BG = "ansigreen"
|
|
41
|
+
COMPLETION_SELECTED_UNKNOWN_BG = "ansigreen"
|
|
35
42
|
COMPLETION_MENU = "ansibrightblack"
|
|
36
43
|
INPUT_PROMPT_STYLE = "ansimagenta bold"
|
|
37
44
|
PLACEHOLDER_TEXT_STYLE_DARK_BG = "fg:#5a5a5a italic"
|
|
@@ -42,6 +49,128 @@ PLACEHOLDER_SYMBOL_STYLE_LIGHT_BG = "bg:#e6e6e6 fg:#7a7a7a"
|
|
|
42
49
|
PLACEHOLDER_SYMBOL_STYLE_UNKNOWN_BG = "bg:#2a2a2a fg:#8a8a8a"
|
|
43
50
|
|
|
44
51
|
|
|
52
|
+
def _left_align_completion_menus(container: Container) -> None:
|
|
53
|
+
"""Force completion menus to render at column 0.
|
|
54
|
+
|
|
55
|
+
prompt_toolkit's default completion menu floats are positioned relative to the
|
|
56
|
+
cursor (`xcursor=True`). That makes the popup indent as the caret moves.
|
|
57
|
+
We walk the layout tree and rewrite the Float positioning for completion menus
|
|
58
|
+
to keep them fixed at the left edge.
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
if isinstance(container, FloatContainer):
|
|
62
|
+
for flt in container.floats:
|
|
63
|
+
if isinstance(flt.content, (CompletionsMenu, MultiColumnCompletionsMenu)):
|
|
64
|
+
flt.xcursor = False
|
|
65
|
+
flt.left = 0
|
|
66
|
+
|
|
67
|
+
for child in container.get_children():
|
|
68
|
+
_left_align_completion_menus(child)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class _KlaudeCompletionsMenuControl(pt_menus.CompletionsMenuControl):
|
|
72
|
+
"""CompletionsMenuControl with stable 2-char left prefix.
|
|
73
|
+
|
|
74
|
+
Requirements:
|
|
75
|
+
- Add a 2-character prefix for every row.
|
|
76
|
+
- Render "→ " for the selected row, and " " for non-selected rows.
|
|
77
|
+
|
|
78
|
+
Keep completion text unstyled so that the menu's current-row style can
|
|
79
|
+
override it entirely.
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
_PREFIX_WIDTH = 2
|
|
83
|
+
|
|
84
|
+
def _get_menu_width(self, max_width: int, complete_state: pt_menus.CompletionState) -> int: # pyright: ignore[reportPrivateImportUsage]
|
|
85
|
+
"""Return the width of the main column.
|
|
86
|
+
|
|
87
|
+
This is prompt_toolkit's default implementation, except we reserve one
|
|
88
|
+
extra character for the 2-char prefix ("→ "/" ").
|
|
89
|
+
"""
|
|
90
|
+
|
|
91
|
+
return min(
|
|
92
|
+
max_width,
|
|
93
|
+
max(
|
|
94
|
+
self.MIN_WIDTH,
|
|
95
|
+
max(get_cwidth(c.display_text) for c in complete_state.completions) + 3,
|
|
96
|
+
),
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
def create_content(self, width: int, height: int) -> UIContent:
|
|
100
|
+
complete_state = get_app().current_buffer.complete_state
|
|
101
|
+
if complete_state:
|
|
102
|
+
completions = complete_state.completions
|
|
103
|
+
index = complete_state.complete_index
|
|
104
|
+
|
|
105
|
+
menu_width = self._get_menu_width(width, complete_state)
|
|
106
|
+
menu_meta_width = self._get_menu_meta_width(width - menu_width, complete_state)
|
|
107
|
+
show_meta = self._show_meta(complete_state)
|
|
108
|
+
|
|
109
|
+
def get_line(i: int) -> StyleAndTextTuples:
|
|
110
|
+
completion = completions[i]
|
|
111
|
+
is_current_completion = i == index
|
|
112
|
+
|
|
113
|
+
result = self._get_menu_item_fragments_with_cursor(
|
|
114
|
+
completion,
|
|
115
|
+
is_current_completion,
|
|
116
|
+
menu_width,
|
|
117
|
+
space_after=True,
|
|
118
|
+
)
|
|
119
|
+
if show_meta:
|
|
120
|
+
result += self._get_menu_item_meta_fragments(
|
|
121
|
+
completion,
|
|
122
|
+
is_current_completion,
|
|
123
|
+
menu_meta_width,
|
|
124
|
+
)
|
|
125
|
+
return result
|
|
126
|
+
|
|
127
|
+
return UIContent(
|
|
128
|
+
get_line=get_line,
|
|
129
|
+
cursor_position=Point(x=0, y=index or 0),
|
|
130
|
+
line_count=len(completions),
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
return UIContent()
|
|
134
|
+
|
|
135
|
+
def _get_menu_item_fragments_with_cursor(
|
|
136
|
+
self,
|
|
137
|
+
completion: Completion,
|
|
138
|
+
is_current_completion: bool,
|
|
139
|
+
width: int,
|
|
140
|
+
*,
|
|
141
|
+
space_after: bool = False,
|
|
142
|
+
) -> StyleAndTextTuples:
|
|
143
|
+
if is_current_completion:
|
|
144
|
+
style_str = f"class:completion-menu.completion.current {completion.style} {completion.selected_style}"
|
|
145
|
+
prefix = "→ "
|
|
146
|
+
else:
|
|
147
|
+
style_str = "class:completion-menu.completion " + completion.style
|
|
148
|
+
prefix = " "
|
|
149
|
+
|
|
150
|
+
max_text_width = width - self._PREFIX_WIDTH - (1 if space_after else 0)
|
|
151
|
+
text, text_width = pt_menus._trim_formatted_text(completion.display, max_text_width) # pyright: ignore[reportPrivateUsage]
|
|
152
|
+
padding = " " * (width - self._PREFIX_WIDTH - text_width)
|
|
153
|
+
|
|
154
|
+
return to_formatted_text(
|
|
155
|
+
[("", prefix), *text, ("", padding)],
|
|
156
|
+
style=style_str,
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def _patch_completion_menu_controls(container: Container) -> None:
|
|
161
|
+
"""Replace prompt_toolkit completion menu controls with customized versions."""
|
|
162
|
+
|
|
163
|
+
if isinstance(container, Window):
|
|
164
|
+
content = container.content
|
|
165
|
+
if isinstance(content, pt_menus.CompletionsMenuControl) and not isinstance(
|
|
166
|
+
content, _KlaudeCompletionsMenuControl
|
|
167
|
+
):
|
|
168
|
+
container.content = _KlaudeCompletionsMenuControl()
|
|
169
|
+
|
|
170
|
+
for child in container.get_children():
|
|
171
|
+
_patch_completion_menu_controls(child)
|
|
172
|
+
|
|
173
|
+
|
|
45
174
|
class PromptToolkitInput(InputProviderABC):
|
|
46
175
|
def __init__(
|
|
47
176
|
self,
|
|
@@ -98,14 +227,22 @@ class PromptToolkitInput(InputProviderABC):
|
|
|
98
227
|
"completion-menu.border": "bg:default",
|
|
99
228
|
"scrollbar.background": "bg:default",
|
|
100
229
|
"scrollbar.button": "bg:default",
|
|
101
|
-
"completion-menu.completion":
|
|
230
|
+
"completion-menu.completion": "bg:default fg:default",
|
|
102
231
|
"completion-menu.meta.completion": f"bg:default fg:{COMPLETION_MENU}",
|
|
103
|
-
"completion-menu.completion.current": f"noreverse bg:default fg:{completion_selected}
|
|
104
|
-
"completion-menu.meta.completion.current": f"bg:default fg:{completion_selected}
|
|
232
|
+
"completion-menu.completion.current": f"noreverse bg:default fg:{completion_selected}",
|
|
233
|
+
"completion-menu.meta.completion.current": f"bg:default fg:{completion_selected}",
|
|
105
234
|
}
|
|
106
235
|
),
|
|
107
236
|
)
|
|
108
237
|
|
|
238
|
+
# Keep completion popups left-aligned instead of shifting with the caret.
|
|
239
|
+
with contextlib.suppress(Exception):
|
|
240
|
+
_left_align_completion_menus(self._session.app.layout.container)
|
|
241
|
+
|
|
242
|
+
# Customize completion rendering (2-space indent + selected arrow prefix).
|
|
243
|
+
with contextlib.suppress(Exception):
|
|
244
|
+
_patch_completion_menu_controls(self._session.app.layout.container)
|
|
245
|
+
|
|
109
246
|
def _select_first_completion_on_open(buf) -> None: # type: ignore[no-untyped-def]
|
|
110
247
|
"""Default to selecting the first completion without inserting it."""
|
|
111
248
|
|
|
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
|
|
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.4.1 → klaude_code-1.4.3}/src/klaude_code/core/prompts/prompt-codex-gpt-5-2-codex.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/prompts/prompt-sub-agent-explore.md
RENAMED
|
File without changes
|
{klaude_code-1.4.1 → klaude_code-1.4.3}/src/klaude_code/core/prompts/prompt-sub-agent-oracle.md
RENAMED
|
File without changes
|
{klaude_code-1.4.1 → klaude_code-1.4.3}/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
|
|
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.4.1 → klaude_code-1.4.3}/src/klaude_code/core/tool/todo/todo_write_tool_raw.md
RENAMED
|
File without changes
|
|
File without changes
|