klaude-code 2.27.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 (776) hide show
  1. klaude_code-2.27.0/README.md → klaude_code-2.29.0/PKG-INFO +43 -5
  2. klaude_code-2.27.0/PKG-INFO → klaude_code-2.29.0/README.md +16 -30
  3. {klaude_code-2.27.0 → klaude_code-2.29.0}/pyproject.toml +4 -2
  4. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/agent.py +56 -1
  5. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/agent_profile.py +1 -1
  6. klaude_code-2.29.0/src/klaude_code/agent/attachments/__init__.py +46 -0
  7. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/files.py +48 -19
  8. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/memory.py +33 -15
  9. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/skills.py +53 -2
  10. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/state.py +12 -0
  11. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/away_summary.py +3 -29
  12. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/cache_safe.py +6 -2
  13. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/compaction/overflow.py +1 -0
  14. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/prompt_suggestion/prompt_suggestion.py +6 -5
  15. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/agent_ops.py +40 -9
  16. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/config_ops.py +22 -9
  17. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/dispatcher.py +3 -0
  18. klaude_code-2.29.0/src/klaude_code/agent/runtime/llm.py +247 -0
  19. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/sub_agent.py +7 -2
  20. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/session_stats.py +1 -0
  21. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/session_title.py +8 -28
  22. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/system_prompt.py +27 -2
  23. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/task.py +212 -37
  24. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/app/runtime.py +14 -2
  25. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/cli/main.py +27 -23
  26. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/config/__init__.py +2 -0
  27. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/config/assets/builtin_config.yaml +181 -8
  28. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/config/config.py +185 -59
  29. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/config/loader.py +1 -0
  30. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/config/model_matcher.py +68 -9
  31. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/config/sub_agent_model.py +15 -1
  32. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/const.py +20 -5
  33. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/control/runtime/actor.py +7 -1
  34. klaude_code-2.29.0/src/klaude_code/llm/AGENTS.md +29 -0
  35. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/anthropic/client.py +30 -2
  36. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/anthropic/input.py +47 -38
  37. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/bedrock_anthropic/client.py +25 -1
  38. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/google/input.py +4 -2
  39. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/image.py +237 -9
  40. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/input_common.py +173 -2
  41. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_compatible/input.py +4 -1
  42. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_responses/input.py +4 -2
  43. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/openrouter/input.py +4 -1
  44. klaude_code-2.29.0/src/klaude_code/llm/proxy_support.py +43 -0
  45. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/usage.py +3 -1
  46. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/prompts/attachments.py +29 -1
  47. klaude_code-2.29.0/src/klaude_code/prompts/away_summary.py +24 -0
  48. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/prompts/messages.py +3 -1
  49. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/prompts/prompt_suggestion.py +5 -3
  50. klaude_code-2.29.0/src/klaude_code/prompts/session_title.py +23 -0
  51. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-simplifier.md +0 -1
  52. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/prompts/system/auto-memory-prompt.md +23 -2
  53. klaude_code-2.29.0/src/klaude_code/prompts/system/base-system-prompt-gpt.md +145 -0
  54. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/prompts/system/base-system-prompt.md +1 -8
  55. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/events.py +18 -0
  56. klaude_code-2.29.0/src/klaude_code/protocol/input_syntax.py +57 -0
  57. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/message.py +24 -0
  58. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/model_id.py +13 -7
  59. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/__init__.py +7 -1
  60. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/file_tracking.py +15 -1
  61. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/tool_ui.py +1 -0
  62. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/usage.py +14 -1
  63. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/op.py +12 -0
  64. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/op_handler.py +5 -0
  65. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/session/meta.py +17 -1
  66. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/session/session.py +33 -3
  67. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/session/store.py +7 -1
  68. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/SKILL.md +60 -25
  69. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/references/cli.md +26 -22
  70. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/references/image-api.md +8 -1
  71. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/references/prompting.md +33 -10
  72. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/klaude-config/SKILL.md +5 -2
  73. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/klaude-config/references/config-file.md +9 -1
  74. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/NOTICE.txt +1 -1
  75. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/SKILL.md +3 -3
  76. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/references/cli.md +3 -3
  77. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/SKILL.md +0 -2
  78. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/cli.md +3 -3
  79. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/loader.py +13 -4
  80. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/apply_patch_tool.py +2 -0
  81. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/diff_builder.py +77 -11
  82. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/read_tool.py +17 -8
  83. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/write_tool.md +1 -0
  84. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/shell/bash_tool.py +198 -2
  85. klaude_code-2.29.0/src/klaude_code/tui/AGENTS.md +128 -0
  86. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/export_session_cmd.py +2 -1
  87. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/export_session_html.py +38 -6
  88. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/model_cmd.py +1 -1
  89. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/model_picker.py +10 -13
  90. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/commands.py +27 -1
  91. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/command_output.py +7 -2
  92. klaude_code-2.29.0/src/klaude_code/tui/components/diffs.py +149 -0
  93. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/markdown.py +58 -3
  94. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/status.py +22 -55
  95. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/theme.py +2 -0
  96. klaude_code-2.29.0/src/klaude_code/tui/components/task_file_changes.py +67 -0
  97. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_question.py +7 -1
  98. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/user_input.py +5 -13
  99. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/welcome.py +101 -9
  100. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/display.py +69 -24
  101. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/completers.py +3 -31
  102. klaude_code-2.29.0/src/klaude_code/tui/input/flicker_safe_stdout.py +256 -0
  103. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/key_bindings.py +91 -1
  104. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/paste.py +8 -3
  105. klaude_code-2.29.0/src/klaude_code/tui/input/prompt_status_bar.py +286 -0
  106. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/prompt_toolkit.py +222 -26
  107. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/pt_theme.py +5 -0
  108. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/machine.py +66 -8
  109. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/renderer.py +137 -165
  110. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/runner.py +266 -72
  111. klaude_code-2.29.0/src/klaude_code/tui/terminal/prevent_sleep.py +160 -0
  112. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/selector.py +2 -1
  113. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/title.py +2 -2
  114. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/update.py +34 -0
  115. klaude_code-2.27.0/src/klaude_code/web/dist/assets/highlighted-body-B3W2YXNL-Bh-pK9Qu.js → klaude_code-2.29.0/src/klaude_code/web/dist/assets/highlighted-body-B3W2YXNL-DTuyBW20.js +1 -1
  116. klaude_code-2.27.0/src/klaude_code/web/dist/assets/index-D7bSbpcc.js → klaude_code-2.29.0/src/klaude_code/web/dist/assets/index-CoapfQ1q.js +2 -2
  117. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/index.html +1 -1
  118. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/config.py +4 -2
  119. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/sessions.py +1 -0
  120. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/session_index.py +7 -0
  121. klaude_code-2.27.0/src/klaude_code/agent/attachments/__init__.py +0 -1
  122. klaude_code-2.27.0/src/klaude_code/agent/runtime/llm.py +0 -131
  123. klaude_code-2.27.0/src/klaude_code/prompts/system/base-system-prompt-gpt.md +0 -155
  124. klaude_code-2.27.0/src/klaude_code/skill/assets/gpt-image-gen/references/codex-network.md +0 -28
  125. klaude_code-2.27.0/src/klaude_code/skill/assets/playwright/agents/openai.yaml +0 -6
  126. klaude_code-2.27.0/src/klaude_code/skill/assets/sora/agents/openai.yaml +0 -6
  127. klaude_code-2.27.0/src/klaude_code/skill/assets/sora/references/codex-network.md +0 -28
  128. klaude_code-2.27.0/src/klaude_code/tui/components/diffs.py +0 -91
  129. klaude_code-2.27.0/src/klaude_code/tui/components/rich/live.py +0 -84
  130. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/.DS_Store +0 -0
  131. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/__init__.py +0 -0
  132. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/__init__.py +0 -0
  133. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/collection.py +0 -0
  134. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/todo.py +0 -0
  135. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/bash_mode.py +0 -0
  136. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/cache_break_detection.py +0 -0
  137. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/compaction/AGENTS.md +0 -0
  138. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/compaction/__init__.py +0 -0
  139. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/compaction/compaction.py +0 -0
  140. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/handoff/__init__.py +0 -0
  141. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/handoff/handoff.py +0 -0
  142. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/handoff/manager.py +0 -0
  143. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/prompt_suggestion/__init__.py +0 -0
  144. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/rewind/__init__.py +0 -0
  145. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/rewind/manager.py +0 -0
  146. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/__init__.py +0 -0
  147. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/away_summary.py +0 -0
  148. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/skill_inventory.py +0 -0
  149. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/agent/turn.py +0 -0
  150. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/app/__init__.py +0 -0
  151. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/app/auth_flow.py +0 -0
  152. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/app/log_viewer.html +0 -0
  153. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/app/log_viewer.py +0 -0
  154. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/app/ports/__init__.py +0 -0
  155. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/app/ports/display.py +0 -0
  156. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/app/ports/input.py +0 -0
  157. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/app/ports/interaction.py +0 -0
  158. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/app/runtime_facade.py +0 -0
  159. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/auth/AGENTS.md +0 -0
  160. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/auth/__init__.py +0 -0
  161. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/auth/base.py +0 -0
  162. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/auth/codex/__init__.py +0 -0
  163. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/auth/codex/exceptions.py +0 -0
  164. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/auth/codex/jwt_utils.py +0 -0
  165. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/auth/codex/oauth.py +0 -0
  166. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/auth/codex/token_manager.py +0 -0
  167. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/auth/copilot/__init__.py +0 -0
  168. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/auth/copilot/exceptions.py +0 -0
  169. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/auth/copilot/oauth.py +0 -0
  170. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/auth/copilot/token_manager.py +0 -0
  171. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/auth/env.py +0 -0
  172. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/cli/__init__.py +0 -0
  173. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/cli/auth_cmd.py +0 -0
  174. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/cli/config_cmd.py +0 -0
  175. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/cli/cost_cmd.py +0 -0
  176. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/cli/debug.py +0 -0
  177. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/cli/list_model.py +0 -0
  178. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/cli/oauth_usage.py +0 -0
  179. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/cli/self_update.py +0 -0
  180. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/cli/web_cmd.py +0 -0
  181. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/config/assets/__init__.py +0 -0
  182. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/config/builtin_config.py +0 -0
  183. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/config/formatters.py +0 -0
  184. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/config/merge.py +0 -0
  185. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/config/thinking.py +0 -0
  186. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/control/__init__.py +0 -0
  187. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/control/event_bus.py +0 -0
  188. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/control/event_relay.py +0 -0
  189. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/control/runtime/__init__.py +0 -0
  190. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/control/runtime/registry.py +0 -0
  191. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/control/session_meta_relay.py +0 -0
  192. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/control/user_interaction.py +0 -0
  193. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/__init__.py +0 -0
  194. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/anthropic/__init__.py +0 -0
  195. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/bedrock_anthropic/__init__.py +0 -0
  196. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/client.py +0 -0
  197. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/copilot/__init__.py +0 -0
  198. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/copilot/client.py +0 -0
  199. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/google/__init__.py +0 -0
  200. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/google/client.py +0 -0
  201. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/google_vertex/__init__.py +0 -0
  202. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/google_vertex/client.py +0 -0
  203. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/json_stable.py +0 -0
  204. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_codex/__init__.py +0 -0
  205. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_codex/client.py +0 -0
  206. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_compatible/__init__.py +0 -0
  207. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_compatible/client.py +0 -0
  208. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_compatible/stream.py +0 -0
  209. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_responses/__init__.py +0 -0
  210. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_responses/client.py +0 -0
  211. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/openrouter/__init__.py +0 -0
  212. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/openrouter/client.py +0 -0
  213. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/openrouter/reasoning.py +0 -0
  214. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/registry.py +0 -0
  215. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/llm/stream_parts.py +0 -0
  216. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/log.py +0 -0
  217. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/prompts/__init__.py +0 -0
  218. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/prompts/compaction.py +0 -0
  219. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/prompts/handoff.py +0 -0
  220. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-finder.md +0 -0
  221. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-review.md +0 -0
  222. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/prompts/sub_agents.py +0 -0
  223. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/prompts/system/extended-thinking-prompt.md +0 -0
  224. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/prompts/system/following-conventions-prompt.md +0 -0
  225. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/prompts/system/git-workspace-hygiene-prompt.md +0 -0
  226. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/__init__.py +0 -0
  227. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/llm_param.py +0 -0
  228. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/common.py +0 -0
  229. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/developer_ui.py +0 -0
  230. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/session_runtime.py +0 -0
  231. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/sub_agent.py +0 -0
  232. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/task_metadata.py +0 -0
  233. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/todo.py +0 -0
  234. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/AGENTS.md +0 -0
  235. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/__init__.py +0 -0
  236. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/finder.py +0 -0
  237. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/general_purpose.py +0 -0
  238. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/review.py +0 -0
  239. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/simplifier.py +0 -0
  240. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/system_prompt.py +0 -0
  241. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/tools.py +0 -0
  242. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/protocol/user_interaction.py +0 -0
  243. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/session/__init__.py +0 -0
  244. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/session/codec.py +0 -0
  245. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/session/history.py +0 -0
  246. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/session/selector.py +0 -0
  247. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/session/store_registry.py +0 -0
  248. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/AGENTS.md +0 -0
  249. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/__init__.py +0 -0
  250. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/.git +0 -0
  251. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/.gitignore +0 -0
  252. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/SOURCES.md +0 -0
  253. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/SKILL.md +0 -0
  254. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/authentication.md +0 -0
  255. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/commands.md +0 -0
  256. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/profiling.md +0 -0
  257. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/proxy-support.md +0 -0
  258. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/session-management.md +0 -0
  259. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/snapshot-refs.md +0 -0
  260. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/video-recording.md +0 -0
  261. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/templates/authenticated-session.sh +0 -0
  262. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/templates/capture-workflow.sh +0 -0
  263. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/templates/form-automation.sh +0 -0
  264. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/frontend-design/SKILL.md +0 -0
  265. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/LICENSE.txt +0 -0
  266. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/references/sample-prompts.md +0 -0
  267. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/scripts/image_gen.py +0 -0
  268. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/klaude-config/references/builtin-providers.md +0 -0
  269. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/klaude-config/references/memory-files.md +0 -0
  270. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/klaude-config/references/skill-system.md +0 -0
  271. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/SKILL.md +0 -0
  272. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/cli.md +0 -0
  273. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/gemini-api.md +0 -0
  274. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/prompting.md +0 -0
  275. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/sample-prompts.md +0 -0
  276. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/vertex-setup.md +0 -0
  277. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/scripts/gemini_image_gen.py +0 -0
  278. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/SKILL.md +0 -0
  279. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/forms.md +0 -0
  280. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/reference.md +0 -0
  281. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/check_bounding_boxes.py +0 -0
  282. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/check_fillable_fields.py +0 -0
  283. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/convert_pdf_to_images.py +0 -0
  284. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/create_validation_image.py +0 -0
  285. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/extract_form_field_info.py +0 -0
  286. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/extract_form_structure.py +0 -0
  287. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/fill_fillable_fields.py +0 -0
  288. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/fill_pdf_form_with_annotations.py +0 -0
  289. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/LICENSE.txt +0 -0
  290. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/assets/playwright-small.svg +0 -0
  291. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/assets/playwright.png +0 -0
  292. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/references/workflows.md +0 -0
  293. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/scripts/playwright_cli.sh +0 -0
  294. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/SKILL.md +0 -0
  295. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/3d.md +0 -0
  296. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/animations.md +0 -0
  297. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/charts-bar-chart.tsx +0 -0
  298. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +0 -0
  299. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +0 -0
  300. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets.md +0 -0
  301. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/audio-visualization.md +0 -0
  302. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/audio.md +0 -0
  303. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/calculate-metadata.md +0 -0
  304. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/can-decode.md +0 -0
  305. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/charts.md +0 -0
  306. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/compositions.md +0 -0
  307. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/display-captions.md +0 -0
  308. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/extract-frames.md +0 -0
  309. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/ffmpeg.md +0 -0
  310. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/fonts.md +0 -0
  311. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-audio-duration.md +0 -0
  312. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-video-dimensions.md +0 -0
  313. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-video-duration.md +0 -0
  314. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/gifs.md +0 -0
  315. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/images.md +0 -0
  316. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/import-srt-captions.md +0 -0
  317. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/light-leaks.md +0 -0
  318. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/lottie.md +0 -0
  319. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/maps.md +0 -0
  320. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/measuring-dom-nodes.md +0 -0
  321. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/measuring-text.md +0 -0
  322. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/parameters.md +0 -0
  323. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/sequencing.md +0 -0
  324. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/sfx.md +0 -0
  325. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/subtitles.md +0 -0
  326. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/tailwind.md +0 -0
  327. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/text-animations.md +0 -0
  328. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/timing.md +0 -0
  329. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transcribe-captions.md +0 -0
  330. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transitions.md +0 -0
  331. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transparent-videos.md +0 -0
  332. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/trimming.md +0 -0
  333. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/videos.md +0 -0
  334. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/voiceover.md +0 -0
  335. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/.gitignore +0 -0
  336. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/SKILL.md +0 -0
  337. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/package.json +0 -0
  338. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/references/config/first-time-setup.md +0 -0
  339. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/references/config/preferences-schema.md +0 -0
  340. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/references/templates/standalone.html +0 -0
  341. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/references/troubleshooting.md +0 -0
  342. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/scripts/render_mermaid.js +0 -0
  343. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/scripts/setup.sh +0 -0
  344. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/session-logs/SKILL.md +0 -0
  345. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/skill-creator/SKILL.md +0 -0
  346. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/skills-lock.json +0 -0
  347. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/LICENSE.txt +0 -0
  348. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/assets/sora-small.svg +0 -0
  349. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/assets/sora.png +0 -0
  350. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/cinematic-shots.md +0 -0
  351. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/prompting.md +0 -0
  352. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/sample-prompts.md +0 -0
  353. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/social-ads.md +0 -0
  354. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/troubleshooting.md +0 -0
  355. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/video-api.md +0 -0
  356. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/scripts/sora.py +0 -0
  357. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/svg-animations/SKILL.md +0 -0
  358. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/svg-animations/examples/index.html +0 -0
  359. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/web-search/SKILL.md +0 -0
  360. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/manager.py +0 -0
  361. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/skill/system_skills.py +0 -0
  362. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/AGENTS.md +0 -0
  363. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/__init__.py +0 -0
  364. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/agent_tool.md +0 -0
  365. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/agent_tool.py +0 -0
  366. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/ask_user_question_tool.md +0 -0
  367. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/ask_user_question_tool.py +0 -0
  368. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/__init__.py +0 -0
  369. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/abc.py +0 -0
  370. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/context.py +0 -0
  371. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/offload.py +0 -0
  372. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/registry.py +0 -0
  373. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/runner.py +0 -0
  374. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/__init__.py +0 -0
  375. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/_utils.py +0 -0
  376. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/apply_patch.py +0 -0
  377. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/apply_patch_tool.md +0 -0
  378. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/edit_tool.md +0 -0
  379. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/edit_tool.py +0 -0
  380. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/read_tool.md +0 -0
  381. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/write_tool.py +0 -0
  382. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/handoff_tool.md +0 -0
  383. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/handoff_tool.py +0 -0
  384. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/rewind_tool.md +0 -0
  385. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/rewind_tool.py +0 -0
  386. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/shell/__init__.py +0 -0
  387. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/shell/bash_tool.md +0 -0
  388. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/shell/command_safety.py +0 -0
  389. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/todo/__init__.py +0 -0
  390. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/todo/todo_write_tool.md +0 -0
  391. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/todo/todo_write_tool.py +0 -0
  392. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/todo/todo_write_tool_raw.md +0 -0
  393. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/__init__.py +0 -0
  394. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/external_content.py +0 -0
  395. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/ssrf.py +0 -0
  396. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/web_cache.py +0 -0
  397. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/web_fetch_tool.md +0 -0
  398. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/web_fetch_tool.py +0 -0
  399. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/web_search_tool.md +0 -0
  400. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/web_search_tool.py +0 -0
  401. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/__init__.py +0 -0
  402. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/AGENTS.md +0 -0
  403. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/__init__.py +0 -0
  404. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/auth_selector.py +0 -0
  405. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/command_abc.py +0 -0
  406. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/compact_cmd.py +0 -0
  407. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/continue_cmd.py +0 -0
  408. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/copy_cmd.py +0 -0
  409. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/debug_cmd.py +0 -0
  410. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/fork_session_cmd.py +0 -0
  411. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/login_cmd.py +0 -0
  412. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/logout_cmd.py +0 -0
  413. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/new_cmd.py +0 -0
  414. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/recap_cmd.py +0 -0
  415. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/refresh_cmd.py +0 -0
  416. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/registry.py +0 -0
  417. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/status_cmd.py +0 -0
  418. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/sub_agent_model_cmd.py +0 -0
  419. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/thinking_cmd.py +0 -0
  420. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/types.py +0 -0
  421. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/web_cmd.py +0 -0
  422. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/__init__.py +0 -0
  423. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/away_summary.py +0 -0
  424. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/bash_syntax.py +0 -0
  425. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/common.py +0 -0
  426. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/developer.py +0 -0
  427. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/errors.py +0 -0
  428. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/metadata.py +0 -0
  429. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/__init__.py +0 -0
  430. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/cjk_wrap.py +0 -0
  431. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/quote.py +0 -0
  432. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/sub_agent.py +0 -0
  433. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/thinking.py +0 -0
  434. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/__init__.py +0 -0
  435. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_bash.py +0 -0
  436. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_common.py +0 -0
  437. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_dispatch.py +0 -0
  438. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_file.py +0 -0
  439. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_read.py +0 -0
  440. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_rewind.py +0 -0
  441. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_todo.py +0 -0
  442. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_web.py +0 -0
  443. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/AGENTS.md +0 -0
  444. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/__init__.py +0 -0
  445. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/drag_drop.py +0 -0
  446. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/images.py +0 -0
  447. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/status_runtime.py +0 -0
  448. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/__init__.py +0 -0
  449. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/ask_user_question.py +0 -0
  450. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/color.py +0 -0
  451. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/control.py +0 -0
  452. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/focus_tracker.py +0 -0
  453. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/image.py +0 -0
  454. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/notifier.py +0 -0
  455. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/session_selector.py +0 -0
  456. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/__init__.py +0 -0
  457. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/app.py +0 -0
  458. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/display.py +0 -0
  459. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/abap-BdImnpbu.js +0 -0
  460. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/actionscript-3-CoDkCxhg.js +0 -0
  461. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ada-bCR0ucgS.js +0 -0
  462. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/andromeeda-C4gqWexZ.js +0 -0
  463. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/angular-html-CU67Zn6k.js +0 -0
  464. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/angular-ts-BwZT4LLn.js +0 -0
  465. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/apache-Pmp26Uib.js +0 -0
  466. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/apex-D8_7TLub.js +0 -0
  467. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/apl-dKokRX4l.js +0 -0
  468. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/applescript-Co6uUVPk.js +0 -0
  469. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ara-BRHolxvo.js +0 -0
  470. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/asciidoc-Ve4PFQV2.js +0 -0
  471. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/asm-D_Q5rh1f.js +0 -0
  472. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/astro-CbQHKStN.js +0 -0
  473. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/aurora-x-D-2ljcwZ.js +0 -0
  474. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/awk-DMzUqQB5.js +0 -0
  475. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ayu-dark-DYE7WIF3.js +0 -0
  476. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ayu-light-BA47KaF1.js +0 -0
  477. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ayu-mirage-32ctXXKs.js +0 -0
  478. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ballerina-BFfxhgS-.js +0 -0
  479. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/bat-BkioyH1T.js +0 -0
  480. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/beancount-k_qm7-4y.js +0 -0
  481. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/berry-uYugtg8r.js +0 -0
  482. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/bibtex-CHM0blh-.js +0 -0
  483. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/bicep-Bmn6On1c.js +0 -0
  484. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/bird2-DPOp833l.js +0 -0
  485. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/blade-D4QpJJKB.js +0 -0
  486. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/bsl-BO_Y6i37.js +0 -0
  487. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/c-BIGW1oBm.js +0 -0
  488. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/c3-eo99z4R2.js +0 -0
  489. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cadence-Bv_4Rxtq.js +0 -0
  490. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cairo-KRGpt6FW.js +0 -0
  491. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  492. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  493. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  494. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  495. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/clarity-D53aC0YG.js +0 -0
  496. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/clojure-P80f7IUj.js +0 -0
  497. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cmake-D1j8_8rp.js +0 -0
  498. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cobol-nwyudZeR.js +0 -0
  499. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/codeowners-Bp6g37R7.js +0 -0
  500. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/codeql-DsOJ9woJ.js +0 -0
  501. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/coffee-Ch7k5sss.js +0 -0
  502. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/common-lisp-Cg-RD9OK.js +0 -0
  503. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/coq-DkFqJrB1.js +0 -0
  504. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cpp-CofmeUqb.js +0 -0
  505. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/crystal-tKQVLTB8.js +0 -0
  506. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/csharp-COcwbKMJ.js +0 -0
  507. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/css-DPfMkruS.js +0 -0
  508. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/csv-fuZLfV_i.js +0 -0
  509. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cue-D82EKSYY.js +0 -0
  510. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cypher-COkxafJQ.js +0 -0
  511. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/d-85-TOEBH.js +0 -0
  512. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dark-plus-C3mMm8J8.js +0 -0
  513. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dart-CF10PKvl.js +0 -0
  514. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dax-CEL-wOlO.js +0 -0
  515. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/desktop-BmXAJ9_W.js +0 -0
  516. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/diff-D97Zzqfu.js +0 -0
  517. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/docker-BcOcwvcX.js +0 -0
  518. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dotenv-Da5cRb03.js +0 -0
  519. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dracula-BzJJZx-M.js +0 -0
  520. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dracula-soft-BXkSAIEj.js +0 -0
  521. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dream-maker-BtqSS_iP.js +0 -0
  522. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/edge-BkV0erSs.js +0 -0
  523. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/elixir-CDX3lj18.js +0 -0
  524. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/elm-DbKCFpqz.js +0 -0
  525. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/emacs-lisp-C9XAeP06.js +0 -0
  526. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/erb-B12qg9BL.js +0 -0
  527. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/erlang-DsQrWhSR.js +0 -0
  528. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/everforest-dark-BgDCqdQA.js +0 -0
  529. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/everforest-light-C8M2exoo.js +0 -0
  530. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fennel-BYunw83y.js +0 -0
  531. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fish-BvzEVeQv.js +0 -0
  532. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fluent-C4IJs8-o.js +0 -0
  533. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  534. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fortran-free-form-BxgE0vQu.js +0 -0
  535. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fsharp-CXgrBDvD.js +0 -0
  536. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gdresource-BOOCDP_w.js +0 -0
  537. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gdscript-C5YyOfLZ.js +0 -0
  538. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gdshader-DkwncUOv.js +0 -0
  539. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/genie-D0YGMca9.js +0 -0
  540. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gherkin-DyxjwDmM.js +0 -0
  541. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/git-commit-F4YmCXRG.js +0 -0
  542. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/git-rebase-r7XF79zn.js +0 -0
  543. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-dark-DHJKELXO.js +0 -0
  544. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-dark-default-Cuk6v7N8.js +0 -0
  545. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  546. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  547. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-light-DAi9KRSo.js +0 -0
  548. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-light-default-D7oLnXFd.js +0 -0
  549. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  550. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gleam-BspZqrRM.js +0 -0
  551. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/glimmer-js-Rg0-pVw9.js +0 -0
  552. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/glimmer-ts-U6CK756n.js +0 -0
  553. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/glsl-DplSGwfg.js +0 -0
  554. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gn-n2N0HUVH.js +0 -0
  555. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gnuplot-DdkO51Og.js +0 -0
  556. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/go-CxLEBnE3.js +0 -0
  557. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/graphql-ChdNCCLP.js +0 -0
  558. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/groovy-gcz8RCvz.js +0 -0
  559. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  560. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  561. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  562. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  563. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  564. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  565. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hack-CaT9iCJl.js +0 -0
  566. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/haml-B8DHNrY2.js +0 -0
  567. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/handlebars-BL8al0AC.js +0 -0
  568. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/haskell-Df6bDoY_.js +0 -0
  569. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/haxe-CzTSHFRz.js +0 -0
  570. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hcl-BWvSN4gD.js +0 -0
  571. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hjson-D5-asLiD.js +0 -0
  572. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hlsl-D3lLCCz7.js +0 -0
  573. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/horizon-BUw7H-hv.js +0 -0
  574. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/horizon-bright-Cn-bp-IR.js +0 -0
  575. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/houston-DnULxvSX.js +0 -0
  576. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/html-GMplVEZG.js +0 -0
  577. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/html-derivative-BFtXZ54Q.js +0 -0
  578. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/http-jrhK8wxY.js +0 -0
  579. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hurl-irOxFIW8.js +0 -0
  580. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hxml-Bvhsp5Yf.js +0 -0
  581. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hy-DFXneXwc.js +0 -0
  582. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/imba-DGztddWO.js +0 -0
  583. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/index-TK8frDq8.css +0 -0
  584. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ini-BEwlwnbL.js +0 -0
  585. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/java-CylS5w8V.js +0 -0
  586. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/javascript-wDzz0qaB.js +0 -0
  587. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jinja-4LBKfQ-Z.js +0 -0
  588. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jison-wvAkD_A8.js +0 -0
  589. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/json-Cp-IABpG.js +0 -0
  590. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/json5-C9tS-k6U.js +0 -0
  591. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jsonc-Des-eS-w.js +0 -0
  592. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jsonl-DcaNXYhu.js +0 -0
  593. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jsonnet-DFQXde-d.js +0 -0
  594. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jssm-C2t-YnRu.js +0 -0
  595. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jsx-g9-lgVsj.js +0 -0
  596. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/julia-CxzCAyBv.js +0 -0
  597. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/just-Cw27pwNe.js +0 -0
  598. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  599. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  600. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kanagawa-wave-DWedfzmr.js +0 -0
  601. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kdl-DV7GczEv.js +0 -0
  602. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kotlin-BdnUsdx6.js +0 -0
  603. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kusto-DZf3V79B.js +0 -0
  604. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/laserwave-DUszq2jm.js +0 -0
  605. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/latex-CWtU0Tv5.js +0 -0
  606. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/lean-BZvkOJ9d.js +0 -0
  607. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/less-B1dDrJ26.js +0 -0
  608. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/light-plus-B7mTdjB0.js +0 -0
  609. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/liquid-DYVedYrR.js +0 -0
  610. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/llvm-DjAJT7YJ.js +0 -0
  611. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/log-2UxHyX5q.js +0 -0
  612. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/logo-BtOb2qkB.js +0 -0
  613. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/lua-BaeVxFsk.js +0 -0
  614. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/luau-C-HG3fhB.js +0 -0
  615. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/make-CHLpvVh8.js +0 -0
  616. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/markdown-Cvjx9yec.js +0 -0
  617. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/marko-CnJfTvn9.js +0 -0
  618. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/material-theme-D5KoaKCx.js +0 -0
  619. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/material-theme-darker-BfHTSMKl.js +0 -0
  620. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  621. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/material-theme-ocean-CyktbL80.js +0 -0
  622. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  623. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/matlab-D7o27uSR.js +0 -0
  624. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/mdc-BMNejdWA.js +0 -0
  625. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/mdx-Cmh6b_Ma.js +0 -0
  626. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/mermaid-mWjccvbQ.js +0 -0
  627. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/min-dark-CafNBF8u.js +0 -0
  628. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/min-light-CTRr51gU.js +0 -0
  629. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/mipsasm-CKIfxQSi.js +0 -0
  630. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/mojo-rZm6bMo-.js +0 -0
  631. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/monokai-D4h5O-jR.js +0 -0
  632. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/moonbit-_H4v1dQx.js +0 -0
  633. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/move-IF9eRakj.js +0 -0
  634. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/narrat-DRg8JJMk.js +0 -0
  635. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nextflow-Zz6hmt5N.js +0 -0
  636. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nextflow-groovy-BeH2EWoN.js +0 -0
  637. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nginx-BpAMiNFr.js +0 -0
  638. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/night-owl-C39BiMTA.js +0 -0
  639. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/night-owl-light-CMTm3GFP.js +0 -0
  640. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nim-CVrawwO9.js +0 -0
  641. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nix-CwoSXNpI.js +0 -0
  642. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nord-Ddv68eIx.js +0 -0
  643. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nushell-Cz2AlsmD.js +0 -0
  644. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/objective-c-DXmwc3jG.js +0 -0
  645. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/objective-cpp-CLxacb5B.js +0 -0
  646. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ocaml-C0hk2d4L.js +0 -0
  647. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/odin-BBf5iR-q.js +0 -0
  648. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  649. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/one-light-C3Wv6jpd.js +0 -0
  650. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/openscad-C4EeE6gA.js +0 -0
  651. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/pascal-D93ZcfNL.js +0 -0
  652. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/perl-C0TMdlhV.js +0 -0
  653. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/php-Dhbhpdrm.js +0 -0
  654. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/pierre-dark-BXuwtOqb.js +0 -0
  655. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/pierre-light-dckrK0oj.js +0 -0
  656. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/pkl-u5AG7uiY.js +0 -0
  657. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/plastic-3e1v2bzS.js +0 -0
  658. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/plsql-ChMvpjG-.js +0 -0
  659. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/po-BTJTHyun.js +0 -0
  660. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/poimandres-CS3Unz2-.js +0 -0
  661. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/polar-C0HS_06l.js +0 -0
  662. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/postcss-CXtECtnM.js +0 -0
  663. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/powerquery-CEu0bR-o.js +0 -0
  664. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/powershell-Dpen1YoG.js +0 -0
  665. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/prisma-Dd19v3D-.js +0 -0
  666. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/prolog-CbFg5uaA.js +0 -0
  667. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/proto-C7zT0LnQ.js +0 -0
  668. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/pug-CGlum2m_.js +0 -0
  669. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/puppet-BMWR74SV.js +0 -0
  670. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/purescript-CklMAg4u.js +0 -0
  671. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/python-B6aJPvgy.js +0 -0
  672. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/qml-3beO22l8.js +0 -0
  673. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/qmldir-C8lEn-DE.js +0 -0
  674. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/qss-IeuSbFQv.js +0 -0
  675. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/r-Dspwwk_N.js +0 -0
  676. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/racket-BqYA7rlc.js +0 -0
  677. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/raku-DXvB9xmW.js +0 -0
  678. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/razor-Uh8Bk_45.js +0 -0
  679. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/red-bN70gL4F.js +0 -0
  680. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/reg-C-SQnVFl.js +0 -0
  681. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/regexp-CDVJQ6XC.js +0 -0
  682. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rel-C3B-1QV4.js +0 -0
  683. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/riscv-BM1_JUlF.js +0 -0
  684. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ron-D8l8udqQ.js +0 -0
  685. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  686. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  687. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rose-pine-qdsjHGoJ.js +0 -0
  688. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rosmsg-BJDFO7_C.js +0 -0
  689. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rst-BrH8l1NY.js +0 -0
  690. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ruby-Dw2BHqvy.js +0 -0
  691. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rust-B1yitclQ.js +0 -0
  692. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/sas-cz2c8ADy.js +0 -0
  693. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/sass-Cj5Yp3dK.js +0 -0
  694. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/scala-C151Ov-r.js +0 -0
  695. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/scheme-C98Dy4si.js +0 -0
  696. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/scss-OYdSNvt2.js +0 -0
  697. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/sdbl-DVxCFoDh.js +0 -0
  698. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/shaderlab-Dg9Lc6iA.js +0 -0
  699. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/shellscript-Yzrsuije.js +0 -0
  700. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/shellsession-BADoaaVG.js +0 -0
  701. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/slack-dark-BthQWCQV.js +0 -0
  702. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/slack-ochin-DqwNpetd.js +0 -0
  703. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/smalltalk-BERRCDM3.js +0 -0
  704. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/snazzy-light-Bw305WKR.js +0 -0
  705. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/solarized-dark-DXbdFlpD.js +0 -0
  706. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/solarized-light-L9t79GZl.js +0 -0
  707. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/solidity-rGO070M0.js +0 -0
  708. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/soy-Brmx7dQM.js +0 -0
  709. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/sparql-rVzFXLq3.js +0 -0
  710. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/splunk-BtCnVYZw.js +0 -0
  711. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/sql-BLtJtn59.js +0 -0
  712. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ssh-config-_ykCGR6B.js +0 -0
  713. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/stata-BH5u7GGu.js +0 -0
  714. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/stylus-BEDo0Tqx.js +0 -0
  715. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/surrealql-Bq5Q-fJD.js +0 -0
  716. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/svelte-C_ipcX3V.js +0 -0
  717. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/swift-D82vCrfD.js +0 -0
  718. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/synthwave-84-CbfX1IO0.js +0 -0
  719. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/system-verilog-CnnmHF94.js +0 -0
  720. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/systemd-4A_iFExJ.js +0 -0
  721. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/talonscript-CkByrt1z.js +0 -0
  722. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tasl-QIJgUcNo.js +0 -0
  723. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tcl-dwOrl1Do.js +0 -0
  724. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/templ-P3uqSqPl.js +0 -0
  725. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/terraform-BETggiCN.js +0 -0
  726. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tex-idrVyKtj.js +0 -0
  727. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tokyo-night-hegEt444.js +0 -0
  728. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/toml-vGWfd6FD.js +0 -0
  729. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ts-tags-zn1MmPIZ.js +0 -0
  730. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tsv-B_m7g4N7.js +0 -0
  731. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tsx-COt5Ahok.js +0 -0
  732. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/turtle-BsS91CYL.js +0 -0
  733. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/twig-DNn4PbVi.js +0 -0
  734. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/typescript-BPQ3VLAy.js +0 -0
  735. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/typespec-BGHnOYBU.js +0 -0
  736. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/typst-DHCkPAjA.js +0 -0
  737. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/v-BcVCzyr7.js +0 -0
  738. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vala-CsfeWuGM.js +0 -0
  739. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vb-D17OF-Vu.js +0 -0
  740. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/verilog-BQ8w6xss.js +0 -0
  741. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vesper-DU1UobuO.js +0 -0
  742. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vhdl-CeAyd5Ju.js +0 -0
  743. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/viml-CJc9bBzg.js +0 -0
  744. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vitesse-black-Bkuqu6BP.js +0 -0
  745. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vitesse-dark-D0r3Knsf.js +0 -0
  746. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vitesse-light-CVO1_9PV.js +0 -0
  747. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vue-DN_0RTcg.js +0 -0
  748. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vue-html-AaS7Mt5G.js +0 -0
  749. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vue-vine-CQOfvN7w.js +0 -0
  750. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vyper-CDx5xZoG.js +0 -0
  751. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wasm-CG6Dc4jp.js +0 -0
  752. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wasm-MzD3tlZU.js +0 -0
  753. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wenyan-BV7otONQ.js +0 -0
  754. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wgsl-Dx-B1_4e.js +0 -0
  755. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wikitext-BhOHFoWU.js +0 -0
  756. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wit-5i3qLPDT.js +0 -0
  757. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wolfram-lXgVvXCa.js +0 -0
  758. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/xml-sdJ4AIDG.js +0 -0
  759. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/xsl-CtQFsRM5.js +0 -0
  760. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/yaml-Buea-lGh.js +0 -0
  761. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/zenscript-DVFEvuxE.js +0 -0
  762. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/zig-VOosw3JB.js +0 -0
  763. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/favicon.svg +0 -0
  764. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/fonts/InterVariable-Italic.woff2 +0 -0
  765. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/fonts/InterVariable.woff2 +0 -0
  766. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/file_access.py +0 -0
  767. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/interaction.py +0 -0
  768. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/live_events.py +0 -0
  769. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/__init__.py +0 -0
  770. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/files.py +0 -0
  771. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/skills.py +0 -0
  772. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/ws.py +0 -0
  773. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/server.py +0 -0
  774. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/session_access.py +0 -0
  775. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/session_live.py +0 -0
  776. {klaude_code-2.27.0 → klaude_code-2.29.0}/src/klaude_code/web/state.py +0 -0
