klaude-code 2.29.0__tar.gz → 2.31.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 (784) hide show
  1. {klaude_code-2.29.0 → klaude_code-2.31.0}/PKG-INFO +4 -8
  2. {klaude_code-2.29.0 → klaude_code-2.31.0}/README.md +3 -7
  3. {klaude_code-2.29.0 → klaude_code-2.31.0}/pyproject.toml +1 -1
  4. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/.DS_Store +0 -0
  5. klaude_code-2.31.0/src/klaude_code/agent/__init__.py +3 -0
  6. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/agent.py +4 -2
  7. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/attachments/files.py +1 -1
  8. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/attachments/skills.py +1 -1
  9. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/away_summary.py +12 -12
  10. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/cache_break_detection.py +15 -15
  11. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/compaction/AGENTS.md +5 -5
  12. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/compaction/compaction.py +69 -6
  13. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/handoff/handoff.py +3 -3
  14. klaude_code-2.31.0/src/klaude_code/agent/model_fallback.py +73 -0
  15. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/prompt_suggestion/prompt_suggestion.py +12 -15
  16. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/rewind/manager.py +0 -3
  17. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/runtime/agent_ops.py +98 -15
  18. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/runtime/away_summary.py +1 -1
  19. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/runtime/config_ops.py +14 -71
  20. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/runtime/dispatcher.py +3 -3
  21. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/runtime/llm.py +44 -20
  22. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/runtime/sub_agent.py +32 -5
  23. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/skill_inventory.py +23 -14
  24. klaude_code-2.29.0/src/klaude_code/agent/turn.py → klaude_code-2.31.0/src/klaude_code/agent/step.py +49 -49
  25. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/system_prompt.py +6 -4
  26. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/task.py +327 -296
  27. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/app/auth_flow.py +129 -67
  28. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/app/ports/input.py +2 -3
  29. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/app/runtime.py +18 -1
  30. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/app/runtime_facade.py +3 -1
  31. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/auth/AGENTS.md +5 -21
  32. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/auth/__init__.py +0 -16
  33. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/auth/codex/oauth.py +9 -7
  34. klaude_code-2.31.0/src/klaude_code/auth/codex/token_manager.py +192 -0
  35. klaude_code-2.31.0/src/klaude_code/auth/removed_provider.py +46 -0
  36. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/cli/auth_cmd.py +41 -3
  37. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/cli/oauth_usage.py +0 -71
  38. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/config/assets/builtin_config.yaml +222 -78
  39. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/config/config.py +94 -91
  40. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/config/merge.py +3 -0
  41. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/config/model_matcher.py +10 -10
  42. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/const.py +2 -2
  43. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/control/runtime/actor.py +1 -2
  44. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/AGENTS.md +1 -1
  45. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/anthropic/client.py +20 -45
  46. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/bedrock_anthropic/client.py +15 -15
  47. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/google/client.py +28 -28
  48. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/google/input.py +1 -2
  49. klaude_code-2.31.0/src/klaude_code/llm/http.py +15 -0
  50. klaude_code-2.31.0/src/klaude_code/llm/model_workarounds.py +35 -0
  51. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/openai_codex/client.py +2 -4
  52. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/openai_compatible/client.py +3 -7
  53. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/openai_compatible/stream.py +3 -3
  54. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/openai_responses/client.py +3 -7
  55. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/openrouter/client.py +2 -4
  56. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/openrouter/reasoning.py +5 -2
  57. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/registry.py +0 -1
  58. klaude_code-2.31.0/src/klaude_code/llm/stop_reason.py +24 -0
  59. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/usage.py +1 -1
  60. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/compaction.py +11 -4
  61. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/messages.py +2 -2
  62. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-finder.md +1 -1
  63. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/system/base-system-prompt-gpt.md +30 -5
  64. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/events.py +8 -8
  65. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/llm_param.py +1 -16
  66. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/message.py +17 -6
  67. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/model_id.py +0 -45
  68. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/models/sub_agent.py +1 -0
  69. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/models/task_metadata.py +10 -2
  70. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/op.py +1 -19
  71. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/op_handler.py +0 -5
  72. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/user_interaction.py +0 -1
  73. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/session/session.py +26 -29
  74. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/session/store.py +80 -32
  75. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/klaude-config/SKILL.md +0 -1
  76. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/klaude-config/references/builtin-providers.md +0 -6
  77. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/klaude-config/references/config-file.md +1 -2
  78. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/agent_tool.md +4 -0
  79. klaude_code-2.31.0/src/klaude_code/tool/agent_tool.py +219 -0
  80. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/core/runner.py +10 -10
  81. klaude_code-2.31.0/src/klaude_code/tool/file/_read_core.py +166 -0
  82. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/file/apply_patch.py +0 -11
  83. klaude_code-2.31.0/src/klaude_code/tool/file/read_handlers.py +286 -0
  84. klaude_code-2.31.0/src/klaude_code/tool/file/read_tool.py +260 -0
  85. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/shell/command_safety.py +4 -1
  86. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/__init__.py +3 -3
  87. klaude_code-2.31.0/src/klaude_code/tui/command/assets/export_session.css +838 -0
  88. klaude_code-2.31.0/src/klaude_code/tui/command/assets/export_session.js +84 -0
  89. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/auth_selector.py +19 -12
  90. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/export_session_html.py +5 -926
  91. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/login_cmd.py +47 -3
  92. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/logout_cmd.py +45 -3
  93. klaude_code-2.31.0/src/klaude_code/tui/command/switch_cmd.py +98 -0
  94. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/types.py +1 -1
  95. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/metadata.py +10 -10
  96. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/rich/quote.py +1 -1
  97. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/rich/theme.py +1 -1
  98. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/sub_agent.py +2 -0
  99. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/tools/_dispatch.py +1 -1
  100. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/welcome.py +0 -1
  101. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/display.py +1 -1
  102. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/input/completers.py +61 -4
  103. klaude_code-2.31.0/src/klaude_code/tui/input/completion_menu.py +276 -0
  104. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/input/flicker_safe_stdout.py +5 -1
  105. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/input/key_bindings.py +7 -10
  106. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/input/prompt_status_bar.py +71 -33
  107. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/input/prompt_toolkit.py +250 -360
  108. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/input/pt_theme.py +4 -1
  109. klaude_code-2.31.0/src/klaude_code/tui/machine.py +1603 -0
  110. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/renderer.py +23 -24
  111. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/runner.py +121 -57
  112. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/terminal/selector.py +8 -0
  113. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/update.py +0 -12
  114. klaude_code-2.29.0/src/klaude_code/web/dist/assets/highlighted-body-B3W2YXNL-DTuyBW20.js → klaude_code-2.31.0/src/klaude_code/web/dist/assets/highlighted-body-B3W2YXNL-BKW-iTu6.js +1 -1
  115. klaude_code-2.31.0/src/klaude_code/web/dist/assets/index-CPeCxOAy.css +1 -0
  116. klaude_code-2.29.0/src/klaude_code/web/dist/assets/index-CoapfQ1q.js → klaude_code-2.31.0/src/klaude_code/web/dist/assets/index-hdfK0BlB.js +146 -146
  117. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/index.html +2 -2
  118. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/routes/ws.py +2 -26
  119. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/session_index.py +0 -30
  120. klaude_code-2.29.0/src/klaude_code/agent/__init__.py +0 -3
  121. klaude_code-2.29.0/src/klaude_code/agent/attachments/todo.py +0 -71
  122. klaude_code-2.29.0/src/klaude_code/auth/codex/token_manager.py +0 -26
  123. klaude_code-2.29.0/src/klaude_code/auth/copilot/__init__.py +0 -20
  124. klaude_code-2.29.0/src/klaude_code/auth/copilot/exceptions.py +0 -17
  125. klaude_code-2.29.0/src/klaude_code/auth/copilot/oauth.py +0 -234
  126. klaude_code-2.29.0/src/klaude_code/auth/copilot/token_manager.py +0 -64
  127. klaude_code-2.29.0/src/klaude_code/config/thinking.py +0 -357
  128. klaude_code-2.29.0/src/klaude_code/llm/copilot/__init__.py +0 -3
  129. klaude_code-2.29.0/src/klaude_code/llm/copilot/client.py +0 -275
  130. klaude_code-2.29.0/src/klaude_code/tool/agent_tool.py +0 -131
  131. klaude_code-2.29.0/src/klaude_code/tool/file/read_tool.py +0 -609
  132. klaude_code-2.29.0/src/klaude_code/tui/command/thinking_cmd.py +0 -24
  133. klaude_code-2.29.0/src/klaude_code/tui/machine.py +0 -1428
  134. klaude_code-2.29.0/src/klaude_code/web/dist/assets/index-TK8frDq8.css +0 -1
  135. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/__init__.py +0 -0
  136. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/agent_profile.py +0 -0
  137. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/attachments/__init__.py +0 -0
  138. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/attachments/collection.py +0 -0
  139. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/attachments/memory.py +0 -0
  140. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/attachments/state.py +0 -0
  141. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/bash_mode.py +0 -0
  142. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/cache_safe.py +0 -0
  143. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/compaction/__init__.py +0 -0
  144. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/compaction/overflow.py +0 -0
  145. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/handoff/__init__.py +0 -0
  146. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/handoff/manager.py +0 -0
  147. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/prompt_suggestion/__init__.py +0 -0
  148. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/rewind/__init__.py +0 -0
  149. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/runtime/__init__.py +0 -0
  150. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/session_stats.py +0 -0
  151. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/agent/session_title.py +0 -0
  152. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/app/__init__.py +0 -0
  153. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/app/log_viewer.html +0 -0
  154. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/app/log_viewer.py +0 -0
  155. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/app/ports/__init__.py +0 -0
  156. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/app/ports/display.py +0 -0
  157. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/app/ports/interaction.py +0 -0
  158. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/auth/base.py +0 -0
  159. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/auth/codex/__init__.py +0 -0
  160. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/auth/codex/exceptions.py +0 -0
  161. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/auth/codex/jwt_utils.py +0 -0
  162. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/auth/env.py +0 -0
  163. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/cli/__init__.py +0 -0
  164. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/cli/config_cmd.py +0 -0
  165. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/cli/cost_cmd.py +0 -0
  166. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/cli/debug.py +0 -0
  167. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/cli/list_model.py +0 -0
  168. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/cli/main.py +0 -0
  169. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/cli/self_update.py +0 -0
  170. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/cli/web_cmd.py +0 -0
  171. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/config/__init__.py +0 -0
  172. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/config/assets/__init__.py +0 -0
  173. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/config/builtin_config.py +0 -0
  174. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/config/formatters.py +0 -0
  175. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/config/loader.py +0 -0
  176. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/config/sub_agent_model.py +0 -0
  177. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/control/__init__.py +0 -0
  178. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/control/event_bus.py +0 -0
  179. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/control/event_relay.py +0 -0
  180. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/control/runtime/__init__.py +0 -0
  181. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/control/runtime/registry.py +0 -0
  182. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/control/session_meta_relay.py +0 -0
  183. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/control/user_interaction.py +0 -0
  184. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/__init__.py +0 -0
  185. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/anthropic/__init__.py +0 -0
  186. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/anthropic/input.py +0 -0
  187. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/bedrock_anthropic/__init__.py +0 -0
  188. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/client.py +0 -0
  189. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/google/__init__.py +0 -0
  190. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/google_vertex/__init__.py +0 -0
  191. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/google_vertex/client.py +0 -0
  192. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/image.py +0 -0
  193. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/input_common.py +0 -0
  194. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/json_stable.py +0 -0
  195. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/openai_codex/__init__.py +0 -0
  196. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/openai_compatible/__init__.py +0 -0
  197. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/openai_compatible/input.py +0 -0
  198. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/openai_responses/__init__.py +0 -0
  199. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/openai_responses/input.py +0 -0
  200. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/openrouter/__init__.py +0 -0
  201. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/openrouter/input.py +0 -0
  202. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/proxy_support.py +0 -0
  203. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/llm/stream_parts.py +0 -0
  204. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/log.py +0 -0
  205. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/__init__.py +0 -0
  206. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/attachments.py +0 -0
  207. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/away_summary.py +0 -0
  208. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/handoff.py +0 -0
  209. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/prompt_suggestion.py +0 -0
  210. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/session_title.py +0 -0
  211. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-review.md +0 -0
  212. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-simplifier.md +0 -0
  213. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/sub_agents.py +0 -0
  214. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/system/auto-memory-prompt.md +0 -0
  215. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/system/base-system-prompt.md +0 -0
  216. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/system/extended-thinking-prompt.md +0 -0
  217. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/system/following-conventions-prompt.md +0 -0
  218. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/prompts/system/git-workspace-hygiene-prompt.md +0 -0
  219. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/__init__.py +0 -0
  220. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/input_syntax.py +0 -0
  221. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/models/__init__.py +0 -0
  222. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/models/common.py +0 -0
  223. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/models/developer_ui.py +0 -0
  224. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/models/file_tracking.py +0 -0
  225. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/models/session_runtime.py +0 -0
  226. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/models/todo.py +0 -0
  227. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/models/tool_ui.py +0 -0
  228. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/models/usage.py +0 -0
  229. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/sub_agent/AGENTS.md +0 -0
  230. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/sub_agent/__init__.py +0 -0
  231. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/sub_agent/finder.py +0 -0
  232. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/sub_agent/general_purpose.py +0 -0
  233. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/sub_agent/review.py +0 -0
  234. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/sub_agent/simplifier.py +0 -0
  235. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/system_prompt.py +0 -0
  236. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/protocol/tools.py +0 -0
  237. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/session/__init__.py +0 -0
  238. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/session/codec.py +0 -0
  239. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/session/history.py +0 -0
  240. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/session/meta.py +0 -0
  241. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/session/selector.py +0 -0
  242. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/session/store_registry.py +0 -0
  243. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/AGENTS.md +0 -0
  244. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/__init__.py +0 -0
  245. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/.git +0 -0
  246. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/.gitignore +0 -0
  247. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/SOURCES.md +0 -0
  248. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/agent-browser/SKILL.md +0 -0
  249. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/agent-browser/references/authentication.md +0 -0
  250. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/agent-browser/references/commands.md +0 -0
  251. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/agent-browser/references/profiling.md +0 -0
  252. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/agent-browser/references/proxy-support.md +0 -0
  253. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/agent-browser/references/session-management.md +0 -0
  254. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/agent-browser/references/snapshot-refs.md +0 -0
  255. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/agent-browser/references/video-recording.md +0 -0
  256. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/agent-browser/templates/authenticated-session.sh +0 -0
  257. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/agent-browser/templates/capture-workflow.sh +0 -0
  258. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/agent-browser/templates/form-automation.sh +0 -0
  259. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/frontend-design/SKILL.md +0 -0
  260. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/gpt-image-gen/LICENSE.txt +0 -0
  261. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/gpt-image-gen/SKILL.md +0 -0
  262. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/gpt-image-gen/references/cli.md +0 -0
  263. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/gpt-image-gen/references/image-api.md +0 -0
  264. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/gpt-image-gen/references/prompting.md +0 -0
  265. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/gpt-image-gen/references/sample-prompts.md +0 -0
  266. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/gpt-image-gen/scripts/image_gen.py +0 -0
  267. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/klaude-config/references/memory-files.md +0 -0
  268. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/klaude-config/references/skill-system.md +0 -0
  269. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/nano-banana-image-gen/SKILL.md +0 -0
  270. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/cli.md +0 -0
  271. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/gemini-api.md +0 -0
  272. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/prompting.md +0 -0
  273. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/sample-prompts.md +0 -0
  274. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/vertex-setup.md +0 -0
  275. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/nano-banana-image-gen/scripts/gemini_image_gen.py +0 -0
  276. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/pdf/SKILL.md +0 -0
  277. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/pdf/forms.md +0 -0
  278. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/pdf/reference.md +0 -0
  279. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/pdf/scripts/check_bounding_boxes.py +0 -0
  280. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/pdf/scripts/check_fillable_fields.py +0 -0
  281. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/pdf/scripts/convert_pdf_to_images.py +0 -0
  282. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/pdf/scripts/create_validation_image.py +0 -0
  283. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/pdf/scripts/extract_form_field_info.py +0 -0
  284. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/pdf/scripts/extract_form_structure.py +0 -0
  285. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/pdf/scripts/fill_fillable_fields.py +0 -0
  286. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/pdf/scripts/fill_pdf_form_with_annotations.py +0 -0
  287. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/playwright/LICENSE.txt +0 -0
  288. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/playwright/NOTICE.txt +0 -0
  289. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/playwright/SKILL.md +0 -0
  290. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/playwright/assets/playwright-small.svg +0 -0
  291. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/playwright/assets/playwright.png +0 -0
  292. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/playwright/references/cli.md +0 -0
  293. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/playwright/references/workflows.md +0 -0
  294. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/playwright/scripts/playwright_cli.sh +0 -0
  295. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/SKILL.md +0 -0
  296. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/3d.md +0 -0
  297. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/animations.md +0 -0
  298. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/charts-bar-chart.tsx +0 -0
  299. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +0 -0
  300. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +0 -0
  301. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets.md +0 -0
  302. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/audio-visualization.md +0 -0
  303. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/audio.md +0 -0
  304. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/calculate-metadata.md +0 -0
  305. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/can-decode.md +0 -0
  306. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/charts.md +0 -0
  307. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/compositions.md +0 -0
  308. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/display-captions.md +0 -0
  309. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/extract-frames.md +0 -0
  310. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/ffmpeg.md +0 -0
  311. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/fonts.md +0 -0
  312. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-audio-duration.md +0 -0
  313. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-video-dimensions.md +0 -0
  314. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-video-duration.md +0 -0
  315. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/gifs.md +0 -0
  316. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/images.md +0 -0
  317. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/import-srt-captions.md +0 -0
  318. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/light-leaks.md +0 -0
  319. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/lottie.md +0 -0
  320. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/maps.md +0 -0
  321. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/measuring-dom-nodes.md +0 -0
  322. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/measuring-text.md +0 -0
  323. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/parameters.md +0 -0
  324. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/sequencing.md +0 -0
  325. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/sfx.md +0 -0
  326. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/subtitles.md +0 -0
  327. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/tailwind.md +0 -0
  328. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/text-animations.md +0 -0
  329. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/timing.md +0 -0
  330. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transcribe-captions.md +0 -0
  331. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transitions.md +0 -0
  332. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transparent-videos.md +0 -0
  333. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/trimming.md +0 -0
  334. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/videos.md +0 -0
  335. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/voiceover.md +0 -0
  336. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/render-mermaid/.gitignore +0 -0
  337. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/render-mermaid/SKILL.md +0 -0
  338. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/render-mermaid/package.json +0 -0
  339. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/render-mermaid/references/config/first-time-setup.md +0 -0
  340. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/render-mermaid/references/config/preferences-schema.md +0 -0
  341. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/render-mermaid/references/templates/standalone.html +0 -0
  342. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/render-mermaid/references/troubleshooting.md +0 -0
  343. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/render-mermaid/scripts/render_mermaid.js +0 -0
  344. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/render-mermaid/scripts/setup.sh +0 -0
  345. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/session-logs/SKILL.md +0 -0
  346. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/skill-creator/SKILL.md +0 -0
  347. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/skills-lock.json +0 -0
  348. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/sora/LICENSE.txt +0 -0
  349. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/sora/SKILL.md +0 -0
  350. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/sora/assets/sora-small.svg +0 -0
  351. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/sora/assets/sora.png +0 -0
  352. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/sora/references/cinematic-shots.md +0 -0
  353. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/sora/references/cli.md +0 -0
  354. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/sora/references/prompting.md +0 -0
  355. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/sora/references/sample-prompts.md +0 -0
  356. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/sora/references/social-ads.md +0 -0
  357. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/sora/references/troubleshooting.md +0 -0
  358. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/sora/references/video-api.md +0 -0
  359. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/sora/scripts/sora.py +0 -0
  360. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/svg-animations/SKILL.md +0 -0
  361. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/svg-animations/examples/index.html +0 -0
  362. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/assets/web-search/SKILL.md +0 -0
  363. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/loader.py +0 -0
  364. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/manager.py +0 -0
  365. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/skill/system_skills.py +0 -0
  366. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/AGENTS.md +0 -0
  367. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/__init__.py +0 -0
  368. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/ask_user_question_tool.md +0 -0
  369. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/ask_user_question_tool.py +0 -0
  370. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/core/__init__.py +0 -0
  371. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/core/abc.py +0 -0
  372. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/core/context.py +0 -0
  373. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/core/offload.py +0 -0
  374. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/core/registry.py +0 -0
  375. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/file/__init__.py +0 -0
  376. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/file/_utils.py +0 -0
  377. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/file/apply_patch_tool.md +0 -0
  378. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/file/apply_patch_tool.py +0 -0
  379. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/file/diff_builder.py +0 -0
  380. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/file/edit_tool.md +0 -0
  381. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/file/edit_tool.py +0 -0
  382. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/file/read_tool.md +0 -0
  383. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/file/write_tool.md +0 -0
  384. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/file/write_tool.py +0 -0
  385. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/handoff_tool.md +0 -0
  386. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/handoff_tool.py +0 -0
  387. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/rewind_tool.md +0 -0
  388. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/rewind_tool.py +0 -0
  389. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/shell/__init__.py +0 -0
  390. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/shell/bash_tool.md +0 -0
  391. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/shell/bash_tool.py +0 -0
  392. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/todo/__init__.py +0 -0
  393. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/todo/todo_write_tool.md +0 -0
  394. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/todo/todo_write_tool.py +0 -0
  395. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/todo/todo_write_tool_raw.md +0 -0
  396. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/web/__init__.py +0 -0
  397. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/web/external_content.py +0 -0
  398. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/web/ssrf.py +0 -0
  399. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/web/web_cache.py +0 -0
  400. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/web/web_fetch_tool.md +0 -0
  401. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/web/web_fetch_tool.py +0 -0
  402. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/web/web_search_tool.md +0 -0
  403. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tool/web/web_search_tool.py +0 -0
  404. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/AGENTS.md +0 -0
  405. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/__init__.py +0 -0
  406. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/AGENTS.md +0 -0
  407. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/command_abc.py +0 -0
  408. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/compact_cmd.py +0 -0
  409. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/continue_cmd.py +0 -0
  410. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/copy_cmd.py +0 -0
  411. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/debug_cmd.py +0 -0
  412. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/export_session_cmd.py +0 -0
  413. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/fork_session_cmd.py +0 -0
  414. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/model_cmd.py +0 -0
  415. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/model_picker.py +0 -0
  416. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/new_cmd.py +0 -0
  417. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/recap_cmd.py +0 -0
  418. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/refresh_cmd.py +0 -0
  419. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/registry.py +0 -0
  420. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/status_cmd.py +0 -0
  421. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/sub_agent_model_cmd.py +0 -0
  422. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/command/web_cmd.py +0 -0
  423. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/commands.py +0 -0
  424. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/__init__.py +0 -0
  425. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/away_summary.py +0 -0
  426. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/bash_syntax.py +0 -0
  427. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/command_output.py +0 -0
  428. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/common.py +0 -0
  429. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/developer.py +0 -0
  430. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/diffs.py +0 -0
  431. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/errors.py +0 -0
  432. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/rich/__init__.py +0 -0
  433. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/rich/cjk_wrap.py +0 -0
  434. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/rich/markdown.py +0 -0
  435. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/rich/status.py +0 -0
  436. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/task_file_changes.py +0 -0
  437. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/thinking.py +0 -0
  438. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/tools/__init__.py +0 -0
  439. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/tools/_bash.py +0 -0
  440. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/tools/_common.py +0 -0
  441. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/tools/_file.py +0 -0
  442. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/tools/_question.py +0 -0
  443. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/tools/_read.py +0 -0
  444. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/tools/_rewind.py +0 -0
  445. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/tools/_todo.py +0 -0
  446. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/tools/_web.py +0 -0
  447. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/components/user_input.py +0 -0
  448. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/input/AGENTS.md +0 -0
  449. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/input/__init__.py +0 -0
  450. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/input/drag_drop.py +0 -0
  451. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/input/images.py +0 -0
  452. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/input/paste.py +0 -0
  453. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/status_runtime.py +0 -0
  454. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/terminal/__init__.py +0 -0
  455. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/terminal/ask_user_question.py +0 -0
  456. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/terminal/color.py +0 -0
  457. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/terminal/control.py +0 -0
  458. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/terminal/focus_tracker.py +0 -0
  459. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/terminal/image.py +0 -0
  460. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/terminal/notifier.py +0 -0
  461. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/terminal/prevent_sleep.py +0 -0
  462. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/terminal/session_selector.py +0 -0
  463. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/tui/terminal/title.py +0 -0
  464. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/__init__.py +0 -0
  465. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/app.py +0 -0
  466. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/display.py +0 -0
  467. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/abap-BdImnpbu.js +0 -0
  468. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/actionscript-3-CoDkCxhg.js +0 -0
  469. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/ada-bCR0ucgS.js +0 -0
  470. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/andromeeda-C4gqWexZ.js +0 -0
  471. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/angular-html-CU67Zn6k.js +0 -0
  472. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/angular-ts-BwZT4LLn.js +0 -0
  473. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/apache-Pmp26Uib.js +0 -0
  474. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/apex-D8_7TLub.js +0 -0
  475. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/apl-dKokRX4l.js +0 -0
  476. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/applescript-Co6uUVPk.js +0 -0
  477. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/ara-BRHolxvo.js +0 -0
  478. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/asciidoc-Ve4PFQV2.js +0 -0
  479. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/asm-D_Q5rh1f.js +0 -0
  480. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/astro-CbQHKStN.js +0 -0
  481. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/aurora-x-D-2ljcwZ.js +0 -0
  482. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/awk-DMzUqQB5.js +0 -0
  483. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/ayu-dark-DYE7WIF3.js +0 -0
  484. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/ayu-light-BA47KaF1.js +0 -0
  485. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/ayu-mirage-32ctXXKs.js +0 -0
  486. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/ballerina-BFfxhgS-.js +0 -0
  487. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/bat-BkioyH1T.js +0 -0
  488. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/beancount-k_qm7-4y.js +0 -0
  489. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/berry-uYugtg8r.js +0 -0
  490. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/bibtex-CHM0blh-.js +0 -0
  491. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/bicep-Bmn6On1c.js +0 -0
  492. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/bird2-DPOp833l.js +0 -0
  493. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/blade-D4QpJJKB.js +0 -0
  494. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/bsl-BO_Y6i37.js +0 -0
  495. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/c-BIGW1oBm.js +0 -0
  496. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/c3-eo99z4R2.js +0 -0
  497. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/cadence-Bv_4Rxtq.js +0 -0
  498. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/cairo-KRGpt6FW.js +0 -0
  499. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  500. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  501. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  502. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  503. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/clarity-D53aC0YG.js +0 -0
  504. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/clojure-P80f7IUj.js +0 -0
  505. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/cmake-D1j8_8rp.js +0 -0
  506. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/cobol-nwyudZeR.js +0 -0
  507. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/codeowners-Bp6g37R7.js +0 -0
  508. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/codeql-DsOJ9woJ.js +0 -0
  509. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/coffee-Ch7k5sss.js +0 -0
  510. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/common-lisp-Cg-RD9OK.js +0 -0
  511. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/coq-DkFqJrB1.js +0 -0
  512. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/cpp-CofmeUqb.js +0 -0
  513. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/crystal-tKQVLTB8.js +0 -0
  514. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/csharp-COcwbKMJ.js +0 -0
  515. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/css-DPfMkruS.js +0 -0
  516. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/csv-fuZLfV_i.js +0 -0
  517. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/cue-D82EKSYY.js +0 -0
  518. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/cypher-COkxafJQ.js +0 -0
  519. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/d-85-TOEBH.js +0 -0
  520. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/dark-plus-C3mMm8J8.js +0 -0
  521. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/dart-CF10PKvl.js +0 -0
  522. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/dax-CEL-wOlO.js +0 -0
  523. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/desktop-BmXAJ9_W.js +0 -0
  524. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/diff-D97Zzqfu.js +0 -0
  525. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/docker-BcOcwvcX.js +0 -0
  526. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/dotenv-Da5cRb03.js +0 -0
  527. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/dracula-BzJJZx-M.js +0 -0
  528. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/dracula-soft-BXkSAIEj.js +0 -0
  529. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/dream-maker-BtqSS_iP.js +0 -0
  530. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/edge-BkV0erSs.js +0 -0
  531. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/elixir-CDX3lj18.js +0 -0
  532. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/elm-DbKCFpqz.js +0 -0
  533. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/emacs-lisp-C9XAeP06.js +0 -0
  534. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/erb-B12qg9BL.js +0 -0
  535. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/erlang-DsQrWhSR.js +0 -0
  536. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/everforest-dark-BgDCqdQA.js +0 -0
  537. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/everforest-light-C8M2exoo.js +0 -0
  538. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/fennel-BYunw83y.js +0 -0
  539. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/fish-BvzEVeQv.js +0 -0
  540. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/fluent-C4IJs8-o.js +0 -0
  541. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  542. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/fortran-free-form-BxgE0vQu.js +0 -0
  543. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/fsharp-CXgrBDvD.js +0 -0
  544. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/gdresource-BOOCDP_w.js +0 -0
  545. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/gdscript-C5YyOfLZ.js +0 -0
  546. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/gdshader-DkwncUOv.js +0 -0
  547. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/genie-D0YGMca9.js +0 -0
  548. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/gherkin-DyxjwDmM.js +0 -0
  549. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/git-commit-F4YmCXRG.js +0 -0
  550. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/git-rebase-r7XF79zn.js +0 -0
  551. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/github-dark-DHJKELXO.js +0 -0
  552. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/github-dark-default-Cuk6v7N8.js +0 -0
  553. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  554. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  555. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/github-light-DAi9KRSo.js +0 -0
  556. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/github-light-default-D7oLnXFd.js +0 -0
  557. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  558. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/gleam-BspZqrRM.js +0 -0
  559. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/glimmer-js-Rg0-pVw9.js +0 -0
  560. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/glimmer-ts-U6CK756n.js +0 -0
  561. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/glsl-DplSGwfg.js +0 -0
  562. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/gn-n2N0HUVH.js +0 -0
  563. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/gnuplot-DdkO51Og.js +0 -0
  564. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/go-CxLEBnE3.js +0 -0
  565. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/graphql-ChdNCCLP.js +0 -0
  566. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/groovy-gcz8RCvz.js +0 -0
  567. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  568. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  569. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  570. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  571. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  572. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  573. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/hack-CaT9iCJl.js +0 -0
  574. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/haml-B8DHNrY2.js +0 -0
  575. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/handlebars-BL8al0AC.js +0 -0
  576. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/haskell-Df6bDoY_.js +0 -0
  577. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/haxe-CzTSHFRz.js +0 -0
  578. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/hcl-BWvSN4gD.js +0 -0
  579. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/hjson-D5-asLiD.js +0 -0
  580. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/hlsl-D3lLCCz7.js +0 -0
  581. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/horizon-BUw7H-hv.js +0 -0
  582. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/horizon-bright-Cn-bp-IR.js +0 -0
  583. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/houston-DnULxvSX.js +0 -0
  584. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/html-GMplVEZG.js +0 -0
  585. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/html-derivative-BFtXZ54Q.js +0 -0
  586. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/http-jrhK8wxY.js +0 -0
  587. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/hurl-irOxFIW8.js +0 -0
  588. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/hxml-Bvhsp5Yf.js +0 -0
  589. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/hy-DFXneXwc.js +0 -0
  590. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/imba-DGztddWO.js +0 -0
  591. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/ini-BEwlwnbL.js +0 -0
  592. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/java-CylS5w8V.js +0 -0
  593. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/javascript-wDzz0qaB.js +0 -0
  594. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/jinja-4LBKfQ-Z.js +0 -0
  595. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/jison-wvAkD_A8.js +0 -0
  596. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/json-Cp-IABpG.js +0 -0
  597. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/json5-C9tS-k6U.js +0 -0
  598. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/jsonc-Des-eS-w.js +0 -0
  599. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/jsonl-DcaNXYhu.js +0 -0
  600. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/jsonnet-DFQXde-d.js +0 -0
  601. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/jssm-C2t-YnRu.js +0 -0
  602. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/jsx-g9-lgVsj.js +0 -0
  603. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/julia-CxzCAyBv.js +0 -0
  604. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/just-Cw27pwNe.js +0 -0
  605. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  606. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  607. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/kanagawa-wave-DWedfzmr.js +0 -0
  608. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/kdl-DV7GczEv.js +0 -0
  609. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/kotlin-BdnUsdx6.js +0 -0
  610. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/kusto-DZf3V79B.js +0 -0
  611. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/laserwave-DUszq2jm.js +0 -0
  612. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/latex-CWtU0Tv5.js +0 -0
  613. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/lean-BZvkOJ9d.js +0 -0
  614. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/less-B1dDrJ26.js +0 -0
  615. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/light-plus-B7mTdjB0.js +0 -0
  616. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/liquid-DYVedYrR.js +0 -0
  617. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/llvm-DjAJT7YJ.js +0 -0
  618. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/log-2UxHyX5q.js +0 -0
  619. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/logo-BtOb2qkB.js +0 -0
  620. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/lua-BaeVxFsk.js +0 -0
  621. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/luau-C-HG3fhB.js +0 -0
  622. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/make-CHLpvVh8.js +0 -0
  623. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/markdown-Cvjx9yec.js +0 -0
  624. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/marko-CnJfTvn9.js +0 -0
  625. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/material-theme-D5KoaKCx.js +0 -0
  626. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/material-theme-darker-BfHTSMKl.js +0 -0
  627. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  628. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/material-theme-ocean-CyktbL80.js +0 -0
  629. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  630. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/matlab-D7o27uSR.js +0 -0
  631. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/mdc-BMNejdWA.js +0 -0
  632. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/mdx-Cmh6b_Ma.js +0 -0
  633. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/mermaid-mWjccvbQ.js +0 -0
  634. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/min-dark-CafNBF8u.js +0 -0
  635. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/min-light-CTRr51gU.js +0 -0
  636. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/mipsasm-CKIfxQSi.js +0 -0
  637. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/mojo-rZm6bMo-.js +0 -0
  638. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/monokai-D4h5O-jR.js +0 -0
  639. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/moonbit-_H4v1dQx.js +0 -0
  640. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/move-IF9eRakj.js +0 -0
  641. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/narrat-DRg8JJMk.js +0 -0
  642. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/nextflow-Zz6hmt5N.js +0 -0
  643. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/nextflow-groovy-BeH2EWoN.js +0 -0
  644. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/nginx-BpAMiNFr.js +0 -0
  645. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/night-owl-C39BiMTA.js +0 -0
  646. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/night-owl-light-CMTm3GFP.js +0 -0
  647. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/nim-CVrawwO9.js +0 -0
  648. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/nix-CwoSXNpI.js +0 -0
  649. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/nord-Ddv68eIx.js +0 -0
  650. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/nushell-Cz2AlsmD.js +0 -0
  651. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/objective-c-DXmwc3jG.js +0 -0
  652. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/objective-cpp-CLxacb5B.js +0 -0
  653. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/ocaml-C0hk2d4L.js +0 -0
  654. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/odin-BBf5iR-q.js +0 -0
  655. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  656. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/one-light-C3Wv6jpd.js +0 -0
  657. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/openscad-C4EeE6gA.js +0 -0
  658. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/pascal-D93ZcfNL.js +0 -0
  659. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/perl-C0TMdlhV.js +0 -0
  660. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/php-Dhbhpdrm.js +0 -0
  661. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/pierre-dark-BXuwtOqb.js +0 -0
  662. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/pierre-light-dckrK0oj.js +0 -0
  663. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/pkl-u5AG7uiY.js +0 -0
  664. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/plastic-3e1v2bzS.js +0 -0
  665. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/plsql-ChMvpjG-.js +0 -0
  666. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/po-BTJTHyun.js +0 -0
  667. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/poimandres-CS3Unz2-.js +0 -0
  668. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/polar-C0HS_06l.js +0 -0
  669. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/postcss-CXtECtnM.js +0 -0
  670. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/powerquery-CEu0bR-o.js +0 -0
  671. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/powershell-Dpen1YoG.js +0 -0
  672. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/prisma-Dd19v3D-.js +0 -0
  673. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/prolog-CbFg5uaA.js +0 -0
  674. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/proto-C7zT0LnQ.js +0 -0
  675. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/pug-CGlum2m_.js +0 -0
  676. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/puppet-BMWR74SV.js +0 -0
  677. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/purescript-CklMAg4u.js +0 -0
  678. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/python-B6aJPvgy.js +0 -0
  679. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/qml-3beO22l8.js +0 -0
  680. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/qmldir-C8lEn-DE.js +0 -0
  681. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/qss-IeuSbFQv.js +0 -0
  682. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/r-Dspwwk_N.js +0 -0
  683. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/racket-BqYA7rlc.js +0 -0
  684. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/raku-DXvB9xmW.js +0 -0
  685. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/razor-Uh8Bk_45.js +0 -0
  686. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/red-bN70gL4F.js +0 -0
  687. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/reg-C-SQnVFl.js +0 -0
  688. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/regexp-CDVJQ6XC.js +0 -0
  689. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/rel-C3B-1QV4.js +0 -0
  690. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/riscv-BM1_JUlF.js +0 -0
  691. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/ron-D8l8udqQ.js +0 -0
  692. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  693. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  694. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/rose-pine-qdsjHGoJ.js +0 -0
  695. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/rosmsg-BJDFO7_C.js +0 -0
  696. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/rst-BrH8l1NY.js +0 -0
  697. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/ruby-Dw2BHqvy.js +0 -0
  698. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/rust-B1yitclQ.js +0 -0
  699. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/sas-cz2c8ADy.js +0 -0
  700. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/sass-Cj5Yp3dK.js +0 -0
  701. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/scala-C151Ov-r.js +0 -0
  702. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/scheme-C98Dy4si.js +0 -0
  703. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/scss-OYdSNvt2.js +0 -0
  704. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/sdbl-DVxCFoDh.js +0 -0
  705. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/shaderlab-Dg9Lc6iA.js +0 -0
  706. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/shellscript-Yzrsuije.js +0 -0
  707. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/shellsession-BADoaaVG.js +0 -0
  708. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/slack-dark-BthQWCQV.js +0 -0
  709. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/slack-ochin-DqwNpetd.js +0 -0
  710. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/smalltalk-BERRCDM3.js +0 -0
  711. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/snazzy-light-Bw305WKR.js +0 -0
  712. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/solarized-dark-DXbdFlpD.js +0 -0
  713. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/solarized-light-L9t79GZl.js +0 -0
  714. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/solidity-rGO070M0.js +0 -0
  715. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/soy-Brmx7dQM.js +0 -0
  716. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/sparql-rVzFXLq3.js +0 -0
  717. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/splunk-BtCnVYZw.js +0 -0
  718. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/sql-BLtJtn59.js +0 -0
  719. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/ssh-config-_ykCGR6B.js +0 -0
  720. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/stata-BH5u7GGu.js +0 -0
  721. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/stylus-BEDo0Tqx.js +0 -0
  722. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/surrealql-Bq5Q-fJD.js +0 -0
  723. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/svelte-C_ipcX3V.js +0 -0
  724. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/swift-D82vCrfD.js +0 -0
  725. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/synthwave-84-CbfX1IO0.js +0 -0
  726. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/system-verilog-CnnmHF94.js +0 -0
  727. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/systemd-4A_iFExJ.js +0 -0
  728. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/talonscript-CkByrt1z.js +0 -0
  729. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/tasl-QIJgUcNo.js +0 -0
  730. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/tcl-dwOrl1Do.js +0 -0
  731. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/templ-P3uqSqPl.js +0 -0
  732. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/terraform-BETggiCN.js +0 -0
  733. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/tex-idrVyKtj.js +0 -0
  734. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/tokyo-night-hegEt444.js +0 -0
  735. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/toml-vGWfd6FD.js +0 -0
  736. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/ts-tags-zn1MmPIZ.js +0 -0
  737. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/tsv-B_m7g4N7.js +0 -0
  738. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/tsx-COt5Ahok.js +0 -0
  739. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/turtle-BsS91CYL.js +0 -0
  740. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/twig-DNn4PbVi.js +0 -0
  741. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/typescript-BPQ3VLAy.js +0 -0
  742. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/typespec-BGHnOYBU.js +0 -0
  743. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/typst-DHCkPAjA.js +0 -0
  744. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/v-BcVCzyr7.js +0 -0
  745. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/vala-CsfeWuGM.js +0 -0
  746. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/vb-D17OF-Vu.js +0 -0
  747. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/verilog-BQ8w6xss.js +0 -0
  748. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/vesper-DU1UobuO.js +0 -0
  749. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/vhdl-CeAyd5Ju.js +0 -0
  750. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/viml-CJc9bBzg.js +0 -0
  751. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/vitesse-black-Bkuqu6BP.js +0 -0
  752. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/vitesse-dark-D0r3Knsf.js +0 -0
  753. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/vitesse-light-CVO1_9PV.js +0 -0
  754. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/vue-DN_0RTcg.js +0 -0
  755. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/vue-html-AaS7Mt5G.js +0 -0
  756. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/vue-vine-CQOfvN7w.js +0 -0
  757. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/vyper-CDx5xZoG.js +0 -0
  758. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/wasm-CG6Dc4jp.js +0 -0
  759. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/wasm-MzD3tlZU.js +0 -0
  760. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/wenyan-BV7otONQ.js +0 -0
  761. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/wgsl-Dx-B1_4e.js +0 -0
  762. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/wikitext-BhOHFoWU.js +0 -0
  763. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/wit-5i3qLPDT.js +0 -0
  764. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/wolfram-lXgVvXCa.js +0 -0
  765. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/xml-sdJ4AIDG.js +0 -0
  766. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/xsl-CtQFsRM5.js +0 -0
  767. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/yaml-Buea-lGh.js +0 -0
  768. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/zenscript-DVFEvuxE.js +0 -0
  769. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/assets/zig-VOosw3JB.js +0 -0
  770. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/favicon.svg +0 -0
  771. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/fonts/InterVariable-Italic.woff2 +0 -0
  772. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/dist/fonts/InterVariable.woff2 +0 -0
  773. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/file_access.py +0 -0
  774. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/interaction.py +0 -0
  775. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/live_events.py +0 -0
  776. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/routes/__init__.py +0 -0
  777. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/routes/config.py +0 -0
  778. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/routes/files.py +0 -0
  779. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/routes/sessions.py +0 -0
  780. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/routes/skills.py +0 -0
  781. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/server.py +0 -0
  782. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/session_access.py +0 -0
  783. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/session_live.py +0 -0
  784. {klaude_code-2.29.0 → klaude_code-2.31.0}/src/klaude_code/web/state.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: klaude-code
