klaude-code 2.4.0__tar.gz → 2.4.1__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.
Files changed (234) hide show
  1. {klaude_code-2.4.0 → klaude_code-2.4.1}/PKG-INFO +1 -1
  2. {klaude_code-2.4.0 → klaude_code-2.4.1}/pyproject.toml +1 -1
  3. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/config/sub_agent_model_helper.py +0 -9
  4. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/agent_profile.py +9 -23
  5. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/executor.py +13 -18
  6. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/terminal/selector.py +5 -6
  7. {klaude_code-2.4.0 → klaude_code-2.4.1}/README.md +0 -0
  8. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/__init__.py +0 -0
  9. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/app/__init__.py +0 -0
  10. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/app/runtime.py +0 -0
  11. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/auth/__init__.py +0 -0
  12. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/auth/base.py +0 -0
  13. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/auth/claude/__init__.py +0 -0
  14. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/auth/claude/exceptions.py +0 -0
  15. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/auth/claude/oauth.py +0 -0
  16. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/auth/claude/token_manager.py +0 -0
  17. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/auth/codex/__init__.py +0 -0
  18. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/auth/codex/exceptions.py +0 -0
  19. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/auth/codex/jwt_utils.py +0 -0
  20. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/auth/codex/oauth.py +0 -0
  21. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/auth/codex/token_manager.py +0 -0
  22. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/cli/__init__.py +0 -0
  23. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/cli/auth_cmd.py +0 -0
  24. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/cli/config_cmd.py +0 -0
  25. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/cli/cost_cmd.py +0 -0
  26. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/cli/debug.py +0 -0
  27. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/cli/list_model.py +0 -0
  28. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/cli/main.py +0 -0
  29. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/cli/self_update.py +0 -0
  30. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/cli/session_cmd.py +0 -0
  31. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/config/__init__.py +0 -0
  32. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/config/assets/__init__.py +0 -0
  33. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/config/assets/builtin_config.yaml +0 -0
  34. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/config/builtin_config.py +0 -0
  35. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/config/config.py +0 -0
  36. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/config/model_matcher.py +0 -0
  37. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/config/thinking.py +0 -0
  38. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/const.py +0 -0
  39. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/__init__.py +0 -0
  40. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/agent.py +0 -0
  41. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/manager/__init__.py +0 -0
  42. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/manager/llm_clients.py +0 -0
  43. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/manager/llm_clients_builder.py +0 -0
  44. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/manager/sub_agent_manager.py +0 -0
  45. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/prompts/prompt-claude-code.md +0 -0
  46. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/prompts/prompt-codex-gpt-5-1-codex-max.md +0 -0
  47. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/prompts/prompt-codex-gpt-5-2-codex.md +0 -0
  48. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/prompts/prompt-codex.md +0 -0
  49. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/prompts/prompt-gemini.md +0 -0
  50. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/prompts/prompt-minimal.md +0 -0
  51. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/prompts/prompt-nano-banana.md +0 -0
  52. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/prompts/prompt-sub-agent-explore.md +0 -0
  53. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/prompts/prompt-sub-agent-image-gen.md +0 -0
  54. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/prompts/prompt-sub-agent-web.md +0 -0
  55. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/prompts/prompt-sub-agent.md +0 -0
  56. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/reminders.py +0 -0
  57. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/task.py +0 -0
  58. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/__init__.py +0 -0
  59. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/context.py +0 -0
  60. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/file/__init__.py +0 -0
  61. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/file/_utils.py +0 -0
  62. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/file/apply_patch.py +0 -0
  63. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/file/apply_patch_tool.md +0 -0
  64. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/file/apply_patch_tool.py +0 -0
  65. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/file/diff_builder.py +0 -0
  66. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/file/edit_tool.md +0 -0
  67. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/file/edit_tool.py +0 -0
  68. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/file/read_tool.md +0 -0
  69. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/file/read_tool.py +0 -0
  70. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/file/write_tool.md +0 -0
  71. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/file/write_tool.py +0 -0
  72. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/report_back_tool.py +0 -0
  73. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/shell/__init__.py +0 -0
  74. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/shell/bash_tool.md +0 -0
  75. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/shell/bash_tool.py +0 -0
  76. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/shell/command_safety.py +0 -0
  77. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/sub_agent_tool.py +0 -0
  78. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/todo/__init__.py +0 -0
  79. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/todo/todo_write_tool.md +0 -0
  80. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/todo/todo_write_tool.py +0 -0
  81. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/todo/todo_write_tool_raw.md +0 -0
  82. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/todo/update_plan_tool.md +0 -0
  83. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/todo/update_plan_tool.py +0 -0
  84. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/tool_abc.py +0 -0
  85. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/tool_registry.py +0 -0
  86. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/tool_runner.py +0 -0
  87. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/truncation.py +0 -0
  88. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/web/__init__.py +0 -0
  89. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/web/mermaid_tool.md +0 -0
  90. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/web/mermaid_tool.py +0 -0
  91. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/web/web_fetch_tool.md +0 -0
  92. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/web/web_fetch_tool.py +0 -0
  93. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/web/web_search_tool.md +0 -0
  94. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/tool/web/web_search_tool.py +0 -0
  95. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/core/turn.py +0 -0
  96. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/__init__.py +0 -0
  97. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/anthropic/__init__.py +0 -0
  98. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/anthropic/client.py +0 -0
  99. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/anthropic/input.py +0 -0
  100. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/bedrock/__init__.py +0 -0
  101. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/bedrock/client.py +0 -0
  102. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/claude/__init__.py +0 -0
  103. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/claude/client.py +0 -0
  104. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/client.py +0 -0
  105. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/codex/__init__.py +0 -0
  106. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/codex/client.py +0 -0
  107. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/google/__init__.py +0 -0
  108. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/google/client.py +0 -0
  109. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/google/input.py +0 -0
  110. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/image.py +0 -0
  111. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/input_common.py +0 -0
  112. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/openai_compatible/__init__.py +0 -0
  113. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/openai_compatible/client.py +0 -0
  114. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/openai_compatible/input.py +0 -0
  115. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/openai_compatible/stream.py +0 -0
  116. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/openai_compatible/tool_call_accumulator.py +0 -0
  117. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/openrouter/__init__.py +0 -0
  118. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/openrouter/client.py +0 -0
  119. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/openrouter/input.py +0 -0
  120. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/openrouter/reasoning.py +0 -0
  121. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/registry.py +0 -0
  122. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/responses/__init__.py +0 -0
  123. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/responses/client.py +0 -0
  124. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/responses/input.py +0 -0
  125. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/llm/usage.py +0 -0
  126. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/log.py +0 -0
  127. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/__init__.py +0 -0
  128. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/commands.py +0 -0
  129. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/events/__init__.py +0 -0
  130. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/events/base.py +0 -0
  131. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/events/chat.py +0 -0
  132. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/events/lifecycle.py +0 -0
  133. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/events/metadata.py +0 -0
  134. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/events/streaming.py +0 -0
  135. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/events/system.py +0 -0
  136. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/events/tools.py +0 -0
  137. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/llm_param.py +0 -0
  138. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/message.py +0 -0
  139. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/model.py +0 -0
  140. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/op.py +0 -0
  141. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/op_handler.py +0 -0
  142. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/sub_agent/AGENTS.md +0 -0
  143. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/sub_agent/__init__.py +0 -0
  144. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/sub_agent/explore.py +0 -0
  145. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/sub_agent/image_gen.py +0 -0
  146. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/sub_agent/task.py +0 -0
  147. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/sub_agent/web.py +0 -0
  148. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/protocol/tools.py +0 -0
  149. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/session/__init__.py +0 -0
  150. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/session/codec.py +0 -0
  151. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/session/export.py +0 -0
  152. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/session/selector.py +0 -0
  153. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/session/session.py +0 -0
  154. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/session/store.py +0 -0
  155. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/session/templates/export_session.html +0 -0
  156. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/session/templates/mermaid_viewer.html +0 -0
  157. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/skill/__init__.py +0 -0
  158. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/skill/assets/create-plan/SKILL.md +0 -0
  159. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/skill/assets/deslop/SKILL.md +0 -0
  160. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/skill/assets/handoff/SKILL.md +0 -0
  161. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/skill/assets/jj-workspace/SKILL.md +0 -0
  162. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/skill/assets/skill-creator/SKILL.md +0 -0
  163. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/skill/loader.py +0 -0
  164. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/skill/manager.py +0 -0
  165. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/skill/system_skills.py +0 -0
  166. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/__init__.py +0 -0
  167. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/__init__.py +0 -0
  168. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/clear_cmd.py +0 -0
  169. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/command_abc.py +0 -0
  170. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/copy_cmd.py +0 -0
  171. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/debug_cmd.py +0 -0
  172. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/export_cmd.py +0 -0
  173. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/export_online_cmd.py +0 -0
  174. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/fork_session_cmd.py +0 -0
  175. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/model_cmd.py +0 -0
  176. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/model_picker.py +0 -0
  177. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/prompt-init.md +0 -0
  178. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/prompt_command.py +0 -0
  179. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/refresh_cmd.py +0 -0
  180. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/registry.py +0 -0
  181. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/resume_cmd.py +0 -0
  182. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/status_cmd.py +0 -0
  183. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/sub_agent_model_cmd.py +0 -0
  184. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/terminal_setup_cmd.py +0 -0
  185. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/command/thinking_cmd.py +0 -0
  186. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/commands.py +0 -0
  187. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/__init__.py +0 -0
  188. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/assistant.py +0 -0
  189. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/bash_syntax.py +0 -0
  190. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/command_output.py +0 -0
  191. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/common.py +0 -0
  192. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/developer.py +0 -0
  193. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/diffs.py +0 -0
  194. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/errors.py +0 -0
  195. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/mermaid_viewer.py +0 -0
  196. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/metadata.py +0 -0
  197. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/rich/__init__.py +0 -0
  198. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/rich/cjk_wrap.py +0 -0
  199. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/rich/code_panel.py +0 -0
  200. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/rich/live.py +0 -0
  201. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/rich/markdown.py +0 -0
  202. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/rich/quote.py +0 -0
  203. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/rich/searchable_text.py +0 -0
  204. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/rich/status.py +0 -0
  205. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/rich/theme.py +0 -0
  206. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/sub_agent.py +0 -0
  207. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/thinking.py +0 -0
  208. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/tools.py +0 -0
  209. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/user_input.py +0 -0
  210. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/components/welcome.py +0 -0
  211. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/display.py +0 -0
  212. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/input/__init__.py +0 -0
  213. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/input/clipboard.py +0 -0
  214. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/input/completers.py +0 -0
  215. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/input/key_bindings.py +0 -0
  216. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/input/prompt_toolkit.py +0 -0
  217. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/machine.py +0 -0
  218. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/renderer.py +0 -0
  219. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/runner.py +0 -0
  220. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/terminal/__init__.py +0 -0
  221. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/terminal/color.py +0 -0
  222. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/terminal/control.py +0 -0
  223. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/terminal/image.py +0 -0
  224. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/terminal/notifier.py +0 -0
  225. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/tui/terminal/progress_bar.py +0 -0
  226. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/ui/__init__.py +0 -0
  227. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/ui/common.py +0 -0
  228. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/ui/core/__init__.py +0 -0
  229. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/ui/core/display.py +0 -0
  230. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/ui/core/input.py +0 -0
  231. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/ui/debug_mode.py +0 -0
  232. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/ui/terminal/__init__.py +0 -0
  233. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/ui/terminal/title.py +0 -0
  234. {klaude_code-2.4.0 → klaude_code-2.4.1}/src/klaude_code/update.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: klaude-code
