klaude-code 2.28.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 (771) hide show
  1. {klaude_code-2.28.0 → klaude_code-2.30.0}/PKG-INFO +3 -2
  2. {klaude_code-2.28.0 → klaude_code-2.30.0}/pyproject.toml +3 -2
  3. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/agent.py +32 -0
  4. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/agent_profile.py +1 -1
  5. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/attachments/files.py +1 -12
  6. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/compaction/compaction.py +3 -1
  7. klaude_code-2.30.0/src/klaude_code/agent/model_fallback.py +73 -0
  8. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/prompt_suggestion/prompt_suggestion.py +8 -11
  9. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/rewind/manager.py +0 -3
  10. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/runtime/agent_ops.py +110 -10
  11. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/runtime/config_ops.py +16 -2
  12. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/runtime/dispatcher.py +6 -0
  13. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/runtime/llm.py +44 -20
  14. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/skill_inventory.py +23 -14
  15. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/system_prompt.py +6 -4
  16. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/task.py +194 -185
  17. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/app/ports/input.py +2 -3
  18. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/app/runtime.py +29 -1
  19. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/app/runtime_facade.py +3 -0
  20. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/config/assets/builtin_config.yaml +14 -16
  21. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/config/thinking.py +1 -1
  22. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/const.py +2 -4
  23. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/control/runtime/actor.py +7 -1
  24. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/google/input.py +1 -2
  25. klaude_code-2.30.0/src/klaude_code/llm/proxy_support.py +43 -0
  26. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/prompt_suggestion.py +4 -3
  27. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-simplifier.md +0 -1
  28. klaude_code-2.30.0/src/klaude_code/protocol/input_syntax.py +57 -0
  29. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/message.py +1 -0
  30. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/model_id.py +2 -16
  31. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/op.py +12 -0
  32. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/op_handler.py +5 -0
  33. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/session/meta.py +17 -1
  34. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/session/session.py +10 -0
  35. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/session/store.py +30 -30
  36. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/apply_patch.py +0 -11
  37. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/shell/bash_tool.py +198 -2
  38. klaude_code-2.30.0/src/klaude_code/tui/AGENTS.md +128 -0
  39. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/commands.py +21 -0
  40. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/diffs.py +36 -6
  41. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/rich/markdown.py +51 -2
  42. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/rich/status.py +22 -55
  43. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/rich/theme.py +1 -1
  44. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/task_file_changes.py +11 -2
  45. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/user_input.py +5 -13
  46. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/display.py +27 -12
  47. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/completers.py +64 -35
  48. klaude_code-2.30.0/src/klaude_code/tui/input/completion_menu.py +276 -0
  49. klaude_code-2.30.0/src/klaude_code/tui/input/flicker_safe_stdout.py +260 -0
  50. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/key_bindings.py +90 -1
  51. klaude_code-2.30.0/src/klaude_code/tui/input/prompt_status_bar.py +324 -0
  52. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/prompt_toolkit.py +421 -292
  53. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/pt_theme.py +8 -0
  54. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/machine.py +29 -17
  55. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/renderer.py +111 -161
  56. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/runner.py +312 -76
  57. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/selector.py +8 -0
  58. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/update.py +0 -12
  59. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/session_index.py +0 -30
  60. klaude_code-2.28.0/src/klaude_code/agent/attachments/todo.py +0 -71
  61. klaude_code-2.28.0/src/klaude_code/tui/AGENTS.md +0 -39
  62. klaude_code-2.28.0/src/klaude_code/tui/components/rich/live.py +0 -84
  63. {klaude_code-2.28.0 → klaude_code-2.30.0}/README.md +0 -0
  64. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/.DS_Store +0 -0
  65. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/__init__.py +0 -0
  66. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/__init__.py +0 -0
  67. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/attachments/__init__.py +0 -0
  68. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/attachments/collection.py +0 -0
  69. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/attachments/memory.py +0 -0
  70. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/attachments/skills.py +0 -0
  71. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/attachments/state.py +0 -0
  72. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/away_summary.py +0 -0
  73. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/bash_mode.py +0 -0
  74. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/cache_break_detection.py +0 -0
  75. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/cache_safe.py +0 -0
  76. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/compaction/AGENTS.md +0 -0
  77. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/compaction/__init__.py +0 -0
  78. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/compaction/overflow.py +0 -0
  79. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/handoff/__init__.py +0 -0
  80. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/handoff/handoff.py +0 -0
  81. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/handoff/manager.py +0 -0
  82. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/prompt_suggestion/__init__.py +0 -0
  83. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/rewind/__init__.py +0 -0
  84. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/runtime/__init__.py +0 -0
  85. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/runtime/away_summary.py +0 -0
  86. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/runtime/sub_agent.py +0 -0
  87. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/session_stats.py +0 -0
  88. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/session_title.py +0 -0
  89. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/agent/turn.py +0 -0
  90. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/app/__init__.py +0 -0
  91. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/app/auth_flow.py +0 -0
  92. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/app/log_viewer.html +0 -0
  93. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/app/log_viewer.py +0 -0
  94. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/app/ports/__init__.py +0 -0
  95. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/app/ports/display.py +0 -0
  96. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/app/ports/interaction.py +0 -0
  97. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/auth/AGENTS.md +0 -0
  98. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/auth/__init__.py +0 -0
  99. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/auth/base.py +0 -0
  100. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/auth/codex/__init__.py +0 -0
  101. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/auth/codex/exceptions.py +0 -0
  102. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/auth/codex/jwt_utils.py +0 -0
  103. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/auth/codex/oauth.py +0 -0
  104. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/auth/codex/token_manager.py +0 -0
  105. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/auth/copilot/__init__.py +0 -0
  106. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/auth/copilot/exceptions.py +0 -0
  107. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/auth/copilot/oauth.py +0 -0
  108. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/auth/copilot/token_manager.py +0 -0
  109. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/auth/env.py +0 -0
  110. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/cli/__init__.py +0 -0
  111. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/cli/auth_cmd.py +0 -0
  112. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/cli/config_cmd.py +0 -0
  113. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/cli/cost_cmd.py +0 -0
  114. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/cli/debug.py +0 -0
  115. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/cli/list_model.py +0 -0
  116. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/cli/main.py +0 -0
  117. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/cli/oauth_usage.py +0 -0
  118. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/cli/self_update.py +0 -0
  119. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/cli/web_cmd.py +0 -0
  120. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/config/__init__.py +0 -0
  121. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/config/assets/__init__.py +0 -0
  122. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/config/builtin_config.py +0 -0
  123. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/config/config.py +0 -0
  124. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/config/formatters.py +0 -0
  125. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/config/loader.py +0 -0
  126. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/config/merge.py +0 -0
  127. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/config/model_matcher.py +0 -0
  128. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/config/sub_agent_model.py +0 -0
  129. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/control/__init__.py +0 -0
  130. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/control/event_bus.py +0 -0
  131. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/control/event_relay.py +0 -0
  132. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/control/runtime/__init__.py +0 -0
  133. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/control/runtime/registry.py +0 -0
  134. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/control/session_meta_relay.py +0 -0
  135. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/control/user_interaction.py +0 -0
  136. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/AGENTS.md +0 -0
  137. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/__init__.py +0 -0
  138. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/anthropic/__init__.py +0 -0
  139. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/anthropic/client.py +0 -0
  140. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/anthropic/input.py +0 -0
  141. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/bedrock_anthropic/__init__.py +0 -0
  142. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/bedrock_anthropic/client.py +0 -0
  143. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/client.py +0 -0
  144. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/copilot/__init__.py +0 -0
  145. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/copilot/client.py +0 -0
  146. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/google/__init__.py +0 -0
  147. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/google/client.py +0 -0
  148. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/google_vertex/__init__.py +0 -0
  149. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/google_vertex/client.py +0 -0
  150. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/image.py +0 -0
  151. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/input_common.py +0 -0
  152. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/json_stable.py +0 -0
  153. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_codex/__init__.py +0 -0
  154. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_codex/client.py +0 -0
  155. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_compatible/__init__.py +0 -0
  156. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_compatible/client.py +0 -0
  157. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_compatible/input.py +0 -0
  158. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_compatible/stream.py +0 -0
  159. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_responses/__init__.py +0 -0
  160. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_responses/client.py +0 -0
  161. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/openai_responses/input.py +0 -0
  162. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/openrouter/__init__.py +0 -0
  163. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/openrouter/client.py +0 -0
  164. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/openrouter/input.py +0 -0
  165. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/openrouter/reasoning.py +0 -0
  166. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/registry.py +0 -0
  167. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/stream_parts.py +0 -0
  168. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/llm/usage.py +0 -0
  169. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/log.py +0 -0
  170. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/__init__.py +0 -0
  171. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/attachments.py +0 -0
  172. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/away_summary.py +0 -0
  173. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/compaction.py +0 -0
  174. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/handoff.py +0 -0
  175. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/messages.py +0 -0
  176. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/session_title.py +0 -0
  177. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-finder.md +0 -0
  178. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-review.md +0 -0
  179. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/sub_agents.py +0 -0
  180. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/system/auto-memory-prompt.md +0 -0
  181. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/system/base-system-prompt-gpt.md +0 -0
  182. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/system/base-system-prompt.md +0 -0
  183. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/system/extended-thinking-prompt.md +0 -0
  184. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/system/following-conventions-prompt.md +0 -0
  185. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/prompts/system/git-workspace-hygiene-prompt.md +0 -0
  186. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/__init__.py +0 -0
  187. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/events.py +0 -0
  188. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/llm_param.py +0 -0
  189. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/__init__.py +0 -0
  190. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/common.py +0 -0
  191. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/developer_ui.py +0 -0
  192. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/file_tracking.py +0 -0
  193. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/session_runtime.py +0 -0
  194. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/sub_agent.py +0 -0
  195. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/task_metadata.py +0 -0
  196. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/todo.py +0 -0
  197. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/tool_ui.py +0 -0
  198. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/models/usage.py +0 -0
  199. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/sub_agent/AGENTS.md +0 -0
  200. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/sub_agent/__init__.py +0 -0
  201. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/sub_agent/finder.py +0 -0
  202. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/sub_agent/general_purpose.py +0 -0
  203. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/sub_agent/review.py +0 -0
  204. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/sub_agent/simplifier.py +0 -0
  205. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/system_prompt.py +0 -0
  206. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/tools.py +0 -0
  207. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/protocol/user_interaction.py +0 -0
  208. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/session/__init__.py +0 -0
  209. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/session/codec.py +0 -0
  210. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/session/history.py +0 -0
  211. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/session/selector.py +0 -0
  212. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/session/store_registry.py +0 -0
  213. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/AGENTS.md +0 -0
  214. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/__init__.py +0 -0
  215. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/.git +0 -0
  216. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/.gitignore +0 -0
  217. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/SOURCES.md +0 -0
  218. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/SKILL.md +0 -0
  219. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/references/authentication.md +0 -0
  220. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/references/commands.md +0 -0
  221. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/references/profiling.md +0 -0
  222. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/references/proxy-support.md +0 -0
  223. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/references/session-management.md +0 -0
  224. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/references/snapshot-refs.md +0 -0
  225. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/references/video-recording.md +0 -0
  226. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/templates/authenticated-session.sh +0 -0
  227. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/templates/capture-workflow.sh +0 -0
  228. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/agent-browser/templates/form-automation.sh +0 -0
  229. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/frontend-design/SKILL.md +0 -0
  230. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/gpt-image-gen/LICENSE.txt +0 -0
  231. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/gpt-image-gen/SKILL.md +0 -0
  232. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/gpt-image-gen/references/cli.md +0 -0
  233. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/gpt-image-gen/references/image-api.md +0 -0
  234. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/gpt-image-gen/references/prompting.md +0 -0
  235. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/gpt-image-gen/references/sample-prompts.md +0 -0
  236. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/gpt-image-gen/scripts/image_gen.py +0 -0
  237. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/klaude-config/SKILL.md +0 -0
  238. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/klaude-config/references/builtin-providers.md +0 -0
  239. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/klaude-config/references/config-file.md +0 -0
  240. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/klaude-config/references/memory-files.md +0 -0
  241. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/klaude-config/references/skill-system.md +0 -0
  242. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/nano-banana-image-gen/SKILL.md +0 -0
  243. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/cli.md +0 -0
  244. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/gemini-api.md +0 -0
  245. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/prompting.md +0 -0
  246. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/sample-prompts.md +0 -0
  247. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/vertex-setup.md +0 -0
  248. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/nano-banana-image-gen/scripts/gemini_image_gen.py +0 -0
  249. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/SKILL.md +0 -0
  250. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/forms.md +0 -0
  251. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/reference.md +0 -0
  252. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/scripts/check_bounding_boxes.py +0 -0
  253. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/scripts/check_fillable_fields.py +0 -0
  254. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/scripts/convert_pdf_to_images.py +0 -0
  255. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/scripts/create_validation_image.py +0 -0
  256. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/scripts/extract_form_field_info.py +0 -0
  257. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/scripts/extract_form_structure.py +0 -0
  258. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/scripts/fill_fillable_fields.py +0 -0
  259. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/pdf/scripts/fill_pdf_form_with_annotations.py +0 -0
  260. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/playwright/LICENSE.txt +0 -0
  261. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/playwright/NOTICE.txt +0 -0
  262. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/playwright/SKILL.md +0 -0
  263. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/playwright/assets/playwright-small.svg +0 -0
  264. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/playwright/assets/playwright.png +0 -0
  265. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/playwright/references/cli.md +0 -0
  266. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/playwright/references/workflows.md +0 -0
  267. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/playwright/scripts/playwright_cli.sh +0 -0
  268. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/SKILL.md +0 -0
  269. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/3d.md +0 -0
  270. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/animations.md +0 -0
  271. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/charts-bar-chart.tsx +0 -0
  272. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +0 -0
  273. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +0 -0
  274. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets.md +0 -0
  275. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/audio-visualization.md +0 -0
  276. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/audio.md +0 -0
  277. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/calculate-metadata.md +0 -0
  278. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/can-decode.md +0 -0
  279. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/charts.md +0 -0
  280. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/compositions.md +0 -0
  281. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/display-captions.md +0 -0
  282. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/extract-frames.md +0 -0
  283. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/ffmpeg.md +0 -0
  284. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/fonts.md +0 -0
  285. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-audio-duration.md +0 -0
  286. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-video-dimensions.md +0 -0
  287. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-video-duration.md +0 -0
  288. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/gifs.md +0 -0
  289. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/images.md +0 -0
  290. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/import-srt-captions.md +0 -0
  291. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/light-leaks.md +0 -0
  292. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/lottie.md +0 -0
  293. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/maps.md +0 -0
  294. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/measuring-dom-nodes.md +0 -0
  295. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/measuring-text.md +0 -0
  296. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/parameters.md +0 -0
  297. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/sequencing.md +0 -0
  298. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/sfx.md +0 -0
  299. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/subtitles.md +0 -0
  300. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/tailwind.md +0 -0
  301. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/text-animations.md +0 -0
  302. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/timing.md +0 -0
  303. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transcribe-captions.md +0 -0
  304. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transitions.md +0 -0
  305. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transparent-videos.md +0 -0
  306. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/trimming.md +0 -0
  307. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/videos.md +0 -0
  308. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/voiceover.md +0 -0
  309. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/.gitignore +0 -0
  310. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/SKILL.md +0 -0
  311. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/package.json +0 -0
  312. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/references/config/first-time-setup.md +0 -0
  313. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/references/config/preferences-schema.md +0 -0
  314. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/references/templates/standalone.html +0 -0
  315. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/references/troubleshooting.md +0 -0
  316. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/scripts/render_mermaid.js +0 -0
  317. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/render-mermaid/scripts/setup.sh +0 -0
  318. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/session-logs/SKILL.md +0 -0
  319. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/skill-creator/SKILL.md +0 -0
  320. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/skills-lock.json +0 -0
  321. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/LICENSE.txt +0 -0
  322. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/SKILL.md +0 -0
  323. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/assets/sora-small.svg +0 -0
  324. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/assets/sora.png +0 -0
  325. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/references/cinematic-shots.md +0 -0
  326. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/references/cli.md +0 -0
  327. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/references/prompting.md +0 -0
  328. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/references/sample-prompts.md +0 -0
  329. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/references/social-ads.md +0 -0
  330. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/references/troubleshooting.md +0 -0
  331. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/references/video-api.md +0 -0
  332. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/sora/scripts/sora.py +0 -0
  333. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/svg-animations/SKILL.md +0 -0
  334. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/svg-animations/examples/index.html +0 -0
  335. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/assets/web-search/SKILL.md +0 -0
  336. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/loader.py +0 -0
  337. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/manager.py +0 -0
  338. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/skill/system_skills.py +0 -0
  339. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/AGENTS.md +0 -0
  340. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/__init__.py +0 -0
  341. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/agent_tool.md +0 -0
  342. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/agent_tool.py +0 -0
  343. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/ask_user_question_tool.md +0 -0
  344. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/ask_user_question_tool.py +0 -0
  345. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/core/__init__.py +0 -0
  346. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/core/abc.py +0 -0
  347. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/core/context.py +0 -0
  348. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/core/offload.py +0 -0
  349. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/core/registry.py +0 -0
  350. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/core/runner.py +0 -0
  351. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/__init__.py +0 -0
  352. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/_utils.py +0 -0
  353. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/apply_patch_tool.md +0 -0
  354. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/apply_patch_tool.py +0 -0
  355. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/diff_builder.py +0 -0
  356. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/edit_tool.md +0 -0
  357. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/edit_tool.py +0 -0
  358. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/read_tool.md +0 -0
  359. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/read_tool.py +0 -0
  360. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/write_tool.md +0 -0
  361. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/file/write_tool.py +0 -0
  362. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/handoff_tool.md +0 -0
  363. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/handoff_tool.py +0 -0
  364. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/rewind_tool.md +0 -0
  365. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/rewind_tool.py +0 -0
  366. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/shell/__init__.py +0 -0
  367. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/shell/bash_tool.md +0 -0
  368. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/shell/command_safety.py +0 -0
  369. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/todo/__init__.py +0 -0
  370. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/todo/todo_write_tool.md +0 -0
  371. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/todo/todo_write_tool.py +0 -0
  372. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/todo/todo_write_tool_raw.md +0 -0
  373. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/web/__init__.py +0 -0
  374. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/web/external_content.py +0 -0
  375. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/web/ssrf.py +0 -0
  376. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/web/web_cache.py +0 -0
  377. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/web/web_fetch_tool.md +0 -0
  378. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/web/web_fetch_tool.py +0 -0
  379. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/web/web_search_tool.md +0 -0
  380. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tool/web/web_search_tool.py +0 -0
  381. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/__init__.py +0 -0
  382. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/AGENTS.md +0 -0
  383. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/__init__.py +0 -0
  384. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/auth_selector.py +0 -0
  385. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/command_abc.py +0 -0
  386. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/compact_cmd.py +0 -0
  387. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/continue_cmd.py +0 -0
  388. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/copy_cmd.py +0 -0
  389. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/debug_cmd.py +0 -0
  390. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/export_session_cmd.py +0 -0
  391. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/export_session_html.py +0 -0
  392. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/fork_session_cmd.py +0 -0
  393. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/login_cmd.py +0 -0
  394. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/logout_cmd.py +0 -0
  395. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/model_cmd.py +0 -0
  396. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/model_picker.py +0 -0
  397. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/new_cmd.py +0 -0
  398. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/recap_cmd.py +0 -0
  399. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/refresh_cmd.py +0 -0
  400. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/registry.py +0 -0
  401. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/status_cmd.py +0 -0
  402. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/sub_agent_model_cmd.py +0 -0
  403. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/thinking_cmd.py +0 -0
  404. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/types.py +0 -0
  405. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/command/web_cmd.py +0 -0
  406. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/__init__.py +0 -0
  407. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/away_summary.py +0 -0
  408. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/bash_syntax.py +0 -0
  409. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/command_output.py +0 -0
  410. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/common.py +0 -0
  411. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/developer.py +0 -0
  412. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/errors.py +0 -0
  413. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/metadata.py +0 -0
  414. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/rich/__init__.py +0 -0
  415. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/rich/cjk_wrap.py +0 -0
  416. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/rich/quote.py +0 -0
  417. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/sub_agent.py +0 -0
  418. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/thinking.py +0 -0
  419. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/__init__.py +0 -0
  420. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_bash.py +0 -0
  421. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_common.py +0 -0
  422. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_dispatch.py +0 -0
  423. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_file.py +0 -0
  424. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_question.py +0 -0
  425. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_read.py +0 -0
  426. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_rewind.py +0 -0
  427. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_todo.py +0 -0
  428. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/tools/_web.py +0 -0
  429. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/components/welcome.py +0 -0
  430. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/AGENTS.md +0 -0
  431. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/__init__.py +0 -0
  432. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/drag_drop.py +0 -0
  433. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/images.py +0 -0
  434. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/input/paste.py +0 -0
  435. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/status_runtime.py +0 -0
  436. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/__init__.py +0 -0
  437. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/ask_user_question.py +0 -0
  438. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/color.py +0 -0
  439. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/control.py +0 -0
  440. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/focus_tracker.py +0 -0
  441. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/image.py +0 -0
  442. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/notifier.py +0 -0
  443. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/prevent_sleep.py +0 -0
  444. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/session_selector.py +0 -0
  445. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/tui/terminal/title.py +0 -0
  446. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/__init__.py +0 -0
  447. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/app.py +0 -0
  448. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/display.py +0 -0
  449. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/abap-BdImnpbu.js +0 -0
  450. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/actionscript-3-CoDkCxhg.js +0 -0
  451. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ada-bCR0ucgS.js +0 -0
  452. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/andromeeda-C4gqWexZ.js +0 -0
  453. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/angular-html-CU67Zn6k.js +0 -0
  454. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/angular-ts-BwZT4LLn.js +0 -0
  455. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/apache-Pmp26Uib.js +0 -0
  456. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/apex-D8_7TLub.js +0 -0
  457. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/apl-dKokRX4l.js +0 -0
  458. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/applescript-Co6uUVPk.js +0 -0
  459. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ara-BRHolxvo.js +0 -0
  460. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/asciidoc-Ve4PFQV2.js +0 -0
  461. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/asm-D_Q5rh1f.js +0 -0
  462. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/astro-CbQHKStN.js +0 -0
  463. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/aurora-x-D-2ljcwZ.js +0 -0
  464. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/awk-DMzUqQB5.js +0 -0
  465. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ayu-dark-DYE7WIF3.js +0 -0
  466. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ayu-light-BA47KaF1.js +0 -0
  467. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ayu-mirage-32ctXXKs.js +0 -0
  468. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ballerina-BFfxhgS-.js +0 -0
  469. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/bat-BkioyH1T.js +0 -0
  470. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/beancount-k_qm7-4y.js +0 -0
  471. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/berry-uYugtg8r.js +0 -0
  472. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/bibtex-CHM0blh-.js +0 -0
  473. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/bicep-Bmn6On1c.js +0 -0
  474. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/bird2-DPOp833l.js +0 -0
  475. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/blade-D4QpJJKB.js +0 -0
  476. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/bsl-BO_Y6i37.js +0 -0
  477. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/c-BIGW1oBm.js +0 -0
  478. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/c3-eo99z4R2.js +0 -0
  479. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/cadence-Bv_4Rxtq.js +0 -0
  480. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/cairo-KRGpt6FW.js +0 -0
  481. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  482. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  483. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  484. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  485. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/clarity-D53aC0YG.js +0 -0
  486. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/clojure-P80f7IUj.js +0 -0
  487. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/cmake-D1j8_8rp.js +0 -0
  488. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/cobol-nwyudZeR.js +0 -0
  489. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/codeowners-Bp6g37R7.js +0 -0
  490. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/codeql-DsOJ9woJ.js +0 -0
  491. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/coffee-Ch7k5sss.js +0 -0
  492. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/common-lisp-Cg-RD9OK.js +0 -0
  493. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/coq-DkFqJrB1.js +0 -0
  494. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/cpp-CofmeUqb.js +0 -0
  495. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/crystal-tKQVLTB8.js +0 -0
  496. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/csharp-COcwbKMJ.js +0 -0
  497. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/css-DPfMkruS.js +0 -0
  498. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/csv-fuZLfV_i.js +0 -0
  499. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/cue-D82EKSYY.js +0 -0
  500. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/cypher-COkxafJQ.js +0 -0
  501. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/d-85-TOEBH.js +0 -0
  502. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/dark-plus-C3mMm8J8.js +0 -0
  503. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/dart-CF10PKvl.js +0 -0
  504. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/dax-CEL-wOlO.js +0 -0
  505. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/desktop-BmXAJ9_W.js +0 -0
  506. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/diff-D97Zzqfu.js +0 -0
  507. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/docker-BcOcwvcX.js +0 -0
  508. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/dotenv-Da5cRb03.js +0 -0
  509. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/dracula-BzJJZx-M.js +0 -0
  510. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/dracula-soft-BXkSAIEj.js +0 -0
  511. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/dream-maker-BtqSS_iP.js +0 -0
  512. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/edge-BkV0erSs.js +0 -0
  513. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/elixir-CDX3lj18.js +0 -0
  514. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/elm-DbKCFpqz.js +0 -0
  515. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/emacs-lisp-C9XAeP06.js +0 -0
  516. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/erb-B12qg9BL.js +0 -0
  517. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/erlang-DsQrWhSR.js +0 -0
  518. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/everforest-dark-BgDCqdQA.js +0 -0
  519. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/everforest-light-C8M2exoo.js +0 -0
  520. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/fennel-BYunw83y.js +0 -0
  521. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/fish-BvzEVeQv.js +0 -0
  522. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/fluent-C4IJs8-o.js +0 -0
  523. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  524. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/fortran-free-form-BxgE0vQu.js +0 -0
  525. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/fsharp-CXgrBDvD.js +0 -0
  526. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gdresource-BOOCDP_w.js +0 -0
  527. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gdscript-C5YyOfLZ.js +0 -0
  528. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gdshader-DkwncUOv.js +0 -0
  529. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/genie-D0YGMca9.js +0 -0
  530. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gherkin-DyxjwDmM.js +0 -0
  531. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/git-commit-F4YmCXRG.js +0 -0
  532. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/git-rebase-r7XF79zn.js +0 -0
  533. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/github-dark-DHJKELXO.js +0 -0
  534. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/github-dark-default-Cuk6v7N8.js +0 -0
  535. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  536. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  537. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/github-light-DAi9KRSo.js +0 -0
  538. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/github-light-default-D7oLnXFd.js +0 -0
  539. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  540. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gleam-BspZqrRM.js +0 -0
  541. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/glimmer-js-Rg0-pVw9.js +0 -0
  542. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/glimmer-ts-U6CK756n.js +0 -0
  543. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/glsl-DplSGwfg.js +0 -0
  544. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gn-n2N0HUVH.js +0 -0
  545. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gnuplot-DdkO51Og.js +0 -0
  546. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/go-CxLEBnE3.js +0 -0
  547. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/graphql-ChdNCCLP.js +0 -0
  548. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/groovy-gcz8RCvz.js +0 -0
  549. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  550. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  551. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  552. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  553. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  554. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  555. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/hack-CaT9iCJl.js +0 -0
  556. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/haml-B8DHNrY2.js +0 -0
  557. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/handlebars-BL8al0AC.js +0 -0
  558. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/haskell-Df6bDoY_.js +0 -0
  559. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/haxe-CzTSHFRz.js +0 -0
  560. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/hcl-BWvSN4gD.js +0 -0
  561. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/highlighted-body-B3W2YXNL-DTuyBW20.js +0 -0
  562. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/hjson-D5-asLiD.js +0 -0
  563. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/hlsl-D3lLCCz7.js +0 -0
  564. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/horizon-BUw7H-hv.js +0 -0
  565. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/horizon-bright-Cn-bp-IR.js +0 -0
  566. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/houston-DnULxvSX.js +0 -0
  567. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/html-GMplVEZG.js +0 -0
  568. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/html-derivative-BFtXZ54Q.js +0 -0
  569. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/http-jrhK8wxY.js +0 -0
  570. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/hurl-irOxFIW8.js +0 -0
  571. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/hxml-Bvhsp5Yf.js +0 -0
  572. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/hy-DFXneXwc.js +0 -0
  573. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/imba-DGztddWO.js +0 -0
  574. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/index-CoapfQ1q.js +0 -0
  575. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/index-TK8frDq8.css +0 -0
  576. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ini-BEwlwnbL.js +0 -0
  577. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/java-CylS5w8V.js +0 -0
  578. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/javascript-wDzz0qaB.js +0 -0
  579. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/jinja-4LBKfQ-Z.js +0 -0
  580. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/jison-wvAkD_A8.js +0 -0
  581. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/json-Cp-IABpG.js +0 -0
  582. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/json5-C9tS-k6U.js +0 -0
  583. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/jsonc-Des-eS-w.js +0 -0
  584. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/jsonl-DcaNXYhu.js +0 -0
  585. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/jsonnet-DFQXde-d.js +0 -0
  586. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/jssm-C2t-YnRu.js +0 -0
  587. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/jsx-g9-lgVsj.js +0 -0
  588. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/julia-CxzCAyBv.js +0 -0
  589. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/just-Cw27pwNe.js +0 -0
  590. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  591. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  592. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/kanagawa-wave-DWedfzmr.js +0 -0
  593. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/kdl-DV7GczEv.js +0 -0
  594. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/kotlin-BdnUsdx6.js +0 -0
  595. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/kusto-DZf3V79B.js +0 -0
  596. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/laserwave-DUszq2jm.js +0 -0
  597. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/latex-CWtU0Tv5.js +0 -0
  598. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/lean-BZvkOJ9d.js +0 -0
  599. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/less-B1dDrJ26.js +0 -0
  600. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/light-plus-B7mTdjB0.js +0 -0
  601. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/liquid-DYVedYrR.js +0 -0
  602. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/llvm-DjAJT7YJ.js +0 -0
  603. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/log-2UxHyX5q.js +0 -0
  604. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/logo-BtOb2qkB.js +0 -0
  605. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/lua-BaeVxFsk.js +0 -0
  606. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/luau-C-HG3fhB.js +0 -0
  607. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/make-CHLpvVh8.js +0 -0
  608. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/markdown-Cvjx9yec.js +0 -0
  609. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/marko-CnJfTvn9.js +0 -0
  610. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/material-theme-D5KoaKCx.js +0 -0
  611. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/material-theme-darker-BfHTSMKl.js +0 -0
  612. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  613. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/material-theme-ocean-CyktbL80.js +0 -0
  614. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  615. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/matlab-D7o27uSR.js +0 -0
  616. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/mdc-BMNejdWA.js +0 -0
  617. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/mdx-Cmh6b_Ma.js +0 -0
  618. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/mermaid-mWjccvbQ.js +0 -0
  619. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/min-dark-CafNBF8u.js +0 -0
  620. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/min-light-CTRr51gU.js +0 -0
  621. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/mipsasm-CKIfxQSi.js +0 -0
  622. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/mojo-rZm6bMo-.js +0 -0
  623. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/monokai-D4h5O-jR.js +0 -0
  624. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/moonbit-_H4v1dQx.js +0 -0
  625. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/move-IF9eRakj.js +0 -0
  626. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/narrat-DRg8JJMk.js +0 -0
  627. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/nextflow-Zz6hmt5N.js +0 -0
  628. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/nextflow-groovy-BeH2EWoN.js +0 -0
  629. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/nginx-BpAMiNFr.js +0 -0
  630. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/night-owl-C39BiMTA.js +0 -0
  631. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/night-owl-light-CMTm3GFP.js +0 -0
  632. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/nim-CVrawwO9.js +0 -0
  633. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/nix-CwoSXNpI.js +0 -0
  634. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/nord-Ddv68eIx.js +0 -0
  635. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/nushell-Cz2AlsmD.js +0 -0
  636. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/objective-c-DXmwc3jG.js +0 -0
  637. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/objective-cpp-CLxacb5B.js +0 -0
  638. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ocaml-C0hk2d4L.js +0 -0
  639. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/odin-BBf5iR-q.js +0 -0
  640. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  641. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/one-light-C3Wv6jpd.js +0 -0
  642. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/openscad-C4EeE6gA.js +0 -0
  643. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/pascal-D93ZcfNL.js +0 -0
  644. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/perl-C0TMdlhV.js +0 -0
  645. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/php-Dhbhpdrm.js +0 -0
  646. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/pierre-dark-BXuwtOqb.js +0 -0
  647. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/pierre-light-dckrK0oj.js +0 -0
  648. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/pkl-u5AG7uiY.js +0 -0
  649. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/plastic-3e1v2bzS.js +0 -0
  650. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/plsql-ChMvpjG-.js +0 -0
  651. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/po-BTJTHyun.js +0 -0
  652. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/poimandres-CS3Unz2-.js +0 -0
  653. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/polar-C0HS_06l.js +0 -0
  654. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/postcss-CXtECtnM.js +0 -0
  655. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/powerquery-CEu0bR-o.js +0 -0
  656. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/powershell-Dpen1YoG.js +0 -0
  657. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/prisma-Dd19v3D-.js +0 -0
  658. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/prolog-CbFg5uaA.js +0 -0
  659. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/proto-C7zT0LnQ.js +0 -0
  660. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/pug-CGlum2m_.js +0 -0
  661. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/puppet-BMWR74SV.js +0 -0
  662. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/purescript-CklMAg4u.js +0 -0
  663. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/python-B6aJPvgy.js +0 -0
  664. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/qml-3beO22l8.js +0 -0
  665. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/qmldir-C8lEn-DE.js +0 -0
  666. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/qss-IeuSbFQv.js +0 -0
  667. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/r-Dspwwk_N.js +0 -0
  668. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/racket-BqYA7rlc.js +0 -0
  669. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/raku-DXvB9xmW.js +0 -0
  670. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/razor-Uh8Bk_45.js +0 -0
  671. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/red-bN70gL4F.js +0 -0
  672. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/reg-C-SQnVFl.js +0 -0
  673. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/regexp-CDVJQ6XC.js +0 -0
  674. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/rel-C3B-1QV4.js +0 -0
  675. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/riscv-BM1_JUlF.js +0 -0
  676. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ron-D8l8udqQ.js +0 -0
  677. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  678. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  679. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/rose-pine-qdsjHGoJ.js +0 -0
  680. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/rosmsg-BJDFO7_C.js +0 -0
  681. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/rst-BrH8l1NY.js +0 -0
  682. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ruby-Dw2BHqvy.js +0 -0
  683. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/rust-B1yitclQ.js +0 -0
  684. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/sas-cz2c8ADy.js +0 -0
  685. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/sass-Cj5Yp3dK.js +0 -0
  686. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/scala-C151Ov-r.js +0 -0
  687. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/scheme-C98Dy4si.js +0 -0
  688. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/scss-OYdSNvt2.js +0 -0
  689. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/sdbl-DVxCFoDh.js +0 -0
  690. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/shaderlab-Dg9Lc6iA.js +0 -0
  691. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/shellscript-Yzrsuije.js +0 -0
  692. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/shellsession-BADoaaVG.js +0 -0
  693. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/slack-dark-BthQWCQV.js +0 -0
  694. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/slack-ochin-DqwNpetd.js +0 -0
  695. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/smalltalk-BERRCDM3.js +0 -0
  696. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/snazzy-light-Bw305WKR.js +0 -0
  697. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/solarized-dark-DXbdFlpD.js +0 -0
  698. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/solarized-light-L9t79GZl.js +0 -0
  699. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/solidity-rGO070M0.js +0 -0
  700. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/soy-Brmx7dQM.js +0 -0
  701. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/sparql-rVzFXLq3.js +0 -0
  702. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/splunk-BtCnVYZw.js +0 -0
  703. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/sql-BLtJtn59.js +0 -0
  704. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ssh-config-_ykCGR6B.js +0 -0
  705. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/stata-BH5u7GGu.js +0 -0
  706. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/stylus-BEDo0Tqx.js +0 -0
  707. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/surrealql-Bq5Q-fJD.js +0 -0
  708. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/svelte-C_ipcX3V.js +0 -0
  709. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/swift-D82vCrfD.js +0 -0
  710. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/synthwave-84-CbfX1IO0.js +0 -0
  711. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/system-verilog-CnnmHF94.js +0 -0
  712. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/systemd-4A_iFExJ.js +0 -0
  713. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/talonscript-CkByrt1z.js +0 -0
  714. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/tasl-QIJgUcNo.js +0 -0
  715. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/tcl-dwOrl1Do.js +0 -0
  716. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/templ-P3uqSqPl.js +0 -0
  717. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/terraform-BETggiCN.js +0 -0
  718. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/tex-idrVyKtj.js +0 -0
  719. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/tokyo-night-hegEt444.js +0 -0
  720. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/toml-vGWfd6FD.js +0 -0
  721. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/ts-tags-zn1MmPIZ.js +0 -0
  722. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/tsv-B_m7g4N7.js +0 -0
  723. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/tsx-COt5Ahok.js +0 -0
  724. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/turtle-BsS91CYL.js +0 -0
  725. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/twig-DNn4PbVi.js +0 -0
  726. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/typescript-BPQ3VLAy.js +0 -0
  727. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/typespec-BGHnOYBU.js +0 -0
  728. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/typst-DHCkPAjA.js +0 -0
  729. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/v-BcVCzyr7.js +0 -0
  730. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vala-CsfeWuGM.js +0 -0
  731. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vb-D17OF-Vu.js +0 -0
  732. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/verilog-BQ8w6xss.js +0 -0
  733. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vesper-DU1UobuO.js +0 -0
  734. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vhdl-CeAyd5Ju.js +0 -0
  735. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/viml-CJc9bBzg.js +0 -0
  736. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vitesse-black-Bkuqu6BP.js +0 -0
  737. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vitesse-dark-D0r3Knsf.js +0 -0
  738. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vitesse-light-CVO1_9PV.js +0 -0
  739. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vue-DN_0RTcg.js +0 -0
  740. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vue-html-AaS7Mt5G.js +0 -0
  741. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vue-vine-CQOfvN7w.js +0 -0
  742. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/vyper-CDx5xZoG.js +0 -0
  743. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/wasm-CG6Dc4jp.js +0 -0
  744. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/wasm-MzD3tlZU.js +0 -0
  745. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/wenyan-BV7otONQ.js +0 -0
  746. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/wgsl-Dx-B1_4e.js +0 -0
  747. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/wikitext-BhOHFoWU.js +0 -0
  748. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/wit-5i3qLPDT.js +0 -0
  749. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/wolfram-lXgVvXCa.js +0 -0
  750. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/xml-sdJ4AIDG.js +0 -0
  751. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/xsl-CtQFsRM5.js +0 -0
  752. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/yaml-Buea-lGh.js +0 -0
  753. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/zenscript-DVFEvuxE.js +0 -0
  754. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/assets/zig-VOosw3JB.js +0 -0
  755. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/favicon.svg +0 -0
  756. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/fonts/InterVariable-Italic.woff2 +0 -0
  757. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/fonts/InterVariable.woff2 +0 -0
  758. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/dist/index.html +0 -0
  759. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/file_access.py +0 -0
  760. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/interaction.py +0 -0
  761. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/live_events.py +0 -0
  762. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/routes/__init__.py +0 -0
  763. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/routes/config.py +0 -0
  764. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/routes/files.py +0 -0
  765. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/routes/sessions.py +0 -0
  766. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/routes/skills.py +0 -0
  767. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/routes/ws.py +0 -0
  768. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/server.py +0 -0
  769. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/session_access.py +0 -0
  770. {klaude_code-2.28.0 → klaude_code-2.30.0}/src/klaude_code/web/session_live.py +0 -0
  771. {klaude_code-2.28.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.28.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
@@ -8,13 +8,14 @@ Requires-Dist: diff-match-patch>=20241021
8
8
  Requires-Dist: filelock>=3.20.3
9
9
  Requires-Dist: fastapi
10
10
  Requires-Dist: google-genai>=1.56.0
11
+ Requires-Dist: httpx[socks]>=0.28.1
11
12
  Requires-Dist: markdown-it-py>=4.0.0
12
13
  Requires-Dist: openai>=2.24.0
13
14
  Requires-Dist: prompt-toolkit>=3.0.52
14
15
  Requires-Dist: pydantic>=2.11.7
15
- Requires-Dist: python-socks>=2.8.1
16
16
  Requires-Dist: pyyaml>=6.0.2
17
17
  Requires-Dist: rich>=14.1.0
18
+ Requires-Dist: socksio>=1.0.0
18
19
  Requires-Dist: sse-starlette
19
20
  Requires-Dist: trafilatura>=2.0.0
20
21
  Requires-Dist: typer>=0.17.3
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "klaude-code"
7
- version = "2.28.0"
7
+ version = "2.30.0"
8
8
  description = "Minimal code agent CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13"
@@ -15,13 +15,14 @@ dependencies = [
15
15
  "filelock>=3.20.3",
16
16
  "fastapi",
17
17
  "google-genai>=1.56.0",
18
+ "httpx[socks]>=0.28.1",
18
19
  "markdown-it-py>=4.0.0",
19
20
  "openai>=2.24.0",
20
21
  "prompt-toolkit>=3.0.52",
21
22
  "pydantic>=2.11.7",
22
- "python-socks>=2.8.1",
23
23
  "pyyaml>=6.0.2",
24
24
  "rich>=14.1.0",
25
+ "socksio>=1.0.0",
25
26
  "sse-starlette",
26
27
  "trafilatura>=2.0.0",
27
28
  "typer>=0.17.3",
@@ -38,6 +38,7 @@ class Agent:
38
38
  self.profile: AgentProfile = profile
39
39
  self.compact_llm_client: LLMClientABC | None = compact_llm_client
40
40
  self._current_task: TaskExecutor | None = None
41
+ self._follow_up_queue: list[UserInputPayload] = [item.model_copy(deep=True) for item in session.follow_up_queue]
41
42
  self._last_interrupt_show_notice = True
42
43
  self._last_interrupt_prefill_text: str | None = None
43
44
  self.request_user_interaction = request_user_interaction
@@ -54,6 +55,37 @@ class Agent:
54
55
  self._last_interrupt_prefill_text = None
55
56
  return text
56
57
 
58
+ def follow_up(self, user_input: UserInputPayload) -> int:
59
+ """Queue a user message to run after the active task completes."""
60
+
61
+ self._follow_up_queue.append(user_input)
62
+ self.session.set_follow_up_queue(self._follow_up_queue)
63
+ return len(self._follow_up_queue)
64
+
65
+ def follow_up_count(self) -> int:
66
+ return len(self._follow_up_queue)
67
+
68
+ def follow_up_snapshot(self) -> tuple[UserInputPayload, ...]:
69
+ return tuple(self._follow_up_queue)
70
+
71
+ def pop_all_follow_up(self) -> tuple[UserInputPayload, ...]:
72
+ messages = tuple(self._follow_up_queue)
73
+ self._follow_up_queue.clear()
74
+ self.session.set_follow_up_queue(self._follow_up_queue)
75
+ return messages
76
+
77
+ def peek_next_follow_up(self) -> UserInputPayload | None:
78
+ if not self._follow_up_queue:
79
+ return None
80
+ return self._follow_up_queue[0]
81
+
82
+ def pop_next_follow_up(self) -> UserInputPayload | None:
83
+ if not self._follow_up_queue:
84
+ return None
85
+ message = self._follow_up_queue.pop(0)
86
+ self.session.set_follow_up_queue(self._follow_up_queue)
87
+ return message
88
+
57
89
  def on_interrupt(self) -> Iterable[events.Event]:
58
90
  """Handle an interrupt by emitting best-effort cleanup events.
59
91
 
@@ -44,7 +44,7 @@ MAIN_AGENT_COMMON_BASE_TOOLS: list[str] = [tools.BASH, tools.READ]
44
44
  MAIN_AGENT_GPT5_DIFF_TOOLS: list[str] = [tools.APPLY_PATCH, tools.TODO_WRITE]
45
45
  MAIN_AGENT_NON_GPT5_DIFF_TOOLS: list[str] = [tools.EDIT, tools.WRITE, tools.TODO_WRITE]
46
46
  MAIN_AGENT_COMMON_TOOLS: list[str] = [
47
- tools.HANDOFF,
47
+ # tools.HANDOFF,
48
48
  tools.AGENT,
49
49
  tools.WEB_FETCH,
50
50
  tools.WEB_SEARCH,
@@ -15,6 +15,7 @@ from klaude_code.prompts.attachments import (
15
15
  TOOL_RESULT_TEMPLATE,
16
16
  )
17
17
  from klaude_code.protocol import message, tools
18
+ from klaude_code.protocol.input_syntax import AT_FILE_PATTERN
18
19
  from klaude_code.protocol.models import (
19
20
  AtFileImagesUIItem,
20
21
  AtFileOp,
@@ -61,18 +62,6 @@ def _fmt_paste_file_hint(pasted_files: dict[str, str]) -> str:
61
62
  return PASTE_FILE_HINT_TEMPLATE.format(mapping=mapping)
62
63
 
63
64
 
64
- # Match @ preceded by whitespace, start of line, or -> (ReadTool line number arrow)
65
- # Supports optional line range suffix: @file.txt#L10-20 or @file.txt#L10.
66
- _AT_PLAIN_STOP_CHARS = (
67
- r"\u3000-\u303f"
68
- r"\uff01-\uff0f"
69
- r"\uff1a-\uff20"
70
- r"\uff3b-\uff40"
71
- r"\uff5b-\uff65"
72
- )
73
- AT_FILE_PATTERN = re.compile(rf'(?:(?<!\S)|(?<=\u2192))@("(?P<quoted>[^"]+)"|(?P<plain>[^\s{_AT_PLAIN_STOP_CHARS}]+))')
74
-
75
-
76
65
  class AtFileRef:
77
66
  """Parsed @file reference with optional line range."""
78
67
 
@@ -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
 
@@ -438,6 +453,12 @@ class AgentOperationHandler:
438
453
  # session is the only one that benefits from a suggestion.
439
454
  if agent.session.sub_agent_state is not None:
440
455
  return
456
+ if agent.follow_up_count() > 0:
457
+ log_debug(
458
+ f"[PromptSuggestion] skip session={session_id} reason=follow-up queue pending",
459
+ debug_type=DebugType.EXECUTION,
460
+ )
461
+ return
441
462
  suppress = should_suggest(agent.session)
442
463
  if suppress is not None:
443
464
  log_debug(
@@ -524,6 +545,7 @@ class AgentOperationHandler:
524
545
  agent = await self.ensure_agent(operation.session_id)
525
546
  # New user turn invalidates any pending suggestion for this session.
526
547
  self._cancel_prompt_suggestion(operation.session_id)
548
+ self._cancel_auto_away_summary(operation.session_id)
527
549
  await self._emit_event(events.PromptSuggestionClearedEvent(session_id=operation.session_id))
528
550
  frozen_input = self._freeze_user_input_for_history(
529
551
  operation.input,
@@ -561,7 +583,12 @@ class AgentOperationHandler:
561
583
  session_id=operation.session_id,
562
584
  )
563
585
 
586
+ async def follow_up_agent(self, operation: op.FollowUpAgentOperation) -> None:
587
+ agent = await self.ensure_agent(operation.session_id)
588
+ agent.follow_up(operation.input)
589
+
564
590
  async def run_bash(self, operation: op.RunBashOperation) -> None:
591
+ self._cancel_auto_away_summary(operation.session_id)
565
592
  agent = await self.ensure_agent(operation.session_id)
566
593
 
567
594
  existing_active = self.get_active_task(operation.id)
@@ -619,6 +646,7 @@ class AgentOperationHandler:
619
646
 
620
647
  async def continue_agent(self, operation: op.ContinueAgentOperation) -> None:
621
648
  """Continue agent execution without adding a new user message."""
649
+ self._cancel_auto_away_summary(operation.session_id)
622
650
  agent = await self.ensure_agent(operation.session_id)
623
651
 
624
652
  existing_active = self.get_active_task(operation.id)
@@ -642,6 +670,7 @@ class AgentOperationHandler:
642
670
  )
643
671
 
644
672
  async def compact_session(self, operation: op.CompactSessionOperation) -> None:
673
+ self._cancel_auto_away_summary(operation.session_id)
645
674
  agent = await self.ensure_agent(operation.session_id)
646
675
 
647
676
  if self._cancel_tasks_for_sessions({operation.session_id}):
@@ -684,6 +713,35 @@ class AgentOperationHandler:
684
713
  )
685
714
  return
686
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)
687
745
  clients = self.get_session_llm_clients(operation.session_id)
688
746
  fast_client = clients.get_fast_client()
689
747
 
@@ -699,6 +757,19 @@ class AgentOperationHandler:
699
757
  )
700
758
  return
701
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
+
702
773
  entry = message.AwaySummaryEntry(text=text, source=operation.source)
703
774
  agent.session.append_history([entry])
704
775
  await self._emit_event(
@@ -712,6 +783,7 @@ class AgentOperationHandler:
712
783
  agent = await self.ensure_agent(session_id)
713
784
  old_session_id = agent.session.id
714
785
  self._cancel_prompt_suggestion(old_session_id)
786
+ self._cancel_auto_away_summary(old_session_id)
715
787
  old_runtime = self._get_session_actor(old_session_id)
716
788
  if old_runtime is None:
717
789
  raise RuntimeError(f"Missing runtime for session {old_session_id}")
@@ -766,6 +838,7 @@ class AgentOperationHandler:
766
838
  """Switch the active session to an already-forked session and replay its history."""
767
839
  agent = await self.ensure_agent(session_id)
768
840
  old_session_id = agent.session.id
841
+ self._cancel_auto_away_summary(old_session_id)
769
842
  old_runtime = self._get_session_actor(old_session_id)
770
843
  if old_runtime is None:
771
844
  raise RuntimeError(f"Missing runtime for session {old_session_id}")
@@ -947,16 +1020,37 @@ class AgentOperationHandler:
947
1020
  try:
948
1021
  await self._emit_event(events.CompactionStartEvent(session_id=session_id, reason=reason))
949
1022
  log_debug(f"[Compact:{reason}] start", debug_type=DebugType.RESPONSE)
950
- compact_client = self.get_session_llm_clients(session_id).get_compact_client()
951
- result = await run_compaction(
952
- session=agent.session,
953
- reason=CompactionReason(reason),
954
- focus=operation.focus,
955
- llm_client=compact_client,
956
- llm_config=compact_client.get_llm_config(),
957
- cancel=cancel_event,
958
- main_profile=agent.profile,
959
- )
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)
960
1054
  log_debug(f"[Compact:{reason}] result", str(result.to_entry()), debug_type=DebugType.RESPONSE)
961
1055
  reset_attachment_loaded_flags(agent.session.file_tracker)
962
1056
  agent.session.append_history([result.to_entry()])
@@ -1031,6 +1125,9 @@ class AgentRunner:
1031
1125
  async def run_agent(self, operation: op.RunAgentOperation) -> None:
1032
1126
  await self._operation_handler.run_agent(operation)
1033
1127
 
1128
+ async def follow_up_agent(self, operation: op.FollowUpAgentOperation) -> None:
1129
+ await self._operation_handler.follow_up_agent(operation)
1130
+
1034
1131
  async def continue_agent(self, operation: op.ContinueAgentOperation) -> None:
1035
1132
  await self._operation_handler.continue_agent(operation)
1036
1133
 
@@ -1040,6 +1137,9 @@ class AgentRunner:
1040
1137
  async def generate_away_summary(self, operation: op.GenerateAwaySummaryOperation) -> None:
1041
1138
  await self._operation_handler.generate_away_summary(operation)
1042
1139
 
1140
+ def cancel_auto_away_summary(self, session_id: str) -> None:
1141
+ self._operation_handler.cancel_auto_away_summary(session_id)
1142
+
1043
1143
  async def clear_session(self, session_id: str) -> None:
1044
1144
  await self._operation_handler.clear_session(session_id)
1045
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(
@@ -215,6 +215,9 @@ class OperationDispatcher:
215
215
  async def handle_run_agent(self, operation: op.RunAgentOperation) -> None:
216
216
  await self._agent_runner.run_agent(operation)
217
217
 
218
+ async def handle_follow_up_agent(self, operation: op.FollowUpAgentOperation) -> None:
219
+ await self._agent_runner.follow_up_agent(operation)
220
+
218
221
  async def handle_run_bash(self, operation: op.RunBashOperation) -> None:
219
222
  await self._bash_runner.run_bash(operation)
220
223
 
@@ -227,6 +230,9 @@ class OperationDispatcher:
227
230
  async def handle_generate_away_summary(self, operation: op.GenerateAwaySummaryOperation) -> None:
228
231
  await self._agent_runner.generate_away_summary(operation)
229
232
 
233
+ def cancel_auto_away_summary(self, session_id: str) -> None:
234
+ self._agent_runner.cancel_auto_away_summary(session_id)
235
+
230
236
  async def handle_change_model(self, operation: op.ChangeModelOperation) -> None:
231
237
  await self._config_handler.handle_change_model(operation)
232
238