klaude-code 1.2.16__tar.gz → 1.2.18__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 (201) hide show
  1. {klaude_code-1.2.16 → klaude_code-1.2.18}/PKG-INFO +126 -25
  2. {klaude_code-1.2.16 → klaude_code-1.2.18}/README.md +124 -24
  3. {klaude_code-1.2.16 → klaude_code-1.2.18}/pyproject.toml +6 -1
  4. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/cli/config_cmd.py +1 -1
  5. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/cli/debug.py +1 -1
  6. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/cli/main.py +3 -9
  7. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/cli/runtime.py +20 -13
  8. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/__init__.py +7 -1
  9. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/clear_cmd.py +2 -7
  10. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/command_abc.py +33 -5
  11. klaude_code-1.2.18/src/klaude_code/command/debug_cmd.py +79 -0
  12. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/diff_cmd.py +2 -6
  13. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/export_cmd.py +7 -7
  14. klaude_code-1.2.18/src/klaude_code/command/export_online_cmd.py +145 -0
  15. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/help_cmd.py +4 -9
  16. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/model_cmd.py +10 -6
  17. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/prompt_command.py +2 -6
  18. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/refresh_cmd.py +2 -7
  19. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/registry.py +2 -4
  20. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/release_notes_cmd.py +2 -6
  21. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/status_cmd.py +2 -7
  22. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/terminal_setup_cmd.py +2 -6
  23. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/thinking_cmd.py +13 -8
  24. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/config/config.py +16 -17
  25. klaude_code-1.2.18/src/klaude_code/config/select_model.py +133 -0
  26. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/const/__init__.py +1 -1
  27. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/executor.py +236 -109
  28. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/manager/__init__.py +2 -4
  29. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/manager/sub_agent_manager.py +1 -1
  30. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/prompts/prompt-claude-code.md +1 -1
  31. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/prompts/prompt-sub-agent-oracle.md +0 -1
  32. klaude_code-1.2.18/src/klaude_code/core/prompts/prompt-sub-agent-web.md +51 -0
  33. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/reminders.py +9 -35
  34. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/task.py +8 -0
  35. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/__init__.py +2 -0
  36. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/file/read_tool.py +38 -10
  37. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/report_back_tool.py +28 -2
  38. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/shell/bash_tool.py +22 -2
  39. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/tool_runner.py +26 -23
  40. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/truncation.py +23 -9
  41. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/web/web_fetch_tool.md +1 -1
  42. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/web/web_fetch_tool.py +36 -1
  43. klaude_code-1.2.18/src/klaude_code/core/tool/web/web_search_tool.md +23 -0
  44. klaude_code-1.2.18/src/klaude_code/core/tool/web/web_search_tool.py +126 -0
  45. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/turn.py +28 -0
  46. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/protocol/commands.py +2 -0
  47. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/protocol/events.py +8 -0
  48. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/protocol/sub_agent/__init__.py +1 -1
  49. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/protocol/sub_agent/explore.py +1 -1
  50. klaude_code-1.2.18/src/klaude_code/protocol/sub_agent/web.py +79 -0
  51. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/protocol/tools.py +1 -0
  52. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/session/session.py +2 -2
  53. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/session/templates/export_session.html +123 -37
  54. klaude_code-1.2.18/src/klaude_code/trace/__init__.py +21 -0
  55. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/modes/repl/completers.py +19 -2
  56. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/modes/repl/event_handler.py +44 -15
  57. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/modes/repl/renderer.py +3 -3
  58. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/renderers/metadata.py +2 -4
  59. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/renderers/sub_agent.py +14 -10
  60. klaude_code-1.2.18/src/klaude_code/ui/renderers/thinking.py +55 -0
  61. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/renderers/tools.py +83 -20
  62. klaude_code-1.2.18/src/klaude_code/ui/rich/code_panel.py +112 -0
  63. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/rich/markdown.py +3 -4
  64. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/rich/status.py +30 -6
  65. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/rich/theme.py +10 -1
  66. klaude_code-1.2.16/src/klaude_code/config/select_model.py +0 -57
  67. klaude_code-1.2.16/src/klaude_code/core/manager/agent_manager.py +0 -132
  68. klaude_code-1.2.16/src/klaude_code/core/prompts/prompt-sub-agent-webfetch.md +0 -46
  69. klaude_code-1.2.16/src/klaude_code/protocol/sub_agent/web_fetch.py +0 -74
  70. klaude_code-1.2.16/src/klaude_code/trace/__init__.py +0 -3
  71. klaude_code-1.2.16/src/klaude_code/ui/renderers/thinking.py +0 -39
  72. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/__init__.py +0 -0
  73. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/auth/__init__.py +0 -0
  74. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/auth/codex/__init__.py +0 -0
  75. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/auth/codex/exceptions.py +0 -0
  76. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/auth/codex/jwt_utils.py +0 -0
  77. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/auth/codex/oauth.py +0 -0
  78. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/auth/codex/token_manager.py +0 -0
  79. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/cli/__init__.py +0 -0
  80. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/cli/auth_cmd.py +0 -0
  81. {klaude_code-1.2.16/src/klaude_code/config → klaude_code-1.2.18/src/klaude_code/cli}/list_model.py +0 -0
  82. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/cli/session_cmd.py +0 -0
  83. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/prompt-deslop.md +0 -0
  84. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/prompt-dev-docs-update.md +0 -0
  85. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/prompt-dev-docs.md +0 -0
  86. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/prompt-handoff.md +0 -0
  87. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/command/prompt-init.md +0 -0
  88. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/config/__init__.py +0 -0
  89. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/__init__.py +0 -0
  90. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/agent.py +0 -0
  91. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/manager/llm_clients.py +0 -0
  92. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/manager/llm_clients_builder.py +0 -0
  93. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/prompt.py +0 -0
  94. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/prompts/prompt-codex-gpt-5-1-codex-max.md +0 -0
  95. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/prompts/prompt-codex-gpt-5-1.md +0 -0
  96. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/prompts/prompt-gemini.md +0 -0
  97. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/prompts/prompt-minimal.md +0 -0
  98. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/prompts/prompt-sub-agent-explore.md +0 -0
  99. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/prompts/prompt-sub-agent.md +0 -0
  100. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/file/__init__.py +0 -0
  101. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/file/_utils.py +0 -0
  102. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/file/apply_patch.py +0 -0
  103. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/file/apply_patch_tool.md +0 -0
  104. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/file/apply_patch_tool.py +0 -0
  105. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/file/edit_tool.md +0 -0
  106. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/file/edit_tool.py +0 -0
  107. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/file/multi_edit_tool.md +0 -0
  108. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/file/multi_edit_tool.py +0 -0
  109. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/file/read_tool.md +0 -0
  110. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/file/write_tool.md +0 -0
  111. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/file/write_tool.py +0 -0
  112. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/memory/__init__.py +0 -0
  113. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/memory/memory_tool.md +0 -0
  114. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/memory/memory_tool.py +0 -0
  115. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/memory/skill_loader.py +0 -0
  116. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/memory/skill_tool.md +0 -0
  117. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/memory/skill_tool.py +0 -0
  118. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/shell/__init__.py +0 -0
  119. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/shell/bash_tool.md +0 -0
  120. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/shell/command_safety.py +0 -0
  121. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/sub_agent_tool.py +0 -0
  122. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/todo/__init__.py +0 -0
  123. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/todo/todo_write_tool.md +0 -0
  124. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/todo/todo_write_tool.py +0 -0
  125. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/todo/todo_write_tool_raw.md +0 -0
  126. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/todo/update_plan_tool.md +0 -0
  127. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/todo/update_plan_tool.py +0 -0
  128. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/tool_abc.py +0 -0
  129. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/tool_context.py +0 -0
  130. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/tool_registry.py +0 -0
  131. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/web/__init__.py +0 -0
  132. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/web/mermaid_tool.md +0 -0
  133. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/core/tool/web/mermaid_tool.py +0 -0
  134. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/__init__.py +0 -0
  135. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/anthropic/__init__.py +0 -0
  136. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/anthropic/client.py +0 -0
  137. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/anthropic/input.py +0 -0
  138. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/client.py +0 -0
  139. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/codex/__init__.py +0 -0
  140. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/codex/client.py +0 -0
  141. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/input_common.py +0 -0
  142. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/openai_compatible/__init__.py +0 -0
  143. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/openai_compatible/client.py +0 -0
  144. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/openai_compatible/input.py +0 -0
  145. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/openai_compatible/stream_processor.py +0 -0
  146. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/openai_compatible/tool_call_accumulator.py +0 -0
  147. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/openrouter/__init__.py +0 -0
  148. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/openrouter/client.py +0 -0
  149. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/openrouter/input.py +0 -0
  150. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/openrouter/reasoning_handler.py +0 -0
  151. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/registry.py +0 -0
  152. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/responses/__init__.py +0 -0
  153. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/responses/client.py +0 -0
  154. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/responses/input.py +0 -0
  155. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/llm/usage.py +0 -0
  156. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/protocol/__init__.py +0 -0
  157. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/protocol/llm_param.py +0 -0
  158. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/protocol/model.py +0 -0
  159. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/protocol/op.py +0 -0
  160. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/protocol/op_handler.py +0 -0
  161. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/protocol/sub_agent/oracle.py +0 -0
  162. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/protocol/sub_agent/task.py +0 -0
  163. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/session/__init__.py +0 -0
  164. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/session/export.py +0 -0
  165. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/session/selector.py +0 -0
  166. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/trace/log.py +0 -0
  167. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/__init__.py +0 -0
  168. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/core/__init__.py +0 -0
  169. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/core/display.py +0 -0
  170. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/core/input.py +0 -0
  171. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/core/stage_manager.py +0 -0
  172. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/modes/__init__.py +0 -0
  173. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/modes/debug/__init__.py +0 -0
  174. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/modes/debug/display.py +0 -0
  175. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/modes/exec/__init__.py +0 -0
  176. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/modes/exec/display.py +0 -0
  177. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/modes/repl/__init__.py +0 -0
  178. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/modes/repl/clipboard.py +0 -0
  179. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/modes/repl/display.py +0 -0
  180. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/modes/repl/input_prompt_toolkit.py +0 -0
  181. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/modes/repl/key_bindings.py +0 -0
  182. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/renderers/__init__.py +0 -0
  183. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/renderers/assistant.py +0 -0
  184. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/renderers/common.py +0 -0
  185. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/renderers/developer.py +0 -0
  186. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/renderers/diffs.py +0 -0
  187. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/renderers/errors.py +0 -0
  188. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/renderers/user_input.py +0 -0
  189. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/rich/__init__.py +0 -0
  190. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/rich/live.py +0 -0
  191. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/rich/quote.py +0 -0
  192. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/rich/searchable_text.py +0 -0
  193. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/terminal/__init__.py +0 -0
  194. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/terminal/color.py +0 -0
  195. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/terminal/control.py +0 -0
  196. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/terminal/notifier.py +0 -0
  197. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/terminal/progress_bar.py +0 -0
  198. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/utils/__init__.py +0 -0
  199. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/utils/common.py +0 -0
  200. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/ui/utils/debouncer.py +0 -0
  201. {klaude_code-1.2.16 → klaude_code-1.2.18}/src/klaude_code/version.py +0 -0