@@ -1,3 +1,30 @@
1
+ Metadata-Version: 2.3
2
+ Name: klaude-code
3
+ Version: 2.29.0
4
+ Summary: Minimal code agent CLI
5
+ Requires-Dist: anthropic[bedrock]>=0.66.0
6
+ Requires-Dist: chardet>=5.2.0,<6
7
+ Requires-Dist: diff-match-patch>=20241021
8
+ Requires-Dist: filelock>=3.20.3
9
+ Requires-Dist: fastapi
10
+ Requires-Dist: google-genai>=1.56.0
11
+ Requires-Dist: httpx[socks]>=0.28.1
12
+ Requires-Dist: markdown-it-py>=4.0.0
13
+ Requires-Dist: openai>=2.24.0
14
+ Requires-Dist: prompt-toolkit>=3.0.52
15
+ Requires-Dist: pydantic>=2.11.7
16
+ Requires-Dist: pyyaml>=6.0.2
17
+ Requires-Dist: rich>=14.1.0
18
+ Requires-Dist: socksio>=1.0.0
19
+ Requires-Dist: sse-starlette
20
+ Requires-Dist: trafilatura>=2.0.0
21
+ Requires-Dist: typer>=0.17.3
22
+ Requires-Dist: uvicorn
23
+ Requires-Dist: readability-lxml>=0.8.4.1
24
+ Requires-Dist: pillow>=12.2.0
25
+ Requires-Python: >=3.13
26
+ Description-Content-Type: text/markdown
27
+
1
28
  # Klaude Code
