klaude-code 2.28.0__tar.gz → 2.29.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (769) hide show
  1. {klaude_code-2.28.0 → klaude_code-2.29.0}/PKG-INFO +3 -2
  2. {klaude_code-2.28.0 → klaude_code-2.29.0}/pyproject.toml +3 -2
  3. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/agent.py +32 -0
  4. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/agent_profile.py +1 -1
  5. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/files.py +1 -12
  6. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/agent_ops.py +13 -0
  7. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/dispatcher.py +3 -0
  8. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/task.py +2 -1
  9. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/runtime.py +11 -0
  10. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/assets/builtin_config.yaml +4 -6
  11. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/const.py +2 -4
  12. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/control/runtime/actor.py +7 -1
  13. klaude_code-2.29.0/src/klaude_code/llm/proxy_support.py +43 -0
  14. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/prompt_suggestion.py +4 -3
  15. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-simplifier.md +0 -1
  16. klaude_code-2.29.0/src/klaude_code/protocol/input_syntax.py +57 -0
  17. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/message.py +1 -0
  18. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/model_id.py +2 -3
  19. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/op.py +12 -0
  20. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/op_handler.py +5 -0
  21. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/session/meta.py +17 -1
  22. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/session/session.py +10 -0
  23. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/session/store.py +7 -1
  24. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/shell/bash_tool.py +198 -2
  25. klaude_code-2.29.0/src/klaude_code/tui/AGENTS.md +128 -0
  26. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/commands.py +21 -0
  27. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/diffs.py +36 -6
  28. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/markdown.py +51 -2
  29. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/status.py +22 -55
  30. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/task_file_changes.py +11 -2
  31. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/user_input.py +5 -13
  32. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/display.py +27 -12
  33. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/completers.py +3 -31
  34. klaude_code-2.29.0/src/klaude_code/tui/input/flicker_safe_stdout.py +256 -0
  35. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/key_bindings.py +85 -1
  36. klaude_code-2.29.0/src/klaude_code/tui/input/prompt_status_bar.py +286 -0
  37. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/prompt_toolkit.py +172 -12
  38. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/pt_theme.py +5 -0
  39. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/machine.py +16 -3
  40. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/renderer.py +102 -154
  41. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/runner.py +240 -72
  42. klaude_code-2.28.0/src/klaude_code/tui/AGENTS.md +0 -39
  43. klaude_code-2.28.0/src/klaude_code/tui/components/rich/live.py +0 -84
  44. {klaude_code-2.28.0 → klaude_code-2.29.0}/README.md +0 -0
  45. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/.DS_Store +0 -0
  46. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/__init__.py +0 -0
  47. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/__init__.py +0 -0
  48. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/__init__.py +0 -0
  49. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/collection.py +0 -0
  50. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/memory.py +0 -0
  51. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/skills.py +0 -0
  52. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/state.py +0 -0
  53. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/todo.py +0 -0
  54. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/away_summary.py +0 -0
  55. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/bash_mode.py +0 -0
  56. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/cache_break_detection.py +0 -0
  57. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/cache_safe.py +0 -0
  58. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/compaction/AGENTS.md +0 -0
  59. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/compaction/__init__.py +0 -0
  60. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/compaction/compaction.py +0 -0
  61. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/compaction/overflow.py +0 -0
  62. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/handoff/__init__.py +0 -0
  63. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/handoff/handoff.py +0 -0
  64. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/handoff/manager.py +0 -0
  65. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/prompt_suggestion/__init__.py +0 -0
  66. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/prompt_suggestion/prompt_suggestion.py +0 -0
  67. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/rewind/__init__.py +0 -0
  68. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/rewind/manager.py +0 -0
  69. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/__init__.py +0 -0
  70. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/away_summary.py +0 -0
  71. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/config_ops.py +0 -0
  72. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/llm.py +0 -0
  73. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/sub_agent.py +0 -0
  74. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/session_stats.py +0 -0
  75. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/session_title.py +0 -0
  76. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/skill_inventory.py +0 -0
  77. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/system_prompt.py +0 -0
  78. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/turn.py +0 -0
  79. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/__init__.py +0 -0
  80. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/auth_flow.py +0 -0
  81. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/log_viewer.html +0 -0
  82. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/log_viewer.py +0 -0
  83. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/ports/__init__.py +0 -0
  84. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/ports/display.py +0 -0
  85. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/ports/input.py +0 -0
  86. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/ports/interaction.py +0 -0
  87. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/runtime_facade.py +0 -0
  88. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/AGENTS.md +0 -0
  89. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/__init__.py +0 -0
  90. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/base.py +0 -0
  91. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/codex/__init__.py +0 -0
  92. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/codex/exceptions.py +0 -0
  93. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/codex/jwt_utils.py +0 -0
  94. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/codex/oauth.py +0 -0
  95. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/codex/token_manager.py +0 -0
  96. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/copilot/__init__.py +0 -0
  97. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/copilot/exceptions.py +0 -0
  98. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/copilot/oauth.py +0 -0
  99. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/copilot/token_manager.py +0 -0
  100. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/env.py +0 -0
  101. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/__init__.py +0 -0
  102. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/auth_cmd.py +0 -0
  103. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/config_cmd.py +0 -0
  104. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/cost_cmd.py +0 -0
  105. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/debug.py +0 -0
  106. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/list_model.py +0 -0
  107. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/main.py +0 -0
  108. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/oauth_usage.py +0 -0
  109. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/self_update.py +0 -0
  110. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/web_cmd.py +0 -0
  111. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/__init__.py +0 -0
  112. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/assets/__init__.py +0 -0
  113. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/builtin_config.py +0 -0
  114. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/config.py +0 -0
  115. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/formatters.py +0 -0
  116. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/loader.py +0 -0
  117. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/merge.py +0 -0
  118. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/model_matcher.py +0 -0
  119. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/sub_agent_model.py +0 -0
  120. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/thinking.py +0 -0
  121. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/control/__init__.py +0 -0
  122. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/control/event_bus.py +0 -0
  123. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/control/event_relay.py +0 -0
  124. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/control/runtime/__init__.py +0 -0
  125. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/control/runtime/registry.py +0 -0
  126. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/control/session_meta_relay.py +0 -0
  127. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/control/user_interaction.py +0 -0
  128. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/AGENTS.md +0 -0
  129. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/__init__.py +0 -0
  130. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/anthropic/__init__.py +0 -0
  131. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/anthropic/client.py +0 -0
  132. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/anthropic/input.py +0 -0
  133. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/bedrock_anthropic/__init__.py +0 -0
  134. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/bedrock_anthropic/client.py +0 -0
  135. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/client.py +0 -0
  136. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/copilot/__init__.py +0 -0
  137. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/copilot/client.py +0 -0
  138. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/google/__init__.py +0 -0
  139. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/google/client.py +0 -0
  140. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/google/input.py +0 -0
  141. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/google_vertex/__init__.py +0 -0
  142. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/google_vertex/client.py +0 -0
  143. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/image.py +0 -0
  144. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/input_common.py +0 -0
  145. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/json_stable.py +0 -0
  146. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_codex/__init__.py +0 -0
  147. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_codex/client.py +0 -0
  148. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_compatible/__init__.py +0 -0
  149. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_compatible/client.py +0 -0
  150. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_compatible/input.py +0 -0
  151. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_compatible/stream.py +0 -0
  152. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_responses/__init__.py +0 -0
  153. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_responses/client.py +0 -0
  154. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_responses/input.py +0 -0
  155. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openrouter/__init__.py +0 -0
  156. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openrouter/client.py +0 -0
  157. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openrouter/input.py +0 -0
  158. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openrouter/reasoning.py +0 -0
  159. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/registry.py +0 -0
  160. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/stream_parts.py +0 -0
  161. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/usage.py +0 -0
  162. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/log.py +0 -0
  163. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/__init__.py +0 -0
  164. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/attachments.py +0 -0
  165. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/away_summary.py +0 -0
  166. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/compaction.py +0 -0
  167. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/handoff.py +0 -0
  168. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/messages.py +0 -0
  169. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/session_title.py +0 -0
  170. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-finder.md +0 -0
  171. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-review.md +0 -0
  172. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/sub_agents.py +0 -0
  173. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/system/auto-memory-prompt.md +0 -0
  174. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/system/base-system-prompt-gpt.md +0 -0
  175. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/system/base-system-prompt.md +0 -0
  176. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/system/extended-thinking-prompt.md +0 -0
  177. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/system/following-conventions-prompt.md +0 -0
  178. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/system/git-workspace-hygiene-prompt.md +0 -0
  179. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/__init__.py +0 -0
  180. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/events.py +0 -0
  181. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/llm_param.py +0 -0
  182. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/__init__.py +0 -0
  183. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/common.py +0 -0
  184. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/developer_ui.py +0 -0
  185. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/file_tracking.py +0 -0
  186. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/session_runtime.py +0 -0
  187. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/sub_agent.py +0 -0
  188. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/task_metadata.py +0 -0
  189. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/todo.py +0 -0
  190. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/tool_ui.py +0 -0
  191. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/usage.py +0 -0
  192. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/AGENTS.md +0 -0
  193. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/__init__.py +0 -0
  194. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/finder.py +0 -0
  195. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/general_purpose.py +0 -0
  196. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/review.py +0 -0
  197. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/simplifier.py +0 -0
  198. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/system_prompt.py +0 -0
  199. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/tools.py +0 -0
  200. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/user_interaction.py +0 -0
  201. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/session/__init__.py +0 -0
  202. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/session/codec.py +0 -0
  203. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/session/history.py +0 -0
  204. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/session/selector.py +0 -0
  205. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/session/store_registry.py +0 -0
  206. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/AGENTS.md +0 -0
  207. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/__init__.py +0 -0
  208. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/.git +0 -0
  209. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/.gitignore +0 -0
  210. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/SOURCES.md +0 -0
  211. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/SKILL.md +0 -0
  212. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/authentication.md +0 -0
  213. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/commands.md +0 -0
  214. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/profiling.md +0 -0
  215. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/proxy-support.md +0 -0
  216. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/session-management.md +0 -0
  217. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/snapshot-refs.md +0 -0
  218. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/video-recording.md +0 -0
  219. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/templates/authenticated-session.sh +0 -0
  220. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/templates/capture-workflow.sh +0 -0
  221. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/templates/form-automation.sh +0 -0
  222. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/frontend-design/SKILL.md +0 -0
  223. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/LICENSE.txt +0 -0
  224. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/SKILL.md +0 -0
  225. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/references/cli.md +0 -0
  226. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/references/image-api.md +0 -0
  227. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/references/prompting.md +0 -0
  228. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/references/sample-prompts.md +0 -0
  229. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/scripts/image_gen.py +0 -0
  230. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/klaude-config/SKILL.md +0 -0
  231. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/klaude-config/references/builtin-providers.md +0 -0
  232. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/klaude-config/references/config-file.md +0 -0
  233. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/klaude-config/references/memory-files.md +0 -0
  234. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/klaude-config/references/skill-system.md +0 -0
  235. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/SKILL.md +0 -0
  236. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/cli.md +0 -0
  237. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/gemini-api.md +0 -0
  238. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/prompting.md +0 -0
  239. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/sample-prompts.md +0 -0
  240. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/vertex-setup.md +0 -0
  241. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/scripts/gemini_image_gen.py +0 -0
  242. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/SKILL.md +0 -0
  243. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/forms.md +0 -0
  244. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/reference.md +0 -0
  245. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/check_bounding_boxes.py +0 -0
  246. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/check_fillable_fields.py +0 -0
  247. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/convert_pdf_to_images.py +0 -0
  248. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/create_validation_image.py +0 -0
  249. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/extract_form_field_info.py +0 -0
  250. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/extract_form_structure.py +0 -0
  251. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/fill_fillable_fields.py +0 -0
  252. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/fill_pdf_form_with_annotations.py +0 -0
  253. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/LICENSE.txt +0 -0
  254. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/NOTICE.txt +0 -0
  255. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/SKILL.md +0 -0
  256. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/assets/playwright-small.svg +0 -0
  257. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/assets/playwright.png +0 -0
  258. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/references/cli.md +0 -0
  259. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/references/workflows.md +0 -0
  260. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/scripts/playwright_cli.sh +0 -0
  261. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/SKILL.md +0 -0
  262. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/3d.md +0 -0
  263. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/animations.md +0 -0
  264. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/charts-bar-chart.tsx +0 -0
  265. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +0 -0
  266. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +0 -0
  267. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets.md +0 -0
  268. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/audio-visualization.md +0 -0
  269. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/audio.md +0 -0
  270. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/calculate-metadata.md +0 -0
  271. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/can-decode.md +0 -0
  272. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/charts.md +0 -0
  273. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/compositions.md +0 -0
  274. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/display-captions.md +0 -0
  275. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/extract-frames.md +0 -0
  276. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/ffmpeg.md +0 -0
  277. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/fonts.md +0 -0
  278. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-audio-duration.md +0 -0
  279. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-video-dimensions.md +0 -0
  280. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-video-duration.md +0 -0
  281. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/gifs.md +0 -0
  282. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/images.md +0 -0
  283. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/import-srt-captions.md +0 -0
  284. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/light-leaks.md +0 -0
  285. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/lottie.md +0 -0
  286. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/maps.md +0 -0
  287. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/measuring-dom-nodes.md +0 -0
  288. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/measuring-text.md +0 -0
  289. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/parameters.md +0 -0
  290. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/sequencing.md +0 -0
  291. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/sfx.md +0 -0
  292. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/subtitles.md +0 -0
  293. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/tailwind.md +0 -0
  294. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/text-animations.md +0 -0
  295. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/timing.md +0 -0
  296. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transcribe-captions.md +0 -0
  297. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transitions.md +0 -0
  298. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transparent-videos.md +0 -0
  299. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/trimming.md +0 -0
  300. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/videos.md +0 -0
  301. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/voiceover.md +0 -0
  302. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/.gitignore +0 -0
  303. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/SKILL.md +0 -0
  304. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/package.json +0 -0
  305. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/references/config/first-time-setup.md +0 -0
  306. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/references/config/preferences-schema.md +0 -0
  307. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/references/templates/standalone.html +0 -0
  308. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/references/troubleshooting.md +0 -0
  309. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/scripts/render_mermaid.js +0 -0
  310. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/scripts/setup.sh +0 -0
  311. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/session-logs/SKILL.md +0 -0
  312. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/skill-creator/SKILL.md +0 -0
  313. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/skills-lock.json +0 -0
  314. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/LICENSE.txt +0 -0
  315. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/SKILL.md +0 -0
  316. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/assets/sora-small.svg +0 -0
  317. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/assets/sora.png +0 -0
  318. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/cinematic-shots.md +0 -0
  319. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/cli.md +0 -0
  320. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/prompting.md +0 -0
  321. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/sample-prompts.md +0 -0
  322. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/social-ads.md +0 -0
  323. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/troubleshooting.md +0 -0
  324. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/video-api.md +0 -0
  325. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/scripts/sora.py +0 -0
  326. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/svg-animations/SKILL.md +0 -0
  327. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/svg-animations/examples/index.html +0 -0
  328. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/web-search/SKILL.md +0 -0
  329. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/loader.py +0 -0
  330. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/manager.py +0 -0
  331. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/system_skills.py +0 -0
  332. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/AGENTS.md +0 -0
  333. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/__init__.py +0 -0
  334. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/agent_tool.md +0 -0
  335. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/agent_tool.py +0 -0
  336. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/ask_user_question_tool.md +0 -0
  337. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/ask_user_question_tool.py +0 -0
  338. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/__init__.py +0 -0
  339. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/abc.py +0 -0
  340. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/context.py +0 -0
  341. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/offload.py +0 -0
  342. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/registry.py +0 -0
  343. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/runner.py +0 -0
  344. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/__init__.py +0 -0
  345. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/_utils.py +0 -0
  346. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/apply_patch.py +0 -0
  347. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/apply_patch_tool.md +0 -0
  348. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/apply_patch_tool.py +0 -0
  349. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/diff_builder.py +0 -0
  350. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/edit_tool.md +0 -0
  351. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/edit_tool.py +0 -0
  352. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/read_tool.md +0 -0
  353. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/read_tool.py +0 -0
  354. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/write_tool.md +0 -0
  355. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/write_tool.py +0 -0
  356. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/handoff_tool.md +0 -0
  357. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/handoff_tool.py +0 -0
  358. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/rewind_tool.md +0 -0
  359. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/rewind_tool.py +0 -0
  360. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/shell/__init__.py +0 -0
  361. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/shell/bash_tool.md +0 -0
  362. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/shell/command_safety.py +0 -0
  363. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/todo/__init__.py +0 -0
  364. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/todo/todo_write_tool.md +0 -0
  365. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/todo/todo_write_tool.py +0 -0
  366. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/todo/todo_write_tool_raw.md +0 -0
  367. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/__init__.py +0 -0
  368. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/external_content.py +0 -0
  369. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/ssrf.py +0 -0
  370. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/web_cache.py +0 -0
  371. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/web_fetch_tool.md +0 -0
  372. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/web_fetch_tool.py +0 -0
  373. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/web_search_tool.md +0 -0
  374. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/web_search_tool.py +0 -0
  375. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/__init__.py +0 -0
  376. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/AGENTS.md +0 -0
  377. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/__init__.py +0 -0
  378. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/auth_selector.py +0 -0
  379. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/command_abc.py +0 -0
  380. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/compact_cmd.py +0 -0
  381. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/continue_cmd.py +0 -0
  382. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/copy_cmd.py +0 -0
  383. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/debug_cmd.py +0 -0
  384. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/export_session_cmd.py +0 -0
  385. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/export_session_html.py +0 -0
  386. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/fork_session_cmd.py +0 -0
  387. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/login_cmd.py +0 -0
  388. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/logout_cmd.py +0 -0
  389. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/model_cmd.py +0 -0
  390. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/model_picker.py +0 -0
  391. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/new_cmd.py +0 -0
  392. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/recap_cmd.py +0 -0
  393. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/refresh_cmd.py +0 -0
  394. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/registry.py +0 -0
  395. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/status_cmd.py +0 -0
  396. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/sub_agent_model_cmd.py +0 -0
  397. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/thinking_cmd.py +0 -0
  398. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/types.py +0 -0
  399. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/web_cmd.py +0 -0
  400. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/__init__.py +0 -0
  401. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/away_summary.py +0 -0
  402. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/bash_syntax.py +0 -0
  403. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/command_output.py +0 -0
  404. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/common.py +0 -0
  405. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/developer.py +0 -0
  406. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/errors.py +0 -0
  407. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/metadata.py +0 -0
  408. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/__init__.py +0 -0
  409. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/cjk_wrap.py +0 -0
  410. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/quote.py +0 -0
  411. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/theme.py +0 -0
  412. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/sub_agent.py +0 -0
  413. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/thinking.py +0 -0
  414. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/__init__.py +0 -0
  415. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_bash.py +0 -0
  416. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_common.py +0 -0
  417. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_dispatch.py +0 -0
  418. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_file.py +0 -0
  419. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_question.py +0 -0
  420. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_read.py +0 -0
  421. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_rewind.py +0 -0
  422. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_todo.py +0 -0
  423. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_web.py +0 -0
  424. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/welcome.py +0 -0
  425. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/AGENTS.md +0 -0
  426. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/__init__.py +0 -0
  427. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/drag_drop.py +0 -0
  428. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/images.py +0 -0
  429. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/paste.py +0 -0
  430. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/status_runtime.py +0 -0
  431. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/__init__.py +0 -0
  432. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/ask_user_question.py +0 -0
  433. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/color.py +0 -0
  434. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/control.py +0 -0
  435. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/focus_tracker.py +0 -0
  436. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/image.py +0 -0
  437. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/notifier.py +0 -0
  438. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/prevent_sleep.py +0 -0
  439. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/selector.py +0 -0
  440. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/session_selector.py +0 -0
  441. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/title.py +0 -0
  442. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/update.py +0 -0
  443. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/__init__.py +0 -0
  444. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/app.py +0 -0
  445. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/display.py +0 -0
  446. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/abap-BdImnpbu.js +0 -0
  447. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/actionscript-3-CoDkCxhg.js +0 -0
  448. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ada-bCR0ucgS.js +0 -0
  449. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/andromeeda-C4gqWexZ.js +0 -0
  450. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/angular-html-CU67Zn6k.js +0 -0
  451. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/angular-ts-BwZT4LLn.js +0 -0
  452. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/apache-Pmp26Uib.js +0 -0
  453. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/apex-D8_7TLub.js +0 -0
  454. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/apl-dKokRX4l.js +0 -0
  455. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/applescript-Co6uUVPk.js +0 -0
  456. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ara-BRHolxvo.js +0 -0
  457. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/asciidoc-Ve4PFQV2.js +0 -0
  458. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/asm-D_Q5rh1f.js +0 -0
  459. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/astro-CbQHKStN.js +0 -0
  460. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/aurora-x-D-2ljcwZ.js +0 -0
  461. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/awk-DMzUqQB5.js +0 -0
  462. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ayu-dark-DYE7WIF3.js +0 -0
  463. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ayu-light-BA47KaF1.js +0 -0
  464. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ayu-mirage-32ctXXKs.js +0 -0
  465. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ballerina-BFfxhgS-.js +0 -0
  466. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/bat-BkioyH1T.js +0 -0
  467. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/beancount-k_qm7-4y.js +0 -0
  468. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/berry-uYugtg8r.js +0 -0
  469. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/bibtex-CHM0blh-.js +0 -0
  470. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/bicep-Bmn6On1c.js +0 -0
  471. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/bird2-DPOp833l.js +0 -0
  472. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/blade-D4QpJJKB.js +0 -0
  473. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/bsl-BO_Y6i37.js +0 -0
  474. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/c-BIGW1oBm.js +0 -0
  475. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/c3-eo99z4R2.js +0 -0
  476. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cadence-Bv_4Rxtq.js +0 -0
  477. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cairo-KRGpt6FW.js +0 -0
  478. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  479. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  480. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  481. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  482. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/clarity-D53aC0YG.js +0 -0
  483. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/clojure-P80f7IUj.js +0 -0
  484. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cmake-D1j8_8rp.js +0 -0
  485. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cobol-nwyudZeR.js +0 -0
  486. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/codeowners-Bp6g37R7.js +0 -0
  487. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/codeql-DsOJ9woJ.js +0 -0
  488. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/coffee-Ch7k5sss.js +0 -0
  489. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/common-lisp-Cg-RD9OK.js +0 -0
  490. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/coq-DkFqJrB1.js +0 -0
  491. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cpp-CofmeUqb.js +0 -0
  492. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/crystal-tKQVLTB8.js +0 -0
  493. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/csharp-COcwbKMJ.js +0 -0
  494. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/css-DPfMkruS.js +0 -0
  495. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/csv-fuZLfV_i.js +0 -0
  496. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cue-D82EKSYY.js +0 -0
  497. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cypher-COkxafJQ.js +0 -0
  498. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/d-85-TOEBH.js +0 -0
  499. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dark-plus-C3mMm8J8.js +0 -0
  500. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dart-CF10PKvl.js +0 -0
  501. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dax-CEL-wOlO.js +0 -0
  502. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/desktop-BmXAJ9_W.js +0 -0
  503. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/diff-D97Zzqfu.js +0 -0
  504. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/docker-BcOcwvcX.js +0 -0
  505. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dotenv-Da5cRb03.js +0 -0
  506. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dracula-BzJJZx-M.js +0 -0
  507. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dracula-soft-BXkSAIEj.js +0 -0
  508. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dream-maker-BtqSS_iP.js +0 -0
  509. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/edge-BkV0erSs.js +0 -0
  510. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/elixir-CDX3lj18.js +0 -0
  511. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/elm-DbKCFpqz.js +0 -0
  512. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/emacs-lisp-C9XAeP06.js +0 -0
  513. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/erb-B12qg9BL.js +0 -0
  514. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/erlang-DsQrWhSR.js +0 -0
  515. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/everforest-dark-BgDCqdQA.js +0 -0
  516. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/everforest-light-C8M2exoo.js +0 -0
  517. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fennel-BYunw83y.js +0 -0
  518. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fish-BvzEVeQv.js +0 -0
  519. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fluent-C4IJs8-o.js +0 -0
  520. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  521. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fortran-free-form-BxgE0vQu.js +0 -0
  522. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fsharp-CXgrBDvD.js +0 -0
  523. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gdresource-BOOCDP_w.js +0 -0
  524. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gdscript-C5YyOfLZ.js +0 -0
  525. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gdshader-DkwncUOv.js +0 -0
  526. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/genie-D0YGMca9.js +0 -0
  527. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gherkin-DyxjwDmM.js +0 -0
  528. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/git-commit-F4YmCXRG.js +0 -0
  529. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/git-rebase-r7XF79zn.js +0 -0
  530. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-dark-DHJKELXO.js +0 -0
  531. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-dark-default-Cuk6v7N8.js +0 -0
  532. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  533. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  534. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-light-DAi9KRSo.js +0 -0
  535. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-light-default-D7oLnXFd.js +0 -0
  536. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  537. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gleam-BspZqrRM.js +0 -0
  538. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/glimmer-js-Rg0-pVw9.js +0 -0
  539. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/glimmer-ts-U6CK756n.js +0 -0
  540. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/glsl-DplSGwfg.js +0 -0
  541. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gn-n2N0HUVH.js +0 -0
  542. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gnuplot-DdkO51Og.js +0 -0
  543. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/go-CxLEBnE3.js +0 -0
  544. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/graphql-ChdNCCLP.js +0 -0
  545. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/groovy-gcz8RCvz.js +0 -0
  546. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  547. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  548. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  549. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  550. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  551. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  552. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hack-CaT9iCJl.js +0 -0
  553. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/haml-B8DHNrY2.js +0 -0
  554. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/handlebars-BL8al0AC.js +0 -0
  555. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/haskell-Df6bDoY_.js +0 -0
  556. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/haxe-CzTSHFRz.js +0 -0
  557. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hcl-BWvSN4gD.js +0 -0
  558. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/highlighted-body-B3W2YXNL-DTuyBW20.js +0 -0
  559. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hjson-D5-asLiD.js +0 -0
  560. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hlsl-D3lLCCz7.js +0 -0
  561. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/horizon-BUw7H-hv.js +0 -0
  562. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/horizon-bright-Cn-bp-IR.js +0 -0
  563. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/houston-DnULxvSX.js +0 -0
  564. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/html-GMplVEZG.js +0 -0
  565. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/html-derivative-BFtXZ54Q.js +0 -0
  566. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/http-jrhK8wxY.js +0 -0
  567. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hurl-irOxFIW8.js +0 -0
  568. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hxml-Bvhsp5Yf.js +0 -0
  569. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hy-DFXneXwc.js +0 -0
  570. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/imba-DGztddWO.js +0 -0
  571. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/index-CoapfQ1q.js +0 -0
  572. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/index-TK8frDq8.css +0 -0
  573. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ini-BEwlwnbL.js +0 -0
  574. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/java-CylS5w8V.js +0 -0
  575. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/javascript-wDzz0qaB.js +0 -0
  576. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jinja-4LBKfQ-Z.js +0 -0
  577. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jison-wvAkD_A8.js +0 -0
  578. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/json-Cp-IABpG.js +0 -0
  579. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/json5-C9tS-k6U.js +0 -0
  580. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jsonc-Des-eS-w.js +0 -0
  581. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jsonl-DcaNXYhu.js +0 -0
  582. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jsonnet-DFQXde-d.js +0 -0
  583. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jssm-C2t-YnRu.js +0 -0
  584. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jsx-g9-lgVsj.js +0 -0
  585. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/julia-CxzCAyBv.js +0 -0
  586. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/just-Cw27pwNe.js +0 -0
  587. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  588. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  589. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kanagawa-wave-DWedfzmr.js +0 -0
  590. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kdl-DV7GczEv.js +0 -0
  591. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kotlin-BdnUsdx6.js +0 -0
  592. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kusto-DZf3V79B.js +0 -0
  593. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/laserwave-DUszq2jm.js +0 -0
  594. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/latex-CWtU0Tv5.js +0 -0
  595. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/lean-BZvkOJ9d.js +0 -0
  596. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/less-B1dDrJ26.js +0 -0
  597. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/light-plus-B7mTdjB0.js +0 -0
  598. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/liquid-DYVedYrR.js +0 -0
  599. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/llvm-DjAJT7YJ.js +0 -0
  600. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/log-2UxHyX5q.js +0 -0
  601. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/logo-BtOb2qkB.js +0 -0
  602. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/lua-BaeVxFsk.js +0 -0
  603. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/luau-C-HG3fhB.js +0 -0
  604. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/make-CHLpvVh8.js +0 -0
  605. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/markdown-Cvjx9yec.js +0 -0
  606. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/marko-CnJfTvn9.js +0 -0
  607. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/material-theme-D5KoaKCx.js +0 -0
  608. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/material-theme-darker-BfHTSMKl.js +0 -0
  609. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  610. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/material-theme-ocean-CyktbL80.js +0 -0
  611. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  612. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/matlab-D7o27uSR.js +0 -0
  613. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/mdc-BMNejdWA.js +0 -0
  614. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/mdx-Cmh6b_Ma.js +0 -0
  615. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/mermaid-mWjccvbQ.js +0 -0
  616. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/min-dark-CafNBF8u.js +0 -0
  617. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/min-light-CTRr51gU.js +0 -0
  618. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/mipsasm-CKIfxQSi.js +0 -0
  619. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/mojo-rZm6bMo-.js +0 -0
  620. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/monokai-D4h5O-jR.js +0 -0
  621. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/moonbit-_H4v1dQx.js +0 -0
  622. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/move-IF9eRakj.js +0 -0
  623. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/narrat-DRg8JJMk.js +0 -0
  624. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nextflow-Zz6hmt5N.js +0 -0
  625. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nextflow-groovy-BeH2EWoN.js +0 -0
  626. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nginx-BpAMiNFr.js +0 -0
  627. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/night-owl-C39BiMTA.js +0 -0
  628. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/night-owl-light-CMTm3GFP.js +0 -0
  629. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nim-CVrawwO9.js +0 -0
  630. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nix-CwoSXNpI.js +0 -0
  631. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nord-Ddv68eIx.js +0 -0
  632. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nushell-Cz2AlsmD.js +0 -0
  633. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/objective-c-DXmwc3jG.js +0 -0
  634. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/objective-cpp-CLxacb5B.js +0 -0
  635. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ocaml-C0hk2d4L.js +0 -0
  636. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/odin-BBf5iR-q.js +0 -0
  637. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  638. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/one-light-C3Wv6jpd.js +0 -0
  639. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/openscad-C4EeE6gA.js +0 -0
  640. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/pascal-D93ZcfNL.js +0 -0
  641. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/perl-C0TMdlhV.js +0 -0
  642. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/php-Dhbhpdrm.js +0 -0
  643. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/pierre-dark-BXuwtOqb.js +0 -0
  644. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/pierre-light-dckrK0oj.js +0 -0
  645. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/pkl-u5AG7uiY.js +0 -0
  646. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/plastic-3e1v2bzS.js +0 -0
  647. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/plsql-ChMvpjG-.js +0 -0
  648. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/po-BTJTHyun.js +0 -0
  649. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/poimandres-CS3Unz2-.js +0 -0
  650. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/polar-C0HS_06l.js +0 -0
  651. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/postcss-CXtECtnM.js +0 -0
  652. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/powerquery-CEu0bR-o.js +0 -0
  653. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/powershell-Dpen1YoG.js +0 -0
  654. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/prisma-Dd19v3D-.js +0 -0
  655. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/prolog-CbFg5uaA.js +0 -0
  656. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/proto-C7zT0LnQ.js +0 -0
  657. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/pug-CGlum2m_.js +0 -0
  658. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/puppet-BMWR74SV.js +0 -0
  659. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/purescript-CklMAg4u.js +0 -0
  660. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/python-B6aJPvgy.js +0 -0
  661. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/qml-3beO22l8.js +0 -0
  662. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/qmldir-C8lEn-DE.js +0 -0
  663. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/qss-IeuSbFQv.js +0 -0
  664. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/r-Dspwwk_N.js +0 -0
  665. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/racket-BqYA7rlc.js +0 -0
  666. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/raku-DXvB9xmW.js +0 -0
  667. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/razor-Uh8Bk_45.js +0 -0
  668. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/red-bN70gL4F.js +0 -0
  669. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/reg-C-SQnVFl.js +0 -0
  670. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/regexp-CDVJQ6XC.js +0 -0
  671. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rel-C3B-1QV4.js +0 -0
  672. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/riscv-BM1_JUlF.js +0 -0
  673. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ron-D8l8udqQ.js +0 -0
  674. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  675. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  676. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rose-pine-qdsjHGoJ.js +0 -0
  677. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rosmsg-BJDFO7_C.js +0 -0
  678. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rst-BrH8l1NY.js +0 -0
  679. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ruby-Dw2BHqvy.js +0 -0
  680. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rust-B1yitclQ.js +0 -0
  681. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/sas-cz2c8ADy.js +0 -0
  682. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/sass-Cj5Yp3dK.js +0 -0
  683. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/scala-C151Ov-r.js +0 -0
  684. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/scheme-C98Dy4si.js +0 -0
  685. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/scss-OYdSNvt2.js +0 -0
  686. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/sdbl-DVxCFoDh.js +0 -0
  687. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/shaderlab-Dg9Lc6iA.js +0 -0
  688. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/shellscript-Yzrsuije.js +0 -0
  689. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/shellsession-BADoaaVG.js +0 -0
  690. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/slack-dark-BthQWCQV.js +0 -0
  691. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/slack-ochin-DqwNpetd.js +0 -0
  692. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/smalltalk-BERRCDM3.js +0 -0
  693. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/snazzy-light-Bw305WKR.js +0 -0
  694. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/solarized-dark-DXbdFlpD.js +0 -0
  695. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/solarized-light-L9t79GZl.js +0 -0
  696. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/solidity-rGO070M0.js +0 -0
  697. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/soy-Brmx7dQM.js +0 -0
  698. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/sparql-rVzFXLq3.js +0 -0
  699. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/splunk-BtCnVYZw.js +0 -0
  700. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/sql-BLtJtn59.js +0 -0
  701. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ssh-config-_ykCGR6B.js +0 -0
  702. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/stata-BH5u7GGu.js +0 -0
  703. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/stylus-BEDo0Tqx.js +0 -0
  704. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/surrealql-Bq5Q-fJD.js +0 -0
  705. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/svelte-C_ipcX3V.js +0 -0
  706. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/swift-D82vCrfD.js +0 -0
  707. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/synthwave-84-CbfX1IO0.js +0 -0
  708. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/system-verilog-CnnmHF94.js +0 -0
  709. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/systemd-4A_iFExJ.js +0 -0
  710. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/talonscript-CkByrt1z.js +0 -0
  711. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tasl-QIJgUcNo.js +0 -0
  712. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tcl-dwOrl1Do.js +0 -0
  713. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/templ-P3uqSqPl.js +0 -0
  714. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/terraform-BETggiCN.js +0 -0
  715. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tex-idrVyKtj.js +0 -0
  716. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tokyo-night-hegEt444.js +0 -0
  717. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/toml-vGWfd6FD.js +0 -0
  718. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ts-tags-zn1MmPIZ.js +0 -0
  719. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tsv-B_m7g4N7.js +0 -0
  720. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tsx-COt5Ahok.js +0 -0
  721. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/turtle-BsS91CYL.js +0 -0
  722. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/twig-DNn4PbVi.js +0 -0
  723. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/typescript-BPQ3VLAy.js +0 -0
  724. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/typespec-BGHnOYBU.js +0 -0
  725. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/typst-DHCkPAjA.js +0 -0
  726. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/v-BcVCzyr7.js +0 -0
  727. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vala-CsfeWuGM.js +0 -0
  728. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vb-D17OF-Vu.js +0 -0
  729. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/verilog-BQ8w6xss.js +0 -0
  730. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vesper-DU1UobuO.js +0 -0
  731. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vhdl-CeAyd5Ju.js +0 -0
  732. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/viml-CJc9bBzg.js +0 -0
  733. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vitesse-black-Bkuqu6BP.js +0 -0
  734. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vitesse-dark-D0r3Knsf.js +0 -0
  735. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vitesse-light-CVO1_9PV.js +0 -0
  736. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vue-DN_0RTcg.js +0 -0
  737. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vue-html-AaS7Mt5G.js +0 -0
  738. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vue-vine-CQOfvN7w.js +0 -0
  739. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vyper-CDx5xZoG.js +0 -0
  740. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wasm-CG6Dc4jp.js +0 -0
  741. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wasm-MzD3tlZU.js +0 -0
  742. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wenyan-BV7otONQ.js +0 -0
  743. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wgsl-Dx-B1_4e.js +0 -0
  744. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wikitext-BhOHFoWU.js +0 -0
  745. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wit-5i3qLPDT.js +0 -0
  746. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wolfram-lXgVvXCa.js +0 -0
  747. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/xml-sdJ4AIDG.js +0 -0
  748. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/xsl-CtQFsRM5.js +0 -0
  749. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/yaml-Buea-lGh.js +0 -0
  750. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/zenscript-DVFEvuxE.js +0 -0
  751. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/zig-VOosw3JB.js +0 -0
  752. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/favicon.svg +0 -0
  753. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/fonts/InterVariable-Italic.woff2 +0 -0
  754. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/fonts/InterVariable.woff2 +0 -0
  755. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/index.html +0 -0
  756. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/file_access.py +0 -0
  757. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/interaction.py +0 -0
  758. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/live_events.py +0 -0
  759. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/__init__.py +0 -0
  760. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/config.py +0 -0
  761. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/files.py +0 -0
  762. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/sessions.py +0 -0
  763. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/skills.py +0 -0
  764. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/ws.py +0 -0
  765. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/server.py +0 -0
  766. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/session_access.py +0 -0
  767. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/session_index.py +0 -0
  768. {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/session_live.py +0 -0
  769. {klaude_code-2.28.0 → klaude_code-2.29.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.29.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.29.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
 
@@ -438,6 +438,12 @@ class AgentOperationHandler:
438
438
  # session is the only one that benefits from a suggestion.
439
439
  if agent.session.sub_agent_state is not None:
440
440
  return
441
+ if agent.follow_up_count() > 0:
442
+ log_debug(
443
+ f"[PromptSuggestion] skip session={session_id} reason=follow-up queue pending",
444
+ debug_type=DebugType.EXECUTION,
445
+ )
446
+ return
441
447
  suppress = should_suggest(agent.session)
442
448
  if suppress is not None:
443
449
  log_debug(
@@ -561,6 +567,10 @@ class AgentOperationHandler:
561
567
  session_id=operation.session_id,
562
568
  )
563
569
 
570
+ async def follow_up_agent(self, operation: op.FollowUpAgentOperation) -> None:
571
+ agent = await self.ensure_agent(operation.session_id)
572
+ agent.follow_up(operation.input)
573
+
564
574
  async def run_bash(self, operation: op.RunBashOperation) -> None:
565
575
  agent = await self.ensure_agent(operation.session_id)
566
576
 
@@ -1031,6 +1041,9 @@ class AgentRunner:
1031
1041
  async def run_agent(self, operation: op.RunAgentOperation) -> None:
1032
1042
  await self._operation_handler.run_agent(operation)
1033
1043
 
1044
+ async def follow_up_agent(self, operation: op.FollowUpAgentOperation) -> None:
1045
+ await self._operation_handler.follow_up_agent(operation)
1046
+
1034
1047
  async def continue_agent(self, operation: op.ContinueAgentOperation) -> None:
1035
1048
  await self._operation_handler.continue_agent(operation)
1036
1049
 
@@ -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
 
@@ -880,6 +880,8 @@ class TaskExecutor:
880
880
  break
881
881
  empty_response_retries = 0
882
882
 
883
+ file_change_summary = _build_task_file_change_summary(file_change_baseline, session_ctx.file_change_summary)
884
+
883
885
  # Finalize metadata
884
886
  task_duration_s = time.perf_counter() - self._started_at
885
887
  accumulated = metadata_accumulator.finalize(task_duration_s)
@@ -891,7 +893,6 @@ class TaskExecutor:
891
893
  )
892
894
  session_ctx.append_history([accumulated])
893
895
 
894
- file_change_summary = _build_task_file_change_summary(file_change_baseline, session_ctx.file_change_summary)
895
896
  if file_change_summary is not None:
896
897
  yield events.TaskFileChangeSummaryEvent(summary=file_change_summary, session_id=session_ctx.session_id)
897
898
  session_ctx.append_history([file_change_summary])
@@ -22,6 +22,7 @@ from klaude_code.config.config import ModelPreference
22
22
  from klaude_code.control.event_bus import EventBus, EventSubscription
23
23
  from klaude_code.control.event_relay import EventRelayPublisher, event_relay_socket_path
24
24
  from klaude_code.control.session_meta_relay import SessionMetaRelayPublisher, session_meta_relay_socket_path
25
+ from klaude_code.llm.proxy_support import configured_socks_proxy_var, is_missing_socks_proxy_support_error
25
26
  from klaude_code.log import DebugType, log, log_debug, set_debug_logging
26
27
  from klaude_code.protocol import events, op, user_interaction
27
28
  from klaude_code.session.session import Session
@@ -142,6 +143,16 @@ async def initialize_app_components(
142
143
  model_override=init_config.model,
143
144
  skip_sub_agents=init_config.vanilla,
144
145
  )
146
+ except ImportError as exc:
147
+ if is_missing_socks_proxy_support_error(exc):
148
+ proxy_var = configured_socks_proxy_var()
149
+ log(("Error: SOCKS proxy is configured, but SOCKS support is not installed.", "red"))
150
+ if proxy_var is not None:
151
+ log((f"Detected SOCKS proxy from {proxy_var}.", "yellow"))
152
+ log(("Hint: upgrade or reinstall klaude-code so the socksio dependency is installed.", "yellow"))
153
+ log(("Hint: to run without proxy, unset ALL_PROXY/HTTPS_PROXY/HTTP_PROXY.", "yellow"))
154
+ raise typer.Exit(2) from None
155
+ raise
145
156
  except ValueError as exc:
146
157
  if init_config.model:
147
158
  log(
@@ -113,7 +113,7 @@ provider_list:
113
113
  context_limit: 400000
114
114
  verbosity: low
115
115
  thinking:
116
- reasoning_effort: high
116
+ reasoning_effort: medium
117
117
  reasoning_summary: detailed
118
118
  cost: { input: 5, output: 30, cache_read: 0.5 }
119
119
 
@@ -135,7 +135,7 @@ provider_list:
135
135
  verbosity: low
136
136
  fast_mode: true
137
137
  thinking:
138
- reasoning_effort: high
138
+ reasoning_effort: medium
139
139
  reasoning_summary: detailed
140
140
  cost: { input: 10, output: 60, cache_read: 1 }
141
141
 
@@ -504,7 +504,7 @@ provider_list:
504
504
  context_limit: 400000
505
505
  verbosity: low
506
506
  thinking:
507
- reasoning_effort: high
507
+ reasoning_effort: medium
508
508
  reasoning_summary: detailed
509
509
  cost: { input: 5, output: 30, cache_read: 0.5 }
510
510
  - model_name: gpt-5.5:xhigh
@@ -567,7 +567,7 @@ provider_list:
567
567
  context_limit: 400000
568
568
  verbosity: low
569
569
  thinking:
570
- reasoning_effort: high
570
+ reasoning_effort: medium
571
571
  reasoning_summary: detailed
572
572
  cost: { input: 5, output: 30, cache_read: 0.5 }
573
573
 
@@ -722,7 +722,6 @@ provider_list:
722
722
 
723
723
  sub_agent_models:
724
724
  finder:
725
- - deepseek-flash@deepseek
726
725
  - gpt-5.4-mini
727
726
  - gemini-flash:minimal
728
727
  - haiku
@@ -733,7 +732,6 @@ sub_agent_models:
733
732
  - opus
734
733
 
735
734
  fast_model:
736
- - deepseek-flash@deepseek
737
735
  - gpt-5.4-nano
738
736
  - gemini-flash-lite
739
737
  - gpt-5.4-mini
@@ -175,10 +175,8 @@ NOTIFY_COMPACT_LIMIT = 160 # Maximum length for notification body text
175
175
  # =============================================================================
176
176
 
177
177
  UI_REFRESH_RATE_FPS = 10 # UI refresh rate (frames per second)
178
- CROP_ABOVE_LIVE_REFRESH_PER_SECOND = 4.0 # CropAboveLive default refresh rate
179
- MARKDOWN_STREAM_LIVE_REPAINT_ENABLED = True # Enable live area for streaming markdown
178
+ MARKDOWN_STREAM_LIVE_REPAINT_ENABLED = False # Enable live area for streaming markdown
180
179
  MARKDOWN_STREAM_SYNCHRONIZED_OUTPUT_ENABLED = True # Use terminal "Synchronized Output" to reduce flicker
181
- STREAM_MAX_HEIGHT_SHRINK_RESET_LINES = 5 # Reset stream height ceiling after this shrinkage
182
180
  MARKDOWN_LEFT_MARGIN = 2 # Left margin (columns) for markdown rendering
183
181
  MARKDOWN_RIGHT_MARGIN = 0 # Right margin (columns) for markdown rendering
184
182
 
@@ -205,7 +203,7 @@ STATUS_SHIMMER_ENABLED = True # Enable shimmer effect on status text
205
203
  STATUS_SHIMMER_PADDING = 10 # Horizontal padding for shimmer band position
206
204
  STATUS_SHIMMER_BAND_HALF_WIDTH = 5.0 # Half-width of shimmer band in characters
207
205
  STATUS_SHIMMER_ALPHA_SCALE = 0.7 # Scale factor for shimmer intensity
208
- STATUS_SHOW_BUFFER_LENGTH = False # Show character count (e.g., "(213)") during text generation
206
+ STATUS_SHOW_BUFFER_LENGTH = True # Show character count (e.g., "(213 chars)") during text generation
209
207
 
210
208
  # =============================================================================
211
209
  # UI - Completion System
@@ -507,7 +507,13 @@ def _is_root_operation(operation: op.Operation) -> bool:
507
507
 
508
508
 
509
509
  def _is_control_operation(operation: op.Operation) -> bool:
510
- return isinstance(operation, op.InterruptOperation | op.UserInteractionRespondOperation | op.CloseSessionOperation)
510
+ return isinstance(
511
+ operation,
512
+ op.FollowUpAgentOperation
513
+ | op.InterruptOperation
514
+ | op.UserInteractionRespondOperation
515
+ | op.CloseSessionOperation,
516
+ )
511
517
 
512
518
 
513
519
  def _root_task_kind(operation: op.Operation) -> str:
@@ -0,0 +1,43 @@
1
+ from __future__ import annotations
2
+
3
+ import os
4
+ from collections.abc import Iterator, Mapping
5
+
6
+ SOCKS_PROXY_ENV_VARS = (
7
+ "ALL_PROXY",
8
+ "all_proxy",
9
+ "HTTPS_PROXY",
10
+ "https_proxy",
11
+ "HTTP_PROXY",
12
+ "http_proxy",
13
+ )
14
+
15
+ _SOCKS_PROXY_SCHEMES = ("socks://", "socks4://", "socks4a://", "socks5://", "socks5h://")
16
+
17
+
18
+ def configured_socks_proxy_var(environ: Mapping[str, str] | None = None) -> str | None:
19
+ env = os.environ if environ is None else environ
20
+ for name in SOCKS_PROXY_ENV_VARS:
21
+ value = env.get(name)
22
+ if value and value.strip().lower().startswith(_SOCKS_PROXY_SCHEMES):
23
+ return name
24
+ return None
25
+
26
+
27
+ def is_missing_socks_proxy_support_error(exc: BaseException) -> bool:
28
+ for current in _iter_exception_chain(exc):
29
+ if not isinstance(current, ImportError):
30
+ continue
31
+ message = str(current).lower()
32
+ if "socks" in message and ("socksio" in message or "python-socks" in message):
33
+ return True
34
+ return False
35
+
36
+
37
+ def _iter_exception_chain(exc: BaseException) -> Iterator[BaseException]:
38
+ current: BaseException | None = exc
39
+ seen: set[int] = set()
40
+ while current is not None and id(current) not in seen:
41
+ seen.add(id(current))
42
+ yield current
43
+ current = current.__cause__ or current.__context__
@@ -7,11 +7,12 @@ LANGUAGE RULE (mandatory): The suggestion MUST be written in the same language t
7
7
 
8
8
  Good suggestions (based on the test "would they think 'I was just about to type that'?"):
9
9
  - After tests pass → "commit this" or "run the full suite" (EN) / "提交一个 commit" 或 "跑一下完整的测试套件" (ZH)
10
- - After code written and the recent chat shows a clear runnable or interactive verification path → "try it out" (EN) / "跑一下看看" (ZH)
10
+ - After a coherent code change is complete → "summarize what changed" (EN) / "总结一下你改了啥" (ZH)
11
+ - After a bug fix with no test yet → "add a regression test" (EN) / "加个回归测试" (ZH)
11
12
  - After you ask to continue → "yes" / "go ahead" (EN) / "好" / "继续" (ZH)
12
13
  - Task done, obvious follow-up → "push it" or "submit a PR" (EN) / "推送到远端" 或 "提交一个 PR" (ZH)
13
- - Large/multi-file change done, not yet committed → "run code-reviewer to check the implementation" (EN) / "运行 code-reviewer 子 Agent 检查代码实现" (ZH)
14
- - Code works but looks verbose or messy after edits → "clean up the code" (EN) / "精简一下代码,去掉冗余" (ZH)
14
+ - After the conversation reveals a durable project lesson or pitfall worth preserving → "update AGENTS.md with this lesson" (EN) / "更新 AGENTS.md 记下这个坑" (ZH)
15
+ - After partial implementation with an obvious remaining step → "continue" (EN) / "继续改" (ZH)
15
16
  - After research/search, not yet implemented → "apply the changes" or "draft a plan" (EN) / "按这个思路改一下" 或 "帮我写一个计划" (ZH)
16
17
 
17
18
  Never suggest:
@@ -1,4 +1,3 @@
1
-
2
1
  You are a code simplification agent. Your job is to refine recently changed code for clarity,
3
2
  consistency, and maintainability while preserving exact functionality. This includes removing
4
3
  AI-generated code slop when it appears in the recent change.
@@ -0,0 +1,57 @@
1
+ from __future__ import annotations
2
+
3
+ import re
4
+
5
+ # Allow inline @ and / tokens after CJK text so users typing Chinese or
6
+ # Japanese do not need to insert an extra space before the trigger character.
7
+ # Keep English-word boundaries unchanged to avoid matching emails or URLs.
8
+ CJK_INLINE_BOUNDARY_CHARS = (
9
+ r"\u3005-\u3007"
10
+ r"\u303b"
11
+ r"\u3040-\u309f"
12
+ r"\u30a0-\u30ff"
13
+ r"\u31f0-\u31ff"
14
+ r"\u3400-\u4dbf"
15
+ r"\u4e00-\u9fff"
16
+ r"\uf900-\ufaff"
17
+ r"\uff66-\uff9f"
18
+ )
19
+ INLINE_TOKEN_BOUNDARY = rf"(^|[\s{CJK_INLINE_BOUNDARY_CHARS}])"
20
+
21
+ # Characters that terminate an @-path token besides whitespace.
22
+ # Includes CJK punctuation and fullwidth ASCII punctuation so that a path
23
+ # followed by e.g. Chinese "," or "。" is not treated as part of the path.
24
+ # Fullwidth digits/letters and halfwidth katakana are intentionally excluded
25
+ # to keep them usable within paths.
26
+ AT_TOKEN_STOP_CHARS = (
27
+ r"\u3000-\u303f" # CJK symbols and punctuation (、。「」『』《》【】 ...)
28
+ r"\uff01-\uff0f" # fullwidth ASCII punctuation (!"#$%&'()*+,-./)
29
+ r"\uff1a-\uff20" # :;<=>?@
30
+ r"\uff3b-\uff40" # [\]^_`
31
+ r"\uff5b-\uff65" # {|}~。「」、・ ...
32
+ )
33
+
34
+ # Pattern to match @token for completion refresh. Supports both plain tokens
35
+ # like `@src/file.py` and quoted tokens like `@"path with spaces/file.py"`.
36
+ AT_COMPLETION_PATTERN = re.compile(rf'{INLINE_TOKEN_BOUNDARY}@(?P<frag>"[^"]*"|[^\s{AT_TOKEN_STOP_CHARS}]*)$')
37
+
38
+ # Pattern to match inline /skill token for skill completion.
39
+ SKILL_COMPLETION_PATTERN = re.compile(rf"{INLINE_TOKEN_BOUNDARY}(?P<prefix>//|/)(?P<frag>[^\s/]*)$")
40
+
41
+ # Match @ preceded by whitespace, start of line, CJK text, or -> (ReadTool
42
+ # line number arrow). Supports optional line range suffix in consumers:
43
+ # @file.txt#L10-20 or @file.txt#L10.
44
+ AT_FILE_PATTERN = re.compile(
45
+ rf"(?P<boundary>{INLINE_TOKEN_BOUNDARY}|(?<=\u2192))"
46
+ rf'(?P<at_token>@("(?P<quoted>[^"]+)"|(?P<plain>[^\s{AT_TOKEN_STOP_CHARS}]+)))'
47
+ )
48
+
49
+ # Match inline patterns for user-message rendering. Group "token" captures the
50
+ # visual token without the leading boundary. Group "skill_token" captures one of:
51
+ # - /skill:skill-name
52
+ # - //skill:skill-name
53
+ INLINE_RENDER_PATTERN = re.compile(
54
+ rf"(?P<boundary>{INLINE_TOKEN_BOUNDARY})"
55
+ rf'(?P<token>@(?:"[^"]+"|[^\s{AT_TOKEN_STOP_CHARS}]+)'
56
+ rf"|(?P<skill_token>//skill:[^\s/]+(?=\s|$)|/skill:[^\s/]+(?=\s|$)))"
57
+ )
@@ -319,6 +319,7 @@ class UserInputPayload(BaseModel):
319
319
  text: str
320
320
  images: Sequence[ImageURLPart | ImageFilePart] | None = None
321
321
  pasted_files: dict[str, str] | None = None
322
+ queued_edit: bool = Field(default=False, exclude=True)
322
323
 
323
324
 
324
325
  # Helper functions
@@ -50,10 +50,9 @@ def is_claude_model_any(model_name: str | None) -> bool:
50
50
  def model_supports_eager_input_streaming(model_name: str | None) -> bool:
51
51
  """Check if the model supports the eager_input_streaming tool parameter.
52
52
 
53
- Opus 4.6 and Sonnet 4.6 accept this field.
54
- # TODO: Weird! Opus 4.7 rejects it on Bedrock with 'Extra inputs are not permitted', so we exclude it.
53
+ Opus 4.6, Opus 4.7, and Sonnet 4.6 accept this field.
55
54
  """
56
- return (is_opus_46_model(model_name) or is_sonnet_46_model(model_name)) and not is_opus_47_model(model_name)
55
+ return is_opus_46_model(model_name) or is_sonnet_46_model(model_name) or is_opus_47_model(model_name)
57
56
 
58
57
 
59
58
  def is_deepseek_model(model_name: str | None) -> bool:
@@ -26,6 +26,7 @@ class OperationType(Enum):
26
26
  """Enumeration of supported operation types."""
27
27
 
28
28
  RUN_AGENT = "run_agent"
29
+ FOLLOW_UP_AGENT = "follow_up_agent"
29
30
  RUN_BASH = "run_bash"
30
31
  CONTINUE_AGENT = "continue_agent"
31
32
  COMPACT_SESSION = "compact_session"
@@ -68,6 +69,17 @@ class RunAgentOperation(Operation):
68
69
  await handler.handle_run_agent(self)
69
70
 
70
71
 
72
+ class FollowUpAgentOperation(Operation):
73
+ """Operation for queueing a follow-up message while an agent task is running."""
74
+
75
+ type: OperationType = OperationType.FOLLOW_UP_AGENT
76
+ session_id: str
77
+ input: UserInputPayload
78
+
79
+ async def execute(self, handler: OperationHandler) -> None:
80
+ await handler.handle_follow_up_agent(self)
81
+
82
+
71
83
  class RunBashOperation(Operation):
72
84
  """Operation for running a user-entered bash-mode command."""
73
85
 
@@ -18,6 +18,7 @@ if TYPE_CHECKING:
18
18
  CloseSessionOperation,
19
19
  CompactSessionOperation,
20
20
  ContinueAgentOperation,
21
+ FollowUpAgentOperation,
21
22
  ForkAndSwitchSessionOperation,
22
23
  GenerateAwaySummaryOperation,
23
24
  GetSessionStatsOperation,
@@ -39,6 +40,10 @@ class OperationHandler(Protocol):
39
40
  """Handle a run agent operation."""
40
41
  ...
41
42
 
43
+ async def handle_follow_up_agent(self, operation: FollowUpAgentOperation) -> None:
44
+ """Handle a follow-up agent operation."""
45
+ ...
46
+
42
47
  async def handle_run_bash(self, operation: RunBashOperation) -> None:
43
48
  """Handle a bash-mode command execution operation."""
44
49
  ...
@@ -8,7 +8,7 @@ from typing import Any, cast
8
8
 
9
9
  from pydantic import ValidationError
10
10
 
11
- from klaude_code.protocol import llm_param
11
+ from klaude_code.protocol import llm_param, message
12
12
  from klaude_code.protocol.models import (
13
13
  FileChangeSummary,
14
14
  FileStatus,
@@ -37,6 +37,7 @@ class LoadedSessionMeta:
37
37
  model_config_name: str | None
38
38
  model_thinking: llm_param.Thinking | None
39
39
  next_checkpoint_id: int
40
+ follow_up_queue: list[message.UserInputPayload]
40
41
 
41
42
 
42
43
  def read_json_dict(path: Path) -> dict[str, Any] | None:
@@ -86,6 +87,20 @@ def _parse_todos(raw: object) -> list[TodoItem]:
86
87
  return todos
87
88
 
88
89
 
90
+ def _parse_follow_up_queue(raw: object) -> list[message.UserInputPayload]:
91
+ inputs: list[message.UserInputPayload] = []
92
+ if not isinstance(raw, list):
93
+ return inputs
94
+ for item in cast(list[object], raw):
95
+ if not isinstance(item, dict):
96
+ continue
97
+ try:
98
+ inputs.append(message.UserInputPayload.model_validate(item))
99
+ except ValidationError:
100
+ continue
101
+ return inputs
102
+
103
+
89
104
  def parse_session_state(raw: object) -> SessionRuntimeState | None:
90
105
  if not isinstance(raw, str):
91
106
  return None
@@ -138,6 +153,7 @@ def parse_session_meta(raw: dict[str, Any], *, work_dir: Path) -> LoadedSessionM
138
153
  model_config_name=raw.get("model_config_name") if isinstance(raw.get("model_config_name"), str) else None,
139
154
  model_thinking=model_thinking,
140
155
  next_checkpoint_id=int(raw.get("next_checkpoint_id", 0)),
156
+ follow_up_queue=_parse_follow_up_queue(raw.get("follow_up_queue")),
141
157
  )
142
158
 
143
159
 
@@ -42,6 +42,7 @@ class Session(BaseModel):
42
42
  file_tracker: dict[str, FileStatus] = Field(default_factory=dict)
43
43
  file_change_summary: FileChangeSummary = Field(default_factory=FileChangeSummary)
44
44
  todos: list[TodoItem] = Field(default_factory=list) # pyright: ignore[reportUnknownVariableType]
45
+ follow_up_queue: list[message.UserInputPayload] = Field(default_factory=list) # pyright: ignore[reportUnknownVariableType]
45
46
  model_name: str | None = None
46
47
  session_state: SessionRuntimeState | None = None
47
48
  runtime_owner: SessionOwner | None = None
@@ -151,6 +152,7 @@ class Session(BaseModel):
151
152
  model_config_name=meta.model_config_name,
152
153
  model_thinking=meta.model_thinking,
153
154
  next_checkpoint_id=meta.next_checkpoint_id,
155
+ follow_up_queue=meta.follow_up_queue,
154
156
  )
155
157
 
156
158
  @classmethod
@@ -229,9 +231,16 @@ class Session(BaseModel):
229
231
  model_config_name=self.model_config_name,
230
232
  model_thinking=self.model_thinking,
231
233
  next_checkpoint_id=self.next_checkpoint_id,
234
+ follow_up_queue=self.follow_up_queue,
232
235
  )