@@ -1,8 +1,9 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: klaude-code
3
- Version: 1.2.16
3
+ Version: 1.2.18
4
4
  Summary: Add your description here
5
5
  Requires-Dist: anthropic>=0.66.0
6
+ Requires-Dist: ddgs>=9.9.3
6
7
  Requires-Dist: openai>=1.102.0
7
8
  Requires-Dist: pillow>=12.0.0
8
9
  Requires-Dist: prompt-toolkit>=3.0.52
@@ -50,12 +51,17 @@ klaude [--model <name>] [--select-model]
50
51
 
51
52
  **Options:**
52
53
  - `--version`/`-V`: Show version and exit.
53
- - `--model`/`-m`: Select a model by logical name from config.
54
- - `--select-model`/`-s`: Interactively choose a model at startup.
54
+ - `--model`/`-m`: Preferred model name (exact match picks immediately; otherwise opens the interactive selector filtered by this value).
55
+ - `--select-model`/`-s`: Open the interactive model selector at startup (shows all models unless `--model` is also provided).
55
56
  - `--continue`/`-c`: Resume the most recent session.
56
57
  - `--resume`/`-r`: Select a session to resume for this project.
57
58
  - `--vanilla`: Minimal mode with only basic tools (Bash, Read, Edit) and no system prompts.
