klaude-code 2.0.0__tar.gz → 2.0.2__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 (229) hide show
  1. {klaude_code-2.0.0 → klaude_code-2.0.2}/PKG-INFO +1 -1
  2. {klaude_code-2.0.0 → klaude_code-2.0.2}/pyproject.toml +1 -1
  3. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/cli/cost_cmd.py +1 -1
  4. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/cli/runtime.py +1 -8
  5. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/debug_cmd.py +1 -1
  6. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/export_online_cmd.py +4 -4
  7. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/fork_session_cmd.py +6 -6
  8. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/help_cmd.py +1 -1
  9. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/model_cmd.py +1 -1
  10. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/registry.py +10 -1
  11. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/release_notes_cmd.py +1 -1
  12. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/resume_cmd.py +2 -2
  13. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/status_cmd.py +2 -2
  14. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/terminal_setup_cmd.py +2 -2
  15. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/thinking_cmd.py +1 -1
  16. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/config/assets/builtin_config.yaml +4 -0
  17. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/const.py +5 -3
  18. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/executor.py +15 -36
  19. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/reminders.py +55 -68
  20. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/__init__.py +0 -2
  21. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/file/edit_tool.py +3 -2
  22. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/todo/todo_write_tool.py +1 -2
  23. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/tool_registry.py +3 -3
  24. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/protocol/events.py +1 -0
  25. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/protocol/message.py +3 -11
  26. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/protocol/model.py +79 -13
  27. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/protocol/op.py +0 -13
  28. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/protocol/op_handler.py +0 -5
  29. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/protocol/sub_agent/explore.py +0 -15
  30. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/protocol/sub_agent/task.py +1 -1
  31. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/protocol/sub_agent/web.py +1 -17
  32. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/protocol/tools.py +0 -1
  33. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/modes/exec/display.py +2 -3
  34. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/modes/repl/display.py +1 -1
  35. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/modes/repl/event_handler.py +2 -10
  36. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/modes/repl/input_prompt_toolkit.py +5 -1
  37. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/modes/repl/key_bindings.py +135 -1
  38. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/modes/repl/renderer.py +2 -1
  39. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/renderers/bash_syntax.py +36 -4
  40. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/renderers/common.py +8 -6
  41. klaude_code-2.0.2/src/klaude_code/ui/renderers/developer.py +231 -0
  42. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/renderers/metadata.py +28 -15
  43. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/renderers/tools.py +17 -59
  44. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/rich/markdown.py +69 -11
  45. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/rich/theme.py +22 -17
  46. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/terminal/selector.py +36 -17
  47. klaude_code-2.0.0/src/klaude_code/core/tool/file/move_tool.md +0 -41
  48. klaude_code-2.0.0/src/klaude_code/core/tool/file/move_tool.py +0 -435
  49. klaude_code-2.0.0/src/klaude_code/ui/renderers/developer.py +0 -215
  50. {klaude_code-2.0.0 → klaude_code-2.0.2}/README.md +0 -0
  51. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/__init__.py +0 -0
  52. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/auth/__init__.py +0 -0
  53. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/auth/base.py +0 -0
  54. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/auth/claude/__init__.py +0 -0
  55. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/auth/claude/exceptions.py +0 -0
  56. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/auth/claude/oauth.py +0 -0
  57. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/auth/claude/token_manager.py +0 -0
  58. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/auth/codex/__init__.py +0 -0
  59. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/auth/codex/exceptions.py +0 -0
  60. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/auth/codex/jwt_utils.py +0 -0
  61. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/auth/codex/oauth.py +0 -0
  62. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/auth/codex/token_manager.py +0 -0
  63. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/cli/__init__.py +0 -0
  64. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/cli/auth_cmd.py +0 -0
  65. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/cli/config_cmd.py +0 -0
  66. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/cli/debug.py +0 -0
  67. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/cli/list_model.py +0 -0
  68. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/cli/main.py +0 -0
  69. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/cli/self_update.py +0 -0
  70. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/cli/session_cmd.py +0 -0
  71. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/__init__.py +0 -0
  72. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/clear_cmd.py +0 -0
  73. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/command_abc.py +0 -0
  74. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/export_cmd.py +0 -0
  75. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/model_select.py +0 -0
  76. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/prompt-commit.md +0 -0
  77. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/prompt-init.md +0 -0
  78. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/prompt_command.py +0 -0
  79. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/command/refresh_cmd.py +0 -0
  80. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/config/__init__.py +0 -0
  81. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/config/assets/__init__.py +0 -0
  82. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/config/builtin_config.py +0 -0
  83. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/config/config.py +0 -0
  84. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/config/select_model.py +0 -0
  85. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/config/thinking.py +0 -0
  86. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/__init__.py +0 -0
  87. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/agent.py +0 -0
  88. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/manager/__init__.py +0 -0
  89. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/manager/llm_clients.py +0 -0
  90. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/manager/llm_clients_builder.py +0 -0
  91. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/manager/sub_agent_manager.py +0 -0
  92. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/prompt.py +0 -0
  93. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/prompts/prompt-claude-code.md +0 -0
  94. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/prompts/prompt-codex-gpt-5-1-codex-max.md +0 -0
  95. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/prompts/prompt-codex-gpt-5-2-codex.md +0 -0
  96. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/prompts/prompt-codex.md +0 -0
  97. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/prompts/prompt-gemini.md +0 -0
  98. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/prompts/prompt-minimal.md +0 -0
  99. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/prompts/prompt-sub-agent-explore.md +0 -0
  100. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/prompts/prompt-sub-agent-image-gen.md +0 -0
  101. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/prompts/prompt-sub-agent-web.md +0 -0
  102. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/prompts/prompt-sub-agent.md +0 -0
  103. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/task.py +0 -0
  104. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/file/__init__.py +0 -0
  105. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/file/_utils.py +0 -0
  106. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/file/apply_patch.py +0 -0
  107. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/file/apply_patch_tool.md +0 -0
  108. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/file/apply_patch_tool.py +0 -0
  109. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/file/diff_builder.py +0 -0
  110. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/file/edit_tool.md +0 -0
  111. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/file/read_tool.md +0 -0
  112. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/file/read_tool.py +0 -0
  113. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/file/write_tool.md +0 -0
  114. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/file/write_tool.py +0 -0
  115. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/report_back_tool.py +0 -0
  116. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/shell/__init__.py +0 -0
  117. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/shell/bash_tool.md +0 -0
  118. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/shell/bash_tool.py +0 -0
  119. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/shell/command_safety.py +0 -0
  120. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/skill/__init__.py +0 -0
  121. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/skill/skill_tool.md +0 -0
  122. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/skill/skill_tool.py +0 -0
  123. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/sub_agent_tool.py +0 -0
  124. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/todo/__init__.py +0 -0
  125. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/todo/todo_write_tool.md +0 -0
  126. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/todo/todo_write_tool_raw.md +0 -0
  127. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/todo/update_plan_tool.md +0 -0
  128. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/todo/update_plan_tool.py +0 -0
  129. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/tool_abc.py +0 -0
  130. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/tool_context.py +0 -0
  131. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/tool_runner.py +0 -0
  132. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/truncation.py +0 -0
  133. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/web/__init__.py +0 -0
  134. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/web/mermaid_tool.md +0 -0
  135. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/web/mermaid_tool.py +0 -0
  136. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/web/web_fetch_tool.md +0 -0
  137. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/web/web_fetch_tool.py +0 -0
  138. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/web/web_search_tool.md +0 -0
  139. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/tool/web/web_search_tool.py +0 -0
  140. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/core/turn.py +0 -0
  141. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/__init__.py +0 -0
  142. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/anthropic/__init__.py +0 -0
  143. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/anthropic/client.py +0 -0
  144. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/anthropic/input.py +0 -0
  145. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/bedrock/__init__.py +0 -0
  146. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/bedrock/client.py +0 -0
  147. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/claude/__init__.py +0 -0
  148. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/claude/client.py +0 -0
  149. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/client.py +0 -0
  150. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/codex/__init__.py +0 -0
  151. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/codex/client.py +0 -0
  152. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/google/__init__.py +0 -0
  153. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/google/client.py +0 -0
  154. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/google/input.py +0 -0
  155. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/image.py +0 -0
  156. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/input_common.py +0 -0
  157. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/openai_compatible/__init__.py +0 -0
  158. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/openai_compatible/client.py +0 -0
  159. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/openai_compatible/input.py +0 -0
  160. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/openai_compatible/stream.py +0 -0
  161. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/openai_compatible/tool_call_accumulator.py +0 -0
  162. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/openrouter/__init__.py +0 -0
  163. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/openrouter/client.py +0 -0
  164. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/openrouter/input.py +0 -0
  165. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/openrouter/reasoning.py +0 -0
  166. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/registry.py +0 -0
  167. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/responses/__init__.py +0 -0
  168. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/responses/client.py +0 -0
  169. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/responses/input.py +0 -0
  170. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/llm/usage.py +0 -0
  171. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/protocol/__init__.py +0 -0
  172. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/protocol/commands.py +0 -0
  173. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/protocol/llm_param.py +0 -0
  174. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/protocol/sub_agent/__init__.py +0 -0
  175. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/protocol/sub_agent/image_gen.py +0 -0
  176. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/session/__init__.py +0 -0
  177. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/session/codec.py +0 -0
  178. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/session/export.py +0 -0
  179. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/session/selector.py +0 -0
  180. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/session/session.py +0 -0
  181. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/session/store.py +0 -0
  182. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/session/templates/export_session.html +0 -0
  183. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/session/templates/mermaid_viewer.html +0 -0
  184. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/skill/__init__.py +0 -0
  185. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/skill/assets/deslop/SKILL.md +0 -0
  186. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/skill/assets/dev-docs/SKILL.md +0 -0
  187. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/skill/assets/handoff/SKILL.md +0 -0
  188. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/skill/assets/jj-workspace/SKILL.md +0 -0
  189. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/skill/assets/skill-creator/SKILL.md +0 -0
  190. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/skill/loader.py +0 -0
  191. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/skill/manager.py +0 -0
  192. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/skill/system_skills.py +0 -0
  193. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/trace/__init__.py +0 -0
  194. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/trace/log.py +0 -0
  195. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/__init__.py +0 -0
  196. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/core/__init__.py +0 -0
  197. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/core/display.py +0 -0
  198. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/core/input.py +0 -0
  199. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/core/stage_manager.py +0 -0
  200. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/modes/__init__.py +0 -0
  201. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/modes/debug/__init__.py +0 -0
  202. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/modes/debug/display.py +0 -0
  203. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/modes/exec/__init__.py +0 -0
  204. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/modes/repl/__init__.py +0 -0
  205. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/modes/repl/clipboard.py +0 -0
  206. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/modes/repl/completers.py +0 -0
  207. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/renderers/__init__.py +0 -0
  208. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/renderers/assistant.py +0 -0
  209. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/renderers/diffs.py +0 -0
  210. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/renderers/errors.py +0 -0
  211. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/renderers/mermaid_viewer.py +0 -0
  212. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/renderers/sub_agent.py +0 -0
  213. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/renderers/thinking.py +0 -0
  214. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/renderers/user_input.py +0 -0
  215. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/rich/__init__.py +0 -0
  216. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/rich/cjk_wrap.py +0 -0
  217. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/rich/code_panel.py +0 -0
  218. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/rich/live.py +0 -0
  219. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/rich/quote.py +0 -0
  220. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/rich/searchable_text.py +0 -0
  221. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/rich/status.py +0 -0
  222. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/terminal/__init__.py +0 -0
  223. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/terminal/color.py +0 -0
  224. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/terminal/control.py +0 -0
  225. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/terminal/image.py +0 -0
  226. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/terminal/notifier.py +0 -0
  227. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/terminal/progress_bar.py +0 -0
  228. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/utils/__init__.py +0 -0
  229. {klaude_code-2.0.0 → klaude_code-2.0.2}/src/klaude_code/ui/utils/common.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: klaude-code