3
- Version: 2.29.0
3
+ Version: 2.31.0
4
4
  Summary: Minimal code agent CLI
5
5
  Requires-Dist: anthropic[bedrock]>=0.66.0
6
6
  Requires-Dist: chardet>=5.2.0,<6
@@ -152,7 +152,7 @@ compact_model:
152
152
  - haiku
153
153
  ```
154
154
 
155
- Klaude expands each entry into concrete provider candidates in `provider_list` order, then falls through to the next model in the list. For example, `gpt-5.4` will try available providers such as `gpt-5.4@openai`, `gpt-5.4@github-copilot`, and `gpt-5.4@openrouter` before moving to the next model. Runtime fallback is used for non-retryable provider/model failures such as quota, billing, permission, or model-unavailable errors. `fast_model` is used for session-title generation; `compact_model` is used for compact/helper tasks.
155
+ Klaude expands each entry into concrete provider candidates in `provider_list` order, then falls through to the next model in the list. For example, `gpt-5.4` will try available providers such as `gpt-5.4@openai` and `gpt-5.4@openrouter` before moving to the next model. Runtime fallback is used for non-retryable provider/model failures such as quota, billing, permission, or model-unavailable errors. `fast_model` is used for session-title generation; `compact_model` is used for compact/helper tasks.
156
156
 
157
157
  When you switch models with `/model`, Klaude updates `main_model` without discarding the fallback chain: the selected model is moved to the front if it already exists, or inserted at the front otherwise.
158
158
 
@@ -171,7 +171,6 @@ When you switch models with `/model`, Klaude updates `main_model` without discar
171
171
  | cerebras | `CEREBRAS_API_KEY` | glm |
172
172
  | claude-max | N/A (OAuth) | sonnet, sonnet-no-thinking, opus, haiku |
173
173
  | codex | N/A (OAuth) | gpt-5.3-codex, gpt-5.3-codex-xhigh, gpt-5.4-high, gpt-5.4-xhigh |
174
- | github-copilot | N/A (OAuth) | gpt-5.3-codex, gpt-5.3-codex-xhigh, gpt-5.4-high, gpt-5.4-xhigh, sonnet, sonnet-4.5, haiku, opus |
175
174
  | ark-api | `ARK_API_KEY` | seed-pro, seed-code |
176
175
  | ark-coding-plan | `ARK_API_KEY` | seed-code, kimi |
177
176
 
@@ -303,7 +302,6 @@ sub_agent_models:
303
302
  - `openai` - OpenAI Chat Completion API
304
303
  - `responses` - OpenAI Responses API (for o-series, GPT-5, Codex)
305
304
  - `codex_oauth` - OpenAI Codex CLI (OAuth-based, for ChatGPT Pro subscribers)
306
- - `github_copilot_oauth` - GitHub Copilot (OAuth-based)
307
305
  - `openrouter` - OpenRouter API (handling `reasoning_details` for interleaved thinking)
308
306
  - `google` - Google Gemini API
309
307
  - `google_vertex` - Google Vertex AI (uses GCP credentials)
@@ -347,7 +345,6 @@ Inside the interactive session (`klaude`), use these commands to streamline your
347
345
  - `/new` - Start a new session (clears context).
348
346
  - `/model` - Switch the active LLM and update `main_model` in config while preserving fallback order (the selected model is moved/inserted to the front).
349
347
  - `/sub-agent-model` - Configure sub-agent models at runtime.
350
- - `/thinking` - Change thinking/reasoning level.
351
348
  - `/status` - Show session usage statistics (cost, tokens, model breakdown).
352
349
  - `/login` - Login to provider or configure API key.
353
350
  - `/logout` - Logout from provider.
@@ -363,7 +360,6 @@ Inside the interactive session (`klaude`), use these commands to streamline your
363
360
  | `Shift+Enter` | Insert newline (terminal-dependent) |
364
361
  | `Ctrl+J` | Insert newline |
365
362
  | `Ctrl+L` | Open model picker overlay |
366
- | `Ctrl+T` | Open thinking level picker overlay |
367
363
  | `Ctrl+V` | Paste image from clipboard |
368
364
  | `Left/Right` | Move cursor (wraps across lines) |
369
365
  | `Backspace` | Delete character or selected text |
@@ -402,13 +398,13 @@ Klaude is designed to maximize prefix cache hit rates across LLM API calls. Cach
402
398
  **Append-only message history.** The conversation history is strictly append-only. New messages, tool results, and attachments are always appended to the end of the message array, never inserted or modified in the middle. Any mutation to the head of the messages array (compressing old tool results, replacing images, reordering tool definitions) would invalidate the prefix cache and force a full re-tokenization.
403
399
 
404
400
  Design choices that preserve prefix stability:
405
- - **Stable system prompt**: The system prompt is composed of a static base prompt + stable tool strategy block + environment info, avoiding per-turn variation.
401
+ - **Stable system prompt**: The system prompt is composed of a static base prompt + stable tool strategy block + environment info, avoiding per-step variation.
406
402
  - **Stable JSON serialization**: Tool schemas and provider payloads use `canonicalize_json()` for deterministic key ordering across calls.
407
403
  - **Cache control markers**: For Anthropic and OpenRouter (Claude models), `cache_control: {"type": "ephemeral"}` is placed on the system prompt and the last message part to hint the provider's caching boundary.
408
404
  - **Compaction preserves prefix**: When context is compacted, the summary is prepended as a new first message while keeping the retained tail intact -- no existing message bytes are modified.
409
405
  - **Fork-context sub-agents**: Sub-agents with `fork_context=True` inherit the parent's full system prompt and tool list to maximize prefix cache sharing.
410
406
 
411
- The TUI displays cache hit rate per turn in the metadata line (e.g. `cache 12.5k (98%)`). Rates below 90% are highlighted as a warning.
407
+ The TUI displays cache hit rate per step in the metadata line (e.g. `cache 12.5k (98%)`). Rates below 90% are highlighted as a warning.
412
408
 
413
409
  ### Context Management
414
410
 
@@ -125,7 +125,7 @@ compact_model:
125
125
  - haiku
126
126
  ```