2
29
 
3
30
  Minimal code agent CLI.
@@ -107,9 +134,14 @@ klaude
107
134
 
108
135
  On first run, you'll be prompted to select a model. Your choice is saved as `main_model`.
109
136
 
110
- You can also configure fallback lists for helper models:
137
+ You can also configure fallback lists for the main model and helper models:
111
138
 
112
139
  ```yaml
140
+ main_model:
141
+ - gpt-5.5
142
+ - gpt-5.4
143
+ - opus
144
+
113
145
  fast_model:
114
146
  - haiku
115
147
  - gemini-flash
@@ -120,7 +152,9 @@ compact_model:
120
152
  - haiku
121
153
  ```
122
154
 
123
- Klaude tries these entries in order and uses the first available model. `fast_model` is used for session-title generation; `compact_model` is used for compact/helper tasks.
155
+ Klaude expands each entry into concrete provider candidates in `provider_list` order, then falls through to the next model in the list. For example, `gpt-5.4` will try available providers such as `gpt-5.4@openai`, `gpt-5.4@github-copilot`, and `gpt-5.4@openrouter` before moving to the next model. Runtime fallback is used for non-retryable provider/model failures such as quota, billing, permission, or model-unavailable errors. `fast_model` is used for session-title generation; `compact_model` is used for compact/helper tasks.
156
+
157
+ When you switch models with `/model`, Klaude updates `main_model` without discarding the fallback chain: the selected model is moved to the front if it already exists, or inserted at the front otherwise.
124
158
 