3
- Version: 2.0.0
3
+ Version: 2.0.2
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.0.0"
7
+ version = "2.0.2"
8
8
  description = "Minimal code agent CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -179,7 +179,7 @@ def render_cost_table(daily_stats: dict[str, DailyStats]) -> Table:
179
179
  show_header=True,
180
180
  header_style="bold",
181
181
  border_style="bright_black dim",
182
- padding=(0, 1, 0, 2),
182
+ padding=(0, 1, 0, 1),
183
183
  box=ASCII_HORIZONAL,
184
184
  )
185
185
 
@@ -25,7 +25,6 @@ from klaude_code.ui.modes.repl import build_repl_status_snapshot
25
25
  from klaude_code.ui.modes.repl.input_prompt_toolkit import REPLStatusSnapshot
26
26
  from klaude_code.ui.terminal.color import is_light_terminal_background
27
27
  from klaude_code.ui.terminal.control import install_sigint_double_press_exit, start_esc_interrupt_monitor
28
- from klaude_code.ui.terminal.progress_bar import OSC94States, emit_osc94
29
28
 
30
29
 
31
30
  class PrintCapable(Protocol):
@@ -269,11 +268,6 @@ async def cleanup_app_components(components: AppComponents) -> None:
269
268
  await components.event_queue.put(events.EndEvent())
