klaude-code 0.1.0__tar.gz → 1.2.11__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 (238) hide show
  1. klaude_code-1.2.11/PKG-INFO +175 -0
  2. klaude_code-1.2.11/README.md +158 -0
  3. klaude_code-1.2.11/pyproject.toml +78 -0
  4. klaude_code-1.2.11/src/klaude_code/auth/__init__.py +24 -0
  5. klaude_code-1.2.11/src/klaude_code/auth/codex/__init__.py +20 -0
  6. klaude_code-1.2.11/src/klaude_code/auth/codex/exceptions.py +17 -0
  7. klaude_code-1.2.11/src/klaude_code/auth/codex/jwt_utils.py +45 -0
  8. klaude_code-1.2.11/src/klaude_code/auth/codex/oauth.py +229 -0
  9. klaude_code-1.2.11/src/klaude_code/auth/codex/token_manager.py +84 -0
  10. klaude_code-1.2.11/src/klaude_code/cli/__init__.py +1 -0
  11. klaude_code-1.2.11/src/klaude_code/cli/main.py +367 -0
  12. klaude_code-1.2.11/src/klaude_code/cli/runtime.py +331 -0
  13. klaude_code-1.2.11/src/klaude_code/cli/session_cmd.py +80 -0
  14. klaude_code-1.2.11/src/klaude_code/command/__init__.py +90 -0
  15. klaude_code-1.2.11/src/klaude_code/command/clear_cmd.py +24 -0
  16. klaude_code-1.2.11/src/klaude_code/command/command_abc.py +95 -0
  17. klaude_code-1.2.11/src/klaude_code/command/diff_cmd.py +141 -0
  18. klaude_code-1.2.11/src/klaude_code/command/export_cmd.py +89 -0
  19. klaude_code-1.2.11/src/klaude_code/command/help_cmd.py +55 -0
  20. klaude_code-1.2.11/src/klaude_code/command/model_cmd.py +46 -0
  21. klaude_code-1.2.11/src/klaude_code/command/prompt-deslop.md +14 -0
  22. klaude_code-1.2.11/src/klaude_code/command/prompt-dev-docs-update.md +56 -0
  23. klaude_code-1.2.11/src/klaude_code/command/prompt-dev-docs.md +46 -0
  24. klaude_code-1.2.11/src/klaude_code/command/prompt-init.md +45 -0
  25. klaude_code-1.2.11/src/klaude_code/command/prompt_command.py +74 -0
  26. klaude_code-1.2.11/src/klaude_code/command/refresh_cmd.py +47 -0
  27. klaude_code-1.2.11/src/klaude_code/command/registry.py +122 -0
  28. klaude_code-1.2.11/src/klaude_code/command/release_notes_cmd.py +89 -0
  29. klaude_code-1.2.11/src/klaude_code/command/status_cmd.py +161 -0
  30. klaude_code-1.2.11/src/klaude_code/command/terminal_setup_cmd.py +255 -0
  31. klaude_code-1.2.11/src/klaude_code/config/__init__.py +11 -0
  32. klaude_code-1.2.11/src/klaude_code/config/config.py +177 -0
  33. klaude_code-1.2.11/src/klaude_code/config/list_model.py +215 -0
  34. klaude_code-1.2.11/src/klaude_code/config/select_model.py +67 -0
  35. klaude_code-1.2.11/src/klaude_code/const/__init__.py +133 -0
  36. klaude_code-1.2.11/src/klaude_code/core/__init__.py +0 -0
  37. klaude_code-1.2.11/src/klaude_code/core/agent.py +212 -0
  38. klaude_code-1.2.11/src/klaude_code/core/executor.py +482 -0
  39. klaude_code-1.2.11/src/klaude_code/core/manager/__init__.py +19 -0
  40. klaude_code-1.2.11/src/klaude_code/core/manager/agent_manager.py +132 -0
  41. klaude_code-1.2.11/src/klaude_code/core/manager/llm_clients.py +67 -0
  42. klaude_code-1.2.11/src/klaude_code/core/manager/llm_clients_builder.py +58 -0
  43. klaude_code-1.2.11/src/klaude_code/core/manager/sub_agent_manager.py +90 -0
  44. klaude_code-1.2.11/src/klaude_code/core/prompt.py +95 -0
  45. klaude_code-1.2.11/src/klaude_code/core/prompts/prompt-claude-code.md +87 -0
  46. klaude_code-1.2.11/src/klaude_code/core/prompts/prompt-codex-gpt-5-1-codex-max.md +117 -0
  47. klaude_code-1.2.11/src/klaude_code/core/prompts/prompt-codex-gpt-5-1.md +331 -0
  48. klaude_code-1.2.11/src/klaude_code/core/prompts/prompt-gemini.md +43 -0
  49. klaude_code-1.2.11/src/klaude_code/core/prompts/prompt-minimal.md +12 -0
  50. klaude_code-1.2.11/src/klaude_code/core/prompts/prompt-subagent-explore.md +29 -0
  51. klaude_code-1.2.11/src/klaude_code/core/prompts/prompt-subagent-oracle.md +23 -0
  52. klaude_code-1.2.11/src/klaude_code/core/prompts/prompt-subagent-webfetch.md +46 -0
  53. klaude_code-1.2.11/src/klaude_code/core/prompts/prompt-subagent.md +8 -0
  54. klaude_code-1.2.11/src/klaude_code/core/reminders.py +451 -0
  55. klaude_code-1.2.11/src/klaude_code/core/task.py +257 -0
  56. klaude_code-1.2.11/src/klaude_code/core/tool/__init__.py +77 -0
  57. klaude_code-1.2.11/src/klaude_code/core/tool/file/__init__.py +0 -0
  58. klaude_code-1.2.11/src/klaude_code/core/tool/file/_utils.py +30 -0
  59. klaude_code-1.2.11/src/klaude_code/core/tool/file/apply_patch.py +492 -0
  60. klaude_code-1.2.11/src/klaude_code/core/tool/file/apply_patch_tool.md +1 -0
  61. klaude_code-1.2.11/src/klaude_code/core/tool/file/apply_patch_tool.py +204 -0
  62. klaude_code-1.2.11/src/klaude_code/core/tool/file/edit_tool.md +9 -0
  63. klaude_code-1.2.11/src/klaude_code/core/tool/file/edit_tool.py +249 -0
  64. klaude_code-1.2.11/src/klaude_code/core/tool/file/multi_edit_tool.md +42 -0
  65. klaude_code-1.2.11/src/klaude_code/core/tool/file/multi_edit_tool.py +174 -0
  66. klaude_code-1.2.11/src/klaude_code/core/tool/file/read_tool.md +14 -0
  67. klaude_code-1.2.11/src/klaude_code/core/tool/file/read_tool.py +314 -0
  68. klaude_code-1.2.11/src/klaude_code/core/tool/file/write_tool.md +8 -0
  69. klaude_code-1.2.11/src/klaude_code/core/tool/file/write_tool.py +121 -0
  70. klaude_code-1.2.11/src/klaude_code/core/tool/memory/__init__.py +5 -0
  71. klaude_code-1.2.11/src/klaude_code/core/tool/memory/memory_tool.md +20 -0
  72. klaude_code-1.2.11/src/klaude_code/core/tool/memory/memory_tool.py +462 -0
  73. klaude_code-1.2.11/src/klaude_code/core/tool/memory/skill_loader.py +246 -0
  74. klaude_code-1.2.11/src/klaude_code/core/tool/memory/skill_tool.md +24 -0
  75. klaude_code-1.2.11/src/klaude_code/core/tool/memory/skill_tool.py +110 -0
  76. klaude_code-1.2.11/src/klaude_code/core/tool/shell/__init__.py +0 -0
  77. klaude_code-1.2.11/src/klaude_code/core/tool/shell/bash_tool.md +43 -0
  78. klaude_code-1.2.11/src/klaude_code/core/tool/shell/bash_tool.py +123 -0
  79. klaude_code-1.2.11/src/klaude_code/core/tool/shell/command_safety.py +363 -0
  80. klaude_code-1.2.11/src/klaude_code/core/tool/sub_agent_tool.py +84 -0
  81. klaude_code-1.2.11/src/klaude_code/core/tool/todo/__init__.py +0 -0
  82. klaude_code-1.2.11/src/klaude_code/core/tool/todo/todo_write_tool.md +25 -0
  83. klaude_code-1.2.11/src/klaude_code/core/tool/todo/todo_write_tool.py +121 -0
  84. klaude_code-1.2.11/src/klaude_code/core/tool/todo/todo_write_tool_raw.md +182 -0
  85. klaude_code-1.2.11/src/klaude_code/core/tool/todo/update_plan_tool.md +3 -0
  86. klaude_code-1.2.11/src/klaude_code/core/tool/todo/update_plan_tool.py +104 -0
  87. klaude_code-1.2.11/src/klaude_code/core/tool/tool_abc.py +25 -0
  88. klaude_code-1.2.11/src/klaude_code/core/tool/tool_context.py +123 -0
  89. klaude_code-1.2.11/src/klaude_code/core/tool/tool_registry.py +77 -0
  90. klaude_code-1.2.11/src/klaude_code/core/tool/tool_runner.py +249 -0
  91. klaude_code-1.2.11/src/klaude_code/core/tool/truncation.py +174 -0
  92. klaude_code-1.2.11/src/klaude_code/core/tool/web/__init__.py +0 -0
  93. klaude_code-1.2.11/src/klaude_code/core/tool/web/mermaid_tool.md +21 -0
  94. klaude_code-1.2.11/src/klaude_code/core/tool/web/mermaid_tool.py +73 -0
  95. klaude_code-1.2.11/src/klaude_code/core/tool/web/web_fetch_tool.md +8 -0
  96. klaude_code-1.2.11/src/klaude_code/core/tool/web/web_fetch_tool.py +159 -0
  97. klaude_code-1.2.11/src/klaude_code/core/turn.py +248 -0
  98. klaude_code-1.2.11/src/klaude_code/llm/__init__.py +13 -0
  99. klaude_code-1.2.11/src/klaude_code/llm/anthropic/__init__.py +3 -0
  100. klaude_code-1.2.11/src/klaude_code/llm/anthropic/client.py +191 -0
  101. klaude_code-1.2.11/src/klaude_code/llm/anthropic/input.py +215 -0
  102. klaude_code-1.2.11/src/klaude_code/llm/client.py +49 -0
  103. klaude_code-1.2.11/src/klaude_code/llm/codex/__init__.py +5 -0
  104. klaude_code-1.2.11/src/klaude_code/llm/codex/client.py +130 -0
  105. klaude_code-1.2.11/src/klaude_code/llm/input_common.py +233 -0
  106. klaude_code-1.2.11/src/klaude_code/llm/openai_compatible/__init__.py +3 -0
  107. klaude_code-1.2.11/src/klaude_code/llm/openai_compatible/client.py +168 -0
  108. klaude_code-1.2.11/src/klaude_code/llm/openai_compatible/input.py +111 -0
  109. klaude_code-1.2.11/src/klaude_code/llm/openai_compatible/stream_processor.py +82 -0
  110. klaude_code-1.2.11/src/klaude_code/llm/openai_compatible/tool_call_accumulator.py +80 -0
  111. klaude_code-1.2.11/src/klaude_code/llm/openrouter/__init__.py +3 -0
  112. klaude_code-1.2.11/src/klaude_code/llm/openrouter/client.py +170 -0
  113. klaude_code-1.2.11/src/klaude_code/llm/openrouter/input.py +137 -0
  114. klaude_code-1.2.11/src/klaude_code/llm/openrouter/reasoning_handler.py +209 -0
  115. klaude_code-1.2.11/src/klaude_code/llm/registry.py +48 -0
  116. klaude_code-1.2.11/src/klaude_code/llm/responses/__init__.py +3 -0
  117. klaude_code-1.2.11/src/klaude_code/llm/responses/client.py +202 -0
  118. klaude_code-1.2.11/src/klaude_code/llm/responses/input.py +167 -0
  119. klaude_code-1.2.11/src/klaude_code/llm/usage.py +162 -0
  120. klaude_code-1.2.11/src/klaude_code/protocol/__init__.py +4 -0
  121. klaude_code-1.2.11/src/klaude_code/protocol/commands.py +22 -0
  122. klaude_code-1.2.11/src/klaude_code/protocol/events.py +173 -0
  123. klaude_code-1.2.11/src/klaude_code/protocol/llm_param.py +149 -0
  124. klaude_code-1.2.11/src/klaude_code/protocol/model.py +412 -0
  125. klaude_code-1.2.11/src/klaude_code/protocol/op.py +93 -0
  126. klaude_code-1.2.11/src/klaude_code/protocol/op_handler.py +28 -0
  127. klaude_code-1.2.11/src/klaude_code/protocol/sub_agent.py +354 -0
  128. klaude_code-1.2.11/src/klaude_code/protocol/tools.py +15 -0
  129. klaude_code-1.2.11/src/klaude_code/session/__init__.py +4 -0
  130. klaude_code-1.2.11/src/klaude_code/session/export.py +653 -0
  131. klaude_code-1.2.11/src/klaude_code/session/selector.py +76 -0
  132. klaude_code-1.2.11/src/klaude_code/session/session.py +497 -0
  133. klaude_code-1.2.11/src/klaude_code/session/templates/export_session.html +1597 -0
  134. klaude_code-1.2.11/src/klaude_code/trace/__init__.py +3 -0
  135. klaude_code-1.2.11/src/klaude_code/trace/log.py +168 -0
  136. klaude_code-1.2.11/src/klaude_code/ui/__init__.py +91 -0
  137. klaude_code-1.2.11/src/klaude_code/ui/core/__init__.py +1 -0
  138. klaude_code-1.2.11/src/klaude_code/ui/core/display.py +103 -0
  139. klaude_code-1.2.11/src/klaude_code/ui/core/input.py +71 -0
  140. klaude_code-1.2.11/src/klaude_code/ui/core/stage_manager.py +55 -0
  141. klaude_code-1.2.11/src/klaude_code/ui/modes/__init__.py +1 -0
  142. klaude_code-1.2.11/src/klaude_code/ui/modes/debug/__init__.py +1 -0
  143. klaude_code-1.2.11/src/klaude_code/ui/modes/debug/display.py +36 -0
  144. klaude_code-1.2.11/src/klaude_code/ui/modes/exec/__init__.py +1 -0
  145. klaude_code-1.2.11/src/klaude_code/ui/modes/exec/display.py +63 -0
  146. klaude_code-1.2.11/src/klaude_code/ui/modes/repl/__init__.py +47 -0
  147. klaude_code-1.2.11/src/klaude_code/ui/modes/repl/clipboard.py +152 -0
  148. klaude_code-1.2.11/src/klaude_code/ui/modes/repl/completers.py +462 -0
  149. klaude_code-1.2.11/src/klaude_code/ui/modes/repl/display.py +60 -0
  150. klaude_code-1.2.11/src/klaude_code/ui/modes/repl/event_handler.py +462 -0
  151. klaude_code-1.2.11/src/klaude_code/ui/modes/repl/input_prompt_toolkit.py +167 -0
  152. klaude_code-1.2.11/src/klaude_code/ui/modes/repl/key_bindings.py +170 -0
  153. klaude_code-1.2.11/src/klaude_code/ui/modes/repl/renderer.py +283 -0
  154. klaude_code-1.2.11/src/klaude_code/ui/renderers/__init__.py +0 -0
  155. klaude_code-1.2.11/src/klaude_code/ui/renderers/assistant.py +21 -0
  156. klaude_code-1.2.11/src/klaude_code/ui/renderers/common.py +8 -0
  157. klaude_code-1.2.11/src/klaude_code/ui/renderers/developer.py +169 -0
  158. klaude_code-1.2.11/src/klaude_code/ui/renderers/diffs.py +215 -0
  159. klaude_code-1.2.11/src/klaude_code/ui/renderers/errors.py +16 -0
  160. klaude_code-1.2.11/src/klaude_code/ui/renderers/metadata.py +253 -0
  161. klaude_code-1.2.11/src/klaude_code/ui/renderers/sub_agent.py +71 -0
  162. klaude_code-1.2.11/src/klaude_code/ui/renderers/thinking.py +39 -0
  163. klaude_code-1.2.11/src/klaude_code/ui/renderers/tools.py +528 -0
  164. klaude_code-1.2.11/src/klaude_code/ui/renderers/user_input.py +78 -0
  165. klaude_code-1.2.11/src/klaude_code/ui/rich/__init__.py +1 -0
  166. klaude_code-1.2.11/src/klaude_code/ui/rich/live.py +65 -0
  167. klaude_code-1.2.11/src/klaude_code/ui/rich/markdown.py +311 -0
  168. klaude_code-1.2.11/src/klaude_code/ui/rich/quote.py +34 -0
  169. klaude_code-1.2.11/src/klaude_code/ui/rich/searchable_text.py +71 -0
  170. klaude_code-1.2.11/src/klaude_code/ui/rich/status.py +240 -0
  171. klaude_code-1.2.11/src/klaude_code/ui/rich/theme.py +276 -0
  172. klaude_code-1.2.11/src/klaude_code/ui/terminal/__init__.py +56 -0
  173. klaude_code-1.2.11/src/klaude_code/ui/terminal/color.py +244 -0
  174. klaude_code-1.2.11/src/klaude_code/ui/terminal/control.py +147 -0
  175. klaude_code-1.2.11/src/klaude_code/ui/terminal/notifier.py +107 -0
  176. klaude_code-1.2.11/src/klaude_code/ui/terminal/progress_bar.py +87 -0
  177. klaude_code-1.2.11/src/klaude_code/ui/utils/__init__.py +1 -0
  178. klaude_code-1.2.11/src/klaude_code/ui/utils/common.py +108 -0
  179. klaude_code-1.2.11/src/klaude_code/ui/utils/debouncer.py +42 -0
  180. klaude_code-1.2.11/src/klaude_code/version.py +163 -0
  181. klaude_code-0.1.0/PKG-INFO +0 -235
  182. klaude_code-0.1.0/README.md +0 -210
  183. klaude_code-0.1.0/pyproject.toml +0 -49
  184. klaude_code-0.1.0/setup.cfg +0 -4
  185. klaude_code-0.1.0/src/klaude_code.egg-info/PKG-INFO +0 -235
  186. klaude_code-0.1.0/src/klaude_code.egg-info/SOURCES.txt +0 -56
  187. klaude_code-0.1.0/src/klaude_code.egg-info/dependency_links.txt +0 -1
  188. klaude_code-0.1.0/src/klaude_code.egg-info/entry_points.txt +0 -2
  189. klaude_code-0.1.0/src/klaude_code.egg-info/requires.txt +0 -10
  190. klaude_code-0.1.0/src/klaude_code.egg-info/top_level.txt +0 -1
  191. klaude_code-0.1.0/src/klaudecode/__init__.py +0 -3
  192. klaude_code-0.1.0/src/klaudecode/agent.py +0 -399
  193. klaude_code-0.1.0/src/klaudecode/cli.py +0 -191
  194. klaude_code-0.1.0/src/klaudecode/command/__init__.py +0 -47
  195. klaude_code-0.1.0/src/klaudecode/command/bash_input_mode.py +0 -173
  196. klaude_code-0.1.0/src/klaudecode/command/clear_command.py +0 -29
  197. klaude_code-0.1.0/src/klaudecode/command/compact_command.py +0 -29
  198. klaude_code-0.1.0/src/klaudecode/command/continue_command.py +0 -19
  199. klaude_code-0.1.0/src/klaudecode/command/cost_command.py +0 -9
  200. klaude_code-0.1.0/src/klaudecode/command/init_command.py +0 -19
  201. klaude_code-0.1.0/src/klaudecode/command/mac_setup_command.py +0 -131
  202. klaude_code-0.1.0/src/klaudecode/command/memory_input_mode.py +0 -98
  203. klaude_code-0.1.0/src/klaudecode/command/plan_input_mode.py +0 -33
  204. klaude_code-0.1.0/src/klaudecode/command/recent_command.py +0 -19
  205. klaude_code-0.1.0/src/klaudecode/command/rewrite_query_command.py +0 -21
  206. klaude_code-0.1.0/src/klaudecode/command/status_command.py +0 -35
  207. klaude_code-0.1.0/src/klaudecode/command/theme_command.py +0 -60
  208. klaude_code-0.1.0/src/klaudecode/command/today_command.py +0 -19
  209. klaude_code-0.1.0/src/klaudecode/config.py +0 -400
  210. klaude_code-0.1.0/src/klaudecode/llm.py +0 -574
  211. klaude_code-0.1.0/src/klaudecode/mcp/mcp_client.py +0 -124
  212. klaude_code-0.1.0/src/klaudecode/mcp/mcp_config.py +0 -114
  213. klaude_code-0.1.0/src/klaudecode/mcp/mcp_tool.py +0 -251
  214. klaude_code-0.1.0/src/klaudecode/message.py +0 -539
  215. klaude_code-0.1.0/src/klaudecode/prompt/commands.py +0 -231
  216. klaude_code-0.1.0/src/klaudecode/prompt/plan_mode.py +0 -17
  217. klaude_code-0.1.0/src/klaudecode/prompt/reminder.py +0 -66
  218. klaude_code-0.1.0/src/klaudecode/prompt/system.py +0 -272
  219. klaude_code-0.1.0/src/klaudecode/prompt/tools.py +0 -455
  220. klaude_code-0.1.0/src/klaudecode/session.py +0 -302
  221. klaude_code-0.1.0/src/klaudecode/tool.py +0 -318
  222. klaude_code-0.1.0/src/klaudecode/tools/__init__.py +0 -28
  223. klaude_code-0.1.0/src/klaudecode/tools/bash.py +0 -341
  224. klaude_code-0.1.0/src/klaudecode/tools/edit.py +0 -156
  225. klaude_code-0.1.0/src/klaudecode/tools/exit_plan_mode.py +0 -47
  226. klaude_code-0.1.0/src/klaudecode/tools/file_utils.py +0 -250
  227. klaude_code-0.1.0/src/klaudecode/tools/glob.py +0 -286
  228. klaude_code-0.1.0/src/klaudecode/tools/grep.py +0 -287
  229. klaude_code-0.1.0/src/klaudecode/tools/ls.py +0 -60
  230. klaude_code-0.1.0/src/klaudecode/tools/multi_edit.py +0 -337
  231. klaude_code-0.1.0/src/klaudecode/tools/read.py +0 -199
  232. klaude_code-0.1.0/src/klaudecode/tools/todo.py +0 -121
  233. klaude_code-0.1.0/src/klaudecode/tools/write.py +0 -137
  234. klaude_code-0.1.0/src/klaudecode/tui.py +0 -344
  235. klaude_code-0.1.0/src/klaudecode/user_input.py +0 -532
  236. klaude_code-0.1.0/src/klaudecode/user_questionary.py +0 -14
  237. klaude_code-0.1.0/src/klaudecode/utils.py +0 -233
  238. {klaude_code-0.1.0/src/klaudecode/mcp → klaude_code-1.2.11/src/klaude_code}/__init__.py +0 -0