125
159
  #### Built-in Providers
126
160
 
@@ -196,7 +230,10 @@ You can add custom models to built-in providers or define new ones. Configuratio
196
230
 
197
231
  ```yaml
198
232
  # ~/.klaude/klaude-config.yaml
199
- main_model: opus
233
+ main_model:
234
+ - gpt-5.5
235
+ - gpt-5.4
236
+ - opus
200
237
 
201
238
  fast_model:
202
239
  - haiku
@@ -236,7 +273,8 @@ provider_list:
236
273
  - **Merging**: If `provider_name` matches a built-in provider, settings like `protocol` and `api_key` are inherited.
237
274
  - **Overriding**: Use the same `model_name` as a built-in model to override its parameters.
238
275
  - **Environment Variables**: Use `${VAR_NAME}` syntax for secrets.
239
- - **Model Preference Lists**: `fast_model` and `compact_model` accept either a single string or a list of model selectors. When you provide a list, Klaude tries them in order and picks the first available one.
276
+ - **Model Preference Lists**: `main_model`, `fast_model`, and `compact_model` accept either a single string or a list of model selectors. When you provide a list, Klaude first tries matching providers in `provider_list` order for each selector, then moves to the next selector.
277
+ - **Updating Defaults**: `/model` keeps saving the selected model back to `main_model`, but preserves fallback order by moving or inserting the selected model at the front of the list.
240
278
 
241
279
  ##### Sub-agent Model Configuration
242
280
 
@@ -307,7 +345,7 @@ Inside the interactive session (`klaude`), use these commands to streamline your
307
345
  - `/refresh-terminal` - Refresh terminal display.
308
346
  - `/web` - Switch to web UI mode.
309
347
  - `/new` - Start a new session (clears context).
310
- - `/model` - Switch the active LLM during the session.
348
+ - `/model` - Switch the active LLM and update `main_model` in config while preserving fallback order (the selected model is moved/inserted to the front).
311
349
  - `/sub-agent-model` - Configure sub-agent models at runtime.
312
350
  - `/thinking` - Change thinking/reasoning level.
313
351
  - `/status` - Show session usage statistics (cost, tokens, model breakdown).
@@ -1,28 +1,3 @@
1
- Metadata-Version: 2.3
2
- Name: klaude-code
3
- Version: 2.27.0
4
- Summary: Minimal code agent CLI
5
- Requires-Dist: anthropic[bedrock]>=0.66.0
6
- Requires-Dist: chardet>=5.2.0,<6
7
- Requires-Dist: diff-match-patch>=20241021
8
- Requires-Dist: filelock>=3.20.3
9
- Requires-Dist: fastapi
10
- Requires-Dist: google-genai>=1.56.0
11
- Requires-Dist: markdown-it-py>=4.0.0
12
- Requires-Dist: openai>=2.24.0
13
- Requires-Dist: prompt-toolkit>=3.0.52
14
- Requires-Dist: pydantic>=2.11.7
15
- Requires-Dist: python-socks>=2.8.1
16
- Requires-Dist: pyyaml>=6.0.2
17
- Requires-Dist: rich>=14.1.0
18
- Requires-Dist: sse-starlette
19
- Requires-Dist: trafilatura>=2.0.0
20
- Requires-Dist: typer>=0.17.3
21
- Requires-Dist: uvicorn
22
- Requires-Dist: readability-lxml>=0.8.4.1
23
- Requires-Python: >=3.13
24
- Description-Content-Type: text/markdown
25
-
26
1
  # Klaude Code
27
2
 
28
3
  Minimal code agent CLI.
@@ -132,9 +107,14 @@ klaude
132
107
 
133
108
  On first run, you'll be prompted to select a model. Your choice is saved as `main_model`.
134
109
 
135
- You can also configure fallback lists for helper models:
110
+ You can also configure fallback lists for the main model and helper models:
136
111
 
137
112
  ```yaml