270
269
  await components.display_task
271
270
  finally:
272
- # Always attempt to clear Ghostty progress bar and restore cursor visibility
273
- # Best-effort only; never fail cleanup due to OSC errors
274
- with contextlib.suppress(Exception):
275
- emit_osc94(OSC94States.HIDDEN)
276
-
277
271
  # Ensure the terminal cursor is visible even if Rich's Status spinner
278
272
  # did not get a chance to stop cleanly (e.g. on KeyboardInterrupt).
279
273
  # If this fails the shell can still recover via `reset`/`stty sane`.
@@ -452,8 +446,7 @@ async def run_interactive(init_config: AppInitConfig, session_id: str | None = N
452
446
  print(MSG, file=sys.stderr)
453
447
 
454
448
  def _hide_progress() -> None:
455
- with contextlib.suppress(Exception):
456
- emit_osc94(OSC94States.HIDDEN)
449
+ return
457
450
 
458
451
  restore_sigint = install_sigint_double_press_exit(_show_toast_once, _hide_progress)
459
452
 
@@ -72,7 +72,7 @@ class DebugCommand(CommandABC):
72
72
  session_id=agent.session.id,
73
73
  item=message.DeveloperMessage(
74
74
  parts=message.text_parts_from_str(content),
75
- command_output=model.CommandOutput(command_name=self.name),
75
+ ui_extra=model.build_command_output_extra(self.name),
76
76
  ),
77
77
  )