58
59
 
60
+ **Model selection behavior:**
61
+ - Default: uses `main_model` from config.
62
+ - `--select-model`: always prompts you to pick.
63
+ - `--model <value>`: tries to resolve `<value>` to a single model; if it can't, it prompts with a filtered list (and falls back to showing all models if there are no matches).
64
+
59
65
  **Debug Options:**
60
66
  - `--debug`/`-d`: Enable debug mode with verbose logging and LLM trace.
61
67
  - `--debug-filter`: Filter debug output by type (comma-separated).
@@ -63,7 +69,7 @@ klaude [--model <name>] [--select-model]
63
69
 
64
70
  ### Configuration
65
71
 
66
- An example config will be created in `~/.klaude/config.yaml` when first run.
72
+ An example config will be created in `~/.klaude/klaude-config.yaml` when first run.
67
73
 
68
74
  Open the configuration file in editor:
69
75
 
@@ -71,47 +77,137 @@ Open the configuration file in editor:
71
77
  klaude config
72
78
  ```
73
79
 
74
- An minimal example config yaml using OpenRouter's API Key:
80
+ An example config yaml:
75
81
 
76
82
  ```yaml
77
83
  provider_list:
78
- - provider_name: openrouter-work
84
+ - provider_name: openrouter
79
85
  protocol: openrouter # support <responses|openrouter|anthropic|openai>