233
236
  self._store.append_and_flush(session_id=self.id, items=items, meta=meta)
234
237
 
238
+ def set_follow_up_queue(self, items: Sequence[message.UserInputPayload]) -> None:
239
+ self.follow_up_queue = [item.model_copy(deep=True) for item in items]
240
+ payload = [item.model_dump(mode="json", exclude_none=True) for item in self.follow_up_queue]
241
+ if not self._store.update_meta(self.id, {"follow_up_queue": payload or None}) and payload:
242
+ self.ensure_meta_exists()
243
+
235
244
  def update_title(self, title: str | None) -> bool:
236
245
  normalized = title.strip() if isinstance(title, str) else None
237
246
  if normalized == "":
@@ -263,6 +272,7 @@ class Session(BaseModel):
263
272
  model_config_name=self.model_config_name,
264
273
  model_thinking=self.model_thinking,
265
274
  next_checkpoint_id=self.next_checkpoint_id,
275
+ follow_up_queue=self.follow_up_queue,
266
276
  )
267
277
  self._store.create_meta_if_missing(self.id, meta)
268
278
 
@@ -23,7 +23,8 @@ from klaude_code.protocol.models import (
23
23
  )
24
24
  from klaude_code.session.codec import decode_jsonl_line, encode_jsonl_line