113
+ main_model:
114
+ - gpt-5.5
115
+ - gpt-5.4
116
+ - opus
117
+
138
118
  fast_model:
139
119
  - haiku
140
120
  - gemini-flash
@@ -145,7 +125,9 @@ compact_model:
145
125
  - haiku
146
126
  ```
147
127
 
148
- Klaude tries these entries in order and uses the first available model. `fast_model` is used for session-title generation; `compact_model` is used for compact/helper tasks.
128
+ Klaude expands each entry into concrete provider candidates in `provider_list` order, then falls through to the next model in the list. For example, `gpt-5.4` will try available providers such as `gpt-5.4@openai`, `gpt-5.4@github-copilot`, and `gpt-5.4@openrouter` before moving to the next model. Runtime fallback is used for non-retryable provider/model failures such as quota, billing, permission, or model-unavailable errors. `fast_model` is used for session-title generation; `compact_model` is used for compact/helper tasks.
129
+
130
+ When you switch models with `/model`, Klaude updates `main_model` without discarding the fallback chain: the selected model is moved to the front if it already exists, or inserted at the front otherwise.
149
131
 
150
132
  #### Built-in Providers
151
133
 
@@ -221,7 +203,10 @@ You can add custom models to built-in providers or define new ones. Configuratio
221
203
 
222
204
  ```yaml