80
86
  api_key: <your-openrouter-api-key>
87
+
88
+ - provider_name: openai-responses
89
+ protocol: responses
90
+ api_key: <your-openai-api-key>
91
+
92
+ - provider_name: anthropic
93
+ protocol: anthropic
94
+ api_key: <your-anthropic-api-key>
95
+
96
+ - provider_name: moonshot
97
+ protocol: anthropic
98
+ base_url: https://api.moonshot.cn/anthropic
99
+ api_key: <your-api-key>
100
+
101
+ - provider_name: deepseek
102
+ protocol: anthropic
103
+ base_url: https://api.deepseek.com/anthropic
104
+ api_key: <your-api-key>
105
+
81
106
  model_list:
82
- - model_name: gpt-5.1-codex
83
- provider: openrouter
107
+
108
+ - model_name: deepseek
109
+ provider: deepseek
110
+ model_params:
111
+ model: deepseek-reasoner
112
+ context_limit: 128000
113
+ thinking:
114
+ type: enabled
115
+ budget_tokens: 8192
116
+ cost:
117
+ currency: CNY
118
+ input: 2
119
+ output: 3
120
+ cache_read: 0.2
121
+
122
+ - model_name: codex-max
123
+ provider: openai-responses
84
124
  model_params:
85
- model: openai/gpt-5.1-codex
86
- context_limit: 368000
125
+ model: gpt-5.1-codex-max
87
126
  thinking:
88
127
  reasoning_effort: medium
89
- - model_name: gpt-5.1-high
128
+ context_limit: 400000
129
+ max_tokens: 128000
130
+ cost:
131
+ input: 1.25
132
+ output: 10
133
+ cache_read: 0.13
134
+
135
+ - model_name: gpt-5.1
90
136
  provider: openrouter
91
137
  model_params:
92
138
  model: openai/gpt-5.1
93
- context_limit: 368000
139
+ context_limit: 400000
140
+ max_tokens: 128000
141
+ verbosity: high
94
142
  thinking:
95
143
  reasoning_effort: high
96
- - model_name: sonnet
144
+ cost:
145
+ input: 1.25
146
+ output: 10
147
+ cache_read: 0.13
148
+
149
+ - model_name: kimi@moonshot
150
+ provider: moonshot
151
+ model_params:
152
+ model: kimi-k2-thinking
153
+ context_limit: 262144
154
+ thinking:
155
+ type: enabled
156
+ budget_tokens: 8192
157
+ cost:
158
+ currency: CNY
159
+ input: 4
160
+ output: 16
161
+ cache_read: 1
162
+
163
+ - model_name: opus
97
164
  provider: openrouter
98
165
  model_params:
99
- model: anthropic/claude-4.5-sonnet
100
- context_limit: 168000
166
+ model: anthropic/claude-4.5-opus
167
+ context_limit: 200000
101
168
  provider_routing:
102
- sort: throughput
103
- - model_name: haiku
169
+ only: [ google-vertex ]
170
+ verbosity: high
171
+ thinking:
172
+ type: enabled
173
+ budget_tokens: 31999
174
+ cost:
175
+ input: 5
176
+ output: 25
177
+ cache_read: 0.5
178
+ cache_write: 6.25
179
+
180
+ - model_name: gemini
104
181
  provider: openrouter
105
182
  model_params:
106
- model: anthropic/claude-haiku-4.5
107
- context_limit: 168000
108
- provider_routing:
109
- sort: throughput
110
- main_model: gpt-5.1-codex
183
+ model: google/gemini-3-pro-preview
184
+ context_limit: 1048576
185
+ thinking:
186
+ reasoning_effort: medium
187
+ cost:
188
+ input: 2
189
+ output: 12
190
+ cache_read: 0.2
191
+
192
+ - model_name: haiku
193
+ provider: anthropic
194
+ model_params:
195
+ model: claude-haiku-4-5-20251001
196
+ context_limit: 200000
197
+ cost:
198
+ input: 1
199
+ output: 5
200
+ cache_read: 0.1
201
+ cache_write: 1.25
202
+
203
+ main_model: opus
204
+
111
205
  sub_agent_models:
112
- oracle: gpt-5.1-high
206
+ oracle: gpt-5.1
113
207
  explore: haiku