3
- Version: 2.4.0
3
+ Version: 2.4.1
4
4
  Summary: Minimal code agent CLI
5
5
  Requires-Dist: anthropic>=0.66.0
6
6
  Requires-Dist: chardet>=5.2.0
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "klaude-code"
7
- version = "2.4.0"
7
+ version = "2.4.1"
8
8
  description = "Minimal code agent CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -196,15 +196,6 @@ class SubAgentModelHelper:
196
196
  result.append(name)
197
197
  return result
198
198
 
199
- def get_enabled_sub_agent_types(self) -> set[SubAgentType]:
200
- """Return set of sub-agent types that are enabled and available."""
201
- enabled: set[SubAgentType] = set()
202
- for name in sub_agent_tool_names(enabled_only=True):
203
- profile = get_sub_agent_profile_by_tool(name)
204
- if profile is not None and self.check_availability_requirement(profile.availability_requirement):
205
- enabled.add(profile.name)
206
- return enabled
207
-
208
199
  def build_sub_agent_client_configs(self) -> dict[SubAgentType, str]:
209
200
  """Return model names for each sub-agent that needs a dedicated client."""
210
201
  result: dict[SubAgentType, str] = {}
@@ -262,10 +262,6 @@ class ModelProfileProvider(Protocol):
262
262
  output_schema: dict[str, Any] | None = None,