127
127
 
128
- Klaude expands each entry into concrete provider candidates in `provider_list` order, then falls through to the next model in the list. For example, `gpt-5.4` will try available providers such as `gpt-5.4@openai`, `gpt-5.4@github-copilot`, and `gpt-5.4@openrouter` before moving to the next model. Runtime fallback is used for non-retryable provider/model failures such as quota, billing, permission, or model-unavailable errors. `fast_model` is used for session-title generation; `compact_model` is used for compact/helper tasks.
128
+ Klaude expands each entry into concrete provider candidates in `provider_list` order, then falls through to the next model in the list. For example, `gpt-5.4` will try available providers such as `gpt-5.4@openai` and `gpt-5.4@openrouter` before moving to the next model. Runtime fallback is used for non-retryable provider/model failures such as quota, billing, permission, or model-unavailable errors. `fast_model` is used for session-title generation; `compact_model` is used for compact/helper tasks.
129
129
 
130
130
  When you switch models with `/model`, Klaude updates `main_model` without discarding the fallback chain: the selected model is moved to the front if it already exists, or inserted at the front otherwise.
131
131
 
@@ -144,7 +144,6 @@ When you switch models with `/model`, Klaude updates `main_model` without discar
144
144
  | cerebras | `CEREBRAS_API_KEY` | glm |