223
205
  # ~/.klaude/klaude-config.yaml
224
- main_model: opus
206
+ main_model:
207
+ - gpt-5.5
208
+ - gpt-5.4
209
+ - opus
225
210
 
226
211
  fast_model:
227
212
  - haiku
@@ -261,7 +246,8 @@ provider_list:
261
246
  - **Merging**: If `provider_name` matches a built-in provider, settings like `protocol` and `api_key` are inherited.
262
247
  - **Overriding**: Use the same `model_name` as a built-in model to override its parameters.
263
248
  - **Environment Variables**: Use `${VAR_NAME}` syntax for secrets.
264
- - **Model Preference Lists**: `fast_model` and `compact_model` accept either a single string or a list of model selectors. When you provide a list, Klaude tries them in order and picks the first available one.
249
+ - **Model Preference Lists**: `main_model`, `fast_model`, and `compact_model` accept either a single string or a list of model selectors. When you provide a list, Klaude first tries matching providers in `provider_list` order for each selector, then moves to the next selector.
250
+ - **Updating Defaults**: `/model` keeps saving the selected model back to `main_model`, but preserves fallback order by moving or inserting the selected model at the front of the list.
265
251
 
266
252
  ##### Sub-agent Model Configuration
267
253
 
@@ -332,7 +318,7 @@ Inside the interactive session (`klaude`), use these commands to streamline your
332
318
  - `/refresh-terminal` - Refresh terminal display.
333
319
  - `/web` - Switch to web UI mode.
334
320
  - `/new` - Start a new session (clears context).
335
- - `/model` - Switch the active LLM during the session.
321
+ - `/model` - Switch the active LLM and update `main_model` in config while preserving fallback order (the selected model is moved/inserted to the front).
336
322
  - `/sub-agent-model` - Configure sub-agent models at runtime.
337
323
  - `/thinking` - Change thinking/reasoning level.
338
324
  - `/status` - Show session usage statistics (cost, tokens, model breakdown).
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "klaude-code"
7
- version = "2.27.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,18 +15,20 @@ 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",
28
29
  "uvicorn",
29
30
  "readability-lxml>=0.8.4.1",
31
+ "pillow>=12.2.0",
30
32
  ]
31
33
 
32
34
  [project.scripts]
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from collections.abc import AsyncGenerator, Awaitable, Callable, Iterable
4
4
 
5
- from klaude_code.agent.agent_profile import AgentProfile
5
+ from klaude_code.agent.agent_profile import AgentProfile, ModelProfileProvider
6
6
  from klaude_code.agent.task import SessionContext, TaskExecutionContext, TaskExecutor
7
7
  from klaude_code.llm import LLMClientABC
8
8
  from klaude_code.log import DebugType, log_debug