114
- task: sonnet
208
+ task: opus
209
+ webagent: haiku
210
+
115
211
  ```
116
212
 
117
213
  List configured providers and models:
@@ -172,5 +268,10 @@ klaude exec "what is 2+2?"
172
268
  echo "hello world" | klaude exec
173
269
 
174
270
  # With model selection
271
+
272
+ # Exact model name (non-interactive)
175
273
  echo "generate quicksort in python" | klaude exec --model gpt-5.1
176
- ```
274
+
275
+ # Partial/ambiguous name opens the interactive selector (filtered)
276
+ echo "generate quicksort in python" | klaude exec --model gpt
277
+ ```
@@ -33,12 +33,17 @@ klaude [--model <name>] [--select-model]
33
33
 
34
34
  **Options:**
35
35
  - `--version`/`-V`: Show version and exit.
36
- - `--model`/`-m`: Select a model by logical name from config.
37
- - `--select-model`/`-s`: Interactively choose a model at startup.
36
+ - `--model`/`-m`: Preferred model name (exact match picks immediately; otherwise opens the interactive selector filtered by this value).
37
+ - `--select-model`/`-s`: Open the interactive model selector at startup (shows all models unless `--model` is also provided).
38
38
  - `--continue`/`-c`: Resume the most recent session.
39
39
  - `--resume`/`-r`: Select a session to resume for this project.
40
40
  - `--vanilla`: Minimal mode with only basic tools (Bash, Read, Edit) and no system prompts.
41
41
 
42
+ **Model selection behavior:**
43
+ - Default: uses `main_model` from config.
44
+ - `--select-model`: always prompts you to pick.
45
+ - `--model <value>`: tries to resolve `<value>` to a single model; if it can't, it prompts with a filtered list (and falls back to showing all models if there are no matches).
46
+
42
47
  **Debug Options:**
43
48
  - `--debug`/`-d`: Enable debug mode with verbose logging and LLM trace.
44
49
  - `--debug-filter`: Filter debug output by type (comma-separated).
@@ -46,7 +51,7 @@ klaude [--model <name>] [--select-model]
46
51
 
47
52
  ### Configuration
48
53
 
49
- An example config will be created in `~/.klaude/config.yaml` when first run.
54
+ An example config will be created in `~/.klaude/klaude-config.yaml` when first run.
50
55
 
51
56
  Open the configuration file in editor:
52
57
 
@@ -54,47 +59,137 @@ Open the configuration file in editor:
54
59
  klaude config
55
60
  ```
56
61
 
57
- An minimal example config yaml using OpenRouter's API Key:
62
+ An example config yaml:
58
63
 
