klaude-code 2.29.0__tar.gz → 2.30.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 (769) hide show
  1. {klaude_code-2.29.0 → klaude_code-2.30.0}/PKG-INFO +1 -1
  2. {klaude_code-2.29.0 → klaude_code-2.30.0}/pyproject.toml +1 -1
  3. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/compaction/compaction.py +3 -1
  4. klaude_code-2.30.0/src/klaude_code/agent/model_fallback.py +73 -0
  5. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/prompt_suggestion/prompt_suggestion.py +8 -11
  6. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/rewind/manager.py +0 -3
  7. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/runtime/agent_ops.py +97 -10
  8. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/runtime/config_ops.py +16 -2
  9. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/runtime/dispatcher.py +3 -0
  10. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/runtime/llm.py +44 -20
  11. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/skill_inventory.py +23 -14
  12. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/system_prompt.py +6 -4
  13. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/task.py +192 -184
  14. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/app/ports/input.py +2 -3
  15. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/app/runtime.py +18 -1
  16. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/app/runtime_facade.py +3 -0
  17. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/config/assets/builtin_config.yaml +10 -10
  18. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/config/thinking.py +1 -1
  19. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/google/input.py +1 -2
  20. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/model_id.py +0 -13
  21. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/session/store.py +23 -29
  22. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/apply_patch.py +0 -11
  23. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/rich/theme.py +1 -1
  24. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/completers.py +61 -4
  25. klaude_code-2.30.0/src/klaude_code/tui/input/completion_menu.py +276 -0
  26. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/flicker_safe_stdout.py +5 -1
  27. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/key_bindings.py +7 -2
  28. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/prompt_status_bar.py +71 -33
  29. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/prompt_toolkit.py +252 -283
  30. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/pt_theme.py +4 -1
  31. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/machine.py +13 -14
  32. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/renderer.py +10 -8
  33. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/runner.py +101 -33
  34. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/selector.py +8 -0
  35. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/update.py +0 -12
  36. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/session_index.py +0 -30
  37. klaude_code-2.29.0/src/klaude_code/agent/attachments/todo.py +0 -71
  38. {klaude_code-2.29.0 → klaude_code-2.30.0}/README.md +0 -0
  39. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/.DS_Store +0 -0
  40. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/__init__.py +0 -0
  41. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/__init__.py +0 -0
  42. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/agent.py +0 -0
  43. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/agent_profile.py +0 -0
  44. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/attachments/__init__.py +0 -0
  45. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/attachments/collection.py +0 -0
  46. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/attachments/files.py +0 -0
  47. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/attachments/memory.py +0 -0
  48. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/attachments/skills.py +0 -0
  49. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/attachments/state.py +0 -0
  50. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/away_summary.py +0 -0
  51. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/bash_mode.py +0 -0
  52. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/cache_break_detection.py +0 -0
  53. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/cache_safe.py +0 -0
  54. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/compaction/AGENTS.md +0 -0
  55. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/compaction/__init__.py +0 -0
  56. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/compaction/overflow.py +0 -0
  57. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/handoff/__init__.py +0 -0
  58. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/handoff/handoff.py +0 -0
  59. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/handoff/manager.py +0 -0
  60. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/prompt_suggestion/__init__.py +0 -0
  61. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/rewind/__init__.py +0 -0
  62. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/runtime/__init__.py +0 -0
  63. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/runtime/away_summary.py +0 -0
  64. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/runtime/sub_agent.py +0 -0
  65. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/session_stats.py +0 -0
  66. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/session_title.py +0 -0
  67. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/agent/turn.py +0 -0
  68. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/app/__init__.py +0 -0
  69. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/app/auth_flow.py +0 -0
  70. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/app/log_viewer.html +0 -0
  71. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/app/log_viewer.py +0 -0
  72. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/app/ports/__init__.py +0 -0
  73. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/app/ports/display.py +0 -0
  74. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/app/ports/interaction.py +0 -0
  75. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/auth/AGENTS.md +0 -0
  76. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/auth/__init__.py +0 -0
  77. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/auth/base.py +0 -0
  78. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/auth/codex/__init__.py +0 -0
  79. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/auth/codex/exceptions.py +0 -0
  80. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/auth/codex/jwt_utils.py +0 -0
  81. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/auth/codex/oauth.py +0 -0
  82. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/auth/codex/token_manager.py +0 -0
  83. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/auth/copilot/__init__.py +0 -0
  84. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/auth/copilot/exceptions.py +0 -0
  85. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/auth/copilot/oauth.py +0 -0
  86. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/auth/copilot/token_manager.py +0 -0
  87. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/auth/env.py +0 -0
  88. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/cli/__init__.py +0 -0
  89. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/cli/auth_cmd.py +0 -0
  90. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/cli/config_cmd.py +0 -0
  91. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/cli/cost_cmd.py +0 -0
  92. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/cli/debug.py +0 -0
  93. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/cli/list_model.py +0 -0
  94. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/cli/main.py +0 -0
  95. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/cli/oauth_usage.py +0 -0
  96. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/cli/self_update.py +0 -0
  97. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/cli/web_cmd.py +0 -0
  98. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/config/__init__.py +0 -0
  99. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/config/assets/__init__.py +0 -0
  100. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/config/builtin_config.py +0 -0
  101. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/config/config.py +0 -0
  102. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/config/formatters.py +0 -0
  103. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/config/loader.py +0 -0
  104. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/config/merge.py +0 -0
  105. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/config/model_matcher.py +0 -0
  106. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/config/sub_agent_model.py +0 -0
  107. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/const.py +0 -0
  108. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/control/__init__.py +0 -0
  109. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/control/event_bus.py +0 -0
  110. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/control/event_relay.py +0 -0
  111. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/control/runtime/__init__.py +0 -0
  112. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/control/runtime/actor.py +0 -0
  113. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/control/runtime/registry.py +0 -0
  114. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/control/session_meta_relay.py +0 -0
  115. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/control/user_interaction.py +0 -0
  116. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/AGENTS.md +0 -0
  117. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/__init__.py +0 -0
  118. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/anthropic/__init__.py +0 -0
  119. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/anthropic/client.py +0 -0
  120. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/anthropic/input.py +0 -0
  121. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/bedrock_anthropic/__init__.py +0 -0
  122. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/bedrock_anthropic/client.py +0 -0
  123. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/client.py +0 -0
  124. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/copilot/__init__.py +0 -0
  125. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/copilot/client.py +0 -0
  126. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/google/__init__.py +0 -0
  127. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/google/client.py +0 -0
  128. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/google_vertex/__init__.py +0 -0
  129. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/google_vertex/client.py +0 -0
  130. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/image.py +0 -0
  131. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/input_common.py +0 -0
  132. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/json_stable.py +0 -0
  133. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_codex/__init__.py +0 -0
  134. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_codex/client.py +0 -0
  135. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_compatible/__init__.py +0 -0
  136. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_compatible/client.py +0 -0
  137. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_compatible/input.py +0 -0
  138. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_compatible/stream.py +0 -0
  139. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_responses/__init__.py +0 -0
  140. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_responses/client.py +0 -0
  141. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_responses/input.py +0 -0
  142. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/openrouter/__init__.py +0 -0
  143. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/openrouter/client.py +0 -0
  144. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/openrouter/input.py +0 -0
  145. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/openrouter/reasoning.py +0 -0
  146. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/proxy_support.py +0 -0
  147. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/registry.py +0 -0
  148. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/stream_parts.py +0 -0
  149. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/llm/usage.py +0 -0
  150. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/log.py +0 -0
  151. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/__init__.py +0 -0
  152. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/attachments.py +0 -0
  153. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/away_summary.py +0 -0
  154. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/compaction.py +0 -0
  155. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/handoff.py +0 -0
  156. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/messages.py +0 -0
  157. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/prompt_suggestion.py +0 -0
  158. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/session_title.py +0 -0
  159. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-finder.md +0 -0
  160. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-review.md +0 -0
  161. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-simplifier.md +0 -0
  162. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/sub_agents.py +0 -0
  163. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/system/auto-memory-prompt.md +0 -0
  164. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/system/base-system-prompt-gpt.md +0 -0
  165. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/system/base-system-prompt.md +0 -0
  166. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/system/extended-thinking-prompt.md +0 -0
  167. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/system/following-conventions-prompt.md +0 -0
  168. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/prompts/system/git-workspace-hygiene-prompt.md +0 -0
  169. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/__init__.py +0 -0
  170. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/events.py +0 -0
  171. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/input_syntax.py +0 -0
  172. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/llm_param.py +0 -0
  173. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/message.py +0 -0
  174. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/__init__.py +0 -0
  175. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/common.py +0 -0
  176. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/developer_ui.py +0 -0
  177. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/file_tracking.py +0 -0
  178. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/session_runtime.py +0 -0
  179. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/sub_agent.py +0 -0
  180. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/task_metadata.py +0 -0
  181. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/todo.py +0 -0
  182. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/tool_ui.py +0 -0
  183. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/usage.py +0 -0
  184. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/op.py +0 -0
  185. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/op_handler.py +0 -0
  186. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/sub_agent/AGENTS.md +0 -0
  187. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/sub_agent/__init__.py +0 -0
  188. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/sub_agent/finder.py +0 -0
  189. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/sub_agent/general_purpose.py +0 -0
  190. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/sub_agent/review.py +0 -0
  191. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/sub_agent/simplifier.py +0 -0
  192. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/system_prompt.py +0 -0
  193. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/tools.py +0 -0
  194. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/protocol/user_interaction.py +0 -0
  195. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/session/__init__.py +0 -0
  196. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/session/codec.py +0 -0
  197. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/session/history.py +0 -0
  198. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/session/meta.py +0 -0
  199. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/session/selector.py +0 -0
  200. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/session/session.py +0 -0
  201. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/session/store_registry.py +0 -0
  202. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/AGENTS.md +0 -0
  203. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/__init__.py +0 -0
  204. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/.git +0 -0
  205. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/.gitignore +0 -0
  206. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/SOURCES.md +0 -0
  207. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/SKILL.md +0 -0
  208. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/references/authentication.md +0 -0
  209. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/references/commands.md +0 -0
  210. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/references/profiling.md +0 -0
  211. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/references/proxy-support.md +0 -0
  212. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/references/session-management.md +0 -0
  213. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/references/snapshot-refs.md +0 -0
  214. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/references/video-recording.md +0 -0
  215. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/templates/authenticated-session.sh +0 -0
  216. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/templates/capture-workflow.sh +0 -0
  217. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/templates/form-automation.sh +0 -0
  218. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/frontend-design/SKILL.md +0 -0
  219. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/gpt-image-gen/LICENSE.txt +0 -0
  220. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/gpt-image-gen/SKILL.md +0 -0
  221. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/gpt-image-gen/references/cli.md +0 -0
  222. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/gpt-image-gen/references/image-api.md +0 -0
  223. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/gpt-image-gen/references/prompting.md +0 -0
  224. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/gpt-image-gen/references/sample-prompts.md +0 -0
  225. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/gpt-image-gen/scripts/image_gen.py +0 -0
  226. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/klaude-config/SKILL.md +0 -0
  227. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/klaude-config/references/builtin-providers.md +0 -0
  228. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/klaude-config/references/config-file.md +0 -0
  229. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/klaude-config/references/memory-files.md +0 -0
  230. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/klaude-config/references/skill-system.md +0 -0
  231. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/nano-banana-image-gen/SKILL.md +0 -0
  232. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/cli.md +0 -0
  233. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/gemini-api.md +0 -0
  234. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/prompting.md +0 -0
  235. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/sample-prompts.md +0 -0
  236. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/vertex-setup.md +0 -0
  237. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/nano-banana-image-gen/scripts/gemini_image_gen.py +0 -0
  238. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/SKILL.md +0 -0
  239. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/forms.md +0 -0
  240. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/reference.md +0 -0
  241. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/scripts/check_bounding_boxes.py +0 -0
  242. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/scripts/check_fillable_fields.py +0 -0
  243. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/scripts/convert_pdf_to_images.py +0 -0
  244. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/scripts/create_validation_image.py +0 -0
  245. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/scripts/extract_form_field_info.py +0 -0
  246. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/scripts/extract_form_structure.py +0 -0
  247. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/scripts/fill_fillable_fields.py +0 -0
  248. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/scripts/fill_pdf_form_with_annotations.py +0 -0
  249. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/playwright/LICENSE.txt +0 -0
  250. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/playwright/NOTICE.txt +0 -0
  251. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/playwright/SKILL.md +0 -0
  252. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/playwright/assets/playwright-small.svg +0 -0
  253. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/playwright/assets/playwright.png +0 -0
  254. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/playwright/references/cli.md +0 -0
  255. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/playwright/references/workflows.md +0 -0
  256. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/playwright/scripts/playwright_cli.sh +0 -0
  257. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/SKILL.md +0 -0
  258. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/3d.md +0 -0
  259. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/animations.md +0 -0
  260. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/charts-bar-chart.tsx +0 -0
  261. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +0 -0
  262. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +0 -0
  263. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets.md +0 -0
  264. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/audio-visualization.md +0 -0
  265. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/audio.md +0 -0
  266. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/calculate-metadata.md +0 -0
  267. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/can-decode.md +0 -0
  268. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/charts.md +0 -0
  269. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/compositions.md +0 -0
  270. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/display-captions.md +0 -0
  271. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/extract-frames.md +0 -0
  272. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/ffmpeg.md +0 -0
  273. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/fonts.md +0 -0
  274. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-audio-duration.md +0 -0
  275. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-video-dimensions.md +0 -0
  276. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-video-duration.md +0 -0
  277. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/gifs.md +0 -0
  278. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/images.md +0 -0
  279. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/import-srt-captions.md +0 -0
  280. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/light-leaks.md +0 -0
  281. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/lottie.md +0 -0
  282. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/maps.md +0 -0
  283. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/measuring-dom-nodes.md +0 -0
  284. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/measuring-text.md +0 -0
  285. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/parameters.md +0 -0
  286. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/sequencing.md +0 -0
  287. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/sfx.md +0 -0
  288. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/subtitles.md +0 -0
  289. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/tailwind.md +0 -0
  290. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/text-animations.md +0 -0
  291. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/timing.md +0 -0
  292. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transcribe-captions.md +0 -0
  293. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transitions.md +0 -0
  294. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transparent-videos.md +0 -0
  295. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/trimming.md +0 -0
  296. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/videos.md +0 -0
  297. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/voiceover.md +0 -0
  298. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/.gitignore +0 -0
  299. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/SKILL.md +0 -0
  300. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/package.json +0 -0
  301. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/references/config/first-time-setup.md +0 -0
  302. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/references/config/preferences-schema.md +0 -0
  303. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/references/templates/standalone.html +0 -0
  304. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/references/troubleshooting.md +0 -0
  305. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/scripts/render_mermaid.js +0 -0
  306. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/scripts/setup.sh +0 -0
  307. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/session-logs/SKILL.md +0 -0
  308. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/skill-creator/SKILL.md +0 -0
  309. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/skills-lock.json +0 -0
  310. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/LICENSE.txt +0 -0
  311. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/SKILL.md +0 -0
  312. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/assets/sora-small.svg +0 -0
  313. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/assets/sora.png +0 -0
  314. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/references/cinematic-shots.md +0 -0
  315. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/references/cli.md +0 -0
  316. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/references/prompting.md +0 -0
  317. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/references/sample-prompts.md +0 -0
  318. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/references/social-ads.md +0 -0
  319. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/references/troubleshooting.md +0 -0
  320. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/references/video-api.md +0 -0
  321. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/scripts/sora.py +0 -0
  322. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/svg-animations/SKILL.md +0 -0
  323. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/svg-animations/examples/index.html +0 -0
  324. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/web-search/SKILL.md +0 -0
  325. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/loader.py +0 -0
  326. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/manager.py +0 -0
  327. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/skill/system_skills.py +0 -0
  328. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/AGENTS.md +0 -0
  329. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/__init__.py +0 -0
  330. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/agent_tool.md +0 -0
  331. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/agent_tool.py +0 -0
  332. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/ask_user_question_tool.md +0 -0
  333. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/ask_user_question_tool.py +0 -0
  334. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/core/__init__.py +0 -0
  335. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/core/abc.py +0 -0
  336. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/core/context.py +0 -0
  337. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/core/offload.py +0 -0
  338. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/core/registry.py +0 -0
  339. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/core/runner.py +0 -0
  340. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/__init__.py +0 -0
  341. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/_utils.py +0 -0
  342. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/apply_patch_tool.md +0 -0
  343. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/apply_patch_tool.py +0 -0
  344. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/diff_builder.py +0 -0
  345. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/edit_tool.md +0 -0
  346. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/edit_tool.py +0 -0
  347. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/read_tool.md +0 -0
  348. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/read_tool.py +0 -0
  349. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/write_tool.md +0 -0
  350. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/write_tool.py +0 -0
  351. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/handoff_tool.md +0 -0
  352. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/handoff_tool.py +0 -0
  353. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/rewind_tool.md +0 -0
  354. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/rewind_tool.py +0 -0
  355. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/shell/__init__.py +0 -0
  356. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/shell/bash_tool.md +0 -0
  357. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/shell/bash_tool.py +0 -0
  358. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/shell/command_safety.py +0 -0
  359. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/todo/__init__.py +0 -0
  360. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/todo/todo_write_tool.md +0 -0
  361. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/todo/todo_write_tool.py +0 -0
  362. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/todo/todo_write_tool_raw.md +0 -0
  363. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/web/__init__.py +0 -0
  364. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/web/external_content.py +0 -0
  365. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/web/ssrf.py +0 -0
  366. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/web/web_cache.py +0 -0
  367. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/web/web_fetch_tool.md +0 -0
  368. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/web/web_fetch_tool.py +0 -0
  369. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/web/web_search_tool.md +0 -0
  370. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tool/web/web_search_tool.py +0 -0
  371. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/AGENTS.md +0 -0
  372. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/__init__.py +0 -0
  373. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/AGENTS.md +0 -0
  374. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/__init__.py +0 -0
  375. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/auth_selector.py +0 -0
  376. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/command_abc.py +0 -0
  377. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/compact_cmd.py +0 -0
  378. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/continue_cmd.py +0 -0
  379. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/copy_cmd.py +0 -0
  380. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/debug_cmd.py +0 -0
  381. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/export_session_cmd.py +0 -0
  382. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/export_session_html.py +0 -0
  383. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/fork_session_cmd.py +0 -0
  384. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/login_cmd.py +0 -0
  385. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/logout_cmd.py +0 -0
  386. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/model_cmd.py +0 -0
  387. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/model_picker.py +0 -0
  388. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/new_cmd.py +0 -0
  389. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/recap_cmd.py +0 -0
  390. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/refresh_cmd.py +0 -0
  391. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/registry.py +0 -0
  392. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/status_cmd.py +0 -0
  393. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/sub_agent_model_cmd.py +0 -0
  394. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/thinking_cmd.py +0 -0
  395. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/types.py +0 -0
  396. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/web_cmd.py +0 -0
  397. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/commands.py +0 -0
  398. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/__init__.py +0 -0
  399. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/away_summary.py +0 -0
  400. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/bash_syntax.py +0 -0
  401. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/command_output.py +0 -0
  402. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/common.py +0 -0
  403. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/developer.py +0 -0
  404. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/diffs.py +0 -0
  405. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/errors.py +0 -0
  406. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/metadata.py +0 -0
  407. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/rich/__init__.py +0 -0
  408. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/rich/cjk_wrap.py +0 -0
  409. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/rich/markdown.py +0 -0
  410. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/rich/quote.py +0 -0
  411. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/rich/status.py +0 -0
  412. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/sub_agent.py +0 -0
  413. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/task_file_changes.py +0 -0
  414. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/thinking.py +0 -0
  415. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/__init__.py +0 -0
  416. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_bash.py +0 -0
  417. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_common.py +0 -0
  418. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_dispatch.py +0 -0
  419. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_file.py +0 -0
  420. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_question.py +0 -0
  421. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_read.py +0 -0
  422. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_rewind.py +0 -0
  423. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_todo.py +0 -0
  424. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_web.py +0 -0
  425. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/user_input.py +0 -0
  426. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/welcome.py +0 -0
  427. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/display.py +0 -0
  428. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/AGENTS.md +0 -0
  429. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/__init__.py +0 -0
  430. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/drag_drop.py +0 -0
  431. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/images.py +0 -0
  432. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/paste.py +0 -0
  433. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/status_runtime.py +0 -0
  434. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/__init__.py +0 -0
  435. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/ask_user_question.py +0 -0
  436. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/color.py +0 -0
  437. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/control.py +0 -0
  438. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/focus_tracker.py +0 -0
  439. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/image.py +0 -0
  440. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/notifier.py +0 -0
  441. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/prevent_sleep.py +0 -0
  442. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/session_selector.py +0 -0
  443. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/title.py +0 -0
  444. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/__init__.py +0 -0
  445. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/app.py +0 -0
  446. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/display.py +0 -0
  447. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/abap-BdImnpbu.js +0 -0
  448. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/actionscript-3-CoDkCxhg.js +0 -0
  449. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ada-bCR0ucgS.js +0 -0
  450. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/andromeeda-C4gqWexZ.js +0 -0
  451. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/angular-html-CU67Zn6k.js +0 -0
  452. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/angular-ts-BwZT4LLn.js +0 -0
  453. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/apache-Pmp26Uib.js +0 -0
  454. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/apex-D8_7TLub.js +0 -0
  455. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/apl-dKokRX4l.js +0 -0
  456. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/applescript-Co6uUVPk.js +0 -0
  457. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ara-BRHolxvo.js +0 -0
  458. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/asciidoc-Ve4PFQV2.js +0 -0
  459. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/asm-D_Q5rh1f.js +0 -0
  460. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/astro-CbQHKStN.js +0 -0
  461. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/aurora-x-D-2ljcwZ.js +0 -0
  462. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/awk-DMzUqQB5.js +0 -0
  463. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ayu-dark-DYE7WIF3.js +0 -0
  464. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ayu-light-BA47KaF1.js +0 -0
  465. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ayu-mirage-32ctXXKs.js +0 -0
  466. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ballerina-BFfxhgS-.js +0 -0
  467. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/bat-BkioyH1T.js +0 -0
  468. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/beancount-k_qm7-4y.js +0 -0
  469. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/berry-uYugtg8r.js +0 -0
  470. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/bibtex-CHM0blh-.js +0 -0
  471. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/bicep-Bmn6On1c.js +0 -0
  472. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/bird2-DPOp833l.js +0 -0
  473. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/blade-D4QpJJKB.js +0 -0
  474. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/bsl-BO_Y6i37.js +0 -0
  475. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/c-BIGW1oBm.js +0 -0
  476. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/c3-eo99z4R2.js +0 -0
  477. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/cadence-Bv_4Rxtq.js +0 -0
  478. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/cairo-KRGpt6FW.js +0 -0
  479. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  480. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  481. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  482. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  483. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/clarity-D53aC0YG.js +0 -0
  484. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/clojure-P80f7IUj.js +0 -0
  485. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/cmake-D1j8_8rp.js +0 -0
  486. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/cobol-nwyudZeR.js +0 -0
  487. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/codeowners-Bp6g37R7.js +0 -0
  488. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/codeql-DsOJ9woJ.js +0 -0
  489. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/coffee-Ch7k5sss.js +0 -0
  490. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/common-lisp-Cg-RD9OK.js +0 -0
  491. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/coq-DkFqJrB1.js +0 -0
  492. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/cpp-CofmeUqb.js +0 -0
  493. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/crystal-tKQVLTB8.js +0 -0
  494. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/csharp-COcwbKMJ.js +0 -0
  495. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/css-DPfMkruS.js +0 -0
  496. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/csv-fuZLfV_i.js +0 -0
  497. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/cue-D82EKSYY.js +0 -0
  498. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/cypher-COkxafJQ.js +0 -0
  499. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/d-85-TOEBH.js +0 -0
  500. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/dark-plus-C3mMm8J8.js +0 -0
  501. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/dart-CF10PKvl.js +0 -0
  502. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/dax-CEL-wOlO.js +0 -0
  503. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/desktop-BmXAJ9_W.js +0 -0
  504. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/diff-D97Zzqfu.js +0 -0
  505. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/docker-BcOcwvcX.js +0 -0
  506. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/dotenv-Da5cRb03.js +0 -0
  507. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/dracula-BzJJZx-M.js +0 -0
  508. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/dracula-soft-BXkSAIEj.js +0 -0
  509. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/dream-maker-BtqSS_iP.js +0 -0
  510. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/edge-BkV0erSs.js +0 -0
  511. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/elixir-CDX3lj18.js +0 -0
  512. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/elm-DbKCFpqz.js +0 -0
  513. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/emacs-lisp-C9XAeP06.js +0 -0
  514. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/erb-B12qg9BL.js +0 -0
  515. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/erlang-DsQrWhSR.js +0 -0
  516. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/everforest-dark-BgDCqdQA.js +0 -0
  517. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/everforest-light-C8M2exoo.js +0 -0
  518. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/fennel-BYunw83y.js +0 -0
  519. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/fish-BvzEVeQv.js +0 -0
  520. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/fluent-C4IJs8-o.js +0 -0
  521. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  522. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/fortran-free-form-BxgE0vQu.js +0 -0
  523. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/fsharp-CXgrBDvD.js +0 -0
  524. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gdresource-BOOCDP_w.js +0 -0
  525. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gdscript-C5YyOfLZ.js +0 -0
  526. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gdshader-DkwncUOv.js +0 -0
  527. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/genie-D0YGMca9.js +0 -0
  528. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gherkin-DyxjwDmM.js +0 -0
  529. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/git-commit-F4YmCXRG.js +0 -0
  530. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/git-rebase-r7XF79zn.js +0 -0
  531. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/github-dark-DHJKELXO.js +0 -0
  532. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/github-dark-default-Cuk6v7N8.js +0 -0
  533. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  534. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  535. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/github-light-DAi9KRSo.js +0 -0
  536. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/github-light-default-D7oLnXFd.js +0 -0
  537. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  538. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gleam-BspZqrRM.js +0 -0
  539. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/glimmer-js-Rg0-pVw9.js +0 -0
  540. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/glimmer-ts-U6CK756n.js +0 -0
  541. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/glsl-DplSGwfg.js +0 -0
  542. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gn-n2N0HUVH.js +0 -0
  543. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gnuplot-DdkO51Og.js +0 -0
  544. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/go-CxLEBnE3.js +0 -0
  545. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/graphql-ChdNCCLP.js +0 -0
  546. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/groovy-gcz8RCvz.js +0 -0
  547. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  548. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  549. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  550. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  551. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  552. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  553. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/hack-CaT9iCJl.js +0 -0
  554. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/haml-B8DHNrY2.js +0 -0
  555. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/handlebars-BL8al0AC.js +0 -0
  556. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/haskell-Df6bDoY_.js +0 -0
  557. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/haxe-CzTSHFRz.js +0 -0
  558. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/hcl-BWvSN4gD.js +0 -0
  559. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/highlighted-body-B3W2YXNL-DTuyBW20.js +0 -0
  560. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/hjson-D5-asLiD.js +0 -0
  561. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/hlsl-D3lLCCz7.js +0 -0
  562. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/horizon-BUw7H-hv.js +0 -0
  563. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/horizon-bright-Cn-bp-IR.js +0 -0
  564. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/houston-DnULxvSX.js +0 -0
  565. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/html-GMplVEZG.js +0 -0
  566. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/html-derivative-BFtXZ54Q.js +0 -0
  567. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/http-jrhK8wxY.js +0 -0
  568. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/hurl-irOxFIW8.js +0 -0
  569. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/hxml-Bvhsp5Yf.js +0 -0
  570. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/hy-DFXneXwc.js +0 -0
  571. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/imba-DGztddWO.js +0 -0
  572. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/index-CoapfQ1q.js +0 -0
  573. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/index-TK8frDq8.css +0 -0
  574. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ini-BEwlwnbL.js +0 -0
  575. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/java-CylS5w8V.js +0 -0
  576. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/javascript-wDzz0qaB.js +0 -0
  577. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/jinja-4LBKfQ-Z.js +0 -0
  578. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/jison-wvAkD_A8.js +0 -0
  579. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/json-Cp-IABpG.js +0 -0
  580. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/json5-C9tS-k6U.js +0 -0
  581. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/jsonc-Des-eS-w.js +0 -0
  582. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/jsonl-DcaNXYhu.js +0 -0
  583. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/jsonnet-DFQXde-d.js +0 -0
  584. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/jssm-C2t-YnRu.js +0 -0
  585. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/jsx-g9-lgVsj.js +0 -0
  586. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/julia-CxzCAyBv.js +0 -0
  587. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/just-Cw27pwNe.js +0 -0
  588. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  589. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  590. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/kanagawa-wave-DWedfzmr.js +0 -0
  591. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/kdl-DV7GczEv.js +0 -0
  592. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/kotlin-BdnUsdx6.js +0 -0
  593. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/kusto-DZf3V79B.js +0 -0
  594. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/laserwave-DUszq2jm.js +0 -0
  595. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/latex-CWtU0Tv5.js +0 -0
  596. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/lean-BZvkOJ9d.js +0 -0
  597. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/less-B1dDrJ26.js +0 -0
  598. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/light-plus-B7mTdjB0.js +0 -0
  599. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/liquid-DYVedYrR.js +0 -0
  600. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/llvm-DjAJT7YJ.js +0 -0
  601. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/log-2UxHyX5q.js +0 -0
  602. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/logo-BtOb2qkB.js +0 -0
  603. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/lua-BaeVxFsk.js +0 -0
  604. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/luau-C-HG3fhB.js +0 -0
  605. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/make-CHLpvVh8.js +0 -0
  606. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/markdown-Cvjx9yec.js +0 -0
  607. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/marko-CnJfTvn9.js +0 -0
  608. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/material-theme-D5KoaKCx.js +0 -0
  609. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/material-theme-darker-BfHTSMKl.js +0 -0
  610. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  611. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/material-theme-ocean-CyktbL80.js +0 -0
  612. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  613. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/matlab-D7o27uSR.js +0 -0
  614. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/mdc-BMNejdWA.js +0 -0
  615. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/mdx-Cmh6b_Ma.js +0 -0
  616. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/mermaid-mWjccvbQ.js +0 -0
  617. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/min-dark-CafNBF8u.js +0 -0
  618. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/min-light-CTRr51gU.js +0 -0
  619. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/mipsasm-CKIfxQSi.js +0 -0
  620. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/mojo-rZm6bMo-.js +0 -0
  621. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/monokai-D4h5O-jR.js +0 -0
  622. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/moonbit-_H4v1dQx.js +0 -0
  623. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/move-IF9eRakj.js +0 -0
  624. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/narrat-DRg8JJMk.js +0 -0
  625. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/nextflow-Zz6hmt5N.js +0 -0
  626. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/nextflow-groovy-BeH2EWoN.js +0 -0
  627. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/nginx-BpAMiNFr.js +0 -0
  628. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/night-owl-C39BiMTA.js +0 -0
  629. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/night-owl-light-CMTm3GFP.js +0 -0
  630. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/nim-CVrawwO9.js +0 -0
  631. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/nix-CwoSXNpI.js +0 -0
  632. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/nord-Ddv68eIx.js +0 -0
  633. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/nushell-Cz2AlsmD.js +0 -0
  634. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/objective-c-DXmwc3jG.js +0 -0
  635. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/objective-cpp-CLxacb5B.js +0 -0
  636. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ocaml-C0hk2d4L.js +0 -0
  637. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/odin-BBf5iR-q.js +0 -0
  638. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  639. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/one-light-C3Wv6jpd.js +0 -0
  640. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/openscad-C4EeE6gA.js +0 -0
  641. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/pascal-D93ZcfNL.js +0 -0
  642. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/perl-C0TMdlhV.js +0 -0
  643. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/php-Dhbhpdrm.js +0 -0
  644. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/pierre-dark-BXuwtOqb.js +0 -0
  645. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/pierre-light-dckrK0oj.js +0 -0
  646. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/pkl-u5AG7uiY.js +0 -0
  647. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/plastic-3e1v2bzS.js +0 -0
  648. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/plsql-ChMvpjG-.js +0 -0
  649. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/po-BTJTHyun.js +0 -0
  650. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/poimandres-CS3Unz2-.js +0 -0
  651. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/polar-C0HS_06l.js +0 -0
  652. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/postcss-CXtECtnM.js +0 -0
  653. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/powerquery-CEu0bR-o.js +0 -0
  654. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/powershell-Dpen1YoG.js +0 -0
  655. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/prisma-Dd19v3D-.js +0 -0
  656. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/prolog-CbFg5uaA.js +0 -0
  657. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/proto-C7zT0LnQ.js +0 -0
  658. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/pug-CGlum2m_.js +0 -0
  659. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/puppet-BMWR74SV.js +0 -0
  660. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/purescript-CklMAg4u.js +0 -0
  661. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/python-B6aJPvgy.js +0 -0
  662. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/qml-3beO22l8.js +0 -0
  663. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/qmldir-C8lEn-DE.js +0 -0
  664. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/qss-IeuSbFQv.js +0 -0
  665. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/r-Dspwwk_N.js +0 -0
  666. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/racket-BqYA7rlc.js +0 -0
  667. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/raku-DXvB9xmW.js +0 -0
  668. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/razor-Uh8Bk_45.js +0 -0
  669. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/red-bN70gL4F.js +0 -0
  670. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/reg-C-SQnVFl.js +0 -0
  671. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/regexp-CDVJQ6XC.js +0 -0
  672. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/rel-C3B-1QV4.js +0 -0
  673. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/riscv-BM1_JUlF.js +0 -0
  674. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ron-D8l8udqQ.js +0 -0
  675. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  676. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  677. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/rose-pine-qdsjHGoJ.js +0 -0
  678. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/rosmsg-BJDFO7_C.js +0 -0
  679. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/rst-BrH8l1NY.js +0 -0
  680. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ruby-Dw2BHqvy.js +0 -0
  681. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/rust-B1yitclQ.js +0 -0
  682. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/sas-cz2c8ADy.js +0 -0
  683. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/sass-Cj5Yp3dK.js +0 -0
  684. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/scala-C151Ov-r.js +0 -0
  685. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/scheme-C98Dy4si.js +0 -0
  686. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/scss-OYdSNvt2.js +0 -0
  687. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/sdbl-DVxCFoDh.js +0 -0
  688. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/shaderlab-Dg9Lc6iA.js +0 -0
  689. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/shellscript-Yzrsuije.js +0 -0
  690. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/shellsession-BADoaaVG.js +0 -0
  691. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/slack-dark-BthQWCQV.js +0 -0
  692. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/slack-ochin-DqwNpetd.js +0 -0
  693. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/smalltalk-BERRCDM3.js +0 -0
  694. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/snazzy-light-Bw305WKR.js +0 -0
  695. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/solarized-dark-DXbdFlpD.js +0 -0
  696. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/solarized-light-L9t79GZl.js +0 -0
  697. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/solidity-rGO070M0.js +0 -0
  698. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/soy-Brmx7dQM.js +0 -0
  699. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/sparql-rVzFXLq3.js +0 -0
  700. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/splunk-BtCnVYZw.js +0 -0
  701. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/sql-BLtJtn59.js +0 -0
  702. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ssh-config-_ykCGR6B.js +0 -0
  703. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/stata-BH5u7GGu.js +0 -0
  704. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/stylus-BEDo0Tqx.js +0 -0
  705. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/surrealql-Bq5Q-fJD.js +0 -0
  706. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/svelte-C_ipcX3V.js +0 -0
  707. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/swift-D82vCrfD.js +0 -0
  708. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/synthwave-84-CbfX1IO0.js +0 -0
  709. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/system-verilog-CnnmHF94.js +0 -0
  710. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/systemd-4A_iFExJ.js +0 -0
  711. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/talonscript-CkByrt1z.js +0 -0
  712. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/tasl-QIJgUcNo.js +0 -0
  713. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/tcl-dwOrl1Do.js +0 -0
  714. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/templ-P3uqSqPl.js +0 -0
  715. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/terraform-BETggiCN.js +0 -0
  716. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/tex-idrVyKtj.js +0 -0
  717. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/tokyo-night-hegEt444.js +0 -0
  718. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/toml-vGWfd6FD.js +0 -0
  719. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ts-tags-zn1MmPIZ.js +0 -0
  720. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/tsv-B_m7g4N7.js +0 -0
  721. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/tsx-COt5Ahok.js +0 -0
  722. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/turtle-BsS91CYL.js +0 -0
  723. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/twig-DNn4PbVi.js +0 -0
  724. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/typescript-BPQ3VLAy.js +0 -0
  725. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/typespec-BGHnOYBU.js +0 -0
  726. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/typst-DHCkPAjA.js +0 -0
  727. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/v-BcVCzyr7.js +0 -0
  728. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vala-CsfeWuGM.js +0 -0
  729. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vb-D17OF-Vu.js +0 -0
  730. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/verilog-BQ8w6xss.js +0 -0
  731. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vesper-DU1UobuO.js +0 -0
  732. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vhdl-CeAyd5Ju.js +0 -0
  733. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/viml-CJc9bBzg.js +0 -0
  734. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vitesse-black-Bkuqu6BP.js +0 -0
  735. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vitesse-dark-D0r3Knsf.js +0 -0
  736. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vitesse-light-CVO1_9PV.js +0 -0
  737. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vue-DN_0RTcg.js +0 -0
  738. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vue-html-AaS7Mt5G.js +0 -0
  739. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vue-vine-CQOfvN7w.js +0 -0
  740. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vyper-CDx5xZoG.js +0 -0
  741. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/wasm-CG6Dc4jp.js +0 -0
  742. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/wasm-MzD3tlZU.js +0 -0
  743. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/wenyan-BV7otONQ.js +0 -0
  744. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/wgsl-Dx-B1_4e.js +0 -0
  745. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/wikitext-BhOHFoWU.js +0 -0
  746. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/wit-5i3qLPDT.js +0 -0
  747. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/wolfram-lXgVvXCa.js +0 -0
  748. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/xml-sdJ4AIDG.js +0 -0
  749. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/xsl-CtQFsRM5.js +0 -0
  750. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/yaml-Buea-lGh.js +0 -0
  751. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/zenscript-DVFEvuxE.js +0 -0
  752. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/zig-VOosw3JB.js +0 -0
  753. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/favicon.svg +0 -0
  754. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/fonts/InterVariable-Italic.woff2 +0 -0
  755. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/fonts/InterVariable.woff2 +0 -0
  756. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/index.html +0 -0
  757. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/file_access.py +0 -0
  758. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/interaction.py +0 -0
  759. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/live_events.py +0 -0
  760. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/routes/__init__.py +0 -0
  761. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/routes/config.py +0 -0
  762. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/routes/files.py +0 -0
  763. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/routes/sessions.py +0 -0
  764. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/routes/skills.py +0 -0
  765. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/routes/ws.py +0 -0
  766. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/server.py +0 -0
  767. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/session_access.py +0 -0
  768. {klaude_code-2.29.0 → klaude_code-2.30.0}/src/klaude_code/web/session_live.py +0 -0
  769. {klaude_code-2.29.0 → klaude_code-2.30.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.30.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
@@ -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.30.0"
8
8
  description = "Minimal code agent CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -214,6 +214,7 @@ async def run_compaction(
214
214
  summary, fork_usage = await _build_summary_fork(
215
215
  session=session,
216
216
  cut_index=cut_index,
217
+ llm_client=llm_client,
217
218
  main_profile=main_profile,
218
219
  focus=focus,
219
220
  has_previous_summary=previous_summary is not None,
@@ -285,6 +286,7 @@ async def _build_summary_fork(
285
286
  *,
286
287
  session: Session,
287
288
  cut_index: int,
289
+ llm_client: LLMClientABC,
288
290
  main_profile: AgentProfile,
289
291
  focus: str | None,
290
292
  has_previous_summary: bool,
@@ -321,7 +323,7 @@ async def _build_summary_fork(
321
323
  call_param.tools = main_profile.tools # Must match parent; tools=[] would break cache.
322
324
  call_param.max_tokens = max_summary_tokens
323
325
 
324
- stream = await main_profile.llm_client.call(call_param)
326
+ stream = await llm_client.call(call_param)
325
327
  accumulated: list[str] = []
326
328
  final_message: message.AssistantMessage | None = None
327
329
  async for item in stream:
@@ -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
@@ -21,6 +21,7 @@ from klaude_code.agent.cache_safe import CacheSafeParams, build_cache_safe_messa
21
21
  from klaude_code.log import DebugType, log_debug
22
22
  from klaude_code.prompts.prompt_suggestion import PROMPT_SUGGESTION_PROMPT
23
23
  from klaude_code.protocol import llm_param, message
24
+ from klaude_code.protocol.models import Usage
24
25
  from klaude_code.session.session import Session
25
26
 
26
27
  # Reasoning models (for example gpt-5.4) may spend most of a tiny budget on
@@ -41,6 +42,11 @@ class PromptSuggestionResult:
41
42
  drop_reason: str | None = None
42
43
 
43
44
 
45
+ def _normalized_total_input_tokens(usage: Usage) -> int:
46
+ # Providers disagree on whether input_tokens includes cached/write tokens.
47
+ return max(usage.input_tokens, usage.cached_tokens + usage.cache_write_tokens)
48
+
49
+
44
50
  def should_suggest(session: Session) -> str | None:
45
51
  """Return a suppression reason or ``None`` when generation is allowed.
46
52
 
@@ -69,16 +75,7 @@ def should_suggest(session: Session) -> str | None:
69
75
  # Cache-cold budget, matching claude-code's getParentCacheSuppressReason:
70
76
  # skip when the parent turn had to do a lot of fresh (un-cached) work,
71
77
  # because the fork inherits similar cost.
72
- #
73
- # Providers disagree on ``Usage.input_tokens`` semantics (most paths =
74
- # total including cached+write; Anthropic-Bedrock = un-cached only).
75
- # Use the same robust normalization as CacheTracker: ``max(input_tokens,
76
- # cached + cache_write)`` approximates the total prompt size across
77
- # providers. See AGENTS.md "Usage Model Semantics".
78
- total_input = max(
79
- usage.input_tokens,
80
- usage.cached_tokens + usage.cache_write_tokens,
81
- )
78
+ total_input = _normalized_total_input_tokens(usage)
82
79
  uncached = max(0, total_input - usage.cached_tokens) + usage.output_tokens
83
80
  if uncached > _MAX_PARENT_UNCACHED_TOKENS:
84
81
  return f"cache_cold(uncached={uncached})"
@@ -148,7 +145,7 @@ async def run_prompt_suggestion(
148
145
  raw = message.join_text_parts(final_message.parts) if final_message else "".join(accumulated)
149
146
  usage = final_message.usage if final_message else None
150
147
  if usage is not None:
151
- total = max(usage.input_tokens, usage.cached_tokens + usage.cache_write_tokens)
148
+ total = _normalized_total_input_tokens(usage)
152
149
  hit = (usage.cached_tokens / total) if total > 0 else 0.0
153
150
  log_debug(
154
151
  f"[PromptSuggestion] usage cache_hit={hit:.2%} "
@@ -29,9 +29,6 @@ class RewindManager:
29
29
  def register_checkpoint(self, checkpoint_id: int, user_message: str) -> None:
30
30
  self._checkpoint_user_messages[checkpoint_id] = user_message
31
31
 
32
- def get_checkpoint_user_message(self, checkpoint_id: int) -> str | None:
33
- return self._checkpoint_user_messages.get(checkpoint_id)
34
-
35
32
  def send_rewind(self, checkpoint_id: int, note: str, rationale: str) -> str:
36
33
  if self._pending is not None:
37
34
  raise ValueError("Only one rewind can be pending at a time")
@@ -16,6 +16,7 @@ from klaude_code.agent.attachments.state import reset_attachment_loaded_flags
16
16
  from klaude_code.agent.away_summary import generate_away_summary
17
17
  from klaude_code.agent.bash_mode import run_bash_command
18
18
  from klaude_code.agent.compaction import CompactionReason, run_compaction
19
+ from klaude_code.agent.model_fallback import build_fallback_model_config_warn, fallback_llm_client
19
20
  from klaude_code.agent.prompt_suggestion import run_prompt_suggestion, should_suggest
20
21
  from klaude_code.agent.runtime.llm import LLMClients, clone_llm_clients, create_llm_client_for_candidates
21
22
  from klaude_code.agent.runtime.sub_agent import SubAgentExecutor
@@ -98,6 +99,7 @@ class AgentOperationHandler:
98
99
  self._primary_session_id: str | None = None
99
100
  self._title_refresh_tasks: dict[str, asyncio.Task[None]] = {}
100
101
  self._prompt_suggestion_tasks: dict[str, asyncio.Task[None]] = {}
102
+ self._auto_away_summary_tasks: dict[str, asyncio.Task[None]] = {}
101
103
 
102
104
  async def _request_user_interaction(
103
105
  self,
@@ -425,6 +427,19 @@ class AgentOperationHandler:
425
427
  )
426
428
  task.cancel()
427
429
 
430
+ def _cancel_auto_away_summary(self, session_id: str) -> None:
431
+ task = self._auto_away_summary_tasks.pop(session_id, None)
432
+ if task is None or task.done():
433
+ return
434
+ log_debug(
435
+ f"[AwaySummary] cancel stale auto task session={session_id}",
436
+ debug_type=DebugType.EXECUTION,
437
+ )
438
+ task.cancel()
439
+
440
+ def cancel_auto_away_summary(self, session_id: str) -> None:
441
+ self._cancel_auto_away_summary(session_id)
442
+
428
443
  def _schedule_prompt_suggestion(self, agent: Agent) -> None:
429
444
  """Fire-and-forget a cache-shared fork to predict the user's next prompt.
430
445
 
@@ -530,6 +545,7 @@ class AgentOperationHandler:
530
545
  agent = await self.ensure_agent(operation.session_id)
531
546
  # New user turn invalidates any pending suggestion for this session.
532
547
  self._cancel_prompt_suggestion(operation.session_id)
548
+ self._cancel_auto_away_summary(operation.session_id)
533
549
  await self._emit_event(events.PromptSuggestionClearedEvent(session_id=operation.session_id))
534
550
  frozen_input = self._freeze_user_input_for_history(
535
551
  operation.input,
@@ -572,6 +588,7 @@ class AgentOperationHandler:
572
588
  agent.follow_up(operation.input)
573
589
 
574
590
  async def run_bash(self, operation: op.RunBashOperation) -> None:
591
+ self._cancel_auto_away_summary(operation.session_id)
575
592
  agent = await self.ensure_agent(operation.session_id)
576
593
 
577
594
  existing_active = self.get_active_task(operation.id)
@@ -629,6 +646,7 @@ class AgentOperationHandler:
629
646
 
630
647
  async def continue_agent(self, operation: op.ContinueAgentOperation) -> None:
631
648
  """Continue agent execution without adding a new user message."""
649
+ self._cancel_auto_away_summary(operation.session_id)
632
650
  agent = await self.ensure_agent(operation.session_id)
633
651
 
634
652
  existing_active = self.get_active_task(operation.id)
@@ -652,6 +670,7 @@ class AgentOperationHandler:
652
670
  )
653
671
 
654
672
  async def compact_session(self, operation: op.CompactSessionOperation) -> None:
673
+ self._cancel_auto_away_summary(operation.session_id)
655
674
  agent = await self.ensure_agent(operation.session_id)
656
675
 
657
676
  if self._cancel_tasks_for_sessions({operation.session_id}):
@@ -694,6 +713,35 @@ class AgentOperationHandler:
694
713
  )
695
714
  return
696
715
 
716
+ user_messages_snapshot = tuple(agent.session.user_messages)
717
+
718
+ async def _runner() -> None:
719
+ await self._run_away_summary_task(operation, user_messages_snapshot=user_messages_snapshot)
720
+
721
+ await self.run_background_operation(
722
+ operation_id=operation.id,
723
+ session_id=operation.session_id,
724
+ runner=_runner,
725
+ )
726
+
727
+ if operation.source == "auto":
728
+ active = self.get_active_task(operation.id)
729
+ if active is not None:
730
+ self._auto_away_summary_tasks[operation.session_id] = active.task
731
+
732
+ def _cleanup(completed: asyncio.Task[None]) -> None:
733
+ if self._auto_away_summary_tasks.get(operation.session_id) is completed:
734
+ self._auto_away_summary_tasks.pop(operation.session_id, None)
735
+
736
+ active.task.add_done_callback(_cleanup)
737
+
738
+ async def _run_away_summary_task(
739
+ self,
740
+ operation: op.GenerateAwaySummaryOperation,
741
+ *,
742
+ user_messages_snapshot: tuple[str, ...],
743
+ ) -> None:
744
+ agent = await self.ensure_agent(operation.session_id)
697
745
  clients = self.get_session_llm_clients(operation.session_id)
698
746
  fast_client = clients.get_fast_client()
699
747
 
@@ -709,6 +757,19 @@ class AgentOperationHandler:
709
757
  )
710
758
  return
711
759
 
760
+ if operation.source == "auto" and tuple(agent.session.user_messages) != user_messages_snapshot:
761
+ log_debug(
762
+ f"[AwaySummary] skip (stale auto result, source={operation.source})",
763
+ debug_type=DebugType.EXECUTION,
764
+ )
765
+ return
766
+ if _has_summary_since_last_user_turn(agent.session):
767
+ log_debug(
768
+ f"[AwaySummary] skip (dedup after generation, source={operation.source})",
769
+ debug_type=DebugType.EXECUTION,
770
+ )
771
+ return
772
+
712
773
  entry = message.AwaySummaryEntry(text=text, source=operation.source)
713
774
  agent.session.append_history([entry])
714
775
  await self._emit_event(
@@ -722,6 +783,7 @@ class AgentOperationHandler:
722
783
  agent = await self.ensure_agent(session_id)
723
784
  old_session_id = agent.session.id
724
785
  self._cancel_prompt_suggestion(old_session_id)
786
+ self._cancel_auto_away_summary(old_session_id)
725
787
  old_runtime = self._get_session_actor(old_session_id)
726
788
  if old_runtime is None:
727
789
  raise RuntimeError(f"Missing runtime for session {old_session_id}")
@@ -776,6 +838,7 @@ class AgentOperationHandler:
776
838
  """Switch the active session to an already-forked session and replay its history."""
777
839
  agent = await self.ensure_agent(session_id)
778
840
  old_session_id = agent.session.id
841
+ self._cancel_auto_away_summary(old_session_id)
779
842
  old_runtime = self._get_session_actor(old_session_id)
780
843
  if old_runtime is None:
781
844
  raise RuntimeError(f"Missing runtime for session {old_session_id}")
@@ -957,16 +1020,37 @@ class AgentOperationHandler:
957
1020
  try:
958
1021
  await self._emit_event(events.CompactionStartEvent(session_id=session_id, reason=reason))
959
1022
  log_debug(f"[Compact:{reason}] start", debug_type=DebugType.RESPONSE)
960
- compact_client = self.get_session_llm_clients(session_id).get_compact_client()
961
- result = await run_compaction(
962
- session=agent.session,
963
- reason=CompactionReason(reason),
964
- focus=operation.focus,
965
- llm_client=compact_client,
966
- llm_config=compact_client.get_llm_config(),
967
- cancel=cancel_event,
968
- main_profile=agent.profile,
969
- )
1023
+ session_clients = self.get_session_llm_clients(session_id)
1024
+ while True:
1025
+ compact_client = session_clients.get_compact_client()
1026
+ try:
1027
+ result = await run_compaction(
1028
+ session=agent.session,
1029
+ reason=CompactionReason(reason),
1030
+ focus=operation.focus,
1031
+ llm_client=compact_client,
1032
+ llm_config=compact_client.get_llm_config(),
1033
+ cancel=cancel_event,
1034
+ main_profile=agent.profile,
1035
+ )
1036
+ break
1037
+ except asyncio.CancelledError:
1038
+ raise
1039
+ except Exception as exc:
1040
+ fallback = fallback_llm_client(compact_client, str(exc))
1041
+ if fallback is None:
1042
+ raise
1043
+ entry, fallback_event = build_fallback_model_config_warn(
1044
+ session_id=session_id,
1045
+ fallback=fallback,
1046
+ error_message=str(exc),
1047
+ )
1048
+ agent.session.append_history([entry])
1049
+ if session_clients.compact is None and compact_client is session_clients.main:
1050
+ agent.set_model_profile(
1051
+ self._model_profile_provider.build_profile(compact_client, work_dir=agent.session.work_dir)
1052
+ )
1053
+ await self._emit_event(fallback_event)
970
1054
  log_debug(f"[Compact:{reason}] result", str(result.to_entry()), debug_type=DebugType.RESPONSE)
971
1055
  reset_attachment_loaded_flags(agent.session.file_tracker)
972
1056
  agent.session.append_history([result.to_entry()])
@@ -1053,6 +1137,9 @@ class AgentRunner:
1053
1137
  async def generate_away_summary(self, operation: op.GenerateAwaySummaryOperation) -> None:
1054
1138
  await self._operation_handler.generate_away_summary(operation)
1055
1139
 
1140
+ def cancel_auto_away_summary(self, session_id: str) -> None:
1141
+ self._operation_handler.cancel_auto_away_summary(session_id)
1142
+
1056
1143
  async def clear_session(self, session_id: str) -> None:
1057
1144
  await self._operation_handler.clear_session(session_id)
1058
1145
 
@@ -97,6 +97,7 @@ class ConfigHandler:
97
97
  return "not set"
98
98
 
99
99
  async def handle_change_model(self, operation: op.ChangeModelOperation) -> None:
100
+ self._agent_runner.cancel_auto_away_summary(operation.session_id)
100
101
  agent = await self._agent_runner.ensure_agent(operation.session_id)
101
102
  llm_config, llm_client_name = await self._model_switcher.change_model(
102
103
  agent,
@@ -133,6 +134,7 @@ class ConfigHandler:
133
134
  )
134
135
 
135
136
  async def handle_change_thinking(self, operation: op.ChangeThinkingOperation) -> None:
137
+ self._agent_runner.cancel_auto_away_summary(operation.session_id)
136
138
  agent = await self._agent_runner.ensure_agent(operation.session_id)
137
139
 
138
140
  if operation.thinking is None:
@@ -163,6 +165,7 @@ class ConfigHandler:
163
165
  )
164
166
 
165
167
  async def handle_change_sub_agent_model(self, operation: op.ChangeSubAgentModelOperation) -> None:
168
+ self._agent_runner.cancel_auto_away_summary(operation.session_id)
166
169
  agent = await self._agent_runner.ensure_agent(operation.session_id)
167
170
  session_clients = self._agent_runner.get_session_llm_clients(agent.session.id)
168
171
  config = load_config()
@@ -207,6 +210,7 @@ class ConfigHandler:
207
210
  )
208
211
 
209
212
  async def handle_change_compact_model(self, operation: op.ChangeCompactModelOperation) -> None:
213
+ self._agent_runner.cancel_auto_away_summary(operation.session_id)
210
214
  agent = await self._agent_runner.ensure_agent(operation.session_id)
211
215
  session_clients = self._agent_runner.get_session_llm_clients(agent.session.id)
212
216
  config = load_config()
@@ -217,8 +221,11 @@ class ConfigHandler:
217
221
  agent.compact_llm_client = None
218
222
  display_model = "(inherit from main agent)"
219
223
  else:
220
- llm_config = config.get_model_config(model_name)
221
- new_client = create_llm_client(llm_config)
224
+ candidates = config.iter_model_config_candidates_with_preference_fallback(model_name, config.compact_model)
225
+ if not candidates:
226
+ _ = config.get_model_config(model_name)
227
+ raise ValueError(f"Unknown model: {model_name}")
228
+ new_client = create_llm_client_for_candidates(candidates)
222
229
  session_clients.compact = new_client
223
230
  agent.compact_llm_client = new_client
224
231
  display_model = new_client.model_name
@@ -282,6 +289,8 @@ class ConfigHandler:
282
289
  return True
283
290
 
284
291
  async def handle_request_model(self, operation: op.RequestModelOperation) -> None:
292
+ self._agent_runner.cancel_auto_away_summary(operation.session_id)
293
+
285
294
  async def _runner() -> None:
286
295
  initial_search_text = operation.initial_search_text
287
296
  if initial_search_text is not None:
@@ -362,6 +371,8 @@ class ConfigHandler:
362
371
  )