263
263
  ) -> AgentProfile: ...
264
264
 
265
- def enabled_sub_agent_types(self) -> set[tools.SubAgentType]:
266
- """Return set of sub-agent types enabled for this provider."""
267
- ...
268
-
269
265
 
270
266
  class DefaultModelProfileProvider(ModelProfileProvider):
271
267
  """Default provider backed by global prompts/tool/reminder registries."""
@@ -281,28 +277,24 @@ class DefaultModelProfileProvider(ModelProfileProvider):
281
277
  output_schema: dict[str, Any] | None = None,
282
278
  ) -> AgentProfile:
283
279
  model_name = llm_client.model_name
280
+ llm_config = llm_client.get_llm_config()
281
+
282
+ # Image generation models should not have tools
283
+ if llm_config.modalities and "image" in llm_config.modalities:
284
+ agent_tools: list[llm_param.ToolSchema] = []
285
+ else:
286
+ agent_tools = load_agent_tools(model_name, sub_agent_type, config=self._config)
287
+
284
288
  profile = AgentProfile(
285
289
  llm_client=llm_client,
286
290
  system_prompt=load_system_prompt(model_name, llm_client.protocol, sub_agent_type),
287
- tools=load_agent_tools(model_name, sub_agent_type, config=self._config),
291
+ tools=agent_tools,
288
292
  reminders=load_agent_reminders(model_name, sub_agent_type),
289
293
  )