59
64
  ```yaml
60
65
  provider_list:
61
- - provider_name: openrouter-work
66
+ - provider_name: openrouter
62
67
  protocol: openrouter # support <responses|openrouter|anthropic|openai>
63
68
  api_key: <your-openrouter-api-key>
69
+
70
+ - provider_name: openai-responses
71
+ protocol: responses
72
+ api_key: <your-openai-api-key>
73
+
74
+ - provider_name: anthropic
75
+ protocol: anthropic
76
+ api_key: <your-anthropic-api-key>
77
+
78
+ - provider_name: moonshot
79
+ protocol: anthropic
80
+ base_url: https://api.moonshot.cn/anthropic
81
+ api_key: <your-api-key>
82
+
83
+ - provider_name: deepseek
84
+ protocol: anthropic
85
+ base_url: https://api.deepseek.com/anthropic
86
+ api_key: <your-api-key>
87
+
64
88
  model_list:
65
- - model_name: gpt-5.1-codex
66
- provider: openrouter
89
+
90
+ - model_name: deepseek
91
+ provider: deepseek
92
+ model_params:
93
+ model: deepseek-reasoner
94
+ context_limit: 128000
95
+ thinking:
96
+ type: enabled
97
+ budget_tokens: 8192
98
+ cost:
99
+ currency: CNY
100
+ input: 2
101
+ output: 3
102
+ cache_read: 0.2
103
+
104
+ - model_name: codex-max
105
+ provider: openai-responses
67
106
  model_params:
68
- model: openai/gpt-5.1-codex
69
- context_limit: 368000
107
+ model: gpt-5.1-codex-max
70
108
  thinking:
71
109
  reasoning_effort: medium
72
- - model_name: gpt-5.1-high
110
+ context_limit: 400000
111
+ max_tokens: 128000
112
+ cost:
113
+ input: 1.25
114
+ output: 10
115
+ cache_read: 0.13
116
+
117
+ - model_name: gpt-5.1
73
118
  provider: openrouter
74
119
  model_params:
75
120
  model: openai/gpt-5.1
76
- context_limit: 368000
121
+ context_limit: 400000
122
+ max_tokens: 128000
123
+ verbosity: high
77
124
  thinking:
78
125
  reasoning_effort: high
79
- - model_name: sonnet
126
+ cost:
127
+ input: 1.25
128
+ output: 10
129
+ cache_read: 0.13
130
+
131
+ - model_name: kimi@moonshot
132
+ provider: moonshot
133
+ model_params:
134
+ model: kimi-k2-thinking
135
+ context_limit: 262144
136
+ thinking:
137
+ type: enabled
138
+ budget_tokens: 8192
139
+ cost:
140
+ currency: CNY
141
+ input: 4
142
+ output: 16
143
+ cache_read: 1
144
+
145
+ - model_name: opus
80
146
  provider: openrouter
81
147
  model_params:
82
- model: anthropic/claude-4.5-sonnet
83
- context_limit: 168000
148
+ model: anthropic/claude-4.5-opus
149
+ context_limit: 200000
84
150
  provider_routing:
85
- sort: throughput
86
- - model_name: haiku
151
+ only: [ google-vertex ]
152
+ verbosity: high
153
+ thinking:
154
+ type: enabled
155
+ budget_tokens: 31999
156
+ cost:
157
+ input: 5
158
+ output: 25
159
+ cache_read: 0.5
160
+ cache_write: 6.25
161
+
162
+ - model_name: gemini
87
163
  provider: openrouter
88
164
  model_params:
89
- model: anthropic/claude-haiku-4.5
90
- context_limit: 168000
91
- provider_routing:
92
- sort: throughput
93
- main_model: gpt-5.1-codex
165
+ model: google/gemini-3-pro-preview
166
+ context_limit: 1048576
167
+ thinking:
168
+ reasoning_effort: medium
169
+ cost:
170
+ input: 2
171
+ output: 12
172
+ cache_read: 0.2
173
+
174
+ - model_name: haiku
175
+ provider: anthropic
176
+ model_params:
177
+ model: claude-haiku-4-5-20251001
178
+ context_limit: 200000
179
+ cost:
180
+ input: 1
181
+ output: 5
182
+ cache_read: 0.1
183
+ cache_write: 1.25
184
+
185
+ main_model: opus
186
+
94
187
  sub_agent_models:
95
- oracle: gpt-5.1-high
188
+ oracle: gpt-5.1
96
189
  explore: haiku
97
- task: sonnet
190
+ task: opus
191
+ webagent: haiku
192
+
98
193
  ```
99
194
 
100
195
  List configured providers and models:
@@ -155,5 +250,10 @@ klaude exec "what is 2+2?"
155
250
  echo "hello world" | klaude exec
156
251
 
157
252
  # With model selection
253
+
254
+ # Exact model name (non-interactive)
158
255
  echo "generate quicksort in python" | klaude exec --model gpt-5.1
159
- ```
256
+
257
+ # Partial/ambiguous name opens the interactive selector (filtered)
258
+ echo "generate quicksort in python" | klaude exec --model gpt
259
+ ```
@@ -4,12 +4,13 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "klaude-code"
7
- version = "1.2.16"
7
+ version = "1.2.18"
8
8
  description = "Add your description here"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