78
78
  ]
@@ -42,7 +42,7 @@ class ExportOnlineCommand(CommandABC):
42
42
  session_id=agent.session.id,
43
43
  item=message.DeveloperMessage(
44
44
  parts=message.text_parts_from_str("surge.sh CLI not found. Install with: npm install -g surge"),
45
- command_output=model.CommandOutput(command_name=self.name, is_error=True),
45
+ ui_extra=model.build_command_output_extra(self.name, is_error=True),
46
46
  ),
47
47
  )
48
48
  return CommandResult(events=[event])
@@ -59,7 +59,7 @@ class ExportOnlineCommand(CommandABC):
59
59
  session_id=agent.session.id,
60
60
  item=message.DeveloperMessage(
61
61
  parts=message.text_parts_from_str(f"Not logged in to surge.sh. Please run: {login_cmd}"),
62
- command_output=model.CommandOutput(command_name=self.name, is_error=True),
62
+ ui_extra=model.build_command_output_extra(self.name, is_error=True),
63
63
  ),
64
64
  )
65
65
  return CommandResult(events=[event])
@@ -73,7 +73,7 @@ class ExportOnlineCommand(CommandABC):
73
73
  session_id=agent.session.id,
74
74
  item=message.DeveloperMessage(
75
75
  parts=message.text_parts_from_str(f"Session deployed to: {url}"),
76
- command_output=model.CommandOutput(command_name=self.name),
76
+ ui_extra=model.build_command_output_extra(self.name),
77
77
  ),
78
78
  )
79
79
  return CommandResult(events=[event])
@@ -84,7 +84,7 @@ class ExportOnlineCommand(CommandABC):
84
84
  session_id=agent.session.id,
