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