25
25
 
26
- _RUNTIME_META_KEYS = ("session_state", "runtime_owner", "runtime_owner_heartbeat_at")
26
+ _RUNTIME_META_KEYS = ("session_state", "runtime_owner", "runtime_owner_heartbeat_at", "follow_up_queue")
27
+ _DELETE_WINS_META_KEYS = ("follow_up_queue",)
27
28
 
28
29
  type SessionMetaObserver = Callable[[str, dict[str, Any]], None]
29
30
 
@@ -134,6 +135,8 @@ class JsonlSessionWriter:
134
135
  for key in _RUNTIME_META_KEYS:
135
136
  if key in current_meta:
136
137
  meta[key] = current_meta[key]
138
+ elif key in _DELETE_WINS_META_KEYS:
139
+ meta.pop(key, None)
137
140
  meta = {k: v for k, v in meta.items() if v is not None}
138
141
 
139
142
  tmp_path.write_text(json.dumps(meta, ensure_ascii=False, indent=2), encoding="utf-8")
@@ -282,7 +285,9 @@ def build_meta_snapshot(
282
285
  model_config_name: str | None,
283
286
  model_thinking: llm_param.Thinking | None,
284
287
  next_checkpoint_id: int = 0,
288
+ follow_up_queue: Sequence[message.UserInputPayload] = (),
285
289
  ) -> dict[str, Any]:
290
+ follow_up_queue_payload = [item.model_dump(mode="json", exclude_none=True) for item in follow_up_queue]
286
291
  snapshot: dict[str, Any] = {
287
292
  "id": session_id,
288
293
  "work_dir": str(work_dir),
@@ -306,5 +311,6 @@ def build_meta_snapshot(
306
311
  if model_thinking
307
312
  else None,
308
313
  "next_checkpoint_id": next_checkpoint_id,
314
+ "follow_up_queue": follow_up_queue_payload or None,
309
315
  }
310
316
  return {k: v for k, v in snapshot.items() if v is not None}