85
85
  item=message.DeveloperMessage(
86
86
  parts=message.text_parts_from_str(f"Failed to deploy session: {exc}\n{traceback.format_exc()}"),
87
- command_output=model.CommandOutput(command_name=self.name, is_error=True),
87
+ ui_extra=model.build_command_output_extra(self.name, is_error=True),
88
88
  ),
89
89
  )
90
90
  return CommandResult(events=[event])
@@ -207,7 +207,7 @@ class ForkSessionCommand(CommandABC):
207
207
  session_id=agent.session.id,
208
208
  item=message.DeveloperMessage(
209
209
  parts=message.text_parts_from_str("(no messages to fork)"),
210
- command_output=model.CommandOutput(command_name=self.name),
210
+ ui_extra=model.build_command_output_extra(self.name),
211
211
  ),
212
212
  )
213
213
  return CommandResult(events=[event], persist_user_input=False, persist_events=False)
@@ -227,8 +227,8 @@ class ForkSessionCommand(CommandABC):
227
227
  session_id=agent.session.id,
228
228
  item=message.DeveloperMessage(
229
229
  parts=message.text_parts_from_str(f"Session forked successfully. New session id: {new_session.id}"),
230
- command_output=model.CommandOutput(
231
- command_name=self.name,
230
+ ui_extra=model.build_command_output_extra(
231
+ self.name,
232
232
  ui_extra=model.SessionIdUIExtra(session_id=new_session.id),
233
233
  ),
234
234
  ),
@@ -243,7 +243,7 @@ class ForkSessionCommand(CommandABC):
243
243
  session_id=agent.session.id,
244
244
  item=message.DeveloperMessage(
245
245
  parts=message.text_parts_from_str("(fork cancelled)"),
246
- command_output=model.CommandOutput(command_name=self.name),
246
+ ui_extra=model.build_command_output_extra(self.name),
247
247
  ),
248
248
  )
249
249
  return CommandResult(events=[event], persist_user_input=False, persist_events=False)
@@ -264,8 +264,8 @@ class ForkSessionCommand(CommandABC):
264
264
  parts=message.text_parts_from_str(
265
265
  f"Session forked ({fork_description}). New session id: {new_session.id}"
266
266
  ),
267
- command_output=model.CommandOutput(
268
- command_name=self.name,
267
+ ui_extra=model.build_command_output_extra(
268
+ self.name,
269
269
  ui_extra=model.SessionIdUIExtra(session_id=new_session.id),
270
270
  ),
271
271
  ),