@@ -32,14 +32,17 @@ class Agent:
32
32
  ]
33
33
  | None
34
34
  ) = None,
35
+ model_profile_provider: ModelProfileProvider | None = None,
35
36
  ):
36
37
  self.session: Session = session
37
38
  self.profile: AgentProfile = profile
38
39
  self.compact_llm_client: LLMClientABC | None = compact_llm_client
39
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]
40
42
  self._last_interrupt_show_notice = True
41
43
  self._last_interrupt_prefill_text: str | None = None
42
44
  self.request_user_interaction = request_user_interaction
45
+ self._model_profile_provider = model_profile_provider
43
46
  if not self.session.model_name:
44
47
  self.session.model_name = profile.llm_client.model_name
45
48
 
@@ -52,6 +55,37 @@ class Agent:
52
55
  self._last_interrupt_prefill_text = None
53
56
  return text
54
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
+
55
89
  def on_interrupt(self) -> Iterable[events.Event]:
56
90
  """Handle an interrupt by emitting best-effort cleanup events.
57
91
 
@@ -98,6 +132,7 @@ class Agent:
98
132
  tool_registry=tool_registry,
99
133
  sub_agent_state=self.session.sub_agent_state,
100
134
  compact_llm_client=self.compact_llm_client,
135
+ apply_llm_client_change=self._apply_llm_client_change,
101
136
  )
102
137
 
103
138
  task = TaskExecutor(context)
@@ -127,6 +162,26 @@ class Agent:
127
162
  self.profile = profile
128
163
  self.session.model_name = profile.llm_client.model_name
129
164
 
165
+ def _apply_llm_client_change(self, llm_client: LLMClientABC) -> AgentProfile:
166
+ if self._model_profile_provider is None:
167
+ profile = AgentProfile(
168
+ llm_client=llm_client,
169
+ system_prompt=self.profile.system_prompt,
170
+ tools=self.profile.tools,
171
+ attachments=self.profile.attachments,
172
+ )
173
+ else:
174
+ sub_agent_type = None
175
+ if self.session.sub_agent_state is not None and not self.session.sub_agent_state.fork_context:
176
+ sub_agent_type = self.session.sub_agent_state.sub_agent_type
177
+ profile = self._model_profile_provider.build_profile(
178
+ llm_client,
179
+ sub_agent_type,
180
+ work_dir=self.session.work_dir,
181
+ )
182
+ self.set_model_profile(profile)
183
+ return profile
184
+
130
185
  def get_llm_client(self) -> LLMClientABC:
131
186
  return self.profile.llm_client
132
187
 
@@ -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,
@@ -0,0 +1,46 @@
1
+ """Agent attachment package.
2
+
3
+ Shared helpers for <system-reminder> content produced by attachments live here.
4
+ Each concrete attachment (files, memory, skills, …) is responsible for
5
+ truncating its own output; these helpers provide a consistent Read-tool-style
6
+ notice so the agent always knows how to fetch the full content.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ from dataclasses import dataclass
12
+
13
+
14
+ @dataclass(frozen=True)
15
+ class LineTruncationResult:
16
+ """Outcome of :func:`truncate_text_by_lines`."""
17
+
18
+ text: str
19
+ total_lines: int
20
+ kept_lines: int
21
+ truncated: bool
22
+
23
+ @property
24
+ def hidden_lines(self) -> int:
25
+ return max(0, self.total_lines - self.kept_lines)
26
+
27
+
28
+ def truncate_text_by_lines(text: str, *, max_lines: int) -> LineTruncationResult:
29
+ """Keep the first ``max_lines`` lines; report total/hidden line counts.
30
+
31
+ The trailing newline (if any) is preserved only when the text was not
32
+ truncated, matching Read tool behaviour where a truncated view never
33
+ ends with a bare newline before the notice.
34
+ """
35
+ if max_lines <= 0:
36
+ return LineTruncationResult(
37
+ text="", total_lines=text.count("\n") + (1 if text else 0), kept_lines=0, truncated=bool(text)
38
+ )
39
+
40
+ lines = text.splitlines()
41
+ total = len(lines)
42
+ if total <= max_lines:
43
+ return LineTruncationResult(text=text, total_lines=total, kept_lines=total, truncated=False)
44
+
45
+ kept = "\n".join(lines[:max_lines])
46
+ return LineTruncationResult(text=kept, total_lines=total, kept_lines=max_lines, truncated=True)
@@ -5,13 +5,17 @@ import re
5
5
  import shlex
6
6
  from pathlib import Path
7
7
 
8
+ from klaude_code.const import ATTACHMENT_DIFF_MAX_LINES, ATTACHMENT_DIFF_SOURCE_MAX_BYTES
8
9
  from klaude_code.prompts.attachments import (
9
10
  FILE_ALREADY_IN_CONTEXT_TEMPLATE,
11
+ FILE_CHANGED_DIFF_SKIPPED_TEMPLATE,
12
+ FILE_CHANGED_DIFF_TRUNCATED_TEMPLATE,
10
13
  FILE_CHANGED_EXTERNALLY_TEMPLATE,
11
14
  PASTE_FILE_HINT_TEMPLATE,
12
15
  TOOL_RESULT_TEMPLATE,
13
16
  )
14
17
  from klaude_code.protocol import message, tools