@@ -0,0 +1,175 @@
1
+ Metadata-Version: 2.3
2
+ Name: klaude-code
3
+ Version: 1.2.11
4
+ Summary: Add your description here
5
+ Requires-Dist: anthropic>=0.66.0
6
+ Requires-Dist: openai>=1.102.0
7
+ Requires-Dist: pillow>=12.0.0
8
+ Requires-Dist: prompt-toolkit>=3.0.52
9
+ Requires-Dist: pydantic>=2.11.7
10
+ Requires-Dist: pyyaml>=6.0.2
11
+ Requires-Dist: questionary>=2.1.1
12
+ Requires-Dist: rich>=14.1.0
13
+ Requires-Dist: trafilatura>=2.0.0
14
+ Requires-Dist: typer>=0.17.3
15
+ Requires-Python: >=3.13
16
+ Description-Content-Type: text/markdown
17
+
18
+ # Minimal Code Agent CLI (Klaude Code)
19
+
20
+ An minimal and opinionated code agent with multi-model support.
21
+
22
+ ## Key Features
23
+ - **Adaptive Tooling**: Model-aware toolsets (Claude Code tools for Sonnet, Codex `apply_patch` for GPT-5.1/Codex).
24
+ - **Multi-Provider Support**: Compatible with `anthropic-messages-api`,`openai-responses-api`, and `openai-compatible-api`(`openrouter-api`), featuring interleaved thinking, OpenRouter's provider sorting etc.
25
+ - **Skill System**: Extensible support for loading Claude Skills.
26
+ - **Session Management**: Robust context preservation with resumable sessions (`--continue`).
27
+ - **Simple TUI**: Clean interface offering full visibility into model responses, reasoning and actions.
28
+ - **Core Utilities**: Slash commands, sub-agents, image pasting, terminal notifications, file mentioning, and auto-theming.
29
+
30
+ ## Installation
31
+
32
+ ```bash
33
+ uv tool install klaude-code
34
+ ```
35
+
36
+ To update:
37
+
38
+ ```bash
39
+ uv tool upgrade klaude-code
40
+ ```
41
+
42
+ ## Usage
43
+
44
+ ### Interactive Mode
45
+
46
+ ```bash
47
+ klaude [--model <name>] [--select-model]
48
+ ```
49
+
50
+ **Options:**
51
+ - `--version`/`-V`: Show version and exit.
52
+ - `--model`/`-m`: Select a model by logical name from config.
53
+ - `--select-model`/`-s`: Interactively choose a model at startup.
54
+ - `--continue`/`-c`: Resume the most recent session.
55
+ - `--resume`/`-r`: Select a session to resume for this project.
56
+ - `--vanilla`: Minimal mode with only basic tools (Bash, Read, Edit) and no system prompts.
57
+
58
+ **Debug Options:**
59
+ - `--debug`/`-d`: Enable debug mode with verbose logging and LLM trace.
60
+ - `--debug-filter`: Filter debug output by type (comma-separated).
61
+
62
+
63
+ ### Configuration
64
+
65
+ An example config will be created in `~/.klaude/config.yaml` when first run.
66
+
67
+ Open the configuration file in editor:
68
+
69
+ ```bash
70
+ klaude config
71
+ ```
72
+
73
+ An minimal example config yaml using OpenRouter's API Key:
74
+
75
+ ```yaml
76
+ provider_list:
77
+ - provider_name: openrouter-work
78
+ protocol: openrouter # support <responses|openrouter|anthropic|openai>
79
+ api_key: <your-openrouter-api-key>
80
+ model_list:
81
+ - model_name: gpt-5.1-codex
82
+ provider: openrouter
83
+ model_params:
84
+ model: openai/gpt-5.1-codex
85
+ context_limit: 368000
86
+ thinking:
87
+ reasoning_effort: medium
88
+ - model_name: gpt-5.1-high
89
+ provider: openrouter
90
+ model_params:
91
+ model: openai/gpt-5.1
92
+ context_limit: 368000
93
+ thinking:
94
+ reasoning_effort: high
95
+ - model_name: sonnet
96
+ provider: openrouter
97
+ model_params:
98
+ model: anthropic/claude-4.5-sonnet
99
+ context_limit: 168000
100
+ provider_routing:
101
+ sort: throughput
102
+ - model_name: haiku
103
+ provider: openrouter
104
+ model_params:
105
+ model: anthropic/claude-haiku-4.5
106
+ context_limit: 168000
107
+ provider_routing:
108
+ sort: throughput
109
+ main_model: gpt-5.1-codex
110
+ subagent_models:
111
+ oracle: gpt-5.1-high
112
+ explore: haiku
113
+ task: sonnet
114
+ ```
115
+
116
+ List configured providers and models:
117
+
118
+ ```bash
119
+ klaude list
120
+ ```
121
+
122
+ ### Session Management
123
+
124
+ Clean up sessions with few messages:
125
+
126
+ ```bash
127
+ # Remove sessions with fewer than 5 messages (default)
128
+ klaude session clean
129
+
130
+ # Remove sessions with fewer than 10 messages
131
+ klaude session clean --min 10
132
+
133
+ # Remove all sessions for the current project
134
+ klaude session clean-all
135
+ ```
136
+
137
+ ### Slash Commands
138
+
139
+ Inside the interactive session (`klaude`), use these commands to streamline your workflow:
140
+
141
+ - `/dev-doc [feature]` - Generate a comprehensive execution plan for a feature.
142
+ - `/export` - Export last assistant message to a temp Markdown file.
143
+ - `/init` - Bootstrap a new project structure or module.
144
+ - `/model` - Switch the active LLM during the session.
145
+ - `/clear` - Clear the current conversation context.
146
+ - `/diff` - Show local git diff changes.
147
+ - `/help` - List all available commands.
148
+
149
+
150
+ ### Input Shortcuts
151
+
152
+ | Key | Action |
153
+ | -------------------- | ------------------------------------------- |
154
+ | `Enter` | Submit input |
155
+ | `Shift+Enter` | Insert newline (requires `/terminal-setup`) |
156
+ | `Ctrl+J` | Insert newline |
157
+ | `Ctrl+V` | Paste image from clipboard |
158
+ | `Left/Right` | Move cursor (wraps across lines) |
159
+ | `Backspace` | Delete character or selected text |
160
+ | `c` (with selection) | Copy selected text to clipboard |
161
+
162
+ ### Non-Interactive Headless Mode (exec)
163
+
164
+ Execute a single command without starting the interactive REPL:
165
+
166
+ ```bash
167
+ # Direct input
168
+ klaude exec "what is 2+2?"
169
+
170
+ # Pipe input
171
+ echo "hello world" | klaude exec
172
+
173
+ # With model selection
174
+ echo "generate quicksort in python" | klaude exec --model gpt-5.1
175
+ ```
@@ -0,0 +1,158 @@
1
+ # Minimal Code Agent CLI (Klaude Code)
2
+
3
+ An minimal and opinionated code agent with multi-model support.
4
+
5
+ ## Key Features
6
+ - **Adaptive Tooling**: Model-aware toolsets (Claude Code tools for Sonnet, Codex `apply_patch` for GPT-5.1/Codex).
7
+ - **Multi-Provider Support**: Compatible with `anthropic-messages-api`,`openai-responses-api`, and `openai-compatible-api`(`openrouter-api`), featuring interleaved thinking, OpenRouter's provider sorting etc.
8
+ - **Skill System**: Extensible support for loading Claude Skills.
9
+ - **Session Management**: Robust context preservation with resumable sessions (`--continue`).
10
+ - **Simple TUI**: Clean interface offering full visibility into model responses, reasoning and actions.
11
+ - **Core Utilities**: Slash commands, sub-agents, image pasting, terminal notifications, file mentioning, and auto-theming.
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ uv tool install klaude-code
17
+ ```
18
+
19
+ To update:
20
+
21
+ ```bash
22
+ uv tool upgrade klaude-code
23
+ ```
24
+
25
+ ## Usage
26
+
27
+ ### Interactive Mode
28
+
29
+ ```bash
30
+ klaude [--model <name>] [--select-model]
31
+ ```
32
+
33
+ **Options:**
34
+ - `--version`/`-V`: Show version and exit.
35
+ - `--model`/`-m`: Select a model by logical name from config.
36
+ - `--select-model`/`-s`: Interactively choose a model at startup.
37
+ - `--continue`/`-c`: Resume the most recent session.
38
+ - `--resume`/`-r`: Select a session to resume for this project.
39
+ - `--vanilla`: Minimal mode with only basic tools (Bash, Read, Edit) and no system prompts.
40
+
41
+ **Debug Options:**
42
+ - `--debug`/`-d`: Enable debug mode with verbose logging and LLM trace.
43
+ - `--debug-filter`: Filter debug output by type (comma-separated).
44
+
45
+
46
+ ### Configuration
47
+
48
+ An example config will be created in `~/.klaude/config.yaml` when first run.
49
+
50
+ Open the configuration file in editor:
51
+
52
+ ```bash
53
+ klaude config
54
+ ```
55
+
56
+ An minimal example config yaml using OpenRouter's API Key:
57
+
58
+ ```yaml
59
+ provider_list:
60
+ - provider_name: openrouter-work
61
+ protocol: openrouter # support <responses|openrouter|anthropic|openai>
62
+ api_key: <your-openrouter-api-key>
63
+ model_list:
64
+ - model_name: gpt-5.1-codex
65
+ provider: openrouter
66
+ model_params:
67
+ model: openai/gpt-5.1-codex
68
+ context_limit: 368000
69
+ thinking:
70
+ reasoning_effort: medium
71
+ - model_name: gpt-5.1-high
72
+ provider: openrouter
73
+ model_params:
74
+ model: openai/gpt-5.1
75
+ context_limit: 368000
76
+ thinking:
77
+ reasoning_effort: high
78
+ - model_name: sonnet
79
+ provider: openrouter
80
+ model_params:
81
+ model: anthropic/claude-4.5-sonnet
82
+ context_limit: 168000
83
+ provider_routing:
84
+ sort: throughput
85
+ - model_name: haiku
86
+ provider: openrouter
87
+ model_params:
88
+ model: anthropic/claude-haiku-4.5
89
+ context_limit: 168000
90
+ provider_routing:
91
+ sort: throughput
92
+ main_model: gpt-5.1-codex
93
+ subagent_models:
94
+ oracle: gpt-5.1-high
95
+ explore: haiku
96
+ task: sonnet
97
+ ```
98
+
99
+ List configured providers and models:
100
+
101
+ ```bash
102
+ klaude list
103
+ ```
104
+
105
+ ### Session Management
106
+
107
+ Clean up sessions with few messages:
108
+
109
+ ```bash
110
+ # Remove sessions with fewer than 5 messages (default)
111
+ klaude session clean
112
+
113
+ # Remove sessions with fewer than 10 messages
114
+ klaude session clean --min 10
115
+
116
+ # Remove all sessions for the current project
117
+ klaude session clean-all
118
+ ```
119
+
120
+ ### Slash Commands
121
+
122
+ Inside the interactive session (`klaude`), use these commands to streamline your workflow:
123
+
124
+ - `/dev-doc [feature]` - Generate a comprehensive execution plan for a feature.
125
+ - `/export` - Export last assistant message to a temp Markdown file.
126
+ - `/init` - Bootstrap a new project structure or module.
127
+ - `/model` - Switch the active LLM during the session.
128
+ - `/clear` - Clear the current conversation context.
129
+ - `/diff` - Show local git diff changes.
130
+ - `/help` - List all available commands.
131
+
132
+
133
+ ### Input Shortcuts
134
+
135
+ | Key | Action |
136
+ | -------------------- | ------------------------------------------- |
137
+ | `Enter` | Submit input |
138
+ | `Shift+Enter` | Insert newline (requires `/terminal-setup`) |
139
+ | `Ctrl+J` | Insert newline |
140
+ | `Ctrl+V` | Paste image from clipboard |
141
+ | `Left/Right` | Move cursor (wraps across lines) |
142
+ | `Backspace` | Delete character or selected text |
143
+ | `c` (with selection) | Copy selected text to clipboard |
144
+
145
+ ### Non-Interactive Headless Mode (exec)
146
+
147
+ Execute a single command without starting the interactive REPL:
148
+
149
+ ```bash
150
+ # Direct input
151
+ klaude exec "what is 2+2?"
152
+
153
+ # Pipe input
154
+ echo "hello world" | klaude exec
155
+
156
+ # With model selection
157
+ echo "generate quicksort in python" | klaude exec --model gpt-5.1
158
+ ```
@@ -0,0 +1,78 @@
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 = "1.2.11"
8
+ description = "Add your description here"
9
+ readme = "README.md"
10
+ requires-python = ">=3.13"
11
+ dependencies = [
12
+ "anthropic>=0.66.0",
13
+ "openai>=1.102.0",
14
+ "pillow>=12.0.0",
15
+ "prompt-toolkit>=3.0.52",
16
+ "pydantic>=2.11.7",
17
+ "pyyaml>=6.0.2",
18
+ "questionary>=2.1.1",
19
+ "rich>=14.1.0",
20
+ "trafilatura>=2.0.0",
21
+ "typer>=0.17.3",
22
+ ]
23
+
24
+ [project.scripts]
25
+ klaude = "klaude_code.cli.main:app"
26
+
27
+ [tool.uv.build-backend]
28
+ module-name = "klaude_code"
29
+
30
+ [dependency-groups]
31
+ dev = [
32
+ "import-linter>=2.6",
33
+ "isort>=6.0.1",
34
+ "pyright>=1.1.407",
35
+ "pytest>=8.4.1",
36
+ "pytest-cov>=7.0.0",
37
+ ]
38
+
39
+
40
+
41
+ [tool.pytest.ini_options]
42
+ markers = [
43
+ "network: marks tests as requiring network access (deselect with '-m \"not network\"')",
44
+ ]
45
+
46
+ [tool.ruff]
47
+ line-length = 120
48
+
49
+ [tool.pyright]
50
+ typeCheckingMode = "strict"
51
+ pythonVersion = "3.13"
52
+ venvPath = "."
53
+ venv = ".venv"
54
+ extraPaths = ["src"]
55
+ reportMissingImports = "warning"
56
+ reportMissingModuleSource = "warning"
57
+ exclude = [".venv/"]
58
+
59
+ [[tool.pyright.executionEnvironments]]
60
+ root = "."
61
+ extraPaths = ["src"]
62
+
63
+ [tool.importlinter]
64
+ root_packages = ["klaude_code"]
65
+ include_external_packages = false
66
+
67
+ [[tool.importlinter.contracts]]
68
+ name = "Layered architecture"
69
+ type = "layers"
70
+ layers = [
71
+ "klaude_code.cli",
72
+ "klaude_code.core",
73
+ "klaude_code.session",
74
+ "klaude_code.config",
75
+ "klaude_code.llm",
76
+ "klaude_code.protocol",
77
+ "klaude_code.const",
78
+ ]
@@ -0,0 +1,24 @@
1
+ """Authentication module.
2
+
3
+ Currently includes Codex OAuth helpers in ``klaude_code.auth.codex``.
4
+ """
5
+
6
+ from klaude_code.auth.codex import (
7
+ CodexAuthError,
8
+ CodexAuthState,
9
+ CodexNotLoggedInError,
10
+ CodexOAuth,
11
+ CodexOAuthError,
12
+ CodexTokenExpiredError,
13
+ CodexTokenManager,
14
+ )
15
+
16
+ __all__ = [
17
+ "CodexAuthError",
18
+ "CodexAuthState",
19
+ "CodexNotLoggedInError",
20
+ "CodexOAuth",
21
+ "CodexOAuthError",
22
+ "CodexTokenExpiredError",
23
+ "CodexTokenManager",
24
+ ]
@@ -0,0 +1,20 @@
1
+ """Codex authentication helpers."""
2
+
3
+ from klaude_code.auth.codex.exceptions import (
4
+ CodexAuthError,
5
+ CodexNotLoggedInError,
6
+ CodexOAuthError,
7
+ CodexTokenExpiredError,
8
+ )
9
+ from klaude_code.auth.codex.oauth import CodexOAuth
10
+ from klaude_code.auth.codex.token_manager import CodexAuthState, CodexTokenManager
11
+
12
+ __all__ = [
13
+ "CodexAuthError",
14
+ "CodexAuthState",
15
+ "CodexNotLoggedInError",
16
+ "CodexOAuth",
17
+ "CodexOAuthError",
18
+ "CodexTokenExpiredError",
19
+ "CodexTokenManager",
20
+ ]
@@ -0,0 +1,17 @@
1
+ """Exceptions for Codex authentication."""
2
+
3
+
4
+ class CodexAuthError(Exception):
5
+ """Base exception for Codex authentication errors."""
6
+
7
+
8
+ class CodexNotLoggedInError(CodexAuthError):
9
+ """User has not logged in to Codex."""
10
+
11
+
12
+ class CodexTokenExpiredError(CodexAuthError):
13
+ """Token expired and refresh failed."""
14
+
15
+
16
+ class CodexOAuthError(CodexAuthError):
17
+ """OAuth flow failed."""
@@ -0,0 +1,45 @@
1
+ """JWT parsing utilities for Codex authentication."""
2
+
3
+ import base64
4
+ import json
5
+ from typing import Any
6
+
7
+
8
+ def decode_jwt_payload(token: str) -> dict[str, Any]:
9
+ """Decode JWT payload without verification.
10
+
11
+ Args:
12
+ token: JWT token string
13
+
14
+ Returns:
15
+ Decoded payload as a dictionary
16
+ """
17
+ parts = token.split(".")
18
+ if len(parts) != 3:
19
+ raise ValueError("Invalid JWT format")
20
+
21
+ payload = parts[1]
22
+ # Add padding if needed
23
+ padding = 4 - len(payload) % 4
24
+ if padding != 4:
25
+ payload += "=" * padding
26
+
27
+ decoded = base64.urlsafe_b64decode(payload)
28
+ return json.loads(decoded)
29
+
30
+
31
+ def extract_account_id(token: str) -> str:
32
+ """Extract ChatGPT account ID from JWT token.
33
+
34
+ Args:
35
+ token: JWT access token from OpenAI OAuth
36
+
37
+ Returns:
38
+ The chatgpt_account_id from the token claims
39
+ """
40
+ payload = decode_jwt_payload(token)
41
+ auth_claim = payload.get("https://api.openai.com/auth", {})
42
+ account_id = auth_claim.get("chatgpt_account_id")
43
+ if not account_id:
44
+ raise ValueError("chatgpt_account_id not found in token")
45
+ return account_id