klaude-code 2.28.0__tar.gz → 2.29.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {klaude_code-2.28.0 → klaude_code-2.29.0}/PKG-INFO +3 -2
- {klaude_code-2.28.0 → klaude_code-2.29.0}/pyproject.toml +3 -2
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/agent.py +32 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/agent_profile.py +1 -1
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/files.py +1 -12
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/agent_ops.py +13 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/dispatcher.py +3 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/task.py +2 -1
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/runtime.py +11 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/assets/builtin_config.yaml +4 -6
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/const.py +2 -4
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/control/runtime/actor.py +7 -1
- klaude_code-2.29.0/src/klaude_code/llm/proxy_support.py +43 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/prompt_suggestion.py +4 -3
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-simplifier.md +0 -1
- klaude_code-2.29.0/src/klaude_code/protocol/input_syntax.py +57 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/message.py +1 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/model_id.py +2 -3
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/op.py +12 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/op_handler.py +5 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/session/meta.py +17 -1
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/session/session.py +10 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/session/store.py +7 -1
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/shell/bash_tool.py +198 -2
- klaude_code-2.29.0/src/klaude_code/tui/AGENTS.md +128 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/commands.py +21 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/diffs.py +36 -6
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/markdown.py +51 -2
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/status.py +22 -55
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/task_file_changes.py +11 -2
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/user_input.py +5 -13
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/display.py +27 -12
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/completers.py +3 -31
- klaude_code-2.29.0/src/klaude_code/tui/input/flicker_safe_stdout.py +256 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/key_bindings.py +85 -1
- klaude_code-2.29.0/src/klaude_code/tui/input/prompt_status_bar.py +286 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/prompt_toolkit.py +172 -12
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/pt_theme.py +5 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/machine.py +16 -3
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/renderer.py +102 -154
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/runner.py +240 -72
- klaude_code-2.28.0/src/klaude_code/tui/AGENTS.md +0 -39
- klaude_code-2.28.0/src/klaude_code/tui/components/rich/live.py +0 -84
- {klaude_code-2.28.0 → klaude_code-2.29.0}/README.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/.DS_Store +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/collection.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/memory.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/skills.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/state.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/attachments/todo.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/away_summary.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/bash_mode.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/cache_break_detection.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/cache_safe.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/compaction/AGENTS.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/compaction/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/compaction/compaction.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/compaction/overflow.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/handoff/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/handoff/handoff.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/handoff/manager.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/prompt_suggestion/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/prompt_suggestion/prompt_suggestion.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/rewind/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/rewind/manager.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/away_summary.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/config_ops.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/llm.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/runtime/sub_agent.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/session_stats.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/session_title.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/skill_inventory.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/system_prompt.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/agent/turn.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/auth_flow.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/log_viewer.html +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/log_viewer.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/ports/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/ports/display.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/ports/input.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/ports/interaction.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/app/runtime_facade.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/AGENTS.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/base.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/codex/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/codex/exceptions.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/codex/jwt_utils.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/codex/oauth.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/codex/token_manager.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/copilot/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/copilot/exceptions.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/copilot/oauth.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/copilot/token_manager.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/auth/env.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/auth_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/config_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/cost_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/debug.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/list_model.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/main.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/oauth_usage.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/self_update.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/cli/web_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/assets/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/builtin_config.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/config.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/formatters.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/loader.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/merge.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/model_matcher.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/sub_agent_model.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/config/thinking.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/control/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/control/event_bus.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/control/event_relay.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/control/runtime/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/control/runtime/registry.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/control/session_meta_relay.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/control/user_interaction.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/AGENTS.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/anthropic/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/anthropic/client.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/anthropic/input.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/bedrock_anthropic/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/bedrock_anthropic/client.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/client.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/copilot/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/copilot/client.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/google/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/google/client.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/google/input.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/google_vertex/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/google_vertex/client.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/image.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/input_common.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/json_stable.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_codex/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_codex/client.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_compatible/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_compatible/client.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_compatible/input.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_compatible/stream.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_responses/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_responses/client.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openai_responses/input.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openrouter/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openrouter/client.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openrouter/input.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/openrouter/reasoning.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/registry.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/stream_parts.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/llm/usage.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/log.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/attachments.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/away_summary.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/compaction.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/handoff.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/messages.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/session_title.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-finder.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/sub_agents/prompt-sub-agent-review.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/sub_agents.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/system/auto-memory-prompt.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/system/base-system-prompt-gpt.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/system/base-system-prompt.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/system/extended-thinking-prompt.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/system/following-conventions-prompt.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/prompts/system/git-workspace-hygiene-prompt.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/events.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/llm_param.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/common.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/developer_ui.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/file_tracking.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/session_runtime.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/sub_agent.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/task_metadata.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/todo.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/tool_ui.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/models/usage.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/AGENTS.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/finder.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/general_purpose.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/review.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/sub_agent/simplifier.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/system_prompt.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/tools.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/protocol/user_interaction.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/session/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/session/codec.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/session/history.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/session/selector.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/session/store_registry.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/AGENTS.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/.git +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/.gitignore +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/SOURCES.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/SKILL.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/authentication.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/commands.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/profiling.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/proxy-support.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/session-management.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/snapshot-refs.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/references/video-recording.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/templates/authenticated-session.sh +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/templates/capture-workflow.sh +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/agent-browser/templates/form-automation.sh +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/frontend-design/SKILL.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/LICENSE.txt +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/SKILL.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/references/cli.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/references/image-api.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/references/prompting.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/references/sample-prompts.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/gpt-image-gen/scripts/image_gen.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/klaude-config/SKILL.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/klaude-config/references/builtin-providers.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/klaude-config/references/config-file.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/klaude-config/references/memory-files.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/klaude-config/references/skill-system.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/SKILL.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/cli.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/gemini-api.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/prompting.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/sample-prompts.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/references/vertex-setup.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/nano-banana-image-gen/scripts/gemini_image_gen.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/SKILL.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/forms.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/reference.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/check_bounding_boxes.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/check_fillable_fields.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/convert_pdf_to_images.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/create_validation_image.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/extract_form_field_info.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/extract_form_structure.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/fill_fillable_fields.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/pdf/scripts/fill_pdf_form_with_annotations.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/LICENSE.txt +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/NOTICE.txt +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/SKILL.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/assets/playwright-small.svg +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/assets/playwright.png +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/references/cli.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/references/workflows.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/playwright/scripts/playwright_cli.sh +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/SKILL.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/3d.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/animations.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/charts-bar-chart.tsx +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/assets.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/audio-visualization.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/audio.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/calculate-metadata.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/can-decode.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/charts.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/compositions.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/display-captions.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/extract-frames.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/ffmpeg.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/fonts.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-audio-duration.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-video-dimensions.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/get-video-duration.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/gifs.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/images.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/import-srt-captions.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/light-leaks.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/lottie.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/maps.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/measuring-dom-nodes.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/measuring-text.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/parameters.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/sequencing.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/sfx.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/subtitles.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/tailwind.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/text-animations.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/timing.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transcribe-captions.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transitions.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/transparent-videos.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/trimming.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/videos.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/remotion-best-practices/rules/voiceover.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/.gitignore +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/SKILL.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/package.json +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/references/config/first-time-setup.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/references/config/preferences-schema.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/references/templates/standalone.html +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/references/troubleshooting.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/scripts/render_mermaid.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/render-mermaid/scripts/setup.sh +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/session-logs/SKILL.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/skill-creator/SKILL.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/skills-lock.json +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/LICENSE.txt +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/SKILL.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/assets/sora-small.svg +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/assets/sora.png +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/cinematic-shots.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/cli.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/prompting.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/sample-prompts.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/social-ads.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/troubleshooting.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/references/video-api.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/sora/scripts/sora.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/svg-animations/SKILL.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/svg-animations/examples/index.html +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/assets/web-search/SKILL.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/loader.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/manager.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/skill/system_skills.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/AGENTS.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/agent_tool.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/agent_tool.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/ask_user_question_tool.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/ask_user_question_tool.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/abc.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/context.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/offload.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/registry.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/core/runner.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/_utils.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/apply_patch.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/apply_patch_tool.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/apply_patch_tool.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/diff_builder.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/edit_tool.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/edit_tool.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/read_tool.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/read_tool.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/write_tool.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/file/write_tool.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/handoff_tool.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/handoff_tool.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/rewind_tool.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/rewind_tool.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/shell/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/shell/bash_tool.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/shell/command_safety.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/todo/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/todo/todo_write_tool.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/todo/todo_write_tool.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/todo/todo_write_tool_raw.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/external_content.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/ssrf.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/web_cache.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/web_fetch_tool.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/web_fetch_tool.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/web_search_tool.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tool/web/web_search_tool.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/AGENTS.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/auth_selector.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/command_abc.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/compact_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/continue_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/copy_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/debug_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/export_session_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/export_session_html.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/fork_session_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/login_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/logout_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/model_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/model_picker.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/new_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/recap_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/refresh_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/registry.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/status_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/sub_agent_model_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/thinking_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/types.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/command/web_cmd.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/away_summary.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/bash_syntax.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/command_output.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/common.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/developer.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/errors.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/metadata.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/cjk_wrap.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/quote.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/rich/theme.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/sub_agent.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/thinking.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_bash.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_common.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_dispatch.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_file.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_question.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_read.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_rewind.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_todo.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/tools/_web.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/components/welcome.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/AGENTS.md +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/drag_drop.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/images.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/input/paste.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/status_runtime.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/ask_user_question.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/color.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/control.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/focus_tracker.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/image.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/notifier.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/prevent_sleep.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/selector.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/session_selector.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/tui/terminal/title.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/update.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/app.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/display.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/abap-BdImnpbu.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/actionscript-3-CoDkCxhg.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ada-bCR0ucgS.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/andromeeda-C4gqWexZ.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/angular-html-CU67Zn6k.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/angular-ts-BwZT4LLn.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/apache-Pmp26Uib.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/apex-D8_7TLub.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/apl-dKokRX4l.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/applescript-Co6uUVPk.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ara-BRHolxvo.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/asciidoc-Ve4PFQV2.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/asm-D_Q5rh1f.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/astro-CbQHKStN.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/aurora-x-D-2ljcwZ.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/awk-DMzUqQB5.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ayu-dark-DYE7WIF3.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ayu-light-BA47KaF1.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ayu-mirage-32ctXXKs.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ballerina-BFfxhgS-.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/bat-BkioyH1T.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/beancount-k_qm7-4y.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/berry-uYugtg8r.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/bibtex-CHM0blh-.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/bicep-Bmn6On1c.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/bird2-DPOp833l.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/blade-D4QpJJKB.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/bsl-BO_Y6i37.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/c-BIGW1oBm.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/c3-eo99z4R2.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cadence-Bv_4Rxtq.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cairo-KRGpt6FW.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/catppuccin-frappe-DFWUc33u.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/clarity-D53aC0YG.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/clojure-P80f7IUj.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cmake-D1j8_8rp.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cobol-nwyudZeR.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/codeowners-Bp6g37R7.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/codeql-DsOJ9woJ.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/coffee-Ch7k5sss.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/common-lisp-Cg-RD9OK.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/coq-DkFqJrB1.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cpp-CofmeUqb.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/crystal-tKQVLTB8.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/csharp-COcwbKMJ.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/css-DPfMkruS.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/csv-fuZLfV_i.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cue-D82EKSYY.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/cypher-COkxafJQ.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/d-85-TOEBH.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dark-plus-C3mMm8J8.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dart-CF10PKvl.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dax-CEL-wOlO.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/desktop-BmXAJ9_W.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/diff-D97Zzqfu.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/docker-BcOcwvcX.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dotenv-Da5cRb03.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dracula-BzJJZx-M.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dracula-soft-BXkSAIEj.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/dream-maker-BtqSS_iP.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/edge-BkV0erSs.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/elixir-CDX3lj18.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/elm-DbKCFpqz.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/emacs-lisp-C9XAeP06.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/erb-B12qg9BL.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/erlang-DsQrWhSR.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/everforest-dark-BgDCqdQA.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/everforest-light-C8M2exoo.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fennel-BYunw83y.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fish-BvzEVeQv.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fluent-C4IJs8-o.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fortran-free-form-BxgE0vQu.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/fsharp-CXgrBDvD.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gdresource-BOOCDP_w.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gdscript-C5YyOfLZ.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gdshader-DkwncUOv.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/genie-D0YGMca9.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gherkin-DyxjwDmM.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/git-commit-F4YmCXRG.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/git-rebase-r7XF79zn.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-dark-DHJKELXO.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-dark-default-Cuk6v7N8.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-light-DAi9KRSo.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-light-default-D7oLnXFd.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gleam-BspZqrRM.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/glimmer-js-Rg0-pVw9.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/glimmer-ts-U6CK756n.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/glsl-DplSGwfg.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gn-n2N0HUVH.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gnuplot-DdkO51Og.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/go-CxLEBnE3.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/graphql-ChdNCCLP.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/groovy-gcz8RCvz.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hack-CaT9iCJl.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/haml-B8DHNrY2.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/handlebars-BL8al0AC.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/haskell-Df6bDoY_.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/haxe-CzTSHFRz.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hcl-BWvSN4gD.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/highlighted-body-B3W2YXNL-DTuyBW20.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hjson-D5-asLiD.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hlsl-D3lLCCz7.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/horizon-BUw7H-hv.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/horizon-bright-Cn-bp-IR.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/houston-DnULxvSX.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/html-GMplVEZG.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/html-derivative-BFtXZ54Q.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/http-jrhK8wxY.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hurl-irOxFIW8.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hxml-Bvhsp5Yf.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/hy-DFXneXwc.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/imba-DGztddWO.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/index-CoapfQ1q.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/index-TK8frDq8.css +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ini-BEwlwnbL.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/java-CylS5w8V.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/javascript-wDzz0qaB.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jinja-4LBKfQ-Z.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jison-wvAkD_A8.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/json-Cp-IABpG.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/json5-C9tS-k6U.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jsonc-Des-eS-w.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jsonl-DcaNXYhu.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jsonnet-DFQXde-d.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jssm-C2t-YnRu.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/jsx-g9-lgVsj.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/julia-CxzCAyBv.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/just-Cw27pwNe.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kanagawa-wave-DWedfzmr.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kdl-DV7GczEv.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kotlin-BdnUsdx6.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/kusto-DZf3V79B.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/laserwave-DUszq2jm.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/latex-CWtU0Tv5.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/lean-BZvkOJ9d.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/less-B1dDrJ26.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/light-plus-B7mTdjB0.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/liquid-DYVedYrR.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/llvm-DjAJT7YJ.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/log-2UxHyX5q.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/logo-BtOb2qkB.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/lua-BaeVxFsk.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/luau-C-HG3fhB.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/make-CHLpvVh8.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/markdown-Cvjx9yec.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/marko-CnJfTvn9.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/material-theme-D5KoaKCx.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/material-theme-darker-BfHTSMKl.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/material-theme-lighter-B0m2ddpp.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/material-theme-ocean-CyktbL80.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/matlab-D7o27uSR.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/mdc-BMNejdWA.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/mdx-Cmh6b_Ma.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/mermaid-mWjccvbQ.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/min-dark-CafNBF8u.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/min-light-CTRr51gU.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/mipsasm-CKIfxQSi.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/mojo-rZm6bMo-.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/monokai-D4h5O-jR.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/moonbit-_H4v1dQx.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/move-IF9eRakj.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/narrat-DRg8JJMk.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nextflow-Zz6hmt5N.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nextflow-groovy-BeH2EWoN.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nginx-BpAMiNFr.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/night-owl-C39BiMTA.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/night-owl-light-CMTm3GFP.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nim-CVrawwO9.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nix-CwoSXNpI.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nord-Ddv68eIx.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/nushell-Cz2AlsmD.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/objective-c-DXmwc3jG.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/objective-cpp-CLxacb5B.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ocaml-C0hk2d4L.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/odin-BBf5iR-q.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/one-dark-pro-DVMEJ2y_.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/one-light-C3Wv6jpd.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/openscad-C4EeE6gA.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/pascal-D93ZcfNL.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/perl-C0TMdlhV.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/php-Dhbhpdrm.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/pierre-dark-BXuwtOqb.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/pierre-light-dckrK0oj.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/pkl-u5AG7uiY.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/plastic-3e1v2bzS.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/plsql-ChMvpjG-.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/po-BTJTHyun.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/poimandres-CS3Unz2-.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/polar-C0HS_06l.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/postcss-CXtECtnM.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/powerquery-CEu0bR-o.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/powershell-Dpen1YoG.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/prisma-Dd19v3D-.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/prolog-CbFg5uaA.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/proto-C7zT0LnQ.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/pug-CGlum2m_.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/puppet-BMWR74SV.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/purescript-CklMAg4u.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/python-B6aJPvgy.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/qml-3beO22l8.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/qmldir-C8lEn-DE.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/qss-IeuSbFQv.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/r-Dspwwk_N.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/racket-BqYA7rlc.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/raku-DXvB9xmW.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/razor-Uh8Bk_45.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/red-bN70gL4F.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/reg-C-SQnVFl.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/regexp-CDVJQ6XC.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rel-C3B-1QV4.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/riscv-BM1_JUlF.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ron-D8l8udqQ.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rose-pine-moon-D4_iv3hh.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rose-pine-qdsjHGoJ.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rosmsg-BJDFO7_C.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rst-BrH8l1NY.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ruby-Dw2BHqvy.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/rust-B1yitclQ.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/sas-cz2c8ADy.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/sass-Cj5Yp3dK.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/scala-C151Ov-r.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/scheme-C98Dy4si.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/scss-OYdSNvt2.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/sdbl-DVxCFoDh.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/shaderlab-Dg9Lc6iA.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/shellscript-Yzrsuije.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/shellsession-BADoaaVG.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/slack-dark-BthQWCQV.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/slack-ochin-DqwNpetd.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/smalltalk-BERRCDM3.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/snazzy-light-Bw305WKR.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/solarized-dark-DXbdFlpD.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/solarized-light-L9t79GZl.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/solidity-rGO070M0.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/soy-Brmx7dQM.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/sparql-rVzFXLq3.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/splunk-BtCnVYZw.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/sql-BLtJtn59.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ssh-config-_ykCGR6B.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/stata-BH5u7GGu.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/stylus-BEDo0Tqx.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/surrealql-Bq5Q-fJD.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/svelte-C_ipcX3V.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/swift-D82vCrfD.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/synthwave-84-CbfX1IO0.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/system-verilog-CnnmHF94.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/systemd-4A_iFExJ.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/talonscript-CkByrt1z.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tasl-QIJgUcNo.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tcl-dwOrl1Do.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/templ-P3uqSqPl.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/terraform-BETggiCN.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tex-idrVyKtj.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tokyo-night-hegEt444.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/toml-vGWfd6FD.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/ts-tags-zn1MmPIZ.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tsv-B_m7g4N7.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/tsx-COt5Ahok.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/turtle-BsS91CYL.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/twig-DNn4PbVi.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/typescript-BPQ3VLAy.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/typespec-BGHnOYBU.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/typst-DHCkPAjA.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/v-BcVCzyr7.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vala-CsfeWuGM.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vb-D17OF-Vu.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/verilog-BQ8w6xss.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vesper-DU1UobuO.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vhdl-CeAyd5Ju.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/viml-CJc9bBzg.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vitesse-black-Bkuqu6BP.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vitesse-dark-D0r3Knsf.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vitesse-light-CVO1_9PV.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vue-DN_0RTcg.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vue-html-AaS7Mt5G.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vue-vine-CQOfvN7w.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/vyper-CDx5xZoG.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wasm-CG6Dc4jp.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wasm-MzD3tlZU.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wenyan-BV7otONQ.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wgsl-Dx-B1_4e.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wikitext-BhOHFoWU.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wit-5i3qLPDT.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/wolfram-lXgVvXCa.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/xml-sdJ4AIDG.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/xsl-CtQFsRM5.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/yaml-Buea-lGh.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/zenscript-DVFEvuxE.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/assets/zig-VOosw3JB.js +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/favicon.svg +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/fonts/InterVariable-Italic.woff2 +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/fonts/InterVariable.woff2 +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/dist/index.html +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/file_access.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/interaction.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/live_events.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/__init__.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/config.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/files.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/sessions.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/skills.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/routes/ws.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/server.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/session_access.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/session_index.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/session_live.py +0 -0
- {klaude_code-2.28.0 → klaude_code-2.29.0}/src/klaude_code/web/state.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: klaude-code
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.29.0
|
|
4
4
|
Summary: Minimal code agent CLI
|
|
5
5
|
Requires-Dist: anthropic[bedrock]>=0.66.0
|
|
6
6
|
Requires-Dist: chardet>=5.2.0,<6
|
|
@@ -8,13 +8,14 @@ Requires-Dist: diff-match-patch>=20241021
|
|
|
8
8
|
Requires-Dist: filelock>=3.20.3
|
|
9
9
|
Requires-Dist: fastapi
|
|
10
10
|
Requires-Dist: google-genai>=1.56.0
|
|
11
|
+
Requires-Dist: httpx[socks]>=0.28.1
|
|
11
12
|
Requires-Dist: markdown-it-py>=4.0.0
|
|
12
13
|
Requires-Dist: openai>=2.24.0
|
|
13
14
|
Requires-Dist: prompt-toolkit>=3.0.52
|
|
14
15
|
Requires-Dist: pydantic>=2.11.7
|
|
15
|
-
Requires-Dist: python-socks>=2.8.1
|
|
16
16
|
Requires-Dist: pyyaml>=6.0.2
|
|
17
17
|
Requires-Dist: rich>=14.1.0
|
|
18
|
+
Requires-Dist: socksio>=1.0.0
|
|
18
19
|
Requires-Dist: sse-starlette
|
|
19
20
|
Requires-Dist: trafilatura>=2.0.0
|
|
20
21
|
Requires-Dist: typer>=0.17.3
|
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "klaude-code"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.29.0"
|
|
8
8
|
description = "Minimal code agent CLI"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.13"
|
|
@@ -15,13 +15,14 @@ dependencies = [
|
|
|
15
15
|
"filelock>=3.20.3",
|
|
16
16
|
"fastapi",
|
|
17
17
|
"google-genai>=1.56.0",
|
|
18
|
+
"httpx[socks]>=0.28.1",
|
|
18
19
|
"markdown-it-py>=4.0.0",
|
|
19
20
|
"openai>=2.24.0",
|
|
20
21
|
"prompt-toolkit>=3.0.52",
|
|
21
22
|
"pydantic>=2.11.7",
|
|
22
|
-
"python-socks>=2.8.1",
|
|
23
23
|
"pyyaml>=6.0.2",
|
|
24
24
|
"rich>=14.1.0",
|
|
25
|
+
"socksio>=1.0.0",
|
|
25
26
|
"sse-starlette",
|
|
26
27
|
"trafilatura>=2.0.0",
|
|
27
28
|
"typer>=0.17.3",
|
|
@@ -38,6 +38,7 @@ class Agent:
|
|
|
38
38
|
self.profile: AgentProfile = profile
|
|
39
39
|
self.compact_llm_client: LLMClientABC | None = compact_llm_client
|
|
40
40
|
self._current_task: TaskExecutor | None = None
|
|
41
|
+
self._follow_up_queue: list[UserInputPayload] = [item.model_copy(deep=True) for item in session.follow_up_queue]
|
|
41
42
|
self._last_interrupt_show_notice = True
|
|
42
43
|
self._last_interrupt_prefill_text: str | None = None
|
|
43
44
|
self.request_user_interaction = request_user_interaction
|
|
@@ -54,6 +55,37 @@ class Agent:
|
|
|
54
55
|
self._last_interrupt_prefill_text = None
|
|
55
56
|
return text
|
|
56
57
|
|
|
58
|
+
def follow_up(self, user_input: UserInputPayload) -> int:
|
|
59
|
+
"""Queue a user message to run after the active task completes."""
|
|
60
|
+
|
|
61
|
+
self._follow_up_queue.append(user_input)
|
|
62
|
+
self.session.set_follow_up_queue(self._follow_up_queue)
|
|
63
|
+
return len(self._follow_up_queue)
|
|
64
|
+
|
|
65
|
+
def follow_up_count(self) -> int:
|
|
66
|
+
return len(self._follow_up_queue)
|
|
67
|
+
|
|
68
|
+
def follow_up_snapshot(self) -> tuple[UserInputPayload, ...]:
|
|
69
|
+
return tuple(self._follow_up_queue)
|
|
70
|
+
|
|
71
|
+
def pop_all_follow_up(self) -> tuple[UserInputPayload, ...]:
|
|
72
|
+
messages = tuple(self._follow_up_queue)
|
|
73
|
+
self._follow_up_queue.clear()
|
|
74
|
+
self.session.set_follow_up_queue(self._follow_up_queue)
|
|
75
|
+
return messages
|
|
76
|
+
|
|
77
|
+
def peek_next_follow_up(self) -> UserInputPayload | None:
|
|
78
|
+
if not self._follow_up_queue:
|
|
79
|
+
return None
|
|
80
|
+
return self._follow_up_queue[0]
|
|
81
|
+
|
|
82
|
+
def pop_next_follow_up(self) -> UserInputPayload | None:
|
|
83
|
+
if not self._follow_up_queue:
|
|
84
|
+
return None
|
|
85
|
+
message = self._follow_up_queue.pop(0)
|
|
86
|
+
self.session.set_follow_up_queue(self._follow_up_queue)
|
|
87
|
+
return message
|
|
88
|
+
|
|
57
89
|
def on_interrupt(self) -> Iterable[events.Event]:
|
|
58
90
|
"""Handle an interrupt by emitting best-effort cleanup events.
|
|
59
91
|
|
|
@@ -44,7 +44,7 @@ MAIN_AGENT_COMMON_BASE_TOOLS: list[str] = [tools.BASH, tools.READ]
|
|
|
44
44
|
MAIN_AGENT_GPT5_DIFF_TOOLS: list[str] = [tools.APPLY_PATCH, tools.TODO_WRITE]
|
|
45
45
|
MAIN_AGENT_NON_GPT5_DIFF_TOOLS: list[str] = [tools.EDIT, tools.WRITE, tools.TODO_WRITE]
|
|
46
46
|
MAIN_AGENT_COMMON_TOOLS: list[str] = [
|
|
47
|
-
tools.HANDOFF,
|
|
47
|
+
# tools.HANDOFF,
|
|
48
48
|
tools.AGENT,
|
|
49
49
|
tools.WEB_FETCH,
|
|
50
50
|
tools.WEB_SEARCH,
|
|
@@ -15,6 +15,7 @@ from klaude_code.prompts.attachments import (
|
|
|
15
15
|
TOOL_RESULT_TEMPLATE,
|
|
16
16
|
)
|
|
17
17
|
from klaude_code.protocol import message, tools
|
|
18
|
+
from klaude_code.protocol.input_syntax import AT_FILE_PATTERN
|
|
18
19
|
from klaude_code.protocol.models import (
|
|
19
20
|
AtFileImagesUIItem,
|
|
20
21
|
AtFileOp,
|
|
@@ -61,18 +62,6 @@ def _fmt_paste_file_hint(pasted_files: dict[str, str]) -> str:
|
|
|
61
62
|
return PASTE_FILE_HINT_TEMPLATE.format(mapping=mapping)
|
|
62
63
|
|
|
63
64
|
|
|
64
|
-
# Match @ preceded by whitespace, start of line, or -> (ReadTool line number arrow)
|
|
65
|
-
# Supports optional line range suffix: @file.txt#L10-20 or @file.txt#L10.
|
|
66
|
-
_AT_PLAIN_STOP_CHARS = (
|
|
67
|
-
r"\u3000-\u303f"
|
|
68
|
-
r"\uff01-\uff0f"
|
|
69
|
-
r"\uff1a-\uff20"
|
|
70
|
-
r"\uff3b-\uff40"
|
|
71
|
-
r"\uff5b-\uff65"
|
|
72
|
-
)
|
|
73
|
-
AT_FILE_PATTERN = re.compile(rf'(?:(?<!\S)|(?<=\u2192))@("(?P<quoted>[^"]+)"|(?P<plain>[^\s{_AT_PLAIN_STOP_CHARS}]+))')
|
|
74
|
-
|
|
75
|
-
|
|
76
65
|
class AtFileRef:
|
|
77
66
|
"""Parsed @file reference with optional line range."""
|
|
78
67
|
|
|
@@ -438,6 +438,12 @@ class AgentOperationHandler:
|
|
|
438
438
|
# session is the only one that benefits from a suggestion.
|
|
439
439
|
if agent.session.sub_agent_state is not None:
|
|
440
440
|
return
|
|
441
|
+
if agent.follow_up_count() > 0:
|
|
442
|
+
log_debug(
|
|
443
|
+
f"[PromptSuggestion] skip session={session_id} reason=follow-up queue pending",
|
|
444
|
+
debug_type=DebugType.EXECUTION,
|
|
445
|
+
)
|
|
446
|
+
return
|
|
441
447
|
suppress = should_suggest(agent.session)
|
|
442
448
|
if suppress is not None:
|
|
443
449
|
log_debug(
|
|
@@ -561,6 +567,10 @@ class AgentOperationHandler:
|
|
|
561
567
|
session_id=operation.session_id,
|
|
562
568
|
)
|
|
563
569
|
|
|
570
|
+
async def follow_up_agent(self, operation: op.FollowUpAgentOperation) -> None:
|
|
571
|
+
agent = await self.ensure_agent(operation.session_id)
|
|
572
|
+
agent.follow_up(operation.input)
|
|
573
|
+
|
|
564
574
|
async def run_bash(self, operation: op.RunBashOperation) -> None:
|
|
565
575
|
agent = await self.ensure_agent(operation.session_id)
|
|
566
576
|
|
|
@@ -1031,6 +1041,9 @@ class AgentRunner:
|
|
|
1031
1041
|
async def run_agent(self, operation: op.RunAgentOperation) -> None:
|
|
1032
1042
|
await self._operation_handler.run_agent(operation)
|
|
1033
1043
|
|
|
1044
|
+
async def follow_up_agent(self, operation: op.FollowUpAgentOperation) -> None:
|
|
1045
|
+
await self._operation_handler.follow_up_agent(operation)
|
|
1046
|
+
|
|
1034
1047
|
async def continue_agent(self, operation: op.ContinueAgentOperation) -> None:
|
|
1035
1048
|
await self._operation_handler.continue_agent(operation)
|
|
1036
1049
|
|
|
@@ -215,6 +215,9 @@ class OperationDispatcher:
|
|
|
215
215
|
async def handle_run_agent(self, operation: op.RunAgentOperation) -> None:
|
|
216
216
|
await self._agent_runner.run_agent(operation)
|
|
217
217
|
|
|
218
|
+
async def handle_follow_up_agent(self, operation: op.FollowUpAgentOperation) -> None:
|
|
219
|
+
await self._agent_runner.follow_up_agent(operation)
|
|
220
|
+
|
|
218
221
|
async def handle_run_bash(self, operation: op.RunBashOperation) -> None:
|
|
219
222
|
await self._bash_runner.run_bash(operation)
|
|
220
223
|
|
|
@@ -880,6 +880,8 @@ class TaskExecutor:
|
|
|
880
880
|
break
|
|
881
881
|
empty_response_retries = 0
|
|
882
882
|
|
|
883
|
+
file_change_summary = _build_task_file_change_summary(file_change_baseline, session_ctx.file_change_summary)
|
|
884
|
+
|
|
883
885
|
# Finalize metadata
|
|
884
886
|
task_duration_s = time.perf_counter() - self._started_at
|
|
885
887
|
accumulated = metadata_accumulator.finalize(task_duration_s)
|
|
@@ -891,7 +893,6 @@ class TaskExecutor:
|
|
|
891
893
|
)
|
|
892
894
|
session_ctx.append_history([accumulated])
|
|
893
895
|
|
|
894
|
-
file_change_summary = _build_task_file_change_summary(file_change_baseline, session_ctx.file_change_summary)
|
|
895
896
|
if file_change_summary is not None:
|
|
896
897
|
yield events.TaskFileChangeSummaryEvent(summary=file_change_summary, session_id=session_ctx.session_id)
|
|
897
898
|
session_ctx.append_history([file_change_summary])
|
|
@@ -22,6 +22,7 @@ from klaude_code.config.config import ModelPreference
|
|
|
22
22
|
from klaude_code.control.event_bus import EventBus, EventSubscription
|
|
23
23
|
from klaude_code.control.event_relay import EventRelayPublisher, event_relay_socket_path
|
|
24
24
|
from klaude_code.control.session_meta_relay import SessionMetaRelayPublisher, session_meta_relay_socket_path
|
|
25
|
+
from klaude_code.llm.proxy_support import configured_socks_proxy_var, is_missing_socks_proxy_support_error
|
|
25
26
|
from klaude_code.log import DebugType, log, log_debug, set_debug_logging
|
|
26
27
|
from klaude_code.protocol import events, op, user_interaction
|
|
27
28
|
from klaude_code.session.session import Session
|
|
@@ -142,6 +143,16 @@ async def initialize_app_components(
|
|
|
142
143
|
model_override=init_config.model,
|
|
143
144
|
skip_sub_agents=init_config.vanilla,
|
|
144
145
|
)
|
|
146
|
+
except ImportError as exc:
|
|
147
|
+
if is_missing_socks_proxy_support_error(exc):
|
|
148
|
+
proxy_var = configured_socks_proxy_var()
|
|
149
|
+
log(("Error: SOCKS proxy is configured, but SOCKS support is not installed.", "red"))
|
|
150
|
+
if proxy_var is not None:
|
|
151
|
+
log((f"Detected SOCKS proxy from {proxy_var}.", "yellow"))
|
|
152
|
+
log(("Hint: upgrade or reinstall klaude-code so the socksio dependency is installed.", "yellow"))
|
|
153
|
+
log(("Hint: to run without proxy, unset ALL_PROXY/HTTPS_PROXY/HTTP_PROXY.", "yellow"))
|
|
154
|
+
raise typer.Exit(2) from None
|
|
155
|
+
raise
|
|
145
156
|
except ValueError as exc:
|
|
146
157
|
if init_config.model:
|
|
147
158
|
log(
|
|
@@ -113,7 +113,7 @@ provider_list:
|
|
|
113
113
|
context_limit: 400000
|
|
114
114
|
verbosity: low
|
|
115
115
|
thinking:
|
|
116
|
-
reasoning_effort:
|
|
116
|
+
reasoning_effort: medium
|
|
117
117
|
reasoning_summary: detailed
|
|
118
118
|
cost: { input: 5, output: 30, cache_read: 0.5 }
|
|
119
119
|
|
|
@@ -135,7 +135,7 @@ provider_list:
|
|
|
135
135
|
verbosity: low
|
|
136
136
|
fast_mode: true
|
|
137
137
|
thinking:
|
|
138
|
-
reasoning_effort:
|
|
138
|
+
reasoning_effort: medium
|
|
139
139
|
reasoning_summary: detailed
|
|
140
140
|
cost: { input: 10, output: 60, cache_read: 1 }
|
|
141
141
|
|
|
@@ -504,7 +504,7 @@ provider_list:
|
|
|
504
504
|
context_limit: 400000
|
|
505
505
|
verbosity: low
|
|
506
506
|
thinking:
|
|
507
|
-
reasoning_effort:
|
|
507
|
+
reasoning_effort: medium
|
|
508
508
|
reasoning_summary: detailed
|
|
509
509
|
cost: { input: 5, output: 30, cache_read: 0.5 }
|
|
510
510
|
- model_name: gpt-5.5:xhigh
|
|
@@ -567,7 +567,7 @@ provider_list:
|
|
|
567
567
|
context_limit: 400000
|
|
568
568
|
verbosity: low
|
|
569
569
|
thinking:
|
|
570
|
-
reasoning_effort:
|
|
570
|
+
reasoning_effort: medium
|
|
571
571
|
reasoning_summary: detailed
|
|
572
572
|
cost: { input: 5, output: 30, cache_read: 0.5 }
|
|
573
573
|
|
|
@@ -722,7 +722,6 @@ provider_list:
|
|
|
722
722
|
|
|
723
723
|
sub_agent_models:
|
|
724
724
|
finder:
|
|
725
|
-
- deepseek-flash@deepseek
|
|
726
725
|
- gpt-5.4-mini
|
|
727
726
|
- gemini-flash:minimal
|
|
728
727
|
- haiku
|
|
@@ -733,7 +732,6 @@ sub_agent_models:
|
|
|
733
732
|
- opus
|
|
734
733
|
|
|
735
734
|
fast_model:
|
|
736
|
-
- deepseek-flash@deepseek
|
|
737
735
|
- gpt-5.4-nano
|
|
738
736
|
- gemini-flash-lite
|
|
739
737
|
- gpt-5.4-mini
|
|
@@ -175,10 +175,8 @@ NOTIFY_COMPACT_LIMIT = 160 # Maximum length for notification body text
|
|
|
175
175
|
# =============================================================================
|
|
176
176
|
|
|
177
177
|
UI_REFRESH_RATE_FPS = 10 # UI refresh rate (frames per second)
|
|
178
|
-
|
|
179
|
-
MARKDOWN_STREAM_LIVE_REPAINT_ENABLED = True # Enable live area for streaming markdown
|
|
178
|
+
MARKDOWN_STREAM_LIVE_REPAINT_ENABLED = False # Enable live area for streaming markdown
|
|
180
179
|
MARKDOWN_STREAM_SYNCHRONIZED_OUTPUT_ENABLED = True # Use terminal "Synchronized Output" to reduce flicker
|
|
181
|
-
STREAM_MAX_HEIGHT_SHRINK_RESET_LINES = 5 # Reset stream height ceiling after this shrinkage
|
|
182
180
|
MARKDOWN_LEFT_MARGIN = 2 # Left margin (columns) for markdown rendering
|
|
183
181
|
MARKDOWN_RIGHT_MARGIN = 0 # Right margin (columns) for markdown rendering
|
|
184
182
|
|
|
@@ -205,7 +203,7 @@ STATUS_SHIMMER_ENABLED = True # Enable shimmer effect on status text
|
|
|
205
203
|
STATUS_SHIMMER_PADDING = 10 # Horizontal padding for shimmer band position
|
|
206
204
|
STATUS_SHIMMER_BAND_HALF_WIDTH = 5.0 # Half-width of shimmer band in characters
|
|
207
205
|
STATUS_SHIMMER_ALPHA_SCALE = 0.7 # Scale factor for shimmer intensity
|
|
208
|
-
STATUS_SHOW_BUFFER_LENGTH =
|
|
206
|
+
STATUS_SHOW_BUFFER_LENGTH = True # Show character count (e.g., "(213 chars)") during text generation
|
|
209
207
|
|
|
210
208
|
# =============================================================================
|
|
211
209
|
# UI - Completion System
|
|
@@ -507,7 +507,13 @@ def _is_root_operation(operation: op.Operation) -> bool:
|
|
|
507
507
|
|
|
508
508
|
|
|
509
509
|
def _is_control_operation(operation: op.Operation) -> bool:
|
|
510
|
-
return isinstance(
|
|
510
|
+
return isinstance(
|
|
511
|
+
operation,
|
|
512
|
+
op.FollowUpAgentOperation
|
|
513
|
+
| op.InterruptOperation
|
|
514
|
+
| op.UserInteractionRespondOperation
|
|
515
|
+
| op.CloseSessionOperation,
|
|
516
|
+
)
|
|
511
517
|
|
|
512
518
|
|
|
513
519
|
def _root_task_kind(operation: op.Operation) -> str:
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
from collections.abc import Iterator, Mapping
|
|
5
|
+
|
|
6
|
+
SOCKS_PROXY_ENV_VARS = (
|
|
7
|
+
"ALL_PROXY",
|
|
8
|
+
"all_proxy",
|
|
9
|
+
"HTTPS_PROXY",
|
|
10
|
+
"https_proxy",
|
|
11
|
+
"HTTP_PROXY",
|
|
12
|
+
"http_proxy",
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
_SOCKS_PROXY_SCHEMES = ("socks://", "socks4://", "socks4a://", "socks5://", "socks5h://")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def configured_socks_proxy_var(environ: Mapping[str, str] | None = None) -> str | None:
|
|
19
|
+
env = os.environ if environ is None else environ
|
|
20
|
+
for name in SOCKS_PROXY_ENV_VARS:
|
|
21
|
+
value = env.get(name)
|
|
22
|
+
if value and value.strip().lower().startswith(_SOCKS_PROXY_SCHEMES):
|
|
23
|
+
return name
|
|
24
|
+
return None
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def is_missing_socks_proxy_support_error(exc: BaseException) -> bool:
|
|
28
|
+
for current in _iter_exception_chain(exc):
|
|
29
|
+
if not isinstance(current, ImportError):
|
|
30
|
+
continue
|
|
31
|
+
message = str(current).lower()
|
|
32
|
+
if "socks" in message and ("socksio" in message or "python-socks" in message):
|
|
33
|
+
return True
|
|
34
|
+
return False
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _iter_exception_chain(exc: BaseException) -> Iterator[BaseException]:
|
|
38
|
+
current: BaseException | None = exc
|
|
39
|
+
seen: set[int] = set()
|
|
40
|
+
while current is not None and id(current) not in seen:
|
|
41
|
+
seen.add(id(current))
|
|
42
|
+
yield current
|
|
43
|
+
current = current.__cause__ or current.__context__
|
|
@@ -7,11 +7,12 @@ LANGUAGE RULE (mandatory): The suggestion MUST be written in the same language t
|
|
|
7
7
|
|
|
8
8
|
Good suggestions (based on the test "would they think 'I was just about to type that'?"):
|
|
9
9
|
- After tests pass → "commit this" or "run the full suite" (EN) / "提交一个 commit" 或 "跑一下完整的测试套件" (ZH)
|
|
10
|
-
- After
|
|
10
|
+
- After a coherent code change is complete → "summarize what changed" (EN) / "总结一下你改了啥" (ZH)
|
|
11
|
+
- After a bug fix with no test yet → "add a regression test" (EN) / "加个回归测试" (ZH)
|
|
11
12
|
- After you ask to continue → "yes" / "go ahead" (EN) / "好" / "继续" (ZH)
|
|
12
13
|
- Task done, obvious follow-up → "push it" or "submit a PR" (EN) / "推送到远端" 或 "提交一个 PR" (ZH)
|
|
13
|
-
-
|
|
14
|
-
-
|
|
14
|
+
- After the conversation reveals a durable project lesson or pitfall worth preserving → "update AGENTS.md with this lesson" (EN) / "更新 AGENTS.md 记下这个坑" (ZH)
|
|
15
|
+
- After partial implementation with an obvious remaining step → "continue" (EN) / "继续改" (ZH)
|
|
15
16
|
- After research/search, not yet implemented → "apply the changes" or "draft a plan" (EN) / "按这个思路改一下" 或 "帮我写一个计划" (ZH)
|
|
16
17
|
|
|
17
18
|
Never suggest:
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import re
|
|
4
|
+
|
|
5
|
+
# Allow inline @ and / tokens after CJK text so users typing Chinese or
|
|
6
|
+
# Japanese do not need to insert an extra space before the trigger character.
|
|
7
|
+
# Keep English-word boundaries unchanged to avoid matching emails or URLs.
|
|
8
|
+
CJK_INLINE_BOUNDARY_CHARS = (
|
|
9
|
+
r"\u3005-\u3007"
|
|
10
|
+
r"\u303b"
|
|
11
|
+
r"\u3040-\u309f"
|
|
12
|
+
r"\u30a0-\u30ff"
|
|
13
|
+
r"\u31f0-\u31ff"
|
|
14
|
+
r"\u3400-\u4dbf"
|
|
15
|
+
r"\u4e00-\u9fff"
|
|
16
|
+
r"\uf900-\ufaff"
|
|
17
|
+
r"\uff66-\uff9f"
|
|
18
|
+
)
|
|
19
|
+
INLINE_TOKEN_BOUNDARY = rf"(^|[\s{CJK_INLINE_BOUNDARY_CHARS}])"
|
|
20
|
+
|
|
21
|
+
# Characters that terminate an @-path token besides whitespace.
|
|
22
|
+
# Includes CJK punctuation and fullwidth ASCII punctuation so that a path
|
|
23
|
+
# followed by e.g. Chinese "," or "。" is not treated as part of the path.
|
|
24
|
+
# Fullwidth digits/letters and halfwidth katakana are intentionally excluded
|
|
25
|
+
# to keep them usable within paths.
|
|
26
|
+
AT_TOKEN_STOP_CHARS = (
|
|
27
|
+
r"\u3000-\u303f" # CJK symbols and punctuation (、。「」『』《》【】 ...)
|
|
28
|
+
r"\uff01-\uff0f" # fullwidth ASCII punctuation (!"#$%&'()*+,-./)
|
|
29
|
+
r"\uff1a-\uff20" # :;<=>?@
|
|
30
|
+
r"\uff3b-\uff40" # [\]^_`
|
|
31
|
+
r"\uff5b-\uff65" # {|}~。「」、・ ...
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
# Pattern to match @token for completion refresh. Supports both plain tokens
|
|
35
|
+
# like `@src/file.py` and quoted tokens like `@"path with spaces/file.py"`.
|
|
36
|
+
AT_COMPLETION_PATTERN = re.compile(rf'{INLINE_TOKEN_BOUNDARY}@(?P<frag>"[^"]*"|[^\s{AT_TOKEN_STOP_CHARS}]*)$')
|
|
37
|
+
|
|
38
|
+
# Pattern to match inline /skill token for skill completion.
|
|
39
|
+
SKILL_COMPLETION_PATTERN = re.compile(rf"{INLINE_TOKEN_BOUNDARY}(?P<prefix>//|/)(?P<frag>[^\s/]*)$")
|
|
40
|
+
|
|
41
|
+
# Match @ preceded by whitespace, start of line, CJK text, or -> (ReadTool
|
|
42
|
+
# line number arrow). Supports optional line range suffix in consumers:
|
|
43
|
+
# @file.txt#L10-20 or @file.txt#L10.
|
|
44
|
+
AT_FILE_PATTERN = re.compile(
|
|
45
|
+
rf"(?P<boundary>{INLINE_TOKEN_BOUNDARY}|(?<=\u2192))"
|
|
46
|
+
rf'(?P<at_token>@("(?P<quoted>[^"]+)"|(?P<plain>[^\s{AT_TOKEN_STOP_CHARS}]+)))'
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
# Match inline patterns for user-message rendering. Group "token" captures the
|
|
50
|
+
# visual token without the leading boundary. Group "skill_token" captures one of:
|
|
51
|
+
# - /skill:skill-name
|
|
52
|
+
# - //skill:skill-name
|
|
53
|
+
INLINE_RENDER_PATTERN = re.compile(
|
|
54
|
+
rf"(?P<boundary>{INLINE_TOKEN_BOUNDARY})"
|
|
55
|
+
rf'(?P<token>@(?:"[^"]+"|[^\s{AT_TOKEN_STOP_CHARS}]+)'
|
|
56
|
+
rf"|(?P<skill_token>//skill:[^\s/]+(?=\s|$)|/skill:[^\s/]+(?=\s|$)))"
|
|
57
|
+
)
|
|
@@ -50,10 +50,9 @@ def is_claude_model_any(model_name: str | None) -> bool:
|
|
|
50
50
|
def model_supports_eager_input_streaming(model_name: str | None) -> bool:
|
|
51
51
|
"""Check if the model supports the eager_input_streaming tool parameter.
|
|
52
52
|
|
|
53
|
-
Opus 4.6 and Sonnet 4.6 accept this field.
|
|
54
|
-
# TODO: Weird! Opus 4.7 rejects it on Bedrock with 'Extra inputs are not permitted', so we exclude it.
|
|
53
|
+
Opus 4.6, Opus 4.7, and Sonnet 4.6 accept this field.
|
|
55
54
|
"""
|
|
56
|
-
return
|
|
55
|
+
return is_opus_46_model(model_name) or is_sonnet_46_model(model_name) or is_opus_47_model(model_name)
|
|
57
56
|
|
|
58
57
|
|
|
59
58
|
def is_deepseek_model(model_name: str | None) -> bool:
|
|
@@ -26,6 +26,7 @@ class OperationType(Enum):
|
|
|
26
26
|
"""Enumeration of supported operation types."""
|
|
27
27
|
|
|
28
28
|
RUN_AGENT = "run_agent"
|
|
29
|
+
FOLLOW_UP_AGENT = "follow_up_agent"
|
|
29
30
|
RUN_BASH = "run_bash"
|
|
30
31
|
CONTINUE_AGENT = "continue_agent"
|
|
31
32
|
COMPACT_SESSION = "compact_session"
|
|
@@ -68,6 +69,17 @@ class RunAgentOperation(Operation):
|
|
|
68
69
|
await handler.handle_run_agent(self)
|
|
69
70
|
|
|
70
71
|
|
|
72
|
+
class FollowUpAgentOperation(Operation):
|
|
73
|
+
"""Operation for queueing a follow-up message while an agent task is running."""
|
|
74
|
+
|
|
75
|
+
type: OperationType = OperationType.FOLLOW_UP_AGENT
|
|
76
|
+
session_id: str
|
|
77
|
+
input: UserInputPayload
|
|
78
|
+
|
|
79
|
+
async def execute(self, handler: OperationHandler) -> None:
|
|
80
|
+
await handler.handle_follow_up_agent(self)
|
|
81
|
+
|
|
82
|
+
|
|
71
83
|
class RunBashOperation(Operation):
|
|
72
84
|
"""Operation for running a user-entered bash-mode command."""
|
|
73
85
|
|
|
@@ -18,6 +18,7 @@ if TYPE_CHECKING:
|
|
|
18
18
|
CloseSessionOperation,
|
|
19
19
|
CompactSessionOperation,
|
|
20
20
|
ContinueAgentOperation,
|
|
21
|
+
FollowUpAgentOperation,
|
|
21
22
|
ForkAndSwitchSessionOperation,
|
|
22
23
|
GenerateAwaySummaryOperation,
|
|
23
24
|
GetSessionStatsOperation,
|
|
@@ -39,6 +40,10 @@ class OperationHandler(Protocol):
|
|
|
39
40
|
"""Handle a run agent operation."""
|
|
40
41
|
...
|
|
41
42
|
|
|
43
|
+
async def handle_follow_up_agent(self, operation: FollowUpAgentOperation) -> None:
|
|
44
|
+
"""Handle a follow-up agent operation."""
|
|
45
|
+
...
|
|
46
|
+
|
|
42
47
|
async def handle_run_bash(self, operation: RunBashOperation) -> None:
|
|
43
48
|
"""Handle a bash-mode command execution operation."""
|
|
44
49
|
...
|
|
@@ -8,7 +8,7 @@ from typing import Any, cast
|
|
|
8
8
|
|
|
9
9
|
from pydantic import ValidationError
|
|
10
10
|
|
|
11
|
-
from klaude_code.protocol import llm_param
|
|
11
|
+
from klaude_code.protocol import llm_param, message
|
|
12
12
|
from klaude_code.protocol.models import (
|
|
13
13
|
FileChangeSummary,
|
|
14
14
|
FileStatus,
|
|
@@ -37,6 +37,7 @@ class LoadedSessionMeta:
|
|
|
37
37
|
model_config_name: str | None
|
|
38
38
|
model_thinking: llm_param.Thinking | None
|
|
39
39
|
next_checkpoint_id: int
|
|
40
|
+
follow_up_queue: list[message.UserInputPayload]
|
|
40
41
|
|
|
41
42
|
|
|
42
43
|
def read_json_dict(path: Path) -> dict[str, Any] | None:
|
|
@@ -86,6 +87,20 @@ def _parse_todos(raw: object) -> list[TodoItem]:
|
|
|
86
87
|
return todos
|
|
87
88
|
|
|
88
89
|
|
|
90
|
+
def _parse_follow_up_queue(raw: object) -> list[message.UserInputPayload]:
|
|
91
|
+
inputs: list[message.UserInputPayload] = []
|
|
92
|
+
if not isinstance(raw, list):
|
|
93
|
+
return inputs
|
|
94
|
+
for item in cast(list[object], raw):
|
|
95
|
+
if not isinstance(item, dict):
|
|
96
|
+
continue
|
|
97
|
+
try:
|
|
98
|
+
inputs.append(message.UserInputPayload.model_validate(item))
|
|
99
|
+
except ValidationError:
|
|
100
|
+
continue
|
|
101
|
+
return inputs
|
|
102
|
+
|
|
103
|
+
|
|
89
104
|
def parse_session_state(raw: object) -> SessionRuntimeState | None:
|
|
90
105
|
if not isinstance(raw, str):
|
|
91
106
|
return None
|
|
@@ -138,6 +153,7 @@ def parse_session_meta(raw: dict[str, Any], *, work_dir: Path) -> LoadedSessionM
|
|
|
138
153
|
model_config_name=raw.get("model_config_name") if isinstance(raw.get("model_config_name"), str) else None,
|
|
139
154
|
model_thinking=model_thinking,
|
|
140
155
|
next_checkpoint_id=int(raw.get("next_checkpoint_id", 0)),
|
|
156
|
+
follow_up_queue=_parse_follow_up_queue(raw.get("follow_up_queue")),
|
|
141
157
|
)
|
|
142
158
|
|
|
143
159
|
|
|
@@ -42,6 +42,7 @@ class Session(BaseModel):
|
|
|
42
42
|
file_tracker: dict[str, FileStatus] = Field(default_factory=dict)
|
|
43
43
|
file_change_summary: FileChangeSummary = Field(default_factory=FileChangeSummary)
|
|
44
44
|
todos: list[TodoItem] = Field(default_factory=list) # pyright: ignore[reportUnknownVariableType]
|
|
45
|
+
follow_up_queue: list[message.UserInputPayload] = Field(default_factory=list) # pyright: ignore[reportUnknownVariableType]
|
|
45
46
|
model_name: str | None = None
|
|
46
47
|
session_state: SessionRuntimeState | None = None
|
|
47
48
|
runtime_owner: SessionOwner | None = None
|
|
@@ -151,6 +152,7 @@ class Session(BaseModel):
|
|
|
151
152
|
model_config_name=meta.model_config_name,
|
|
152
153
|
model_thinking=meta.model_thinking,
|
|
153
154
|
next_checkpoint_id=meta.next_checkpoint_id,
|
|
155
|
+
follow_up_queue=meta.follow_up_queue,
|
|
154
156
|
)
|
|
155
157
|
|
|
156
158
|
@classmethod
|
|
@@ -229,9 +231,16 @@ class Session(BaseModel):
|
|
|
229
231
|
model_config_name=self.model_config_name,
|
|
230
232
|
model_thinking=self.model_thinking,
|
|
231
233
|
next_checkpoint_id=self.next_checkpoint_id,
|
|
234
|
+
follow_up_queue=self.follow_up_queue,
|
|
232
235
|
)
|
|
233
236
|
self._store.append_and_flush(session_id=self.id, items=items, meta=meta)
|
|
234
237
|
|
|
238
|
+
def set_follow_up_queue(self, items: Sequence[message.UserInputPayload]) -> None:
|
|
239
|
+
self.follow_up_queue = [item.model_copy(deep=True) for item in items]
|
|
240
|
+
payload = [item.model_dump(mode="json", exclude_none=True) for item in self.follow_up_queue]
|
|
241
|
+
if not self._store.update_meta(self.id, {"follow_up_queue": payload or None}) and payload:
|
|
242
|
+
self.ensure_meta_exists()
|
|
243
|
+
|
|
235
244
|
def update_title(self, title: str | None) -> bool:
|
|
236
245
|
normalized = title.strip() if isinstance(title, str) else None
|
|
237
246
|
if normalized == "":
|
|
@@ -263,6 +272,7 @@ class Session(BaseModel):
|
|
|
263
272
|
model_config_name=self.model_config_name,
|
|
264
273
|
model_thinking=self.model_thinking,
|
|
265
274
|
next_checkpoint_id=self.next_checkpoint_id,
|
|
275
|
+
follow_up_queue=self.follow_up_queue,
|
|
266
276
|
)
|
|
267
277
|
self._store.create_meta_if_missing(self.id, meta)
|
|
268
278
|
|
|
@@ -23,7 +23,8 @@ from klaude_code.protocol.models import (
|
|
|
23
23
|
)
|
|
24
24
|
from klaude_code.session.codec import decode_jsonl_line, encode_jsonl_line
|
|
25
25
|
|
|
26
|
-
_RUNTIME_META_KEYS = ("session_state", "runtime_owner", "runtime_owner_heartbeat_at")
|
|
26
|
+
_RUNTIME_META_KEYS = ("session_state", "runtime_owner", "runtime_owner_heartbeat_at", "follow_up_queue")
|
|
27
|
+
_DELETE_WINS_META_KEYS = ("follow_up_queue",)
|
|
27
28
|
|
|
28
29
|
type SessionMetaObserver = Callable[[str, dict[str, Any]], None]
|
|
29
30
|
|
|
@@ -134,6 +135,8 @@ class JsonlSessionWriter:
|
|
|
134
135
|
for key in _RUNTIME_META_KEYS:
|
|
135
136
|
if key in current_meta:
|
|
136
137
|
meta[key] = current_meta[key]
|
|
138
|
+
elif key in _DELETE_WINS_META_KEYS:
|
|
139
|
+
meta.pop(key, None)
|
|
137
140
|
meta = {k: v for k, v in meta.items() if v is not None}
|
|
138
141
|
|
|
139
142
|
tmp_path.write_text(json.dumps(meta, ensure_ascii=False, indent=2), encoding="utf-8")
|
|
@@ -282,7 +285,9 @@ def build_meta_snapshot(
|
|
|
282
285
|
model_config_name: str | None,
|
|
283
286
|
model_thinking: llm_param.Thinking | None,
|
|
284
287
|
next_checkpoint_id: int = 0,
|
|
288
|
+
follow_up_queue: Sequence[message.UserInputPayload] = (),
|
|
285
289
|
) -> dict[str, Any]:
|
|
290
|
+
follow_up_queue_payload = [item.model_dump(mode="json", exclude_none=True) for item in follow_up_queue]
|
|
286
291
|
snapshot: dict[str, Any] = {
|
|
287
292
|
"id": session_id,
|
|
288
293
|
"work_dir": str(work_dir),
|
|
@@ -306,5 +311,6 @@ def build_meta_snapshot(
|
|
|
306
311
|
if model_thinking
|
|
307
312
|
else None,
|
|
308
313
|
"next_checkpoint_id": next_checkpoint_id,
|
|
314
|
+
"follow_up_queue": follow_up_queue_payload or None,
|
|
309
315
|
}
|
|
310
316
|
return {k: v for k, v in snapshot.items() if v is not None}
|