klaude-code 1.2.0__tar.gz → 2.8.0__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 (380) hide show
  1. klaude_code-2.8.0/PKG-INFO +273 -0
  2. klaude_code-2.8.0/README.md +253 -0
  3. klaude_code-2.8.0/pyproject.toml +106 -0
  4. klaude_code-2.8.0/src/klaude_code/.DS_Store +0 -0
  5. klaude_code-2.8.0/src/klaude_code/app/__init__.py +11 -0
  6. klaude_code-2.8.0/src/klaude_code/app/runtime.py +183 -0
  7. klaude_code-2.8.0/src/klaude_code/auth/AGENTS.md +325 -0
  8. klaude_code-2.8.0/src/klaude_code/auth/__init__.py +50 -0
  9. klaude_code-2.8.0/src/klaude_code/auth/antigravity/__init__.py +20 -0
  10. klaude_code-2.8.0/src/klaude_code/auth/antigravity/exceptions.py +17 -0
  11. klaude_code-2.8.0/src/klaude_code/auth/antigravity/oauth.py +320 -0
  12. klaude_code-2.8.0/src/klaude_code/auth/antigravity/pkce.py +25 -0
  13. klaude_code-2.8.0/src/klaude_code/auth/antigravity/token_manager.py +45 -0
  14. klaude_code-2.8.0/src/klaude_code/auth/base.py +101 -0
  15. klaude_code-2.8.0/src/klaude_code/auth/claude/__init__.py +6 -0
  16. klaude_code-2.8.0/src/klaude_code/auth/claude/exceptions.py +9 -0
  17. klaude_code-2.8.0/src/klaude_code/auth/claude/oauth.py +192 -0
  18. klaude_code-2.8.0/src/klaude_code/auth/claude/token_manager.py +26 -0
  19. klaude_code-2.8.0/src/klaude_code/auth/codex/__init__.py +20 -0
  20. klaude_code-2.8.0/src/klaude_code/auth/codex/exceptions.py +21 -0
  21. klaude_code-2.8.0/src/klaude_code/auth/codex/jwt_utils.py +45 -0
  22. klaude_code-2.8.0/src/klaude_code/auth/codex/oauth.py +229 -0
  23. klaude_code-2.8.0/src/klaude_code/auth/codex/token_manager.py +44 -0
  24. klaude_code-2.8.0/src/klaude_code/auth/env.py +81 -0
  25. klaude_code-2.8.0/src/klaude_code/cli/auth_cmd.py +272 -0
  26. klaude_code-2.8.0/src/klaude_code/cli/config_cmd.py +93 -0
  27. klaude_code-2.8.0/src/klaude_code/cli/cost_cmd.py +365 -0
  28. klaude_code-2.8.0/src/klaude_code/cli/debug.py +54 -0
  29. klaude_code-2.8.0/src/klaude_code/cli/list_model.py +430 -0
  30. klaude_code-2.8.0/src/klaude_code/cli/main.py +350 -0
  31. klaude_code-2.8.0/src/klaude_code/cli/self_update.py +87 -0
  32. klaude_code-2.8.0/src/klaude_code/config/__init__.py +19 -0
  33. klaude_code-2.8.0/src/klaude_code/config/assets/__init__.py +1 -0
  34. klaude_code-2.8.0/src/klaude_code/config/assets/builtin_config.yaml +370 -0
  35. klaude_code-2.8.0/src/klaude_code/config/builtin_config.py +57 -0
  36. klaude_code-2.8.0/src/klaude_code/config/config.py +654 -0
  37. klaude_code-2.8.0/src/klaude_code/config/model_matcher.py +156 -0
  38. klaude_code-2.8.0/src/klaude_code/config/sub_agent_model_helper.py +208 -0
  39. klaude_code-2.8.0/src/klaude_code/config/thinking.py +269 -0
  40. klaude_code-2.8.0/src/klaude_code/const.py +243 -0
  41. klaude_code-2.8.0/src/klaude_code/core/agent.py +108 -0
  42. klaude_code-2.8.0/src/klaude_code/core/agent_profile.py +352 -0
  43. klaude_code-2.8.0/src/klaude_code/core/compaction/AGENTS.md +112 -0
  44. klaude_code-2.8.0/src/klaude_code/core/compaction/__init__.py +11 -0
  45. klaude_code-2.8.0/src/klaude_code/core/compaction/compaction.py +707 -0
  46. klaude_code-2.8.0/src/klaude_code/core/compaction/overflow.py +30 -0
  47. klaude_code-2.8.0/src/klaude_code/core/compaction/prompts.py +97 -0
  48. klaude_code-2.8.0/src/klaude_code/core/executor.py +959 -0
  49. klaude_code-2.8.0/src/klaude_code/core/loaded_skills.py +36 -0
  50. klaude_code-2.8.0/src/klaude_code/core/manager/__init__.py +17 -0
  51. klaude_code-2.8.0/src/klaude_code/core/manager/llm_clients.py +33 -0
  52. klaude_code-2.8.0/src/klaude_code/core/manager/llm_clients_builder.py +66 -0
  53. klaude_code-2.8.0/src/klaude_code/core/manager/sub_agent_manager.py +184 -0
  54. klaude_code-2.8.0/src/klaude_code/core/prompts/prompt-antigravity.md +80 -0
  55. {klaude_code-1.2.0/src/klaude_code/core/prompt → klaude_code-2.8.0/src/klaude_code/core/prompts}/prompt-claude-code.md +2 -13
  56. klaude_code-2.8.0/src/klaude_code/core/prompts/prompt-codex-gpt-5-2-codex.md +117 -0
  57. klaude_code-2.8.0/src/klaude_code/core/prompts/prompt-codex-gpt-5-2.md +335 -0
  58. {klaude_code-1.2.0/src/klaude_code/core/prompt → klaude_code-2.8.0/src/klaude_code/core/prompts}/prompt-codex.md +9 -42
  59. {klaude_code-1.2.0/src/klaude_code/core/prompt → klaude_code-2.8.0/src/klaude_code/core/prompts}/prompt-gemini.md +1 -1
  60. klaude_code-2.8.0/src/klaude_code/core/prompts/prompt-minimal.md +12 -0
  61. klaude_code-1.2.0/src/klaude_code/core/prompt/prompt-subagent-explore.md → klaude_code-2.8.0/src/klaude_code/core/prompts/prompt-sub-agent-explore.md +16 -3
  62. klaude_code-2.8.0/src/klaude_code/core/prompts/prompt-sub-agent-image-gen.md +1 -0
  63. klaude_code-2.8.0/src/klaude_code/core/prompts/prompt-sub-agent-web.md +77 -0
  64. klaude_code-2.8.0/src/klaude_code/core/reminders.py +624 -0
  65. klaude_code-2.8.0/src/klaude_code/core/task.py +454 -0
  66. klaude_code-2.8.0/src/klaude_code/core/tool/__init__.py +47 -0
  67. klaude_code-2.8.0/src/klaude_code/core/tool/context.py +93 -0
  68. klaude_code-2.8.0/src/klaude_code/core/tool/file/_utils.py +36 -0
  69. {klaude_code-1.2.0/src/klaude_code/core/tool → klaude_code-2.8.0/src/klaude_code/core/tool/file}/apply_patch.py +24 -28
  70. klaude_code-2.8.0/src/klaude_code/core/tool/file/apply_patch_tool.md +1 -0
  71. klaude_code-2.8.0/src/klaude_code/core/tool/file/apply_patch_tool.py +181 -0
  72. klaude_code-2.8.0/src/klaude_code/core/tool/file/diff_builder.py +156 -0
  73. klaude_code-2.8.0/src/klaude_code/core/tool/file/edit_tool.md +9 -0
  74. klaude_code-2.8.0/src/klaude_code/core/tool/file/edit_tool.py +259 -0
  75. klaude_code-2.8.0/src/klaude_code/core/tool/file/read_tool.md +14 -0
  76. klaude_code-2.8.0/src/klaude_code/core/tool/file/read_tool.py +336 -0
  77. klaude_code-2.8.0/src/klaude_code/core/tool/file/write_tool.md +8 -0
  78. klaude_code-2.8.0/src/klaude_code/core/tool/file/write_tool.py +135 -0
  79. klaude_code-2.8.0/src/klaude_code/core/tool/offload.py +311 -0
  80. klaude_code-2.8.0/src/klaude_code/core/tool/report_back_tool.py +87 -0
  81. klaude_code-2.8.0/src/klaude_code/core/tool/shell/bash_tool.md +1 -0
  82. klaude_code-2.8.0/src/klaude_code/core/tool/shell/bash_tool.py +361 -0
  83. klaude_code-2.8.0/src/klaude_code/core/tool/shell/command_safety.py +175 -0
  84. klaude_code-2.8.0/src/klaude_code/core/tool/sub_agent_tool.py +126 -0
  85. klaude_code-2.8.0/src/klaude_code/core/tool/todo/__init__.py +0 -0
  86. klaude_code-2.8.0/src/klaude_code/core/tool/todo/todo_write_tool.md +2 -0
  87. klaude_code-2.8.0/src/klaude_code/core/tool/todo/todo_write_tool.py +114 -0
  88. klaude_code-1.2.0/src/klaude_code/core/tool/todo_write_tool.py → klaude_code-2.8.0/src/klaude_code/core/tool/todo/todo_write_tool_raw.md +1 -126
  89. klaude_code-2.8.0/src/klaude_code/core/tool/todo/update_plan_tool.md +3 -0
  90. {klaude_code-1.2.0/src/klaude_code/core/tool → klaude_code-2.8.0/src/klaude_code/core/tool/todo}/update_plan_tool.py +23 -36
  91. klaude_code-2.8.0/src/klaude_code/core/tool/tool_abc.py +44 -0
  92. klaude_code-2.8.0/src/klaude_code/core/tool/tool_registry.py +47 -0
  93. klaude_code-2.8.0/src/klaude_code/core/tool/tool_runner.py +314 -0
  94. klaude_code-2.8.0/src/klaude_code/core/tool/web/__init__.py +0 -0
  95. klaude_code-2.8.0/src/klaude_code/core/tool/web/mermaid_tool.md +64 -0
  96. klaude_code-2.8.0/src/klaude_code/core/tool/web/mermaid_tool.py +74 -0
  97. klaude_code-2.8.0/src/klaude_code/core/tool/web/web_fetch_tool.md +8 -0
  98. klaude_code-2.8.0/src/klaude_code/core/tool/web/web_fetch_tool.py +264 -0
  99. klaude_code-2.8.0/src/klaude_code/core/tool/web/web_search_tool.md +23 -0
  100. klaude_code-2.8.0/src/klaude_code/core/tool/web/web_search_tool.py +130 -0
  101. klaude_code-2.8.0/src/klaude_code/core/turn.py +428 -0
  102. klaude_code-2.8.0/src/klaude_code/llm/__init__.py +13 -0
  103. klaude_code-2.8.0/src/klaude_code/llm/anthropic/client.py +427 -0
  104. klaude_code-2.8.0/src/klaude_code/llm/anthropic/input.py +268 -0
  105. klaude_code-2.8.0/src/klaude_code/llm/antigravity/__init__.py +3 -0
  106. klaude_code-2.8.0/src/klaude_code/llm/antigravity/client.py +558 -0
  107. klaude_code-2.8.0/src/klaude_code/llm/antigravity/input.py +261 -0
  108. klaude_code-2.8.0/src/klaude_code/llm/bedrock/__init__.py +3 -0
  109. klaude_code-2.8.0/src/klaude_code/llm/bedrock/client.py +59 -0
  110. klaude_code-2.8.0/src/klaude_code/llm/claude/__init__.py +3 -0
  111. klaude_code-2.8.0/src/klaude_code/llm/claude/client.py +101 -0
  112. klaude_code-2.8.0/src/klaude_code/llm/client.py +63 -0
  113. klaude_code-2.8.0/src/klaude_code/llm/codex/__init__.py +5 -0
  114. klaude_code-2.8.0/src/klaude_code/llm/codex/client.py +151 -0
  115. klaude_code-2.8.0/src/klaude_code/llm/google/__init__.py +3 -0
  116. klaude_code-2.8.0/src/klaude_code/llm/google/client.py +539 -0
  117. klaude_code-2.8.0/src/klaude_code/llm/google/input.py +230 -0
  118. klaude_code-2.8.0/src/klaude_code/llm/image.py +123 -0
  119. klaude_code-2.8.0/src/klaude_code/llm/input_common.py +180 -0
  120. klaude_code-2.8.0/src/klaude_code/llm/openai_compatible/client.py +124 -0
  121. klaude_code-2.8.0/src/klaude_code/llm/openai_compatible/input.py +90 -0
  122. klaude_code-2.8.0/src/klaude_code/llm/openai_compatible/stream.py +401 -0
  123. {klaude_code-1.2.0/src/klaude_code/llm/openrouter → klaude_code-2.8.0/src/klaude_code/llm/openai_compatible}/tool_call_accumulator.py +41 -13
  124. klaude_code-2.8.0/src/klaude_code/llm/openrouter/client.py +149 -0
  125. klaude_code-2.8.0/src/klaude_code/llm/openrouter/input.py +157 -0
  126. klaude_code-2.8.0/src/klaude_code/llm/openrouter/reasoning.py +91 -0
  127. klaude_code-2.8.0/src/klaude_code/llm/partial_message.py +5 -0
  128. klaude_code-2.8.0/src/klaude_code/llm/registry.py +60 -0
  129. klaude_code-2.8.0/src/klaude_code/llm/responses/client.py +375 -0
  130. klaude_code-2.8.0/src/klaude_code/llm/responses/input.py +228 -0
  131. klaude_code-2.8.0/src/klaude_code/llm/stream_parts.py +94 -0
  132. klaude_code-2.8.0/src/klaude_code/llm/usage.py +171 -0
  133. klaude_code-2.8.0/src/klaude_code/log.py +375 -0
  134. klaude_code-2.8.0/src/klaude_code/protocol/__init__.py +5 -0
  135. klaude_code-2.8.0/src/klaude_code/protocol/commands.py +32 -0
  136. klaude_code-2.8.0/src/klaude_code/protocol/events.py +232 -0
  137. klaude_code-1.2.0/src/klaude_code/protocol/llm_parameter.py → klaude_code-2.8.0/src/klaude_code/protocol/llm_param.py +48 -48
  138. klaude_code-2.8.0/src/klaude_code/protocol/message.py +264 -0
  139. klaude_code-2.8.0/src/klaude_code/protocol/model.py +330 -0
  140. klaude_code-2.8.0/src/klaude_code/protocol/op.py +196 -0
  141. klaude_code-2.8.0/src/klaude_code/protocol/op_handler.py +67 -0
  142. klaude_code-2.8.0/src/klaude_code/protocol/sub_agent/AGENTS.md +28 -0
  143. klaude_code-2.8.0/src/klaude_code/protocol/sub_agent/__init__.py +113 -0
  144. klaude_code-2.8.0/src/klaude_code/protocol/sub_agent/explore.py +48 -0
  145. klaude_code-2.8.0/src/klaude_code/protocol/sub_agent/image_gen.py +109 -0
  146. klaude_code-2.8.0/src/klaude_code/protocol/sub_agent/task.py +61 -0
  147. klaude_code-2.8.0/src/klaude_code/protocol/sub_agent/web.py +65 -0
  148. {klaude_code-1.2.0 → klaude_code-2.8.0}/src/klaude_code/protocol/tools.py +4 -3
  149. klaude_code-2.8.0/src/klaude_code/session/__init__.py +4 -0
  150. klaude_code-2.8.0/src/klaude_code/session/codec.py +67 -0
  151. klaude_code-2.8.0/src/klaude_code/session/export.py +1198 -0
  152. klaude_code-2.8.0/src/klaude_code/session/selector.py +81 -0
  153. klaude_code-2.8.0/src/klaude_code/session/session.py +635 -0
  154. klaude_code-2.8.0/src/klaude_code/session/store.py +193 -0
  155. klaude_code-2.8.0/src/klaude_code/session/templates/export_session.html +2028 -0
  156. klaude_code-2.8.0/src/klaude_code/session/templates/mermaid_viewer.html +926 -0
  157. klaude_code-2.8.0/src/klaude_code/skill/.DS_Store +0 -0
  158. klaude_code-2.8.0/src/klaude_code/skill/__init__.py +27 -0
  159. klaude_code-2.8.0/src/klaude_code/skill/assets/.DS_Store +0 -0
  160. klaude_code-2.8.0/src/klaude_code/skill/assets/create-plan/SKILL.md +74 -0
  161. klaude_code-2.8.0/src/klaude_code/skill/assets/deslop/SKILL.md +17 -0
  162. klaude_code-2.8.0/src/klaude_code/skill/assets/handoff/SKILL.md +39 -0
  163. klaude_code-2.8.0/src/klaude_code/skill/assets/skill-creator/SKILL.md +139 -0
  164. klaude_code-2.8.0/src/klaude_code/skill/loader.py +229 -0
  165. klaude_code-2.8.0/src/klaude_code/skill/manager.py +109 -0
  166. klaude_code-2.8.0/src/klaude_code/skill/system_skills.py +192 -0
  167. klaude_code-2.8.0/src/klaude_code/tui/__init__.py +8 -0
  168. klaude_code-2.8.0/src/klaude_code/tui/command/__init__.py +104 -0
  169. klaude_code-2.8.0/src/klaude_code/tui/command/clear_cmd.py +25 -0
  170. klaude_code-2.8.0/src/klaude_code/tui/command/command_abc.py +93 -0
  171. klaude_code-2.8.0/src/klaude_code/tui/command/compact_cmd.py +32 -0
  172. klaude_code-2.8.0/src/klaude_code/tui/command/copy_cmd.py +52 -0
  173. klaude_code-2.8.0/src/klaude_code/tui/command/debug_cmd.py +81 -0
  174. klaude_code-2.8.0/src/klaude_code/tui/command/export_cmd.py +53 -0
  175. klaude_code-2.8.0/src/klaude_code/tui/command/export_online_cmd.py +150 -0
  176. klaude_code-2.8.0/src/klaude_code/tui/command/fork_session_cmd.py +357 -0
  177. klaude_code-2.8.0/src/klaude_code/tui/command/model_cmd.py +55 -0
  178. klaude_code-2.8.0/src/klaude_code/tui/command/model_picker.py +131 -0
  179. {klaude_code-1.2.0/src/klaude_code → klaude_code-2.8.0/src/klaude_code/tui}/command/prompt-init.md +2 -5
  180. {klaude_code-1.2.0/src/klaude_code → klaude_code-2.8.0/src/klaude_code/tui}/command/prompt_command.py +22 -13
  181. {klaude_code-1.2.0/src/klaude_code → klaude_code-2.8.0/src/klaude_code/tui}/command/refresh_cmd.py +12 -13
  182. klaude_code-2.8.0/src/klaude_code/tui/command/registry.py +215 -0
  183. klaude_code-2.8.0/src/klaude_code/tui/command/resume_cmd.py +93 -0
  184. klaude_code-2.8.0/src/klaude_code/tui/command/status_cmd.py +152 -0
  185. klaude_code-2.8.0/src/klaude_code/tui/command/sub_agent_model_cmd.py +171 -0
  186. klaude_code-2.8.0/src/klaude_code/tui/command/thinking_cmd.py +85 -0
  187. klaude_code-2.8.0/src/klaude_code/tui/commands.py +170 -0
  188. klaude_code-2.8.0/src/klaude_code/tui/components/__init__.py +0 -0
  189. klaude_code-2.8.0/src/klaude_code/tui/components/assistant.py +28 -0
  190. klaude_code-2.8.0/src/klaude_code/tui/components/bash_syntax.py +210 -0
  191. klaude_code-2.8.0/src/klaude_code/tui/components/command_output.py +96 -0
  192. klaude_code-2.8.0/src/klaude_code/tui/components/common.py +146 -0
  193. klaude_code-2.8.0/src/klaude_code/tui/components/developer.py +119 -0
  194. {klaude_code-1.2.0/src/klaude_code/ui/renderers → klaude_code-2.8.0/src/klaude_code/tui/components}/diffs.py +116 -13
  195. klaude_code-2.8.0/src/klaude_code/tui/components/errors.py +21 -0
  196. klaude_code-2.8.0/src/klaude_code/tui/components/mermaid_viewer.py +104 -0
  197. klaude_code-2.8.0/src/klaude_code/tui/components/metadata.py +177 -0
  198. klaude_code-2.8.0/src/klaude_code/tui/components/rich/__init__.py +10 -0
  199. klaude_code-2.8.0/src/klaude_code/tui/components/rich/cjk_wrap.py +229 -0
  200. klaude_code-2.8.0/src/klaude_code/tui/components/rich/code_panel.py +131 -0
  201. {klaude_code-1.2.0/src/klaude_code/ui/rich_ext → klaude_code-2.8.0/src/klaude_code/tui/components/rich}/live.py +20 -1
  202. klaude_code-2.8.0/src/klaude_code/tui/components/rich/markdown.py +641 -0
  203. klaude_code-2.8.0/src/klaude_code/tui/components/rich/quote.py +137 -0
  204. {klaude_code-1.2.0/src/klaude_code/ui/rich_ext → klaude_code-2.8.0/src/klaude_code/tui/components/rich}/searchable_text.py +12 -13
  205. klaude_code-2.8.0/src/klaude_code/tui/components/rich/status.py +433 -0
  206. klaude_code-2.8.0/src/klaude_code/tui/components/rich/theme.py +404 -0
  207. klaude_code-2.8.0/src/klaude_code/tui/components/sub_agent.py +170 -0
  208. klaude_code-2.8.0/src/klaude_code/tui/components/thinking.py +96 -0
  209. klaude_code-2.8.0/src/klaude_code/tui/components/tools.py +681 -0
  210. klaude_code-2.8.0/src/klaude_code/tui/components/user_input.py +107 -0
  211. klaude_code-2.8.0/src/klaude_code/tui/components/welcome.py +100 -0
  212. klaude_code-2.8.0/src/klaude_code/tui/display.py +95 -0
  213. klaude_code-2.8.0/src/klaude_code/tui/input/AGENTS.md +44 -0
  214. klaude_code-2.8.0/src/klaude_code/tui/input/__init__.py +9 -0
  215. klaude_code-2.8.0/src/klaude_code/tui/input/completers.py +801 -0
  216. klaude_code-2.8.0/src/klaude_code/tui/input/drag_drop.py +146 -0
  217. klaude_code-2.8.0/src/klaude_code/tui/input/images.py +227 -0
  218. klaude_code-2.8.0/src/klaude_code/tui/input/key_bindings.py +591 -0
  219. klaude_code-2.8.0/src/klaude_code/tui/input/paste.py +71 -0
  220. klaude_code-2.8.0/src/klaude_code/tui/input/prompt_toolkit.py +701 -0
  221. klaude_code-2.8.0/src/klaude_code/tui/machine.py +733 -0
  222. klaude_code-2.8.0/src/klaude_code/tui/renderer.py +708 -0
  223. klaude_code-2.8.0/src/klaude_code/tui/runner.py +331 -0
  224. klaude_code-2.8.0/src/klaude_code/tui/terminal/__init__.py +56 -0
  225. klaude_code-1.2.0/src/klaude_code/ui/base/terminal_color.py → klaude_code-2.8.0/src/klaude_code/tui/terminal/color.py +6 -3
  226. klaude_code-2.8.0/src/klaude_code/tui/terminal/control.py +138 -0
  227. klaude_code-2.8.0/src/klaude_code/tui/terminal/image.py +127 -0
  228. klaude_code-1.2.0/src/klaude_code/ui/base/terminal_notifier.py → klaude_code-2.8.0/src/klaude_code/tui/terminal/notifier.py +52 -8
  229. {klaude_code-1.2.0/src/klaude_code/ui/base → klaude_code-2.8.0/src/klaude_code/tui/terminal}/progress_bar.py +4 -4
  230. klaude_code-2.8.0/src/klaude_code/tui/terminal/selector.py +901 -0
  231. klaude_code-2.8.0/src/klaude_code/ui/__init__.py +18 -0
  232. klaude_code-2.8.0/src/klaude_code/ui/common.py +146 -0
  233. klaude_code-2.8.0/src/klaude_code/ui/core/__init__.py +1 -0
  234. klaude_code-2.8.0/src/klaude_code/ui/core/display.py +103 -0
  235. klaude_code-2.8.0/src/klaude_code/ui/core/input.py +72 -0
  236. klaude_code-1.2.0/src/klaude_code/ui/base/debug_event_display.py → klaude_code-2.8.0/src/klaude_code/ui/debug_mode.py +11 -6
  237. klaude_code-2.8.0/src/klaude_code/ui/terminal/__init__.py +8 -0
  238. klaude_code-2.8.0/src/klaude_code/ui/terminal/title.py +31 -0
  239. klaude_code-1.2.0/src/klaude_code/version.py → klaude_code-2.8.0/src/klaude_code/update.py +31 -31
  240. klaude_code-1.2.0/.claude/skills/publish/SKILL.md +0 -90
  241. klaude_code-1.2.0/.claude/skills/publish/scripts/bump_version.py +0 -74
  242. klaude_code-1.2.0/.claude/skills/publish/scripts/update_changelog.py +0 -187
  243. klaude_code-1.2.0/.crush/.gitignore +0 -1
  244. klaude_code-1.2.0/.crush/crush.db +0 -0
  245. klaude_code-1.2.0/.crush/logs/crush.log +0 -13
  246. klaude_code-1.2.0/.gitignore +0 -14
  247. klaude_code-1.2.0/.python-version +0 -1
  248. klaude_code-1.2.0/AGENTS.md +0 -137
  249. klaude_code-1.2.0/CHANGELOG.md +0 -150
  250. klaude_code-1.2.0/PKG-INFO +0 -161
  251. klaude_code-1.2.0/README.md +0 -144
  252. klaude_code-1.2.0/dev/finished/memory-tool/memory-tool-context.md +0 -209
  253. klaude_code-1.2.0/dev/finished/memory-tool/memory-tool-plan.md +0 -302
  254. klaude_code-1.2.0/dev/finished/memory-tool/memory-tool-tasks.md +0 -74
  255. klaude_code-1.2.0/dev/finished/smart-truncation/smart-truncation-context.md +0 -177
  256. klaude_code-1.2.0/dev/finished/smart-truncation/smart-truncation-plan.md +0 -239
  257. klaude_code-1.2.0/dev/finished/smart-truncation/smart-truncation-tasks.md +0 -80
  258. klaude_code-1.2.0/dev/finished/web-fetch-agent/web-fetch-agent.md +0 -126
  259. klaude_code-1.2.0/docs/at_files.md +0 -38
  260. klaude_code-1.2.0/docs/read_edit_tool.md +0 -323
  261. klaude_code-1.2.0/pyproject.toml +0 -61
  262. klaude_code-1.2.0/pyrightconfig.json +0 -17
  263. klaude_code-1.2.0/src/klaude_code/cli/main.py +0 -727
  264. klaude_code-1.2.0/src/klaude_code/command/__init__.py +0 -39
  265. klaude_code-1.2.0/src/klaude_code/command/clear_cmd.py +0 -43
  266. klaude_code-1.2.0/src/klaude_code/command/command_abc.py +0 -56
  267. klaude_code-1.2.0/src/klaude_code/command/diff_cmd.py +0 -132
  268. klaude_code-1.2.0/src/klaude_code/command/export_cmd.py +0 -1149
  269. klaude_code-1.2.0/src/klaude_code/command/help_cmd.py +0 -49
  270. klaude_code-1.2.0/src/klaude_code/command/model_cmd.py +0 -71
  271. klaude_code-1.2.0/src/klaude_code/command/prompt-dev-doc.md +0 -45
  272. klaude_code-1.2.0/src/klaude_code/command/prompt-update-dev-doc.md +0 -55
  273. klaude_code-1.2.0/src/klaude_code/command/registry.py +0 -113
  274. klaude_code-1.2.0/src/klaude_code/command/terminal_setup_cmd.py +0 -251
  275. klaude_code-1.2.0/src/klaude_code/config/__init__.py +0 -49
  276. klaude_code-1.2.0/src/klaude_code/config/config.py +0 -178
  277. klaude_code-1.2.0/src/klaude_code/config/constants.py +0 -133
  278. klaude_code-1.2.0/src/klaude_code/config/list_model.py +0 -157
  279. klaude_code-1.2.0/src/klaude_code/config/select_model.py +0 -67
  280. klaude_code-1.2.0/src/klaude_code/core/__init__.py +0 -3
  281. klaude_code-1.2.0/src/klaude_code/core/agent.py +0 -667
  282. klaude_code-1.2.0/src/klaude_code/core/clipboard_manifest.py +0 -155
  283. klaude_code-1.2.0/src/klaude_code/core/executor.py +0 -455
  284. klaude_code-1.2.0/src/klaude_code/core/prompt/prompt-subagent-oracle.md +0 -23
  285. klaude_code-1.2.0/src/klaude_code/core/prompt/prompt-subagent-webfetch.md +0 -29
  286. klaude_code-1.2.0/src/klaude_code/core/prompt.py +0 -88
  287. klaude_code-1.2.0/src/klaude_code/core/reminders.py +0 -467
  288. klaude_code-1.2.0/src/klaude_code/core/sub_agent.py +0 -341
  289. klaude_code-1.2.0/src/klaude_code/core/tool/__init__.py +0 -39
  290. klaude_code-1.2.0/src/klaude_code/core/tool/apply_patch_tool.py +0 -206
  291. klaude_code-1.2.0/src/klaude_code/core/tool/apply_patch_tool_instructions.md +0 -75
  292. klaude_code-1.2.0/src/klaude_code/core/tool/bash_tool.py +0 -166
  293. klaude_code-1.2.0/src/klaude_code/core/tool/command_safety.py +0 -619
  294. klaude_code-1.2.0/src/klaude_code/core/tool/edit_tool.py +0 -310
  295. klaude_code-1.2.0/src/klaude_code/core/tool/memory_tool.py +0 -461
  296. klaude_code-1.2.0/src/klaude_code/core/tool/mermaid_tool.py +0 -96
  297. klaude_code-1.2.0/src/klaude_code/core/tool/multi_edit_tool.py +0 -236
  298. klaude_code-1.2.0/src/klaude_code/core/tool/read_tool.py +0 -335
  299. klaude_code-1.2.0/src/klaude_code/core/tool/skill_loader.py +0 -232
  300. klaude_code-1.2.0/src/klaude_code/core/tool/skill_tool.py +0 -120
  301. klaude_code-1.2.0/src/klaude_code/core/tool/sub_agent_tool.py +0 -84
  302. klaude_code-1.2.0/src/klaude_code/core/tool/tool_abc.py +0 -16
  303. klaude_code-1.2.0/src/klaude_code/core/tool/tool_context.py +0 -20
  304. klaude_code-1.2.0/src/klaude_code/core/tool/tool_registry.py +0 -98
  305. klaude_code-1.2.0/src/klaude_code/core/tool/tool_runner.py +0 -57
  306. klaude_code-1.2.0/src/klaude_code/core/tool/truncation.py +0 -140
  307. klaude_code-1.2.0/src/klaude_code/core/tool/web_fetch_tool.py +0 -167
  308. klaude_code-1.2.0/src/klaude_code/llm/__init__.py +0 -21
  309. klaude_code-1.2.0/src/klaude_code/llm/anthropic/client.py +0 -237
  310. klaude_code-1.2.0/src/klaude_code/llm/anthropic/input.py +0 -218
  311. klaude_code-1.2.0/src/klaude_code/llm/client.py +0 -28
  312. klaude_code-1.2.0/src/klaude_code/llm/openai_compatible/client.py +0 -253
  313. klaude_code-1.2.0/src/klaude_code/llm/openai_compatible/input.py +0 -140
  314. klaude_code-1.2.0/src/klaude_code/llm/openai_compatible/tool_call_accumulator.py +0 -80
  315. klaude_code-1.2.0/src/klaude_code/llm/openrouter/client.py +0 -449
  316. klaude_code-1.2.0/src/klaude_code/llm/openrouter/input.py +0 -190
  317. klaude_code-1.2.0/src/klaude_code/llm/registry.py +0 -22
  318. klaude_code-1.2.0/src/klaude_code/llm/responses/client.py +0 -237
  319. klaude_code-1.2.0/src/klaude_code/llm/responses/input.py +0 -170
  320. klaude_code-1.2.0/src/klaude_code/protocol/commands.py +0 -20
  321. klaude_code-1.2.0/src/klaude_code/protocol/events.py +0 -162
  322. klaude_code-1.2.0/src/klaude_code/protocol/model.py +0 -301
  323. klaude_code-1.2.0/src/klaude_code/protocol/op.py +0 -87
  324. klaude_code-1.2.0/src/klaude_code/session/__init__.py +0 -4
  325. klaude_code-1.2.0/src/klaude_code/session/selector.py +0 -76
  326. klaude_code-1.2.0/src/klaude_code/session/session.py +0 -410
  327. klaude_code-1.2.0/src/klaude_code/trace/__init__.py +0 -3
  328. klaude_code-1.2.0/src/klaude_code/trace/log.py +0 -162
  329. klaude_code-1.2.0/src/klaude_code/ui/__init__.py +0 -8
  330. klaude_code-1.2.0/src/klaude_code/ui/base/__init__.py +0 -1
  331. klaude_code-1.2.0/src/klaude_code/ui/base/debouncer.py +0 -42
  332. klaude_code-1.2.0/src/klaude_code/ui/base/display_abc.py +0 -36
  333. klaude_code-1.2.0/src/klaude_code/ui/base/exec_display.py +0 -37
  334. klaude_code-1.2.0/src/klaude_code/ui/base/input_abc.py +0 -20
  335. klaude_code-1.2.0/src/klaude_code/ui/base/stage_manager.py +0 -55
  336. klaude_code-1.2.0/src/klaude_code/ui/base/theme.py +0 -268
  337. klaude_code-1.2.0/src/klaude_code/ui/base/utils.py +0 -76
  338. klaude_code-1.2.0/src/klaude_code/ui/renderers/common.py +0 -24
  339. klaude_code-1.2.0/src/klaude_code/ui/renderers/developer.py +0 -103
  340. klaude_code-1.2.0/src/klaude_code/ui/renderers/errors.py +0 -16
  341. klaude_code-1.2.0/src/klaude_code/ui/renderers/metadata.py +0 -167
  342. klaude_code-1.2.0/src/klaude_code/ui/renderers/status.py +0 -229
  343. klaude_code-1.2.0/src/klaude_code/ui/renderers/sub_agent.py +0 -37
  344. klaude_code-1.2.0/src/klaude_code/ui/renderers/thinking.py +0 -7
  345. klaude_code-1.2.0/src/klaude_code/ui/renderers/tools.py +0 -334
  346. klaude_code-1.2.0/src/klaude_code/ui/renderers/user_input.py +0 -69
  347. klaude_code-1.2.0/src/klaude_code/ui/repl/__init__.py +0 -1
  348. klaude_code-1.2.0/src/klaude_code/ui/repl/display.py +0 -36
  349. klaude_code-1.2.0/src/klaude_code/ui/repl/event_handler.py +0 -247
  350. klaude_code-1.2.0/src/klaude_code/ui/repl/input.py +0 -745
  351. klaude_code-1.2.0/src/klaude_code/ui/repl/renderer.py +0 -302
  352. klaude_code-1.2.0/src/klaude_code/ui/rich_ext/__init__.py +0 -1
  353. klaude_code-1.2.0/src/klaude_code/ui/rich_ext/markdown.py +0 -308
  354. klaude_code-1.2.0/src/klaude_code/ui/rich_ext/quote.py +0 -34
  355. klaude_code-1.2.0/tests/conftest.py +0 -12
  356. klaude_code-1.2.0/tests/gpt-5-reasoning-input.log +0 -557
  357. klaude_code-1.2.0/tests/run_tests.py +0 -40
  358. klaude_code-1.2.0/tests/test_apply_patch.py +0 -305
  359. klaude_code-1.2.0/tests/test_apply_patch_tool.py +0 -114
  360. klaude_code-1.2.0/tests/test_clipboard_manifest.py +0 -38
  361. klaude_code-1.2.0/tests/test_command_safety.py +0 -283
  362. klaude_code-1.2.0/tests/test_memory_tool.py +0 -377
  363. klaude_code-1.2.0/tests/test_mermaid_tool.py +0 -43
  364. klaude_code-1.2.0/tests/test_model.py +0 -310
  365. klaude_code-1.2.0/tests/test_openrouter_reasoning.py +0 -120
  366. klaude_code-1.2.0/tests/test_read_edit_multiedit.py +0 -464
  367. klaude_code-1.2.0/tests/test_subagent_registry.py +0 -23
  368. klaude_code-1.2.0/tests/test_terminal_notifier.py +0 -56
  369. klaude_code-1.2.0/tests/test_web_fetch_tool.py +0 -137
  370. klaude_code-1.2.0/uv.lock +0 -899
  371. {klaude_code-1.2.0 → klaude_code-2.8.0}/src/klaude_code/__init__.py +0 -0
  372. {klaude_code-1.2.0 → klaude_code-2.8.0}/src/klaude_code/cli/__init__.py +0 -0
  373. {klaude_code-1.2.0/src/klaude_code/protocol → klaude_code-2.8.0/src/klaude_code/core}/__init__.py +0 -0
  374. /klaude_code-1.2.0/src/klaude_code/core/prompt/prompt-subagent.md → /klaude_code-2.8.0/src/klaude_code/core/prompts/prompt-sub-agent.md +0 -0
  375. {klaude_code-1.2.0/src/klaude_code/ui/renderers → klaude_code-2.8.0/src/klaude_code/core/tool/file}/__init__.py +0 -0
  376. {klaude_code-1.2.0/tests → klaude_code-2.8.0/src/klaude_code/core/tool/shell}/__init__.py +0 -0
  377. {klaude_code-1.2.0 → klaude_code-2.8.0}/src/klaude_code/llm/anthropic/__init__.py +0 -0
  378. {klaude_code-1.2.0 → klaude_code-2.8.0}/src/klaude_code/llm/openai_compatible/__init__.py +0 -0
  379. {klaude_code-1.2.0 → klaude_code-2.8.0}/src/klaude_code/llm/openrouter/__init__.py +0 -0
  380. {klaude_code-1.2.0 → klaude_code-2.8.0}/src/klaude_code/llm/responses/__init__.py +0 -0