363
372
 
364
373
  async def handle_request_thinking(self, operation: op.RequestThinkingOperation) -> None:
374
+ self._agent_runner.cancel_auto_away_summary(operation.session_id)
375
+
365
376
  async def _runner() -> None:
366
377
  agent = await self._agent_runner.ensure_agent(operation.session_id)
367
378
  llm_config = agent.profile.llm_client.get_llm_config()
@@ -426,6 +437,8 @@ class ConfigHandler:
426
437
  )
427
438
 
428
439
  async def handle_request_sub_agent_model(self, operation: op.RequestSubAgentModelOperation) -> None:
440
+ self._agent_runner.cancel_auto_away_summary(operation.session_id)
441
+
429
442
  async def _runner() -> None:
430
443
  agent = await self._agent_runner.ensure_agent(operation.session_id)
431
444
  session_clients = self._agent_runner.get_session_llm_clients(agent.session.id)
@@ -608,6 +621,7 @@ class ConfigHandler:
608
621
  )
609
622
 
610
623
  async def handle_get_session_stats(self, operation: op.GetSessionStatsOperation) -> None:
624
+ self._agent_runner.cancel_auto_away_summary(operation.session_id)
611
625
  agent = await self._agent_runner.ensure_agent(operation.session_id)
612
626
  await self._emit_event(
613
627
  events.SessionStatsEvent(
@@ -230,6 +230,9 @@ class OperationDispatcher:
230
230
  async def handle_generate_away_summary(self, operation: op.GenerateAwaySummaryOperation) -> None:
231
231
  await self._agent_runner.generate_away_summary(operation)
232
232
 
233
+ def cancel_auto_away_summary(self, session_id: str) -> None:
234
+ self._agent_runner.cancel_auto_away_summary(session_id)
235
+
233
236
  async def handle_change_model(self, operation: op.ChangeModelOperation) -> None:
234
237
  await self._config_handler.handle_change_model(operation)
235
238
 
@@ -22,6 +22,21 @@ def _default_sub_clients() -> dict[SubAgentType, LLMClientABC]:
22
22
  return {}
23
23
 
24
24
 
25
+ class ModelResolutionError(ValueError):
26
+ """Raised when a configured model preference cannot be resolved.
27
+
28
+ Carries which role (main/fast/compact/sub-agent) failed so callers can
29
+ produce a precise error message instead of conflating roles.
30
+ """
31
+
32
+ def __init__(self, role: str, model_preference: ModelPreference, original: Exception) -> None:
33
+ self.role = role
34
+ self.model_preference = model_preference
35
+ self.original = original
36
+ pref_text = format_model_preference(model_preference) or "<unset>"
37
+ super().__init__(f"{role} '{pref_text}' could not be resolved: {original}")
38
+
39
+
25
40
  @dataclass(frozen=True)
26
41
  class ModelFallback:
27
42
  """A runtime switch from one concrete model candidate to another."""
@@ -44,6 +59,7 @@ class FallbackLLMClient(LLMClientABC):
44
59
  @classmethod
45
60
  @override
46
61
  def create(cls, config: llm_param.LLMConfigParameter) -> LLMClientABC:
62
+ del cls
47
63
  del config
48
64
  raise NotImplementedError("FallbackLLMClient must be constructed with candidates")
49
65
 
@@ -117,14 +133,6 @@ class LLMClients:
117
133
  fast: LLMClientABC | None = None
118
134
  compact: LLMClientABC | None = None
119
135
 
120
- def get_client(self, sub_agent_type: SubAgentType | None = None) -> LLMClientABC:
121
- if sub_agent_type is None:
122
- return self.main
123
- client = self.sub_clients.get(sub_agent_type)
124
- if client is not None:
125
- return client
126
- return self.main
127
-
128
136
  def get_compact_client(self) -> LLMClientABC:
129
137
  return self.compact or self.main
130
138
 
@@ -147,8 +155,11 @@ def build_llm_clients(
147
155
  else config.iter_model_config_candidates(model_pref)
148
156
  )
149
157
  if not main_candidates:
150
- _ = config.get_first_available_model(model_pref)
151
- raise ValueError("No available main_model candidates")
158
+ try:
159
+ _ = config.get_first_available_model(model_pref)
160
+ except ValueError as exc:
161
+ raise ModelResolutionError("main_model", model_pref, exc) from exc
162
+ raise ModelResolutionError("main_model", model_pref, ValueError("No available main_model candidates"))
152
163
  llm_config = main_candidates[0].llm_config
153
164
  model_name = (
154
165
  format_model_preference([candidate.selector for candidate in main_candidates])
@@ -165,7 +176,10 @@ def build_llm_clients(
165
176
  main_client = create_llm_client_for_candidates(main_candidates)
166
177
 
167
178
  fast_client: LLMClientABC | None = None
168
- selected_fast_model = config.get_first_available_model(config.fast_model)
179
+ try:
180
+ selected_fast_model = config.get_first_available_model(config.fast_model)
181
+ except ValueError as exc:
182
+ raise ModelResolutionError("fast_model", config.fast_model, exc) from exc
169
183
  if selected_fast_model is not None:
170
184
  fast_llm_config = config.get_model_config(selected_fast_model)
171
185
  log_debug(
@@ -176,15 +190,20 @@ def build_llm_clients(
176
190
  fast_client = create_llm_client(fast_llm_config)
177
191
 
178
192
  compact_client: LLMClientABC | None = None
179
- selected_compact_model = config.get_first_available_model(config.compact_model)
180
- if selected_compact_model is not None:
181
- compact_llm_config = config.get_model_config(selected_compact_model)
193
+ compact_candidates = config.iter_model_config_candidates(config.compact_model)
194
+ if compact_candidates:
195
+ compact_llm_config = compact_candidates[0].llm_config
182
196
  log_debug(
183
197
  "Compact LLM config",
184
198
  compact_llm_config.model_dump_json(exclude_none=True),
185
199
  debug_type=DebugType.LLM_CONFIG,
186
200
  )
187
- compact_client = create_llm_client(compact_llm_config)
201
+ compact_client = create_llm_client_for_candidates(compact_candidates)
202
+ elif config.compact_model is not None:
203
+ try:
204
+ _ = config.get_first_available_model(config.compact_model)
205
+ except ValueError as exc:
206
+ raise ModelResolutionError("compact_model", config.compact_model, exc) from exc
188
207
 
189
208
  if skip_sub_agents:
190
209
  return LLMClients(main=main_client, main_model_alias=model_name, fast=fast_client, compact=compact_client)
@@ -192,19 +211,24 @@ def build_llm_clients(
192
211
  helper = SubAgentModelResolver(config)
193
212
  sub_agent_candidates = helper.build_sub_agent_client_candidates()
194
213
  user_sub_agent_models = config.get_user_sub_agent_models()
195
- for model_pref in user_sub_agent_models.values():
196
- if not config.iter_model_config_candidates(model_pref):
197
- _ = config.get_first_available_model(model_pref)
214
+ for role_key, sub_pref in user_sub_agent_models.items():
215
+ if not config.iter_model_config_candidates(sub_pref):
216
+ try:
217
+ _ = config.get_first_available_model(sub_pref)
218
+ except ValueError as exc:
219
+ raise ModelResolutionError(f"sub_agent_models.{role_key}", sub_pref, exc) from exc
198
220
 
199
221
  sub_clients: dict[SubAgentType, LLMClientABC] = {}
200
222
  for sub_agent_type, candidates in sub_agent_candidates.items():
201
223
  try:
202
224
  sub_clients[sub_agent_type] = FallbackLLMClient(candidates)
203
- except ValueError:
225
+ except ValueError as exc:
204
226
  profile = get_sub_agent_profile(sub_agent_type)
205
227
  role_key = profile.name
206
228
  if role_key in user_sub_agent_models:
207
- raise
229
+ raise ModelResolutionError(
230
+ f"sub_agent_models.{role_key}", user_sub_agent_models[role_key], exc
231
+ ) from exc
208
232
  log_debug(
209
233
  f"Sub-agent '{sub_agent_type}' builtin models not available, falling back to main model",
210
234
  debug_type=DebugType.LLM_CONFIG,
@@ -1,5 +1,17 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from collections.abc import Callable
4
+ from typing import TypeVar
5
+
6
+ _T = TypeVar("_T")
7
+
8
+
9
+ def _safe_skill_call(fn: Callable[[], _T], default: _T) -> _T:
10
+ try:
11
+ return fn()
12
+ except Exception:
13
+ return default
14
+
3
15
 
4
16
  def get_skill_names_by_location() -> dict[str, list[str]]:
5
17
  """Return available skill names grouped by location.
@@ -15,8 +27,8 @@ def get_skill_names_by_location() -> dict[str, list[str]]:
15
27
  except Exception:
16
28
  return {}
17
29
 
18
- result: dict[str, list[str]] = {"user": [], "project": [], "system": []}
19
- try:
30
+ def _collect() -> dict[str, list[str]]:
31
+ result: dict[str, list[str]] = {"user": [], "project": [], "system": []}
20
32
  for name, _desc, location in get_available_skills():
21
33
  if location == "user":
22
34
  result["user"].append(name)
@@ -24,16 +36,16 @@ def get_skill_names_by_location() -> dict[str, list[str]]:
24
36
  result["project"].append(name)
25
37
  elif location == "system":
26
38
  result["system"].append(name)
27
- except Exception:
28
- return {}
29
39
 
30
- if not result["user"] and not result["project"] and not result["system"]:
31
- return {}
40
+ if not result["user"] and not result["project"] and not result["system"]:
41
+ return {}
42
+
43
+ result["user"].sort()
44
+ result["project"].sort()
45
+ result["system"].sort()
46
+ return result
32
47
 
33
- result["user"].sort()
34
- result["project"].sort()
35
- result["system"].sort()
36
- return result
48
+ return _safe_skill_call(_collect, {})
37
49
 
38
50
 
39
51
  def get_skill_warnings_by_location() -> dict[str, list[str]]:
@@ -44,7 +56,4 @@ def get_skill_warnings_by_location() -> dict[str, list[str]]:
44
56
  except Exception:
45
57
  return {}
46
58
 
47
- try:
48
- return get_skill_warnings_by_location()
49
- except Exception:
50
- return {}
59
+ return _safe_skill_call(get_skill_warnings_by_location, {})