145
145
  | claude-max | N/A (OAuth) | sonnet, sonnet-no-thinking, opus, haiku |
146
146
  | codex | N/A (OAuth) | gpt-5.3-codex, gpt-5.3-codex-xhigh, gpt-5.4-high, gpt-5.4-xhigh |
147
- | github-copilot | N/A (OAuth) | gpt-5.3-codex, gpt-5.3-codex-xhigh, gpt-5.4-high, gpt-5.4-xhigh, sonnet, sonnet-4.5, haiku, opus |
148
147
  | ark-api | `ARK_API_KEY` | seed-pro, seed-code |
149
148
  | ark-coding-plan | `ARK_API_KEY` | seed-code, kimi |
150
149
 
@@ -276,7 +275,6 @@ sub_agent_models:
276
275
  - `openai` - OpenAI Chat Completion API
277
276
  - `responses` - OpenAI Responses API (for o-series, GPT-5, Codex)
278
277
  - `codex_oauth` - OpenAI Codex CLI (OAuth-based, for ChatGPT Pro subscribers)
279
- - `github_copilot_oauth` - GitHub Copilot (OAuth-based)
280
278
  - `openrouter` - OpenRouter API (handling `reasoning_details` for interleaved thinking)
281
279
  - `google` - Google Gemini API