@@ -0,0 +1,273 @@
1
+ Metadata-Version: 2.3
2
+ Name: klaude-code
3
+ Version: 2.8.0
4
+ Summary: Minimal code agent CLI
5
+ Requires-Dist: anthropic>=0.66.0
6
+ Requires-Dist: chardet>=5.2.0
7
+ Requires-Dist: ddgs>=9.9.3
8
+ Requires-Dist: diff-match-patch>=20241021
9
+ Requires-Dist: google-genai>=1.56.0
10
+ Requires-Dist: markdown-it-py>=4.0.0
11
+ Requires-Dist: openai>=1.102.0
12
+ Requires-Dist: prompt-toolkit>=3.0.52
13
+ Requires-Dist: pydantic>=2.11.7
14
+ Requires-Dist: pyyaml>=6.0.2
15
+ Requires-Dist: rich>=14.1.0
16
+ Requires-Dist: trafilatura>=2.0.0
17
+ Requires-Dist: typer>=0.17.3
18
+ Requires-Python: >=3.13
19
+ Description-Content-Type: text/markdown
20
+
21
+ # Klaude Code
22
+
23
+ Minimal code agent CLI.
24
+
25
+ ## Features
26
+ - **Multi-provider**: Anthropic Message API, OpenAI Responses API, OpenRouter, Claude Max OAuth and ChatGPT Codex OAuth etc.
27
+ - **Keep reasoning item in context**: Interleaved thinking support
28
+ - **Model-aware tools**: Claude Code tool set for Opus, `apply_patch` for GPT-5/Codex
29
+ - **Reminders**: Cooldown-based todo tracking, instruction reinforcement and external file change reminder
30
+ - **Sub-agents**: Task, Explore, Web, ImageGen
31
+ - **Structured sub-agent output**: Main agent defines JSON schema and get schema-compliant responses via constrained decoding
32
+ - **Recursive `@file` mentions**: Circular dependency protection, relative path resolution
33
+ - **External file sync**: Monitoring for external edits (linter, manual)
34
+ - **Interrupt handling**: Ctrl+C preserves partial responses and synthesizes tool cancellation results
35
+ - **Output truncation**: Large outputs saved to file system with snapshot links
36
+ - **Agent Skills**: Built-in + user + project Agent Skills (with implicit invocation by Skill tool or explicit invocation by typing `$`)
37
+ - **Sessions**: Resumable with `--continue`
38
+ - **Mermaid diagrams**: Terminal image preview and Interactive local HTML viewer with zoom, pan, and SVG export
39
+ - **Extras**: Slash commands, sub-agents, image paste, terminal notifications, auto-theming
40
+
41
+ ## Installation
42
+
43
+ ```bash
44
+ uv tool install klaude-code
45
+ ```
46
+
47
+ To update:
48
+
49
+ ```bash
50
+ uv tool upgrade klaude-code
51
+ ```
52
+
53
+ Or use the built-in command:
54
+
55
+ ```bash
56
+ klaude upgrade
57
+ ```
58
+
59
+ ## Usage
60
+
61
+ ```bash
62
+ klaude [--model [<name>]] [--continue] [--resume [<id>]]
63
+ ```
64
+
65
+ **Options:**
66
+ - `--model`/`-m`: Choose a model.
67
+ - `--model` (no value): opens the interactive selector.
68
+ - `--model <value>`: resolves `<value>` to a single model; if it can't, it opens the interactive selector filtered by `<value>`.
69
+ - `--continue`/`-c`: Resume the most recent session.
70
+ - `--resume`/`-r`: Resume a session.
71
+ - `--resume` (no value): select a session to resume for this project.
72
+ - `--resume <id>`: resume a session by its ID directly.
73
+ - `--vanilla`: Minimal mode with only basic tools (Bash, Read, Edit, Write) and no system prompts.
74
+
75
+ **Model selection behavior:**
76
+ - Default: uses `main_model` from config.
77
+ - `--model` (no value): always prompts you to pick.
78
+ - `--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).
79
+
80
+ **Debug Options:**
81
+ - `--debug`/`-d`: Enable debug mode with verbose logging and LLM trace.
82
+ - `--debug-filter`: Filter debug output by type (comma-separated).
83
+
84
+
85
+ ### Configuration
86
+
87
+ #### Quick Start (Zero Config)
88
+
89
+ Klaude comes with built-in provider configurations. Just set an API key environment variable and start using it:
90
+
91
+ ```bash
92
+ # Pick one (or more) of these:
93
+ export ANTHROPIC_API_KEY=sk-ant-xxx # Claude models
94
+ export OPENAI_API_KEY=sk-xxx # GPT models
95
+ export OPENROUTER_API_KEY=sk-or-xxx # OpenRouter (multi-provider)
96
+ export DEEPSEEK_API_KEY=sk-xxx # DeepSeek models
97
+ export MOONSHOT_API_KEY=sk-xxx # Moonshot/Kimi models
98
+
99
+ # Then just run:
100
+ klaude
101
+ ```
102
+
103
+ On first run, you'll be prompted to select a model. Your choice is saved as `main_model`.
104
+
105
+ #### Built-in Providers
106
+
107
+ | Provider | Env Variable | Models |
108
+ |-------------|-----------------------|-------------------------------------------------------------------------------|
109
+ | anthropic | `ANTHROPIC_API_KEY` | sonnet, opus |
110
+ | claude | N/A (OAuth) | sonnet@claude, opus@claude (requires Claude Pro/Max subscription) |
111
+ | openai | `OPENAI_API_KEY` | gpt-5.2 |
112
+ | openrouter | `OPENROUTER_API_KEY` | gpt-5.2, gpt-5.2-fast, gpt-5.1-codex-max, sonnet, opus, haiku, kimi, gemini-* |
113
+ | deepseek | `DEEPSEEK_API_KEY` | deepseek |
114
+ | moonshot | `MOONSHOT_API_KEY` | kimi@moonshot |
115
+ | codex | N/A (OAuth) | gpt-5.2-codex (requires ChatGPT Pro subscription) |
116
+
117
+ List all configured providers and models:
118
+
119
+ ```bash
120
+ klaude list
121
+ ```
122
+
123
+ Models from providers without a valid API key are shown as dimmed/unavailable.
124
+
125
+ #### Authentication
126
+
127
+ Use the auth command to configure API keys or login to subscription-based providers:
128
+
129
+ ```bash
130
+ # Interactive provider selection
131
+ klaude auth login
132
+
133
+ # Configure API keys
134
+ klaude auth login anthropic # Set ANTHROPIC_API_KEY
135
+ klaude auth login openai # Set OPENAI_API_KEY
136
+ klaude auth login google # Set GOOGLE_API_KEY
137
+ klaude auth login openrouter # Set OPENROUTER_API_KEY
138
+ klaude auth login deepseek # Set DEEPSEEK_API_KEY
139
+ klaude auth login moonshot # Set MOONSHOT_API_KEY
140
+
141
+ # OAuth login for subscription-based providers
142
+ klaude auth login claude # Claude Pro/Max subscription
143
+ klaude auth login codex # ChatGPT Pro subscription
144
+ ```
145
+
146
+ API keys are stored in `~/.klaude/klaude-auth.json` and used as fallback when environment variables are not set.
147
+
148
+ To logout from OAuth providers:
149
+
150
+ ```bash
151
+ klaude auth logout claude
152
+ klaude auth logout codex
153
+ ```
154
+
155
+ #### Custom Configuration
156
+
157
+ User config file: `~/.klaude/klaude-config.yaml`
158
+
159
+ Open in editor:
160
+
161
+ ```bash
162
+ klaude conf
163
+ ```
164
+
165
+ ##### Model Configuration
166
+
167
+ You can add custom models to built-in providers or define new ones. Configuration is inherited from built-in providers by matching `provider_name`.
168
+
169
+ ```yaml
170
+ # ~/.klaude/klaude-config.yaml
171
+ provider_list:
172
+ # Add/Override models for built-in OpenRouter provider
173
+ - provider_name: openrouter
174
+ model_list:
175
+ - model_name: qwen-coder
176
+ model_id: qwen/qwen-2.5-coder-32b-instruct
177
+ context_limit: 131072
178
+ cost: { input: 0.3, output: 0.9 }
179
+ - model_name: sonnet # Override built-in sonnet params
180
+ model_id: anthropic/claude-3.5-sonnet
181
+ context_limit: 200000
182
+
183
+ # Add a completely new provider
184
+ - provider_name: my-azure
185
+ protocol: openai
186
+ api_key: ${AZURE_OPENAI_KEY}
187
+ base_url: https://my-instance.openai.azure.com/
188
+ is_azure: true
189
+ azure_api_version: "2024-02-15-preview"
190
+ model_list:
191
+ - model_name: gpt-4
192
+ model_id: gpt-4-deploy-name
193
+ context_limit: 128000
194
+ ```
195
+
196
+ **Key Tips:**
197
+ - **Merging**: If `provider_name` matches a built-in provider, settings like `protocol` and `api_key` are inherited.
198
+ - **Overriding**: Use the same `model_name` as a built-in model to override its parameters.
199
+ - **Environment Variables**: Use `${VAR_NAME}` syntax for secrets.
200
+
201
+ ##### Supported Protocols
202
+
203
+ - `anthropic` - Anthropic Messages API
204
+ - `claude_oauth` - Claude OAuth (for Claude Pro/Max subscribers)
205
+ - `openai` - OpenAI Chat Completion API
206
+ - `responses` - OpenAI Responses API (for o-series, GPT-5, Codex)
207
+ - `codex_oauth` - OpenAI Codex CLI (OAuth-based, for ChatGPT Pro subscribers)
208
+ - `openrouter` - OpenRouter API (handling `reasoning_details` for interleaved thinking)
209
+ - `google` - Google Gemini API
210
+ - `bedrock` - AWS Bedrock for Claude(uses AWS credentials instead of api_key)
211
+
212
+ List configured providers and models:
213
+
214
+ ```bash
215
+ klaude list
216
+ ```
217
+
218
+ ### Cost Tracking
219
+
220
+ View aggregated usage statistics across all sessions:
221
+
222
+ ```bash
223
+ # Show all historical usage data
224
+ klaude cost
225
+
226
+ # Show usage for the last 7 days only
227
+ klaude cost --days 7
228
+ ```
229
+
230
+ ### Slash Commands
231
+
232
+ Inside the interactive session (`klaude`), use these commands to streamline your workflow:
233
+
234
+ - `/model` - Switch the active LLM during the session.
235
+ - `/thinking` - Configure model thinking/reasoning level.
236
+ - `/clear` - Clear the current conversation context.
237
+ - `/copy` - Copy last assistant message.
238
+ - `/status` - Show session usage statistics (cost, tokens, model breakdown).
239
+ - `/resume` - Select and resume a previous session.
240
+ - `/fork-session` - Fork current session to a new session ID (supports interactive fork point selection).
241
+ - `/export` - Export last assistant message to a temp Markdown file.
242
+ - `/export-online` - Export and deploy session to surge.sh as a static webpage.
243
+ - `/debug [filters]` - Toggle debug mode and configure debug filters.
244
+ - `/init` - Bootstrap a new project structure or module.
245
+ - `/dev-doc [feature]` - Generate a comprehensive execution plan for a feature.
246
+ - `/terminal-setup` - Configure terminal for Shift+Enter support.
247
+ - `/help` - List all available commands.
248
+
249
+
250
+ ### Input Shortcuts
251
+
252
+ | Key | Action |
253
+ | -------------------- | ------------------------------------------- |
254
+ | `Enter` | Submit input |
255
+ | `Shift+Enter` | Insert newline (requires `/terminal-setup`) |
256
+ | `Ctrl+J` | Insert newline |
257
+ | `Ctrl+L` | Open model picker overlay |
258
+ | `Ctrl+T` | Open thinking level picker overlay |
259
+ | `Ctrl+V` | Paste image from clipboard |
260
+ | `Left/Right` | Move cursor (wraps across lines) |
261
+ | `Backspace` | Delete character or selected text |
262
+ | `c` (with selection) | Copy selected text to clipboard |
263
+
264
+ ### Sub-Agents
265
+
266
+ The main agent can spawn specialized sub-agents for specific tasks:
267
+
268
+ | Sub-Agent | Purpose |
269
+ |-----------|---------|
270
+ | **Explore** | Fast codebase exploration - find files, search code, answer questions about the codebase |
271
+ | **Task** | Handle complex multi-step tasks autonomously |
272
+ | **WebAgent** | Search the web, fetch pages, and analyze content |
273
+ | **ImageGen** | Generate images from text prompts via OpenRouter Nano Banana Pro |
@@ -0,0 +1,253 @@
1
+ # Klaude Code
2
+
3
+ Minimal code agent CLI.
4
+
5
+ ## Features
6
+ - **Multi-provider**: Anthropic Message API, OpenAI Responses API, OpenRouter, Claude Max OAuth and ChatGPT Codex OAuth etc.
7
+ - **Keep reasoning item in context**: Interleaved thinking support
8
+ - **Model-aware tools**: Claude Code tool set for Opus, `apply_patch` for GPT-5/Codex
9
+ - **Reminders**: Cooldown-based todo tracking, instruction reinforcement and external file change reminder
10
+ - **Sub-agents**: Task, Explore, Web, ImageGen
11
+ - **Structured sub-agent output**: Main agent defines JSON schema and get schema-compliant responses via constrained decoding
12
+ - **Recursive `@file` mentions**: Circular dependency protection, relative path resolution
13
+ - **External file sync**: Monitoring for external edits (linter, manual)
14
+ - **Interrupt handling**: Ctrl+C preserves partial responses and synthesizes tool cancellation results
15
+ - **Output truncation**: Large outputs saved to file system with snapshot links
16
+ - **Agent Skills**: Built-in + user + project Agent Skills (with implicit invocation by Skill tool or explicit invocation by typing `$`)
17
+ - **Sessions**: Resumable with `--continue`
18
+ - **Mermaid diagrams**: Terminal image preview and Interactive local HTML viewer with zoom, pan, and SVG export
19
+ - **Extras**: Slash commands, sub-agents, image paste, terminal notifications, auto-theming
20
+
21
+ ## Installation
22
+
23
+ ```bash
24
+ uv tool install klaude-code
25
+ ```
26
+
27
+ To update:
28
+
29
+ ```bash
30
+ uv tool upgrade klaude-code
31
+ ```
32
+
33
+ Or use the built-in command:
34
+
35
+ ```bash
36
+ klaude upgrade
37
+ ```
38
+
39
+ ## Usage
40
+
41
+ ```bash
42
+ klaude [--model [<name>]] [--continue] [--resume [<id>]]
43
+ ```
44
+
45
+ **Options:**
46
+ - `--model`/`-m`: Choose a model.
47
+ - `--model` (no value): opens the interactive selector.
48
+ - `--model <value>`: resolves `<value>` to a single model; if it can't, it opens the interactive selector filtered by `<value>`.
49
+ - `--continue`/`-c`: Resume the most recent session.
50
+ - `--resume`/`-r`: Resume a session.
51
+ - `--resume` (no value): select a session to resume for this project.
52
+ - `--resume <id>`: resume a session by its ID directly.
53
+ - `--vanilla`: Minimal mode with only basic tools (Bash, Read, Edit, Write) and no system prompts.
54
+
55
+ **Model selection behavior:**
56
+ - Default: uses `main_model` from config.
57
+ - `--model` (no value): always prompts you to pick.
58
+ - `--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).
59
+
60
+ **Debug Options:**
61
+ - `--debug`/`-d`: Enable debug mode with verbose logging and LLM trace.
62
+ - `--debug-filter`: Filter debug output by type (comma-separated).
63
+
64
+
65
+ ### Configuration
66
+
67
+ #### Quick Start (Zero Config)
68
+
69
+ Klaude comes with built-in provider configurations. Just set an API key environment variable and start using it:
70
+
71
+ ```bash
72
+ # Pick one (or more) of these:
73
+ export ANTHROPIC_API_KEY=sk-ant-xxx # Claude models
74
+ export OPENAI_API_KEY=sk-xxx # GPT models
75
+ export OPENROUTER_API_KEY=sk-or-xxx # OpenRouter (multi-provider)
76
+ export DEEPSEEK_API_KEY=sk-xxx # DeepSeek models
77
+ export MOONSHOT_API_KEY=sk-xxx # Moonshot/Kimi models
78
+
79
+ # Then just run:
80
+ klaude
81
+ ```
82
+
83
+ On first run, you'll be prompted to select a model. Your choice is saved as `main_model`.
84
+
85
+ #### Built-in Providers
86
+
87
+ | Provider | Env Variable | Models |
88
+ |-------------|-----------------------|-------------------------------------------------------------------------------|
89
+ | anthropic | `ANTHROPIC_API_KEY` | sonnet, opus |
90
+ | claude | N/A (OAuth) | sonnet@claude, opus@claude (requires Claude Pro/Max subscription) |
91
+ | openai | `OPENAI_API_KEY` | gpt-5.2 |
92
+ | openrouter | `OPENROUTER_API_KEY` | gpt-5.2, gpt-5.2-fast, gpt-5.1-codex-max, sonnet, opus, haiku, kimi, gemini-* |
93
+ | deepseek | `DEEPSEEK_API_KEY` | deepseek |
94
+ | moonshot | `MOONSHOT_API_KEY` | kimi@moonshot |
95
+ | codex | N/A (OAuth) | gpt-5.2-codex (requires ChatGPT Pro subscription) |
96
+
97
+ List all configured providers and models:
98
+
99
+ ```bash
100
+ klaude list
101
+ ```
102
+
103
+ Models from providers without a valid API key are shown as dimmed/unavailable.
104
+
105
+ #### Authentication
106
+
107
+ Use the auth command to configure API keys or login to subscription-based providers:
108
+
109
+ ```bash
110
+ # Interactive provider selection
111
+ klaude auth login
112
+
113
+ # Configure API keys
114
+ klaude auth login anthropic # Set ANTHROPIC_API_KEY
115
+ klaude auth login openai # Set OPENAI_API_KEY
116
+ klaude auth login google # Set GOOGLE_API_KEY
117
+ klaude auth login openrouter # Set OPENROUTER_API_KEY
118
+ klaude auth login deepseek # Set DEEPSEEK_API_KEY
119
+ klaude auth login moonshot # Set MOONSHOT_API_KEY
120
+
121
+ # OAuth login for subscription-based providers
122
+ klaude auth login claude # Claude Pro/Max subscription
123
+ klaude auth login codex # ChatGPT Pro subscription
124
+ ```
125
+
126
+ API keys are stored in `~/.klaude/klaude-auth.json` and used as fallback when environment variables are not set.
127
+
128
+ To logout from OAuth providers:
129
+
130
+ ```bash
131
+ klaude auth logout claude
132
+ klaude auth logout codex
133
+ ```
134
+
135
+ #### Custom Configuration
136
+
137
+ User config file: `~/.klaude/klaude-config.yaml`
138
+
139
+ Open in editor:
140
+
141
+ ```bash
142
+ klaude conf
143
+ ```
144
+
145
+ ##### Model Configuration
146
+
147
+ You can add custom models to built-in providers or define new ones. Configuration is inherited from built-in providers by matching `provider_name`.
148
+
149
+ ```yaml
150
+ # ~/.klaude/klaude-config.yaml
151
+ provider_list:
152
+ # Add/Override models for built-in OpenRouter provider
153
+ - provider_name: openrouter
154
+ model_list:
155
+ - model_name: qwen-coder
156
+ model_id: qwen/qwen-2.5-coder-32b-instruct
157
+ context_limit: 131072
158
+ cost: { input: 0.3, output: 0.9 }
159
+ - model_name: sonnet # Override built-in sonnet params
160
+ model_id: anthropic/claude-3.5-sonnet
161
+ context_limit: 200000
162
+
163
+ # Add a completely new provider
164
+ - provider_name: my-azure
165
+ protocol: openai
166
+ api_key: ${AZURE_OPENAI_KEY}
167
+ base_url: https://my-instance.openai.azure.com/
168
+ is_azure: true
169
+ azure_api_version: "2024-02-15-preview"
170
+ model_list:
171
+ - model_name: gpt-4
172
+ model_id: gpt-4-deploy-name
173
+ context_limit: 128000
174
+ ```
175
+
176
+ **Key Tips:**
177
+ - **Merging**: If `provider_name` matches a built-in provider, settings like `protocol` and `api_key` are inherited.
178
+ - **Overriding**: Use the same `model_name` as a built-in model to override its parameters.
179
+ - **Environment Variables**: Use `${VAR_NAME}` syntax for secrets.
180
+
181
+ ##### Supported Protocols
182
+
183
+ - `anthropic` - Anthropic Messages API
184
+ - `claude_oauth` - Claude OAuth (for Claude Pro/Max subscribers)
185
+ - `openai` - OpenAI Chat Completion API
186
+ - `responses` - OpenAI Responses API (for o-series, GPT-5, Codex)
187
+ - `codex_oauth` - OpenAI Codex CLI (OAuth-based, for ChatGPT Pro subscribers)
188
+ - `openrouter` - OpenRouter API (handling `reasoning_details` for interleaved thinking)
189
+ - `google` - Google Gemini API
190
+ - `bedrock` - AWS Bedrock for Claude(uses AWS credentials instead of api_key)
191
+
192
+ List configured providers and models:
193
+
194
+ ```bash
195
+ klaude list
196
+ ```
197
+
198
+ ### Cost Tracking
199
+
200
+ View aggregated usage statistics across all sessions:
201
+
202
+ ```bash
203
+ # Show all historical usage data
204
+ klaude cost
205
+
206
+ # Show usage for the last 7 days only
207
+ klaude cost --days 7
208
+ ```
209
+
210
+ ### Slash Commands
211
+
212
+ Inside the interactive session (`klaude`), use these commands to streamline your workflow:
213
+
214
+ - `/model` - Switch the active LLM during the session.
215
+ - `/thinking` - Configure model thinking/reasoning level.
216
+ - `/clear` - Clear the current conversation context.
217
+ - `/copy` - Copy last assistant message.
218
+ - `/status` - Show session usage statistics (cost, tokens, model breakdown).
219
+ - `/resume` - Select and resume a previous session.
220
+ - `/fork-session` - Fork current session to a new session ID (supports interactive fork point selection).
221
+ - `/export` - Export last assistant message to a temp Markdown file.
222
+ - `/export-online` - Export and deploy session to surge.sh as a static webpage.
223
+ - `/debug [filters]` - Toggle debug mode and configure debug filters.
224
+ - `/init` - Bootstrap a new project structure or module.
225
+ - `/dev-doc [feature]` - Generate a comprehensive execution plan for a feature.
226
+ - `/terminal-setup` - Configure terminal for Shift+Enter support.
227
+ - `/help` - List all available commands.
228
+
229
+
230
+ ### Input Shortcuts
231
+
232
+ | Key | Action |
233
+ | -------------------- | ------------------------------------------- |
234
+ | `Enter` | Submit input |
235
+ | `Shift+Enter` | Insert newline (requires `/terminal-setup`) |
236
+ | `Ctrl+J` | Insert newline |
237
+ | `Ctrl+L` | Open model picker overlay |
238
+ | `Ctrl+T` | Open thinking level picker overlay |
239
+ | `Ctrl+V` | Paste image from clipboard |
240
+ | `Left/Right` | Move cursor (wraps across lines) |
241
+ | `Backspace` | Delete character or selected text |
242
+ | `c` (with selection) | Copy selected text to clipboard |
243
+
244
+ ### Sub-Agents
245
+
246
+ The main agent can spawn specialized sub-agents for specific tasks:
247
+
248
+ | Sub-Agent | Purpose |
249
+ |-----------|---------|
250
+ | **Explore** | Fast codebase exploration - find files, search code, answer questions about the codebase |
251
+ | **Task** | Handle complex multi-step tasks autonomously |
252
+ | **WebAgent** | Search the web, fetch pages, and analyze content |
253
+ | **ImageGen** | Generate images from text prompts via OpenRouter Nano Banana Pro |
@@ -0,0 +1,106 @@
1
+ [build-system]
2
+ requires = ["uv_build>=0.8.5,<0.9.0"]
3
+ build-backend = "uv_build"
4
+
5
+ [project]
6
+ name = "klaude-code"
7
+ version = "2.8.0"
8
+ description = "Minimal code agent CLI"
9
+ readme = "README.md"
10
+ requires-python = ">=3.13"
11
+ dependencies = [
12
+ "anthropic>=0.66.0",
13
+ "chardet>=5.2.0",
14
+ "ddgs>=9.9.3",
15
+ "diff-match-patch>=20241021",
16
+ "google-genai>=1.56.0",
17
+ "markdown-it-py>=4.0.0",
18
+ "openai>=1.102.0",
19
+ "prompt-toolkit>=3.0.52",
20
+ "pydantic>=2.11.7",
21
+ "pyyaml>=6.0.2",
22
+ "rich>=14.1.0",
23
+ "trafilatura>=2.0.0",
24
+ "typer>=0.17.3",
25
+ ]
26
+
27
+ [project.scripts]
28
+ klaude = "klaude_code.cli.main:app"
29
+ klaude-code = "klaude_code.cli.main:app"
30
+
31
+ [tool.uv.build-backend]
32
+ module-name = "klaude_code"
33
+
34
+ [dependency-groups]
35
+ dev = [
36
+ "hypothesis>=6.148.8",
37
+ "import-linter>=2.6",
38
+ "pyright>=1.1.407",
39
+ "pytest>=8.4.1",
40
+ "pytest-cov>=7.0.0",
41
+ "ty>=0.0.8",
42
+ ]
43
+
44
+
45
+
46
+ [tool.pytest.ini_options]
47
+ markers = [
48
+ "network: marks tests as requiring network access (deselect with '-m \"not network\"')",
49
+ ]
50
+
51
+ [tool.ruff]
52
+ line-length = 120
53
+ src = ["src"]
54
+
55
+ [tool.ruff.lint]
56
+ select = ["E", "F", "B", "I", "UP", "SIM", "RUF"]
57
+ ignore = ["RUF001", "RUF002", "RUF003", "E501"]
58
+
59
+ [tool.ruff.lint.isort]
60
+ known-first-party = ["klaude_code"]
61
+
62
+ [tool.pyright]
63
+ typeCheckingMode = "strict"
64
+ pythonVersion = "3.13"
65
+ venvPath = "."
66
+ venv = ".venv"
67
+ extraPaths = ["src"]
68
+ reportMissingImports = "warning"
69
+ reportMissingModuleSource = "warning"
70
+ exclude = [".venv/"]
71
+
72
+ [[tool.pyright.executionEnvironments]]
73
+ root = "."
74
+ extraPaths = ["src"]
75
+
76
+ [tool.ty.environment]
77
+ python-version = "3.13"
78
+
79
+ [tool.ty.src]
80
+ include = [
81
+ "src",
82
+ "tests",
83
+ ]
84
+
85
+ [tool.importlinter]
86
+ root_packages = ["klaude_code"]
87
+ include_external_packages = false
88
+
89
+ [[tool.importlinter.contracts]]
90
+ name = "Layered architecture"
91
+ type = "layers"
92
+ layers = [
93
+ "klaude_code.cli",
94
+ "klaude_code.tui",
95
+ "klaude_code.app",
96
+ "klaude_code.ui",
97
+ "klaude_code.core",
98
+ "klaude_code.skill",
99
+ "klaude_code.session",
100
+ "klaude_code.config",
101
+ "klaude_code.llm",
102
+ "klaude_code.protocol",
103
+ "klaude_code.auth",
104
+ "klaude_code.log",
105
+ "klaude_code.const",
106
+ ]
@@ -0,0 +1,11 @@
1
+ """Application-layer runtime helpers.
2
+
3
+ This package coordinates core execution (Executor) with frontend displays.
4
+ Terminal-specific rendering and input handling live in `klaude_code.tui`.
5
+ """
6
+
7
+ from .runtime import AppInitConfig
8
+
9
+ __all__ = [
10
+ "AppInitConfig",
11
+ ]