@@ -43,7 +43,7 @@ Available slash commands:"""
43
43
  session_id=agent.session.id,
44
44
  item=message.DeveloperMessage(
45
45
  parts=message.text_parts_from_str("\n".join(lines)),
46
- command_output=model.CommandOutput(command_name=self.name),
46
+ ui_extra=model.build_command_output_extra(self.name),
47
47
  ),
48
48
  )
49
49
 
@@ -76,7 +76,7 @@ class ModelCommand(CommandABC):
76
76
  session_id=agent.session.id,
77
77
  item=message.DeveloperMessage(
78
78
  parts=message.text_parts_from_str("(no change)"),
79
- command_output=model.CommandOutput(command_name=self.name),
79
+ ui_extra=model.build_command_output_extra(self.name),
80
80
  ),
81
81
  )
82
82
  ]
@@ -183,6 +183,15 @@ async def dispatch_command(user_input: message.UserInputPayload, agent: Agent, *
183
183
  if isinstance(command_identifier, commands.CommandName)
184
184
  else None
185
185
  )
186
+ ui_extra = (
187
+ model.build_command_output_extra(
188
+ command_output.command_name,
189
+ ui_extra=command_output.ui_extra,
190
+ is_error=command_output.is_error,
191
+ )
192
+ if command_output is not None
193
+ else None
194
+ )
186
195
  return CommandResult(
187
196
  events=[
188
197
  events.DeveloperMessageEvent(
@@ -191,7 +200,7 @@ async def dispatch_command(user_input: message.UserInputPayload, agent: Agent, *
191
200
  parts=message.text_parts_from_str(
192
201
  f"Command {command_identifier} error: [{e.__class__.__name__}] {e!s}"
193
202
  ),
194
- command_output=command_output,
203
+ ui_extra=ui_extra,
195
204
  ),
196
205
  )
197
206
  ]
@@ -77,7 +77,7 @@ class ReleaseNotesCommand(CommandABC):
77
77
  session_id=agent.session.id,
78
78
  item=message.DeveloperMessage(
79
79
  parts=message.text_parts_from_str(content),
80
- command_output=model.CommandOutput(command_name=self.name),
80
+ ui_extra=model.build_command_output_extra(self.name),
81
81
  ),
82
82
  )
83
83
 
@@ -92,7 +92,7 @@ class ResumeCommand(CommandABC):
92
92
  parts=message.text_parts_from_str(
93
93
  "Cannot resume: current session already has messages. Use `klaude -r` to start a new instance with session selection."
94
94
  ),
95
- command_output=model.CommandOutput(command_name=self.name, is_error=True),
95
+ ui_extra=model.build_command_output_extra(self.name, is_error=True),
96
96
  ),
97
97
  )
98
98
  return CommandResult(events=[event], persist_user_input=False, persist_events=False)
@@ -103,7 +103,7 @@ class ResumeCommand(CommandABC):
103
103
  session_id=agent.session.id,
104
104
  item=message.DeveloperMessage(
105
105
  parts=message.text_parts_from_str("(no session selected)"),
106
- command_output=model.CommandOutput(command_name=self.name),
106
+ ui_extra=model.build_command_output_extra(self.name),
107
107
  ),
108
108
  )
109
109
  return CommandResult(events=[event], persist_user_input=False, persist_events=False)
@@ -141,8 +141,8 @@ class StatusCommand(CommandABC):
141
141
  session_id=session.id,
142
142
  item=message.DeveloperMessage(
143
143
  parts=message.text_parts_from_str(format_status_content(aggregated)),
144
- command_output=model.CommandOutput(
145
- command_name=self.name,
144
+ ui_extra=model.build_command_output_extra(
145
+ self.name,
146
146
  ui_extra=model.SessionStatusUIExtra(
147
147
  usage=aggregated.total,
148
148
  task_count=aggregated.task_count,
@@ -229,7 +229,7 @@ class TerminalSetupCommand(CommandABC):
229
229
  session_id=agent.session.id,
230
230
  item=message.DeveloperMessage(
231
231
  parts=message.text_parts_from_str(msg),
232
- command_output=model.CommandOutput(command_name=self.name, is_error=False),
232
+ ui_extra=model.build_command_output_extra(self.name),
233
233
  ),
234
234
  )
235
235
  ]
@@ -243,7 +243,7 @@ class TerminalSetupCommand(CommandABC):
243
243
  session_id=agent.session.id,
244
244
  item=message.DeveloperMessage(
245
245
  parts=message.text_parts_from_str(msg),
246
- command_output=model.CommandOutput(command_name=self.name, is_error=True),
246
+ ui_extra=model.build_command_output_extra(self.name, is_error=True),
247
247
  ),
248
248
  )
249
249
  ]
@@ -82,7 +82,7 @@ class ThinkingCommand(CommandABC):
82
82
  session_id=agent.session.id,
83
83
  item=message.DeveloperMessage(
84
84
  parts=message.text_parts_from_str("(no change)"),
85
- command_output=model.CommandOutput(command_name=self.name),
85
+ ui_extra=model.build_command_output_extra(self.name),
86
86
  ),
87
87
  )
88
88
  ]
@@ -347,6 +347,10 @@ provider_list:
347
347
  reasoning_effort: medium
348
348
  context_limit: 400000
349
349
  max_tokens: 128000
350
+ cost:
351
+ input: 1.75
352
+ output: 14.0
353
+ cache_read: 0.17
350
354
 
351
355
  sub_agent_models:
352
356
  ImageGen: nano-banana-pro@or
@@ -122,13 +122,14 @@ TOOL_OUTPUT_TRUNCATION_DIR = "/tmp/klaude" # Directory for saving full truncate
122
122
  TAB_EXPAND_WIDTH = 8 # Tab expansion width for text rendering
123
123
  DIFF_PREFIX_WIDTH = 4 # Width of line number prefix in diff display
124
124
  MAX_DIFF_LINES = 500 # Maximum lines to show in diff output
125
- INVALID_TOOL_CALL_MAX_LENGTH = 500 # Maximum length for invalid tool call display
126
- TRUNCATE_DISPLAY_MAX_LINE_LENGTH = 1000 # Maximum line length for truncated display
127
- TRUNCATE_DISPLAY_MAX_LINES = 6 # Maximum lines for truncated display
125
+ INVALID_TOOL_CALL_MAX_LENGTH = 200 # Maximum length for invalid tool call display
126
+ TRUNCATE_DISPLAY_MAX_LINE_LENGTH = 200 # Maximum line length for truncated display
127
+ TRUNCATE_DISPLAY_MAX_LINES = 4 # Maximum lines for truncated display
128
128
  MIN_HIDDEN_LINES_FOR_INDICATOR = 5 # Minimum hidden lines before showing truncation indicator
129
129
  SUB_AGENT_RESULT_MAX_LINES = 10 # Maximum lines for sub-agent result display
130
130
  TRUNCATE_HEAD_MAX_LINES = 2 # Maximum lines for sub-agent error display
131
131
  BASH_OUTPUT_PANEL_THRESHOLD = 10 # Bash output line threshold for CodePanel display
132
+ BASH_MULTILINE_STRING_TRUNCATE_MAX_LINES = 2 # Max lines shown for heredoc / multiline string tokens in bash tool calls
132
133
  URL_TRUNCATE_MAX_LENGTH = 400 # Maximum length for URL truncation in display
133
134
  QUERY_DISPLAY_TRUNCATE_LENGTH = 80 # Maximum length for search query display
134
135
  NOTIFY_COMPACT_LIMIT = 160 # Maximum length for notification body text
@@ -141,6 +142,7 @@ NOTIFY_COMPACT_LIMIT = 160 # Maximum length for notification body text
141
142
  UI_REFRESH_RATE_FPS = 10 # UI refresh rate (frames per second)
142
143
  CROP_ABOVE_LIVE_REFRESH_PER_SECOND = 4.0 # CropAboveLive default refresh rate
143
144
  MARKDOWN_STREAM_LIVE_REPAINT_ENABLED = True # Enable live area for streaming markdown
145
+ MARKDOWN_STREAM_SYNCHRONIZED_OUTPUT_ENABLED = True # Use terminal "Synchronized Output" to reduce flicker
144
146
  STREAM_MAX_HEIGHT_SHRINK_RESET_LINES = 20 # Reset stream height ceiling after this shrinkage
145
147
  MARKDOWN_LEFT_MARGIN = 2 # Left margin (columns) for markdown rendering
146
148
  MARKDOWN_RIGHT_MARGIN = 2 # Right margin (columns) for markdown rendering
@@ -176,35 +176,6 @@ class ExecutorContext:
176
176
  """Initialize an agent for a session and replay history to UI."""
177
177
  await self._ensure_agent(operation.session_id)
178
178
 
179
- async def handle_user_input(self, operation: op.UserInputOperation) -> None:
180
- """Handle a user input operation.
181
-
182
- Core should not parse slash commands. The UI/CLI layer is responsible for
183
- turning raw user input into one or more operations.
184
- """
185
-
186
- if operation.session_id is None:
187
- raise ValueError("session_id cannot be None")
188
-
189
- session_id = operation.session_id
190
- agent = await self._ensure_agent(session_id)
191
- user_input = operation.input
192
-
193
- await self.emit_event(
194
- events.UserMessageEvent(content=user_input.text, session_id=session_id, images=user_input.images)
195
- )
196
- agent.session.append_history(
197
- [message.UserMessage(parts=message.parts_from_text_and_images(user_input.text, user_input.images))]
198
- )
199
-
200
- await self.handle_run_agent(
201
- op.RunAgentOperation(
202
- id=operation.id,
203
- session_id=session_id,
204
- input=user_input,
205
- )
206
- )
207
-
208
179
  async def handle_run_agent(self, operation: op.RunAgentOperation) -> None:
209
180
  agent = await self._ensure_agent(operation.session_id)
210
181
  existing_active = self.task_manager.get(operation.id)
@@ -234,7 +205,7 @@ class ExecutorContext:
234
205
  default_note = " (saved as default)" if operation.save_as_default else ""
235
206
  developer_item = message.DeveloperMessage(
236
207
  parts=message.text_parts_from_str(f"Switched to: {llm_config.model}{default_note}"),
237
- command_output=model.CommandOutput(command_name=commands.CommandName.MODEL),
208
+ ui_extra=model.build_command_output_extra(commands.CommandName.MODEL),
238
209
  )
239
210
  agent.session.append_history([developer_item])
240
211
  await self.emit_event(events.DeveloperMessageEvent(session_id=agent.session.id, item=developer_item))
@@ -243,7 +214,11 @@ class ExecutorContext:
243
214
  self._on_model_change(llm_client.model_name)
244
215
 
245
216
  if operation.emit_welcome_event:
246
- await self.emit_event(events.WelcomeEvent(llm_config=llm_config, work_dir=str(agent.session.work_dir)))
217
+ await self.emit_event(
218
+ events.WelcomeEvent(
219
+ llm_config=llm_config, work_dir=str(agent.session.work_dir), show_klaude_code_info=False
220
+ )
221
+ )
247
222
 
248
223
  async def handle_change_thinking(self, operation: op.ChangeThinkingOperation) -> None:
249
224
  """Handle a change thinking operation.