282
280
  - `google_vertex` - Google Vertex AI (uses GCP credentials)
@@ -320,7 +318,6 @@ Inside the interactive session (`klaude`), use these commands to streamline your
320
318
  - `/new` - Start a new session (clears context).
321
319
  - `/model` - Switch the active LLM and update `main_model` in config while preserving fallback order (the selected model is moved/inserted to the front).
322
320
  - `/sub-agent-model` - Configure sub-agent models at runtime.
323
- - `/thinking` - Change thinking/reasoning level.
324
321
  - `/status` - Show session usage statistics (cost, tokens, model breakdown).
325
322
  - `/login` - Login to provider or configure API key.
326
323
  - `/logout` - Logout from provider.
@@ -336,7 +333,6 @@ Inside the interactive session (`klaude`), use these commands to streamline your
336
333
  | `Shift+Enter` | Insert newline (terminal-dependent) |
337
334
  | `Ctrl+J` | Insert newline |
338
335
  | `Ctrl+L` | Open model picker overlay |
339
- | `Ctrl+T` | Open thinking level picker overlay |
340
336
  | `Ctrl+V` | Paste image from clipboard |
341
337
  | `Left/Right` | Move cursor (wraps across lines) |
342
338
  | `Backspace` | Delete character or selected text |
@@ -375,13 +371,13 @@ Klaude is designed to maximize prefix cache hit rates across LLM API calls. Cach
375
371
  **Append-only message history.** The conversation history is strictly append-only. New messages, tool results, and attachments are always appended to the end of the message array, never inserted or modified in the middle. Any mutation to the head of the messages array (compressing old tool results, replacing images, reordering tool definitions) would invalidate the prefix cache and force a full re-tokenization.