11
11
  dependencies = [
12
12
  "anthropic>=0.66.0",
13
+ "ddgs>=9.9.3",
13
14
  "openai>=1.102.0",
14
15
  "pillow>=12.0.0",
15
16
  "prompt-toolkit>=3.0.52",
@@ -76,10 +77,14 @@ name = "Layered architecture"
76
77
  type = "layers"
77
78
  layers = [
78
79
  "klaude_code.cli",
80
+ "klaude_code.ui",
79
81
  "klaude_code.core",
82
+ "klaude_code.command",
80
83
  "klaude_code.session",
81
84
  "klaude_code.config",
82
85
  "klaude_code.llm",
83
86
  "klaude_code.protocol",
87
+ "klaude_code.trace",
88
+ "klaude_code.auth",
84
89
  "klaude_code.const",
85
90
  ]
@@ -12,7 +12,7 @@ from klaude_code.trace import log
12
12
 
13
13
  def list_models() -> None:
14
14
  """List all models and providers configuration"""
15
- from klaude_code.config.list_model import display_models_and_providers
15
+ from klaude_code.cli.list_model import display_models_and_providers
16
16
  from klaude_code.ui.terminal.color import is_light_terminal_background
17
17
 
18
18
  config = load_config()
@@ -48,7 +48,7 @@ def open_log_file_in_editor(path: Path) -> None:
48
48
  editor = os.environ.get("EDITOR")
49
49
 
50
50
  if not editor:
51
- for cmd in ["open", "xdg-open", "code", "nvim", "vim", "nano"]:
51
+ for cmd in ["open", "xdg-open", "code", "TextEdit", "notepad"]:
52
52
  try:
53
53
  subprocess.run(["which", cmd], check=True, capture_output=True)
54
54
  editor = cmd
@@ -11,7 +11,6 @@ from klaude_code.cli.auth_cmd import register_auth_commands
11
11
  from klaude_code.cli.config_cmd import register_config_commands
12
12
  from klaude_code.cli.debug import DEBUG_FILTER_HELP, open_log_file_in_editor, resolve_debug_settings
13
13
  from klaude_code.cli.session_cmd import register_session_commands
14
- from klaude_code.config import load_config
15
14
  from klaude_code.session import Session, resume_select_session
16
15
  from klaude_code.trace import DebugType, prepare_debug_log_file
17
16
 
@@ -157,13 +156,8 @@ def exec_command(
157
156
  from klaude_code.config.select_model import select_model_from_config
158
157
 
159
158
  chosen_model = model
160
- if select_model:
161
- # Prefer the explicitly provided model as default; otherwise main model
162
- config = load_config()
163
- if config is None:
164
- raise typer.Exit(1)
165
- default_name = model or config.main_model
166
- chosen_model = select_model_from_config(preferred=default_name)
159
+ if model or select_model:
160
+ chosen_model = select_model_from_config(preferred=model)
167
161
  if chosen_model is None:
168
162
  return
169
163
 
@@ -243,7 +237,7 @@ def main_callback(
243
237
  setup_terminal_title()
244
238
 
245
239
  chosen_model = model
246
- if select_model:
240
+ if model or select_model:
247
241
  chosen_model = select_model_from_config(preferred=model)
248
242
  if chosen_model is None:
249
243
  return
@@ -10,7 +10,7 @@ from rich.text import Text
10
10
  from klaude_code import ui
11
11
  from klaude_code.command import has_interactive_command
12
12
  from klaude_code.config import Config, load_config
13
- from klaude_code.core.agent import Agent, DefaultModelProfileProvider, VanillaModelProfileProvider
13
+ from klaude_code.core.agent import DefaultModelProfileProvider, VanillaModelProfileProvider
14
14
  from klaude_code.core.executor import Executor
15
15
  from klaude_code.core.manager import build_llm_clients
16
16
  from klaude_code.protocol import events, op
@@ -98,8 +98,10 @@ async def initialize_app_components(init_config: AppInitConfig) -> AppComponents
98
98
  executor_task = asyncio.create_task(executor.start())
99
99
 
100
100
  theme: str | None = config.theme
101
- if theme is None:
101
+ if theme is None and not init_config.is_exec_mode:
102
102
  # Auto-detect theme from terminal background when config does not specify a theme.
103
+ # Skip detection in exec mode to avoid TTY race conditions with parent process's
104
+ # ESC monitor when running as a subprocess.
103
105
  detected = is_light_terminal_background()
104
106
  if detected is True:
105
107
  theme = "light"
@@ -145,8 +147,8 @@ async def initialize_session(
145
147
  await executor.submit_and_wait(op.InitAgentOperation(session_id=session_id))
146
148
  await event_queue.join()
147
149
 
148
- active_session_ids = executor.context.agent_manager.active_session_ids()
149
- return active_session_ids[0] if active_session_ids else session_id
150
+ active_session_id = executor.context.current_session_id()
151
+ return active_session_id or session_id
150
152
 
151
153
 
152
154
  async def cleanup_app_components(components: AppComponents) -> None:
@@ -214,16 +216,12 @@ async def run_interactive(init_config: AppInitConfig, session_id: str | None = N
214
216
 
215
217
  # Create status provider for bottom toolbar
216
218
  def _status_provider() -> REPLStatusSnapshot:
217
- agent: Agent | None = None
218
- # Get the first active agent (there should only be one in interactive mode)
219
- active_agents = components.executor.context.active_agents
220
- if active_agents:
221
- agent = next(iter(active_agents.values()), None)
222
-
223
219
  # Check for updates (returns None if uv not available)
224
220
  update_message = get_update_message()
225
221
 
226
- return build_repl_status_snapshot(agent=agent, update_message=update_message)
222
+ return build_repl_status_snapshot(
223
+ agent=components.executor.context.current_agent, update_message=update_message
224
+ )
227
225
 
228
226
  # Set up input provider for interactive mode
229
227
  input_provider: ui.InputProviderABC = ui.PromptToolkitInput(status_provider=_status_provider)
@@ -261,7 +259,14 @@ async def run_interactive(init_config: AppInitConfig, session_id: str | None = N
261
259
  restore_sigint = install_sigint_double_press_exit(_show_toast_once, _hide_progress)
262
260
 
263
261
  try:
264
- active_session_id = await initialize_session(components.executor, components.event_queue, session_id=session_id)
262
+ await initialize_session(components.executor, components.event_queue, session_id=session_id)
263
+
264
+ def _get_active_session_id() -> str | None:
265
+ """Get the current active session ID dynamically.
266
+
267
+ This is necessary because /clear command creates a new session with a different ID.
268
+ """
269
+ return components.executor.context.current_session_id()
265
270
 
266
271
  # Input
267
272
  await input_provider.start()
@@ -272,6 +277,8 @@ async def run_interactive(init_config: AppInitConfig, session_id: str | None = N
272
277
  elif user_input.text.strip() == "":
273
278
  continue
274
279
  # Submit user input operation - directly use the payload from iter_inputs
280
+ # Use dynamic session_id lookup to handle /clear creating new sessions
281
+ active_session_id = _get_active_session_id()
275
282
  submission_id = await components.executor.submit(
276
283
  op.UserInputOperation(input=user_input, session_id=active_session_id)
277
284
  )
@@ -282,7 +289,7 @@ async def run_interactive(init_config: AppInitConfig, session_id: str | None = N
282
289
  else:
283
290
  # Esc monitor for long-running, interruptible operations
284
291
  async def _on_esc_interrupt() -> None:
285
- await components.executor.submit(op.InterruptOperation(target_session_id=active_session_id))
292
+ await components.executor.submit(op.InterruptOperation(target_session_id=_get_active_session_id()))
286
293
 
287
294
  stop_event, esc_task = start_esc_interrupt_monitor(_on_esc_interrupt)
288
295
  # Wait for this specific task to complete before accepting next input
@@ -28,8 +28,10 @@ def ensure_commands_loaded() -> None:
28
28
 
29
29
  # Import and register commands in display order
30
30
  from .clear_cmd import ClearCommand
31
+ from .debug_cmd import DebugCommand
31
32
  from .diff_cmd import DiffCommand
32
33
  from .export_cmd import ExportCommand
34
+ from .export_online_cmd import ExportOnlineCommand
33
35
  from .help_cmd import HelpCommand
34
36
  from .model_cmd import ModelCommand
35
37
  from .refresh_cmd import RefreshTerminalCommand
@@ -40,16 +42,18 @@ def ensure_commands_loaded() -> None:
40
42
 
41
43
  # Register in desired display order
42
44
  register(ExportCommand())
45
+ register(ExportOnlineCommand())
43
46
  register(RefreshTerminalCommand())
44
47
  register(ThinkingCommand())
45
48
  register(ModelCommand())
46
49
  load_prompt_commands()
47
- register(ClearCommand())
48
50
  register(StatusCommand())
49
51
  register(DiffCommand())
50
52
  register(HelpCommand())
51
53
  register(ReleaseNotesCommand())
52
54
  register(TerminalSetupCommand())
55
+ register(DebugCommand())
56
+ register(ClearCommand())
53
57
 
54
58
  # Load prompt-based commands (appended after built-in commands)
55
59
 
@@ -58,8 +62,10 @@ def ensure_commands_loaded() -> None:
58
62
  def __getattr__(name: str) -> object:
59
63
  _commands_map = {
60
64
  "ClearCommand": "clear_cmd",
65
+ "DebugCommand": "debug_cmd",
61
66
  "DiffCommand": "diff_cmd",
62
67
  "ExportCommand": "export_cmd",
68
+ "ExportOnlineCommand": "export_online_cmd",
63
69
  "HelpCommand": "help_cmd",
64
70
  "ModelCommand": "model_cmd",
65
71
  "RefreshTerminalCommand": "refresh_cmd",
@@ -1,11 +1,6 @@
1
- from typing import TYPE_CHECKING
2
-
3
- from klaude_code.command.command_abc import CommandABC, CommandResult, InputAction
1
+ from klaude_code.command.command_abc import Agent, CommandABC, CommandResult, InputAction
4
2
  from klaude_code.protocol import commands
5
3
 
6
- if TYPE_CHECKING:
7
- from klaude_code.core.agent import Agent
8
-
9
4
 
10
5
  class ClearCommand(CommandABC):
11
6
  """Clear current session and start a new conversation"""
@@ -18,5 +13,5 @@ class ClearCommand(CommandABC):
18
13
  def summary(self) -> str:
19
14
  return "Clear conversation history and free up context"
20
15
 
21
- async def run(self, raw: str, agent: "Agent") -> CommandResult:
16
+ async def run(self, raw: str, agent: Agent) -> CommandResult:
22
17
  return CommandResult(actions=[InputAction.clear()])