18
+ from klaude_code.protocol.input_syntax import AT_FILE_PATTERN
15
19
  from klaude_code.protocol.models import (
16
20
  AtFileImagesUIItem,
17
21
  AtFileOp,
@@ -28,6 +32,7 @@ from klaude_code.session import Session
28
32
  from klaude_code.skill.loader import discover_skills_near_paths
29
33
  from klaude_code.tool import BashTool, ReadTool
30
34
 
35
+ from . import truncate_text_by_lines
31
36
  from .memory import Memory, discover_memory_files_near_paths, format_memory_content
32
37
  from .skills import build_dynamic_skill_listing_attachment
33
38
  from .state import (
@@ -57,18 +62,6 @@ def _fmt_paste_file_hint(pasted_files: dict[str, str]) -> str:
57
62
  return PASTE_FILE_HINT_TEMPLATE.format(mapping=mapping)
58
63
 
59
64
 
60
- # Match @ preceded by whitespace, start of line, or -> (ReadTool line number arrow)
61
- # Supports optional line range suffix: @file.txt#L10-20 or @file.txt#L10.
62
- _AT_PLAIN_STOP_CHARS = (
63
- r"\u3000-\u303f"
64
- r"\uff01-\uff0f"
65
- r"\uff1a-\uff20"
66
- r"\uff3b-\uff40"
67
- r"\uff5b-\uff65"
68
- )
69
- AT_FILE_PATTERN = re.compile(rf'(?:(?<!\S)|(?<=\u2192))@("(?P<quoted>[^"]+)"|(?P<plain>[^\s{_AT_PLAIN_STOP_CHARS}]+))')
70
-
71
-
72
65
  class AtFileRef:
73
66
  """Parsed @file reference with optional line range."""
74
67
 
@@ -120,7 +113,7 @@ async def _load_at_file(
120
113
  ref: AtFileRef,
121
114
  at_ops: list[AtFileOp],
122
115
  formatted_blocks: list[str],
123
- collected_images: list[message.ImageURLPart],
116
+ collected_images: list[message.ImageURLPart | message.ImageFilePart],
124
117
  collected_image_paths: list[str],
125
118
  discovered_memories: list[Memory],
126
119
  skill_discovery_paths: list[str],
@@ -141,7 +134,7 @@ async def _load_at_file(
141
134
  limit = ref.line_end - ref.line_start + 1
142
135
  args = ReadTool.ReadArguments(file_path=path_str, offset=offset, limit=limit)
143
136
  tool_result = await ReadTool.call_with_args(args, tool_context)
144
- images = [part for part in tool_result.parts if isinstance(part, message.ImageURLPart)]
137
+ images = [part for part in tool_result.parts if isinstance(part, (message.ImageURLPart, message.ImageFilePart))]
145
138
 
146
139
  formatted_blocks.append(
147
140
  _fmt_tool_result(tools.READ, args.model_dump_json(exclude_none=True), tool_result.output_text)
@@ -210,7 +203,7 @@ async def at_file_reader_attachment(session: Session) -> message.DeveloperMessag
210
203
 
211
204
  at_ops: list[AtFileOp] = []
212
205
  formatted_blocks: list[str] = []
213
- collected_images: list[message.ImageURLPart] = []
206
+ collected_images: list[message.ImageURLPart | message.ImageFilePart] = []
214
207
  collected_image_paths: list[str] = []
215
208
  discovered_memories: list[Memory] = []
216
209
  skill_discovery_paths: list[str] = []
@@ -254,7 +247,27 @@ async def at_file_reader_attachment(session: Session) -> message.DeveloperMessag
254
247
  )
255
248
 
256
249
 
257
- def _compute_diff_snippet(old_content: str, new_content: str) -> str:
250
+ def _compute_diff_snippet(old_content: str, new_content: str, file_path: str) -> str:
251
+ """Render a small unified-style diff, capped so it cannot blow up context.
252
+
253
+ Guards (see ``const.ATTACHMENT_DIFF_*``):
254
+
255
+ * If ``old_content + new_content`` already exceeds the source size limit,
256
+ skip ``difflib`` entirely. Large HTML/minified blobs produce diffs that
257
+ approach ``2x`` the source, which in past sessions pushed the next turn
258
+ past the 1M-token ceiling even after a successful compaction.
259
+ * After the diff is built, keep only the first ``ATTACHMENT_DIFF_MAX_LINES``
260
+ lines and append a Read-tool-style notice, mirroring how the Read tool
261
+ truncates long files.
262
+ """
263
+ combined_size_bytes = len(old_content.encode("utf-8")) + len(new_content.encode("utf-8"))
264
+ if combined_size_bytes > ATTACHMENT_DIFF_SOURCE_MAX_BYTES:
265
+ return FILE_CHANGED_DIFF_SKIPPED_TEMPLATE.format(
266
+ total_bytes=combined_size_bytes,
267
+ limit_bytes=ATTACHMENT_DIFF_SOURCE_MAX_BYTES,
268
+ file_path=file_path,
269
+ )
270
+
258
271
  old_lines = old_content.splitlines(keepends=True)
259
272
  new_lines = new_content.splitlines(keepends=True)
260
273
 
@@ -280,7 +293,15 @@ def _compute_diff_snippet(old_content: str, new_content: str) -> str:
280
293
  diff_lines.append(f" {line_no:>6}+\t{line.rstrip()}")
281
294
  diff_lines.append(" ------")
282
295
 
283
- return "\n".join(diff_lines).rstrip("\n -")
296
+ rendered = "\n".join(diff_lines).rstrip("\n -")
297
+ truncation = truncate_text_by_lines(rendered, max_lines=ATTACHMENT_DIFF_MAX_LINES)
298
+ if truncation.truncated:
299
+ return truncation.text + FILE_CHANGED_DIFF_TRUNCATED_TEMPLATE.format(
300
+ hidden_lines=truncation.hidden_lines,
301
+ total_lines=truncation.total_lines,
302
+ file_path=file_path,
303
+ )
304
+ return truncation.text
284
305
 
285
306
 
286
307
  async def file_changed_externally_attachment(session: Session) -> message.DeveloperMessage | None:
@@ -316,7 +337,7 @@ async def file_changed_externally_attachment(session: Session) -> message.Develo
316
337
  if new_status is None or new_status.cached_content is None:
317
338
  continue
318
339
 
319
- snippet = _compute_diff_snippet(old_content, new_status.cached_content)
340
+ snippet = _compute_diff_snippet(old_content, new_status.cached_content, path)
320
341
  if not snippet:
321
342
  continue
322
343
  changed_files.append((path, snippet))
@@ -377,7 +398,15 @@ async def paste_file_attachment(session: Session) -> message.DeveloperMessage |
377
398
  for item in reversed(session.conversation_history):
378
399
  if isinstance(item, message.ToolResultMessage):
379
400
  return None
380
- if isinstance(item, message.UserMessage) and item.pasted_files:
401
+ if (
402
+ isinstance(item, message.DeveloperMessage)
403
+ and item.ui_extra is not None
404
+ and any(isinstance(ui_item, PasteFilesUIItem) for ui_item in item.ui_extra.items)
405
+ ):
406
+ return None
407
+ if isinstance(item, message.UserMessage):
408
+ if not item.pasted_files:
409
+ return None
381
410
  return message.DeveloperMessage(
382
411
  parts=message.text_parts_from_str(
383
412
  f"<system-reminder>{_fmt_paste_file_hint(item.pasted_files)}\n</system-reminder>"
@@ -5,11 +5,18 @@ from pathlib import Path
5
5
 
6
6
  from pydantic import BaseModel
7
7
 
8
- from klaude_code.const import ProjectPaths, find_git_repo_root, project_key_from_path
8
+ from klaude_code.const import (
9
+ ATTACHMENT_MEMORY_MAX_BYTES_PER_FILE,
10
+ ATTACHMENT_MEMORY_MAX_LINES,
11
+ ProjectPaths,
12
+ find_git_repo_root,
13
+ project_key_from_path,
14
+ )
9
15
  from klaude_code.prompts.attachments import (
10
16
  AUTO_MEMORY_HINT_TEMPLATE,
11
17
  AUTO_MEMORY_INSTRUCTION,
12
18
  DISCOVERED_MEMORY_INSTRUCTION,
19
+ MEMORY_FILE_BYTE_TRUNCATED_TEMPLATE,
13
20
  MEMORY_FILE_TRUNCATED_TEMPLATE,
14
21
  MEMORY_HEADER,
15
22
  MEMORY_TRUNCATED_TEMPLATE,
@@ -20,13 +27,16 @@ from klaude_code.protocol import message
20
27
  from klaude_code.protocol.models import DeveloperUIExtra, DeveloperUIItem, MemoryFileLoaded, MemoryLoadedUIItem
21
28
  from klaude_code.session import Session
22
29
 
30
+ from . import truncate_text_by_lines
23
31
  from .state import is_memory_loaded, mark_memory_loaded
24
32
 
25
33
  MEMORY_FILE_NAMES = ["AGENTS.md", "CLAUDE.md", "AGENT.md"]
26
34
 
27
35
  AUTO_MEMORY_FILE = "MEMORY.md"
28
- AUTO_MEMORY_MAX_LINES = 200
29
- MEMORY_MAX_BYTES_PER_FILE = 4096
36
+ # Kept as module-level aliases for backwards compatibility with existing tests
37
+ # and callers. See src/klaude_code/const.py for the canonical values.
38
+ AUTO_MEMORY_MAX_LINES = ATTACHMENT_MEMORY_MAX_LINES
39
+ MEMORY_MAX_BYTES_PER_FILE = ATTACHMENT_MEMORY_MAX_BYTES_PER_FILE
30
40
  MEMORY_MAX_SESSION_BYTES = 60 * 1024
31
41
 
32
42
 
@@ -131,23 +141,31 @@ def format_memories_attachment(memories: list[Memory], include_header: bool = Tr
131
141
 
132
142
 
133
143
  def truncate_memory_content(text: str, path: str) -> str:
134
- """Truncate memory content to the shared per-file limits used by attachments."""
144
+ """Truncate memory content to the first :data:`AUTO_MEMORY_MAX_LINES` lines.
135
145
 
136
- lines = text.splitlines()
137
- truncated = False
146
+ Mirrors Read tool behaviour: show a bounded prefix and tell the agent how
147
+ to fetch the rest. A generous byte cap still applies as a last-resort
148
+ guard against pathologically long single lines (e.g. minified JSON).
149
+ """
150
+ truncation = truncate_text_by_lines(text, max_lines=AUTO_MEMORY_MAX_LINES)
151
+ result = truncation.text
138
152
 
139
- if len(lines) > AUTO_MEMORY_MAX_LINES:
140
- lines = lines[:AUTO_MEMORY_MAX_LINES]
141
- truncated = True
142
-
143
- result = "\n".join(lines)
144
153
  if len(result.encode("utf-8")) > MEMORY_MAX_BYTES_PER_FILE:
145
154
  encoded = result.encode("utf-8")[:MEMORY_MAX_BYTES_PER_FILE]
146
155
  result = encoded.decode("utf-8", errors="ignore")
147
- truncated = True
148
-
149
- if truncated:
150
- result += MEMORY_FILE_TRUNCATED_TEMPLATE.format(max_bytes=MEMORY_MAX_BYTES_PER_FILE, path=path)
156
+ total_lines = truncation.total_lines or len(text.splitlines())
157
+ return result + MEMORY_FILE_BYTE_TRUNCATED_TEMPLATE.format(
158
+ max_bytes=MEMORY_MAX_BYTES_PER_FILE,
159
+ total_lines=total_lines,
160
+ path=path,
161
+ )
162
+
163
+ if truncation.truncated:
164
+ return result + MEMORY_FILE_TRUNCATED_TEMPLATE.format(
165
+ max_lines=AUTO_MEMORY_MAX_LINES,
166
+ total_lines=truncation.total_lines,
167
+ path=path,
168
+ )
151
169
  return result
152
170
 
153
171