@@ -279,13 +254,17 @@ class ExecutorContext:
279
254
  if operation.emit_switch_message:
280
255
  developer_item = message.DeveloperMessage(
281
256
  parts=message.text_parts_from_str(f"Thinking changed: {current} -> {new_status}"),
282
- command_output=model.CommandOutput(command_name=commands.CommandName.THINKING),
257
+ ui_extra=model.build_command_output_extra(commands.CommandName.THINKING),
283
258
  )
284
259
  agent.session.append_history([developer_item])
285
260
  await self.emit_event(events.DeveloperMessageEvent(session_id=agent.session.id, item=developer_item))
286
261
 
287
262
  if operation.emit_welcome_event:
288
- await self.emit_event(events.WelcomeEvent(work_dir=str(agent.session.work_dir), llm_config=config))
263
+ await self.emit_event(
264
+ events.WelcomeEvent(
265
+ work_dir=str(agent.session.work_dir), llm_config=config, show_klaude_code_info=False
266
+ )
267
+ )
289
268
 
290
269
  async def handle_clear_session(self, operation: op.ClearSessionOperation) -> None:
291
270
  agent = await self._ensure_agent(operation.session_id)
@@ -297,7 +276,7 @@ class ExecutorContext:
297
276
 
298
277
  developer_item = message.DeveloperMessage(
299
278
  parts=message.text_parts_from_str("started new conversation"),
300
- command_output=model.CommandOutput(command_name=commands.CommandName.CLEAR),
279
+ ui_extra=model.build_command_output_extra(commands.CommandName.CLEAR),
301
280
  )