290
294
  if output_schema:
291
295
  return with_structured_output(profile, output_schema)
292
296
  return profile
293
297
 
294
- def enabled_sub_agent_types(self) -> set[tools.SubAgentType]:
295
- if self._config is None:
296
- from klaude_code.protocol.sub_agent import get_sub_agent_profile_by_tool, sub_agent_tool_names
297
-
298
- return {
299
- profile.name
300
- for name in sub_agent_tool_names(enabled_only=True)
301
- if (profile := get_sub_agent_profile_by_tool(name)) is not None
302
- }
303
- helper = SubAgentModelHelper(self._config)
304
- return helper.get_enabled_sub_agent_types()
305
-
306
298
 
307
299
  class VanillaModelProfileProvider(ModelProfileProvider):
308
300
  """Provider that strips prompts, reminders, and tools for vanilla mode."""
@@ -325,9 +317,6 @@ class VanillaModelProfileProvider(ModelProfileProvider):
325
317
  return with_structured_output(profile, output_schema)
326
318
  return profile
327
319
 
328
- def enabled_sub_agent_types(self) -> set[tools.SubAgentType]:
329
- return set()
330
-
331
320
 
332
321
  class NanoBananaModelProfileProvider(ModelProfileProvider):
333
322
  """Provider for the Nano Banana image generation model.
@@ -352,6 +341,3 @@ class NanoBananaModelProfileProvider(ModelProfileProvider):
352
341
  if output_schema:
353
342
  return with_structured_output(profile, output_schema)
354
343
  return profile
355
-
356
- def enabled_sub_agent_types(self) -> set[tools.SubAgentType]:
357
- return set()
@@ -17,14 +17,14 @@ from pathlib import Path
17
17
  from klaude_code.config import load_config
18
18
  from klaude_code.config.sub_agent_model_helper import SubAgentModelHelper
19
19
  from klaude_code.core.agent import Agent
20
- from klaude_code.core.agent_profile import DefaultModelProfileProvider, ModelProfileProvider
20
+ from klaude_code.core.agent_profile import AgentProfile, DefaultModelProfileProvider, ModelProfileProvider
21
21
  from klaude_code.core.manager import LLMClients, SubAgentManager
22
22
  from klaude_code.llm.registry import create_llm_client
23
23
  from klaude_code.log import DebugType, log_debug
24
24
  from klaude_code.protocol import commands, events, message, model, op
25
25
  from klaude_code.protocol.llm_param import LLMConfigParameter, Thinking
26
26
  from klaude_code.protocol.op_handler import OperationHandler
27
- from klaude_code.protocol.sub_agent import SubAgentResult
27
+ from klaude_code.protocol.sub_agent import SubAgentResult, get_sub_agent_profile_by_tool
28
28
  from klaude_code.session.export import build_export_html, get_default_export_path
29
29
  from klaude_code.session.session import Session
30
30
 
@@ -110,13 +110,17 @@ class AgentRuntime:
110
110
  def current_agent(self) -> Agent | None:
111
111
  return self._agent
112
112
 
113
- def _get_sub_agent_models(self) -> dict[str, LLMConfigParameter]:
114
- """Build a dict of sub-agent type to LLMConfigParameter."""
115
- enabled = self._model_profile_provider.enabled_sub_agent_types()
113
+ def _get_sub_agent_models(self, profile: AgentProfile) -> dict[str, LLMConfigParameter]:
114
+ """Build a dict of sub-agent type to LLMConfigParameter based on profile tools."""
115
+ enabled_types: set[str] = set()
116
+ for tool in profile.tools:
117
+ sub_profile = get_sub_agent_profile_by_tool(tool.name)
118
+ if sub_profile is not None:
119
+ enabled_types.add(sub_profile.name)
116
120
  return {
117
121
  sub_agent_type: client.get_llm_config()
118
122
  for sub_agent_type, client in self._llm_clients.sub_clients.items()
119
- if sub_agent_type in enabled
123
+ if sub_agent_type in enabled_types
120
124
  }
121
125
 
122
126
  async def ensure_agent(self, session_id: str | None = None) -> Agent:
@@ -145,7 +149,7 @@ class AgentRuntime:
145
149
  session_id=session.id,
146
150
  work_dir=str(session.work_dir),
147
151
  llm_config=self._llm_clients.main.get_llm_config(),
148
- sub_agent_models=self._get_sub_agent_models(),
152
+ sub_agent_models=self._get_sub_agent_models(profile),
149
153
  )
150
154
  )
151
155
 
@@ -202,7 +206,7 @@ class AgentRuntime:
202
206
  session_id=agent.session.id,
203
207
  work_dir=str(agent.session.work_dir),
204
208
  llm_config=self._llm_clients.main.get_llm_config(),
205
- sub_agent_models=self._get_sub_agent_models(),
209
+ sub_agent_models=self._get_sub_agent_models(agent.profile),
206
210
  )
207
211
  )
208
212
 
@@ -226,7 +230,7 @@ class AgentRuntime:
226
230
  session_id=target_session.id,
227
231
  work_dir=str(target_session.work_dir),
228
232
  llm_config=self._llm_clients.main.get_llm_config(),
229
- sub_agent_models=self._get_sub_agent_models(),
233
+ sub_agent_models=self._get_sub_agent_models(profile),
230
234
  )
231
235
  )
232
236
 
@@ -410,15 +414,6 @@ class ExecutorContext:
410
414
  """Emit an event to the UI display system."""
411
415
  await self.event_queue.put(event)
412
416
 
413
- def _get_sub_agent_models(self) -> dict[str, LLMConfigParameter]:
414
- """Build a dict of sub-agent type to LLMConfigParameter."""
415
- enabled = self.model_profile_provider.enabled_sub_agent_types()
416
- return {
417
- sub_agent_type: client.get_llm_config()
418
- for sub_agent_type, client in self.llm_clients.sub_clients.items()
419
- if sub_agent_type in enabled
420
- }
421
-
422
417
  def current_session_id(self) -> str | None:
423
418
  """Return the primary active session id, if any.