376
372
 
377
373
  Design choices that preserve prefix stability:
378
- - **Stable system prompt**: The system prompt is composed of a static base prompt + stable tool strategy block + environment info, avoiding per-turn variation.
374
+ - **Stable system prompt**: The system prompt is composed of a static base prompt + stable tool strategy block + environment info, avoiding per-step variation.
379
375
  - **Stable JSON serialization**: Tool schemas and provider payloads use `canonicalize_json()` for deterministic key ordering across calls.
380
376
  - **Cache control markers**: For Anthropic and OpenRouter (Claude models), `cache_control: {"type": "ephemeral"}` is placed on the system prompt and the last message part to hint the provider's caching boundary.
381
377
  - **Compaction preserves prefix**: When context is compacted, the summary is prepended as a new first message while keeping the retained tail intact -- no existing message bytes are modified.
382
378
  - **Fork-context sub-agents**: Sub-agents with `fork_context=True` inherit the parent's full system prompt and tool list to maximize prefix cache sharing.
383
379
 
384
- The TUI displays cache hit rate per turn in the metadata line (e.g. `cache 12.5k (98%)`). Rates below 90% are highlighted as a warning.
380
+ The TUI displays cache hit rate per step in the metadata line (e.g. `cache 12.5k (98%)`). Rates below 90% are highlighted as a warning.
385
381
 
386
382
  ### Context Management
387
383
 
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "klaude-code"
7
- version = "2.29.0"
7
+ version = "2.31.0"
8
8
  description = "Minimal code agent CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -0,0 +1,3 @@
1
+ """Execution-plane package (agent/task/step/runtime)."""
2
+
3
+ __all__: list[str] = []
@@ -38,7 +38,7 @@ class Agent:
38
38
  self.profile: AgentProfile = profile
39
39
  self.compact_llm_client: LLMClientABC | None = compact_llm_client
40
40
  self._current_task: TaskExecutor | None = None
41
- self._follow_up_queue: list[UserInputPayload] = [item.model_copy(deep=True) for item in session.follow_up_queue]
41
+ self._follow_up_queue: list[UserInputPayload] = list(session.follow_up_queue)
42
42
  self._last_interrupt_show_notice = True
43
43
  self._last_interrupt_prefill_text: str | None = None
44
44
  self.request_user_interaction = request_user_interaction
@@ -163,7 +163,9 @@ class Agent:
163
163
  self.session.model_name = profile.llm_client.model_name
164
164
 
165
165
  def _apply_llm_client_change(self, llm_client: LLMClientABC) -> AgentProfile:
166
- if self._model_profile_provider is None:
166
+ if self._model_profile_provider is None or (
167
+ self.session.sub_agent_state is not None and self.session.sub_agent_state.fork_context
168
+ ):
167
169
  profile = AgentProfile(
168
170
  llm_client=llm_client,
169
171
  system_prompt=self.profile.system_prompt,
@@ -254,7 +254,7 @@ def _compute_diff_snippet(old_content: str, new_content: str, file_path: str) ->
254
254
 
255
255
  * If ``old_content + new_content`` already exceeds the source size limit,
256
256
  skip ``difflib`` entirely. Large HTML/minified blobs produce diffs that
257
- approach ``2x`` the source, which in past sessions pushed the next turn
257
+ approach ``2x`` the source, which in past sessions pushed the next step
258
258
  past the 1M-token ceiling even after a successful compaction.
259
259
  * After the diff is built, keep only the first ``ATTACHMENT_DIFF_MAX_LINES``
260
260
  lines and append a Read-tool-style notice, mirroring how the Read tool
@@ -162,7 +162,7 @@ def _render_skill_inline_content(raw_content: str, skill: Skill) -> str:
162
162
 
163
163
  The raw content (not the rendered/truncated version) should still be used
164
164
  when computing the skill's file-tracker sha256; otherwise a truncated skill
165
- would be re-classified as "changed" on every turn.
165
+ would be re-classified as "changed" on every step.
166
166
  """
167
167
  truncation = truncate_text_by_lines(raw_content, max_lines=ATTACHMENT_SKILL_MAX_LINES)
168
168
  if not truncation.truncated:
@@ -20,7 +20,7 @@ from klaude_code.session.session import Session
20
20
  _AWAY_SUMMARY_MAX_TOKENS = 512
21
21
 
22
22
  # Recap only needs recent context — truncate to avoid "prompt too long" on
23
- # large sessions. 30 turn messages is plenty for "where we left off."
23
+ # large sessions. 30 recent messages is plenty for "where we left off."
24
24
  _RECENT_MESSAGE_WINDOW = 30
25
25
 
26
26
 
@@ -29,17 +29,17 @@ def _build_away_summary_user_message(transcript: str) -> message.UserMessage:
29
29
  return message.UserMessage(parts=[message.TextPart(text=body)])
30
30
 
31
31
 
32
- def _recent_turn_messages(session: Session, limit: int) -> list[message.Message]:
33
- """Pull the last `limit` turn messages (user/assistant/tool_result)."""
32
+ def _recent_recap_messages(session: Session, limit: int) -> list[message.Message]:
33
+ """Pull the last `limit` recap messages (user/assistant/tool_result)."""
34
34
 
35
- turns: list[message.Message] = []
35
+ messages: list[message.Message] = []
36
36
  for item in reversed(session.conversation_history):
37
37
  if isinstance(item, (message.UserMessage, message.AssistantMessage, message.ToolResultMessage)):
38
- turns.append(item)
39
- if len(turns) >= limit:
38
+ messages.append(item)
39
+ if len(messages) >= limit:
40
40
  break
41
- turns.reverse()
42
- return turns
41
+ messages.reverse()
42
+ return messages
43
43
 
44
44
 
45
45
  def _normalize_recap(raw: str) -> str | None:
@@ -59,11 +59,11 @@ async def generate_away_summary(
59
59
  """Generate a short away-summary text. Returns None on empty session,
60
60
  abort, or error — never raises."""
61
61
 
62
- turns = _recent_turn_messages(session, _RECENT_MESSAGE_WINDOW)
63
- if not turns:
62
+ messages = _recent_recap_messages(session, _RECENT_MESSAGE_WINDOW)
63
+ if not messages:
64
64
  return None
65
65
 
66
- transcript = serialize_conversation(turns)
66
+ transcript = serialize_conversation(messages)
67
67
  if not transcript.strip():
68
68
  return None
69
69
 
@@ -75,7 +75,7 @@ async def generate_away_summary(
75
75
  call_param.max_tokens = _AWAY_SUMMARY_MAX_TOKENS
76
76
  call_param.tools = None
77
77
 
78
- log_debug("[AwaySummary] request", f"turns={len(turns)}", debug_type=DebugType.RESPONSE)
78
+ log_debug("[AwaySummary] request", f"messages={len(messages)}", debug_type=DebugType.RESPONSE)
79
79
 
80
80
  if cancel is not None and cancel.is_set():
81
81
  return None
@@ -1,9 +1,9 @@
1
1
  """Prompt-prefix cache tracking: hit rate computation and break detection.
2
2
 
3
- Consolidates all cache-related turn-over-turn tracking:
3
+ Consolidates all cache-related step-over-step tracking:
4
4
  - Cache hit rate: ``cached_tokens[N] / input_tokens[N-1]``, fed to the spinner.
5
5
  - Cache break detection: alerts when cached tokens drop significantly between
6
- turns, writes a report file with diagnosis.
6
+ steps, writes a report file with diagnosis.
7
7
  """
8
8
 
9
9
  from __future__ import annotations
@@ -79,7 +79,7 @@ class CacheBreakReport:
79
79
  "Prompt Cache Break Report",
80
80
  "========================",
81
81
  f"Time: {datetime.now().isoformat()}",
82
- f"Turn: #{self.call_number}",
82
+ f"Step: #{self.call_number}",
83
83
  "",
84
84
  "## Summary",
85
85
  f"Reason: {self.reason}",
@@ -127,15 +127,15 @@ class CacheBreakReport:
127
127
 
128
128
 
129
129
  class CacheTracker:
130
- """Tracks prompt-prefix cache across turns.
130
+ """Tracks prompt-prefix cache across steps.
131
131
 
132
- Owned by ``MetadataAccumulator``; handles both the per-turn hit rate
132
+ Owned by ``MetadataAccumulator``; handles both the per-step hit rate
133
133
  (for the spinner) and cache-break detection (for the error alert).
134
134
  """
135
135
 
136
136
  def __init__(self) -> None:
137
137
  # --- hit rate state ---
138
- self._prev_turn_input_tokens: int = 0
138
+ self._prev_step_input_tokens: int = 0
139
139
  self._hit_rate_sum: float = 0.0
140
140
  self._hit_rate_count: int = 0
141
141
  self.last_hit_rate: float | None = None
@@ -152,13 +152,13 @@ class CacheTracker:
152
152
  # -- public: called by MetadataAccumulator ---------------------
153
153
 
154
154
  @property
155
- def prev_turn_input_tokens(self) -> int:
156
- """Input token count from the most recent successful turn (for first-token timeout)."""
157
- return self._prev_turn_input_tokens
155
+ def prev_step_input_tokens(self) -> int:
156
+ """Input token count from the most recent successful step (for first-token timeout)."""
157
+ return self._prev_step_input_tokens
158
158
 
159
159
  @property
160
160
  def avg_hit_rate(self) -> float | None:
161
- """Average cache hit rate across all turns (for task metadata)."""
161
+ """Average cache hit rate across all steps (for task metadata)."""
162
162
  return self._hit_rate_sum / self._hit_rate_count if self._hit_rate_count > 0 else None
163
163
 
164
164
  def record_pre_call_state(
@@ -180,18 +180,18 @@ class CacheTracker:
180
180
  self._call_count += 1
181
181
 
182
182
  def update(self, usage: Usage) -> CacheBreakReport | None:
183
- """Process a turn's usage: compute hit rate and check for cache break.
183
+ """Process a step's usage: compute hit rate and check for cache break.
184
184
 
185
185
  Returns a ``CacheBreakReport`` if a break is detected, ``None`` otherwise.
186
186
  """
187
187
  # --- hit rate ---
188
- if self._prev_turn_input_tokens > 0:
189
- hit_rate = usage.cached_tokens / self._prev_turn_input_tokens
188
+ if self._prev_step_input_tokens > 0:
189
+ hit_rate = usage.cached_tokens / self._prev_step_input_tokens
190
190
  self._hit_rate_sum += hit_rate
191
191
  self._hit_rate_count += 1
192
192
  self.last_hit_rate = hit_rate
193
193
  self.last_cached_tokens = usage.cached_tokens
194
- self.last_prev_input_tokens = self._prev_turn_input_tokens
194
+ self.last_prev_input_tokens = self._prev_step_input_tokens
195
195
  else:
196
196
  self.last_hit_rate = None
197
197
  self.last_cached_tokens = 0
@@ -199,7 +199,7 @@ class CacheTracker:
199
199
 
200
200
  # Use the larger value as denominator baseline so cache hit rate remains
201
201
  # stable across providers with different usage field semantics.
202
- self._prev_turn_input_tokens = max(
202
+ self._prev_step_input_tokens = max(
203
203
  usage.input_tokens,
204
204
  usage.cached_tokens + usage.cache_write_tokens,
205
205
  )
@@ -45,12 +45,12 @@ if run_ops and should_compact_threshold(...):
45
45
  await executor.submit_and_wait(CompactSessionOperation(...))
46
46
  ```
47
47
 
48
- ### 2. Task Turn Start (`agent/task.py`)
48
+ ### 2. Task Step Start (`agent/task.py`)
49
49
 
50
- At the beginning of each turn in `TaskRunner._run_inner()`. Important for multi-turn tool loops where no new user input occurs:
50
+ At the beginning of each step in `TaskRunner._run_inner()`. Important for multi-step tool loops where no new user input occurs:
51
51
 
52
52
  ```python
53
- # Threshold-based compaction before starting a new turn
53
+ # Threshold-based compaction before starting a new step
54
54
  if ctx.sub_agent_state is None and should_compact_threshold(...):
55
55
  result = await run_compaction(reason=CompactionReason.THRESHOLD, ...)
56
56
  session_ctx.append_history([result.to_entry()])
@@ -63,11 +63,11 @@ Note: Sub-agents skip threshold compaction (handled by parent).
63
63
  When LLM API returns context overflow error, triggers compaction and retries:
64
64
 
65
65
  ```python
66
- except TurnError as e:
66
+ except StepError as e:
67
67
  if is_context_overflow(str(e)):
68
68
  result = await run_compaction(reason=CompactionReason.OVERFLOW, ...)
69
69
  session_ctx.append_history([result.to_entry()])
70
- continue # retry turn
70
+ continue # retry step
71
71
  ```
72
72
 
73
73
  ## Compaction Process
@@ -22,6 +22,7 @@ from klaude_code.llm import LLMClientABC
22
22
  from klaude_code.prompts.compaction import (
23
23
  COMPACT_FORK_PROMPT,
24
24
  COMPACT_FORK_UPDATE_PROMPT,
25
+ COMPACTION_CONTINUATION_INSTRUCTION,
25
26
  COMPACTION_SUMMARY_PREFIX,
26
27
  SUMMARIZATION_PROMPT,
27
28
  SUMMARIZATION_SYSTEM_PROMPT,
@@ -36,6 +37,21 @@ _MAX_TOOL_OUTPUT_CHARS = 4000
36
37
  _MAX_TOOL_CALL_CHARS = 2000
37
38
  _DEFAULT_IMAGE_TOKENS = 1200
38
39
  _SYSTEM_REMINDER_RE = re.compile(r"<system-reminder>.*?</system-reminder>", re.DOTALL)
40
+ _CONSTRAINTS_SECTION_RE = re.compile(r"(?ms)^(## Constraints & Preferences\s*\n)(.*?)(?=^## |\Z)")
41
+ _SUMMARY_INSTRUCTION_LEAK_MARKERS = (
42
+ "不要继续当前任务",
43
+ "不要继续对话",
44
+ "只输出结构化上下文摘要",
45
+ "只输出结构化摘要",
46
+ "只输出更新后的结构化摘要",
47
+ "do not continue the task",
48
+ "do not continue the conversation",
49
+ "only output the structured summary",
50
+ "only output the updated structured summary",
51
+ "tool/continuation/output-format rules",
52
+ )
53
+ _SUMMARY_TOOL_LEAK_MARKERS = ("不要调用任何工具", "不要使用工具", "do not call any tools")
54
+ _SUMMARY_CONTEXT_MARKERS = ("摘要", "summary", "structured", "only output", "只输出")
39
55
 
40
56
 
41
57
  class CompactionReason(str, Enum):
@@ -91,7 +107,7 @@ def _resolve_compaction_config(
91
107
  keep_recent = min(keep_recent, max_keep)
92
108
  # Manual /compact expresses user intent to aggressively free context, not
93
109
  # just bring the session back under the auto threshold. Shrink keep_recent
94
- # so roughly the last turn or two stays uncompacted. Guarded by min() so
110
+ # so roughly the last step or two stays uncompacted. Guarded by min() so
95
111
  # tiny sessions (where threshold keep is already small) don't inflate back.
96
112
  if reason == CompactionReason.MANUAL:
97
113
  keep_recent = min(keep_recent, max(2048, min(8192, keep_recent // 4)))
@@ -202,7 +218,11 @@ async def run_compaction(
202
218
  if cut_index <= base_start_index:
203
219
  raise ValueError("Nothing to compact (session too small)")
204
220
 
205
- previous_summary = last_compaction.summary if last_compaction else None
221
+ previous_summary = (
222
+ sanitize_summary_instruction_leaks(_strip_trailing_continuation_instruction(last_compaction.summary))
223
+ if last_compaction
224
+ else None
225
+ )
206
226
  tokens_before = get_last_context_tokens(session)
207
227
  if tokens_before is None:
208
228
  tokens_before = estimate_history_tokens(history)
@@ -214,6 +234,7 @@ async def run_compaction(
214
234
  summary, fork_usage = await _build_summary_fork(
215
235
  session=session,
216
236
  cut_index=cut_index,
237
+ llm_client=llm_client,
217
238
  main_profile=main_profile,
218
239
  focus=focus,
219
240
  has_previous_summary=previous_summary is not None,
@@ -254,6 +275,8 @@ async def run_compaction(
254
275
  )
255
276
  fork_usage = None
256
277
 
278
+ summary = sanitize_summary_instruction_leaks(summary)
279
+
257
280
  file_ops = collect_file_operations(
258
281
  session=session,
259
282
  summarized_messages=messages_to_summarize,
@@ -261,6 +284,7 @@ async def run_compaction(
261
284
  previous_details=last_compaction.details if last_compaction else None,
262
285
  )
263
286
  summary += format_file_operations(file_ops.read_files, file_ops.modified_files)
287
+ summary = append_continuation_instruction(summary)
264
288
 
265
289
  kept_items_brief = collect_kept_items_brief(history, cut_index)
266
290
 
@@ -285,6 +309,7 @@ async def _build_summary_fork(
285
309
  *,
286
310
  session: Session,
287
311
  cut_index: int,
312
+ llm_client: LLMClientABC,
288
313
  main_profile: AgentProfile,
289
314
  focus: str | None,
290
315
  has_previous_summary: bool,
@@ -321,7 +346,7 @@ async def _build_summary_fork(
321
346
  call_param.tools = main_profile.tools # Must match parent; tools=[] would break cache.
322
347
  call_param.max_tokens = max_summary_tokens
323
348
 
324
- stream = await main_profile.llm_client.call(call_param)
349
+ stream = await llm_client.call(call_param)
325
350
  accumulated: list[str] = []
326
351
  final_message: message.AssistantMessage | None = None
327
352
  async for item in stream:
@@ -496,6 +521,44 @@ def format_file_operations(read_files: list[str], modified_files: list[str]) ->
496
521
  return "\n\n" + "\n\n".join(sections)
497
522
 
498
523
 
524
+ def sanitize_summary_instruction_leaks(summary: str) -> str:
525
+ """Remove compaction meta-instructions leaked into summary constraints."""
526
+
527
+ def _replace(match: re.Match[str]) -> str:
528
+ header = match.group(1)
529
+ body = match.group(2)
530
+ kept_lines = [line for line in body.splitlines() if not _is_summary_instruction_leak(line)]
531
+ kept_body = "\n".join(kept_lines).strip()
532
+ if not kept_body:
533
+ kept_body = "- (none)"
534
+ return f"{header}{kept_body}\n\n"
535
+
536
+ return _CONSTRAINTS_SECTION_RE.sub(_replace, summary)
537
+
538
+
539
+ def _is_summary_instruction_leak(line: str) -> bool:
540
+ normalized = line.strip().lower()
541
+ if not normalized.startswith(("-", "*")):
542
+ return False
543
+ if any(marker in normalized for marker in _SUMMARY_INSTRUCTION_LEAK_MARKERS):
544
+ return True
545
+ has_tool_marker = any(marker in normalized for marker in _SUMMARY_TOOL_LEAK_MARKERS)
546
+ has_summary_context = any(marker in normalized for marker in _SUMMARY_CONTEXT_MARKERS)
547
+ return has_tool_marker and has_summary_context
548
+
549
+
550
+ def append_continuation_instruction(summary: str) -> str:
551
+ base = _strip_trailing_continuation_instruction(summary).rstrip()
552
+ return f"{base}\n\n{COMPACTION_CONTINUATION_INSTRUCTION}"
553
+
554
+
555
+ def _strip_trailing_continuation_instruction(summary: str) -> str:
556
+ stripped = summary.rstrip()
557
+ if stripped.endswith(COMPACTION_CONTINUATION_INSTRUCTION):
558
+ return stripped[: -len(COMPACTION_CONTINUATION_INSTRUCTION)].rstrip()
559
+ return summary
560
+
561
+
499
562
  def _find_last_compaction(
500
563
  history: list[message.HistoryEvent],
501
564
  ) -> tuple[int, message.CompactionEntry | None]:
@@ -564,10 +627,10 @@ def _adjust_cut_index(history: list[message.HistoryEvent], cut_index: int, start
564
627
  # kept together. This protects get_llm_history's _strip_dangling_tool_calls from
565
628
  # fabricating synthetic "interrupted" messages (which also breaks cache prefix
566
629
  # match with the parent request).
567
- return _avoid_splitting_tool_turn(history, cut_index, start_index)
630
+ return _avoid_splitting_tool_step(history, cut_index, start_index)
568
631
 
569
632
 
570
- def _avoid_splitting_tool_turn(history: list[message.HistoryEvent], cut_index: int, start_index: int) -> int:
633
+ def _avoid_splitting_tool_step(history: list[message.HistoryEvent], cut_index: int, start_index: int) -> int:
571
634
  """Walk compacted backwards; if the most recent Assistant has dangling tool_calls,
572
635
  move cut_index to before that Assistant.
573
636
  """
@@ -602,7 +665,7 @@ def _find_anchor_index(history: list[message.HistoryEvent], start: int, *, forwa
602
665
  DeveloperMessage is skipped because this search is invoked precisely to escape
603
666
  a DeveloperMessage cut position.
604
667
 
605
- The final ``_avoid_splitting_tool_turn`` pass catches the remaining unsafe
668
+ The final ``_avoid_splitting_tool_step`` pass catches the remaining unsafe
606
669
  case: cut landing immediately before an Assistant whose tool_calls have
607
670
  results in compacted (rare, only via backward anchor).
608
671
  """
@@ -22,7 +22,7 @@ from klaude_code.agent.compaction.compaction import (
22
22
  )
23
23
  from klaude_code.const import (
24
24
  INITIAL_RETRY_DELAY_S,
25
- MAX_FAILED_TURN_RETRIES,
25
+ MAX_FAILED_STEP_RETRIES,
26
26
  MAX_RETRY_DELAY_S,
27
27
  )
28
28
  from klaude_code.llm import LLMClientABC
@@ -220,7 +220,7 @@ async def _call_extractor(
220
220
  if cancel is not None and cancel.is_set():
221
221
  raise asyncio.CancelledError
222
222
 
223
- for attempt in range(MAX_FAILED_TURN_RETRIES + 1):
223
+ for attempt in range(MAX_FAILED_STEP_RETRIES + 1):
224
224
  try:
225
225
  return await _call_extractor_once(
226
226
  input=input,
@@ -231,7 +231,7 @@ async def _call_extractor(
231
231
  except asyncio.CancelledError:
232
232
  raise
233
233
  except Exception:
234
- if attempt >= MAX_FAILED_TURN_RETRIES:
234
+ if attempt >= MAX_FAILED_STEP_RETRIES:
235
235
  raise
236
236
  delay = _retry_delay_seconds(attempt + 1)
237
237
  if cancel is None:
@@ -0,0 +1,73 @@
1
+ from __future__ import annotations
2
+
3
+ from klaude_code.agent.compaction.overflow import is_context_overflow
4
+ from klaude_code.agent.runtime.llm import FallbackLLMClient, ModelFallback
5
+ from klaude_code.llm import LLMClientABC
6
+ from klaude_code.protocol import events, message
7
+ from klaude_code.protocol.tools import SubAgentType
8
+
9
+
10
+ def fallback_reason(error_message: str) -> str:
11
+ first_line = error_message.strip().splitlines()[0] if error_message.strip() else "LLM request failed"
12
+ return first_line[:500]
13
+
14
+
15
+ def is_fallbackable_llm_error(error_message: str) -> bool:
16
+ text = error_message.casefold()
17
+ if is_context_overflow(error_message):
18
+ return False
19
+ fallbackable_markers = (
20
+ "insufficient_quota",
21
+ "exceeded your current quota",
22
+ "quota exceeded",
23
+ "quota_exceeded",
24
+ "billing",
25
+ "credit balance",
26
+ "credits exhausted",
27
+ "insufficient credits",
28
+ "payment required",
29
+ "model_not_found",
30
+ "model_not_available",
31
+ "does not have access to model",
32
+ "not authorized to access",
33
+ "permission_denied",
34
+ "permission denied",
35
+ "usage_limit_reached",
36
+ )
37
+ return any(marker in text for marker in fallbackable_markers)
38
+
39
+
40
+ def fallback_llm_client(client: LLMClientABC, error_message: str) -> ModelFallback | None:
41
+ if not isinstance(client, FallbackLLMClient):
42
+ return None
43
+ if not is_fallbackable_llm_error(error_message):
44
+ return None
45
+ return client.fallback_to_next()
46
+
47
+
48
+ def build_fallback_model_config_warn(
49
+ *,
50
+ session_id: str,
51
+ fallback: ModelFallback,
52
+ error_message: str,
53
+ sub_agent_type: SubAgentType | None = None,
54
+ ) -> tuple[message.FallbackModelConfigWarnEntry, events.FallbackModelConfigWarnEvent]:
55
+ reason = fallback_reason(error_message)
56
+ entry = message.FallbackModelConfigWarnEntry(
57
+ sub_agent_type=sub_agent_type,
58
+ from_model=fallback.from_candidate.model_name,
59
+ from_provider=fallback.from_candidate.provider,
60
+ to_model=fallback.to_candidate.model_name,
61
+ to_provider=fallback.to_candidate.provider,
62
+ reason=reason,
63
+ )
64
+ event = events.FallbackModelConfigWarnEvent(
65
+ session_id=session_id,
66
+ sub_agent_type=entry.sub_agent_type,
67
+ from_model=entry.from_model,
68
+ from_provider=entry.from_provider,
69
+ to_model=entry.to_model,
70
+ to_provider=entry.to_provider,
71
+ reason=entry.reason,
72
+ )
73
+ return entry, event