302
281
  await self.emit_event(events.DeveloperMessageEvent(session_id=agent.session.id, item=developer_item))
303
282
  await self.emit_event(
@@ -348,7 +327,7 @@ class ExecutorContext:
348
327
  await asyncio.to_thread(self._open_file, output_path)
349
328
  developer_item = message.DeveloperMessage(
350
329
  parts=message.text_parts_from_str(f"Session exported and opened: {output_path}"),
351
- command_output=model.CommandOutput(command_name=commands.CommandName.EXPORT),
330
+ ui_extra=model.build_command_output_extra(commands.CommandName.EXPORT),
352
331
  )
353
332
  agent.session.append_history([developer_item])
354
333
  await self.emit_event(events.DeveloperMessageEvent(session_id=agent.session.id, item=developer_item))
@@ -357,7 +336,7 @@ class ExecutorContext:
357
336
 
358
337
  developer_item = message.DeveloperMessage(
359
338
  parts=message.text_parts_from_str(f"Failed to export session: {exc}\n{traceback.format_exc()}"),
360
- command_output=model.CommandOutput(command_name=commands.CommandName.EXPORT, is_error=True),
339
+ ui_extra=model.build_command_output_extra(commands.CommandName.EXPORT, is_error=True),
361
340
  )
362
341
  agent.session.append_history([developer_item])
363
342
  await self.emit_event(events.DeveloperMessageEvent(session_id=agent.session.id, item=developer_item))