424
419
 
@@ -54,17 +54,16 @@ def build_model_select_items(models: list[Any]) -> list[SelectItem[str]]:
54
54
  items: list[SelectItem[str]] = []
55
55
  for idx, m in enumerate(models, 1):
56
56
  model_id_str = m.model_id or "N/A"
57
- # Display the base model name only; provider stays in the meta section.
58
57
  display_name = m.model_name
59
58
  first_line_prefix = f"{display_name:<{max_model_name_length}} → "
60
- meta_parts: list[str] = [m.provider]
61
- meta_parts.extend(format_model_params(m))
62
- meta_str = " · ".join(meta_parts)
59
+ provider_model = f"{m.provider}/{model_id_str}"
60
+ meta_parts = format_model_params(m)
61
+ meta_str = " · ".join(meta_parts) if meta_parts else ""
63
62
  title = [
64
63
  ("class:meta", f"{idx:>{num_width}}. "),
65
64
  ("class:msg", first_line_prefix),
66
- ("class:msg bold", model_id_str),
67
- ("class:meta", f" {meta_str}\n"),
65
+ ("class:msg bold", provider_model),
66
+ ("class:meta", f" {meta_str}\n" if meta_str else "\n"),
68
67
  ]
69
68
  search_text = f"{m.selector} {m.model_name} {model_id_str} {m.provider}"
70
69
  items.append(SelectItem(title=title, value=m.selector, search_text=search_text))
File without changes