shotgun-sh 0.4.0.dev2__tar.gz → 0.4.0.dev4__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.
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/PKG-INFO +1 -1
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/pyproject.toml +1 -1
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/agent_manager.py +13 -4
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/config/README.md +0 -1
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/config/models.py +0 -4
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/router/models.py +4 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/router/tools/plan_tools.py +5 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat/chat_screen.py +39 -23
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat_screen/command_providers.py +0 -10
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat_screen/history/chat_history.py +30 -0
- shotgun_sh-0.4.0.dev2/src/shotgun/tui/screens/onboarding.py +0 -584
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/.gitignore +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/LICENSE +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/README.md +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/hatch_build.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/common.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/config/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/config/constants.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/config/manager.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/config/provider.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/config/streaming_test.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/context_analyzer/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/context_analyzer/analyzer.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/context_analyzer/constants.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/context_analyzer/formatter.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/context_analyzer/models.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/filters.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/history/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/history/chunking.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/history/compaction.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/history/constants.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/history/context_extraction.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/history/file_content_deduplication.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/history/history_building.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/history/history_processors.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/history/message_utils.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/history/token_counting/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/history/token_counting/anthropic.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/history/token_counting/base.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/history/token_counting/openai.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/history/token_counting/sentencepiece_counter.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/history/token_counting/tokenizer_cache.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/history/token_counting/utils.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/history/token_estimation.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/manager.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/conversation/models.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/error/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/error/models.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/export.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/llm.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/messages.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/models.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/plan.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/research.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/router/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/router/router.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/router/tools/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/router/tools/delegation_tools.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/runner.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/specify.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/tasks.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/tools/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/tools/codebase/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/tools/codebase/codebase_shell.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/tools/codebase/directory_lister.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/tools/codebase/file_read.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/tools/codebase/models.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/tools/codebase/query_graph.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/tools/codebase/retrieve_code.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/tools/file_management.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/tools/registry.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/tools/web_search/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/tools/web_search/anthropic.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/tools/web_search/gemini.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/tools/web_search/openai.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/tools/web_search/utils.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/usage_manager.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/api_endpoints.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/build_constants.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/clear.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/codebase/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/codebase/commands.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/codebase/models.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/compact.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/config.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/context.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/error_handler.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/export.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/feedback.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/models.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/plan.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/research.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/spec/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/spec/backup.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/spec/commands.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/spec/models.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/spec/pull_service.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/specify.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/tasks.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/update.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/cli/utils.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/codebase/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/codebase/core/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/codebase/core/change_detector.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/codebase/core/code_retrieval.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/codebase/core/cypher_models.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/codebase/core/ingestor.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/codebase/core/language_config.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/codebase/core/manager.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/codebase/core/nl_query.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/codebase/core/parser_loader.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/codebase/models.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/codebase/service.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/exceptions.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/llm_proxy/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/llm_proxy/client.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/llm_proxy/clients.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/llm_proxy/constants.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/llm_proxy/models.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/logging_config.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/main.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/posthog_telemetry.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/agents/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/agents/export.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/agents/partials/codebase_understanding.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/agents/partials/common_agent_system_prompt.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/agents/partials/content_formatting.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/agents/partials/interactive_mode.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/agents/partials/router_delegation_mode.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/agents/plan.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/agents/research.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/agents/router.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/agents/specify.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/agents/state/codebase/codebase_graphs_available.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/agents/state/system_state.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/agents/tasks.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/codebase/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/codebase/cypher_query_patterns.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/codebase/cypher_system.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/codebase/enhanced_query_context.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/codebase/partials/cypher_rules.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/codebase/partials/graph_schema.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/codebase/partials/temporal_context.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/history/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/history/chunk_summarization.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/history/combine_summaries.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/history/incremental_summarization.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/history/summarization.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/loader.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/prompts/tools/web_search.j2 +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/py.typed +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/sdk/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/sdk/codebase.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/sdk/exceptions.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/sdk/models.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/sdk/services.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/sentry_telemetry.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/settings.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/shotgun_web/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/shotgun_web/client.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/shotgun_web/constants.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/shotgun_web/exceptions.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/shotgun_web/models.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/shotgun_web/shared_specs/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/shotgun_web/shared_specs/file_scanner.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/shotgun_web/shared_specs/hasher.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/shotgun_web/shared_specs/models.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/shotgun_web/shared_specs/upload_pipeline.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/shotgun_web/shared_specs/utils.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/shotgun_web/specs_client.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/shotgun_web/supabase_client.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/telemetry.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/app.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/commands/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/components/context_indicator.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/components/mode_indicator.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/components/prompt_input.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/components/spinner.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/components/splash.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/components/status_bar.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/components/vertical_tail.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/containers.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/dependencies.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/filtered_codebase_service.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/layout.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/protocols.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat/chat.tcss +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat/codebase_index_prompt_screen.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat/codebase_index_selection.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat/help_text.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat/prompt_history.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat.tcss +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat_screen/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat_screen/hint_message.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat_screen/history/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat_screen/history/agent_response.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat_screen/history/formatters.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat_screen/history/partial_response.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat_screen/history/user_question.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/chat_screen/messages.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/confirmation_dialog.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/directory_setup.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/feedback.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/github_issue.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/model_picker.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/pipx_migration.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/provider_config.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/shared_specs/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/shared_specs/create_spec_dialog.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/shared_specs/models.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/shared_specs/share_specs_dialog.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/shared_specs/upload_progress_screen.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/shotgun_auth.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/spec_pull.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/splash.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/screens/welcome.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/services/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/services/conversation_service.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/state/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/state/processing_state.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/styles.tcss +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/utils/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/utils/mode_progress.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/widgets/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/widgets/approval_widget.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/widgets/cascade_confirmation_widget.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/widgets/plan_panel.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/widgets/step_checkpoint_widget.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/tui/widgets/widget_coordinator.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/utils/__init__.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/utils/datetime_utils.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/utils/env_utils.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/utils/file_system_utils.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/utils/marketing.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/utils/source_detection.py +0 -0
- {shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/utils/update_checker.py +0 -0
|
@@ -78,7 +78,7 @@ from .models import AgentDeps, AgentRuntimeOptions
|
|
|
78
78
|
from .plan import create_plan_agent
|
|
79
79
|
from .research import create_research_agent
|
|
80
80
|
from .router import create_router_agent
|
|
81
|
-
from .router.models import RouterDeps
|
|
81
|
+
from .router.models import RouterDeps, RouterMode
|
|
82
82
|
from .specify import create_specify_agent
|
|
83
83
|
from .tasks import create_tasks_agent
|
|
84
84
|
|
|
@@ -918,6 +918,8 @@ class AgentManager(Widget):
|
|
|
918
918
|
self.ui_message_history.append(
|
|
919
919
|
HintMessage(message=f"💡 {agent_response.clarifying_questions[0]}")
|
|
920
920
|
)
|
|
921
|
+
# Add plan hint for router if plan exists (single question is non-blocking)
|
|
922
|
+
self._maybe_add_plan_hint(deps)
|
|
921
923
|
else:
|
|
922
924
|
# Multiple questions (2+) - enter Q&A mode
|
|
923
925
|
self._qa_questions = agent_response.clarifying_questions
|
|
@@ -947,9 +949,8 @@ class AgentManager(Widget):
|
|
|
947
949
|
response_text=agent_response.response,
|
|
948
950
|
)
|
|
949
951
|
)
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
self._maybe_add_plan_hint(deps)
|
|
952
|
+
# NOTE: Don't add plan hint here - defer until Q&A completes
|
|
953
|
+
# The plan hint will be added after the user answers all questions
|
|
953
954
|
|
|
954
955
|
# Post UI update with hint messages (file operations will be posted after compaction)
|
|
955
956
|
logger.debug("Posting UI update for Q&A mode with hint messages")
|
|
@@ -1384,6 +1385,14 @@ class AgentManager(Widget):
|
|
|
1384
1385
|
return
|
|
1385
1386
|
|
|
1386
1387
|
plan_display = deps.current_plan.format_for_display()
|
|
1388
|
+
|
|
1389
|
+
# In drafting mode, if plan is not complete, prompt user to continue
|
|
1390
|
+
if (
|
|
1391
|
+
deps.router_mode == RouterMode.DRAFTING
|
|
1392
|
+
and not deps.current_plan.is_complete()
|
|
1393
|
+
):
|
|
1394
|
+
plan_display += "\n\n**Shall I continue?**"
|
|
1395
|
+
|
|
1387
1396
|
logger.debug("Adding plan hint to UI history")
|
|
1388
1397
|
self.ui_message_history.append(
|
|
1389
1398
|
HintMessage(message=f"**Current Plan**\n\n{plan_display}")
|
|
@@ -41,7 +41,6 @@ This directory contains the configuration management system for Shotgun, includi
|
|
|
41
41
|
- **Title**: "feat: add config migration for streaming capability field (v4->v5)"
|
|
42
42
|
- **Key Changes**:
|
|
43
43
|
- Added `supports_streaming` field to OpenAI config
|
|
44
|
-
- Added `shown_onboarding_popup` timestamp field
|
|
45
44
|
- Added `supabase_jwt` to Shotgun Account config
|
|
46
45
|
|
|
47
46
|
## Migration System
|
|
@@ -273,10 +273,6 @@ class ShotgunConfig(BaseModel):
|
|
|
273
273
|
default=False,
|
|
274
274
|
description="Whether the welcome screen has been shown to the user",
|
|
275
275
|
)
|
|
276
|
-
shown_onboarding_popup: datetime | None = Field(
|
|
277
|
-
default=None,
|
|
278
|
-
description="Timestamp when the onboarding popup was shown to the user (ISO8601 format)",
|
|
279
|
-
)
|
|
280
276
|
marketing: MarketingConfig = Field(
|
|
281
277
|
default_factory=MarketingConfig,
|
|
282
278
|
description="Marketing messages configuration and tracking",
|
|
@@ -358,6 +358,10 @@ class RouterDeps(AgentDeps):
|
|
|
358
358
|
# Set by create_plan tool when plan.needs_approval() returns True
|
|
359
359
|
# Excluded from serialization as it's transient UI state
|
|
360
360
|
pending_approval: PendingApproval | None = Field(default=None, exclude=True)
|
|
361
|
+
# Completion state for Drafting mode
|
|
362
|
+
# Set by mark_step_done when plan completes in drafting mode
|
|
363
|
+
# Excluded from serialization as it's transient UI state
|
|
364
|
+
pending_completion: bool = Field(default=False, exclude=True)
|
|
361
365
|
# Event stream handler for forwarding sub-agent streaming events to UI
|
|
362
366
|
# This is set by the AgentManager when running the router with streaming
|
|
363
367
|
# Excluded from serialization as it's a callable
|
{shotgun_sh-0.4.0.dev2 → shotgun_sh-0.4.0.dev4}/src/shotgun/agents/router/tools/plan_tools.py
RENAMED
|
@@ -167,6 +167,11 @@ async def mark_step_done(
|
|
|
167
167
|
if plan.is_complete():
|
|
168
168
|
ctx.deps.is_executing = False
|
|
169
169
|
logger.debug("Plan complete, is_executing=False")
|
|
170
|
+
# Set pending completion for Drafting mode
|
|
171
|
+
# The TUI will detect this and show the completion message
|
|
172
|
+
if ctx.deps.router_mode == RouterMode.DRAFTING:
|
|
173
|
+
ctx.deps.pending_completion = True
|
|
174
|
+
logger.debug("Set pending_completion=True for drafting mode")
|
|
170
175
|
# Set pending checkpoint for Planning mode
|
|
171
176
|
# The TUI will detect this and show the StepCheckpointWidget
|
|
172
177
|
elif ctx.deps.router_mode == RouterMode.PLANNING:
|
|
@@ -112,7 +112,6 @@ from shotgun.tui.screens.chat_screen.messages import (
|
|
|
112
112
|
SubAgentStarted,
|
|
113
113
|
)
|
|
114
114
|
from shotgun.tui.screens.confirmation_dialog import ConfirmationDialog
|
|
115
|
-
from shotgun.tui.screens.onboarding import OnboardingModal
|
|
116
115
|
from shotgun.tui.screens.shared_specs import (
|
|
117
116
|
CreateSpecDialog,
|
|
118
117
|
ShareSpecsAction,
|
|
@@ -289,9 +288,6 @@ class ChatScreen(Screen[None]):
|
|
|
289
288
|
# Initial update of context indicator
|
|
290
289
|
self.update_context_indicator()
|
|
291
290
|
|
|
292
|
-
# Show onboarding popup if not shown before
|
|
293
|
-
self.call_later(self._check_and_show_onboarding)
|
|
294
|
-
|
|
295
291
|
async def on_key(self, event: events.Key) -> None:
|
|
296
292
|
"""Handle key presses for cancellation."""
|
|
297
293
|
# If escape is pressed during Q&A mode, exit Q&A
|
|
@@ -575,10 +571,6 @@ class ChatScreen(Screen[None]):
|
|
|
575
571
|
HintMessage(message="⚠️ No context analysis available")
|
|
576
572
|
)
|
|
577
573
|
|
|
578
|
-
def action_view_onboarding(self) -> None:
|
|
579
|
-
"""Show the onboarding modal."""
|
|
580
|
-
self.app.push_screen(OnboardingModal())
|
|
581
|
-
|
|
582
574
|
@work
|
|
583
575
|
async def action_compact_conversation(self) -> None:
|
|
584
576
|
"""Compact the conversation history to reduce size."""
|
|
@@ -988,6 +980,10 @@ class ChatScreen(Screen[None]):
|
|
|
988
980
|
self, event: MessageHistoryUpdated
|
|
989
981
|
) -> None:
|
|
990
982
|
"""Handle message history updates from the agent manager."""
|
|
983
|
+
logger.debug(
|
|
984
|
+
"[MSG_HISTORY] MessageHistoryUpdated received - %d messages",
|
|
985
|
+
len(event.messages),
|
|
986
|
+
)
|
|
991
987
|
self._clear_partial_response()
|
|
992
988
|
self.messages = event.messages
|
|
993
989
|
|
|
@@ -1623,6 +1619,9 @@ class ChatScreen(Screen[None]):
|
|
|
1623
1619
|
# Check for pending checkpoint (Planning mode step completion)
|
|
1624
1620
|
self._check_pending_checkpoint()
|
|
1625
1621
|
|
|
1622
|
+
# Check for plan completion (Drafting mode)
|
|
1623
|
+
self._check_plan_completion()
|
|
1624
|
+
|
|
1626
1625
|
# Save conversation after each interaction
|
|
1627
1626
|
self._save_conversation()
|
|
1628
1627
|
|
|
@@ -1689,21 +1688,6 @@ class ChatScreen(Screen[None]):
|
|
|
1689
1688
|
|
|
1690
1689
|
self.run_worker(_do_load(), exclusive=False)
|
|
1691
1690
|
|
|
1692
|
-
@work
|
|
1693
|
-
async def _check_and_show_onboarding(self) -> None:
|
|
1694
|
-
"""Check if onboarding should be shown and display modal if needed."""
|
|
1695
|
-
config_manager = get_config_manager()
|
|
1696
|
-
config = await config_manager.load()
|
|
1697
|
-
|
|
1698
|
-
# Only show onboarding if it hasn't been shown before
|
|
1699
|
-
if config.shown_onboarding_popup is None:
|
|
1700
|
-
# Show the onboarding modal
|
|
1701
|
-
await self.app.push_screen_wait(OnboardingModal())
|
|
1702
|
-
|
|
1703
|
-
# Mark as shown in config with current timestamp
|
|
1704
|
-
config.shown_onboarding_popup = datetime.now(timezone.utc)
|
|
1705
|
-
await config_manager.save(config)
|
|
1706
|
-
|
|
1707
1691
|
# =========================================================================
|
|
1708
1692
|
# Step Checkpoint Handlers (Planning Mode)
|
|
1709
1693
|
# =========================================================================
|
|
@@ -1826,6 +1810,31 @@ class ChatScreen(Screen[None]):
|
|
|
1826
1810
|
)
|
|
1827
1811
|
)
|
|
1828
1812
|
|
|
1813
|
+
def _check_plan_completion(self) -> None:
|
|
1814
|
+
"""Check if a plan was completed in Drafting mode and show completion message.
|
|
1815
|
+
|
|
1816
|
+
This is called after each agent run to check if mark_step_done
|
|
1817
|
+
set pending_completion in Drafting mode.
|
|
1818
|
+
"""
|
|
1819
|
+
logger.debug("[PLAN] _check_plan_completion called")
|
|
1820
|
+
if not isinstance(self.deps, RouterDeps):
|
|
1821
|
+
logger.debug("[PLAN] Not RouterDeps, skipping plan completion check")
|
|
1822
|
+
return
|
|
1823
|
+
|
|
1824
|
+
if not self.deps.pending_completion:
|
|
1825
|
+
logger.debug("[PLAN] No pending completion")
|
|
1826
|
+
return
|
|
1827
|
+
|
|
1828
|
+
# Clear the pending state
|
|
1829
|
+
self.deps.pending_completion = False
|
|
1830
|
+
|
|
1831
|
+
# Show completion message
|
|
1832
|
+
logger.debug("[PLAN] Showing plan completion message for drafting mode")
|
|
1833
|
+
self.mount_hint("✅ All plan steps completed!")
|
|
1834
|
+
|
|
1835
|
+
# Hide the plan panel since the plan is done
|
|
1836
|
+
self._hide_plan_panel()
|
|
1837
|
+
|
|
1829
1838
|
# =========================================================================
|
|
1830
1839
|
# Sub-Agent Lifecycle Handlers (Stage 8)
|
|
1831
1840
|
# =========================================================================
|
|
@@ -2086,6 +2095,13 @@ class ChatScreen(Screen[None]):
|
|
|
2086
2095
|
logger.debug("[PLAN] Not RouterDeps, skipping pending approval check")
|
|
2087
2096
|
return
|
|
2088
2097
|
|
|
2098
|
+
# Don't show plan approval while user is answering questions.
|
|
2099
|
+
# The pending approval will remain set and be checked again
|
|
2100
|
+
# after Q&A completes (when run_agent is called with answers).
|
|
2101
|
+
if self.qa_mode:
|
|
2102
|
+
logger.debug("[PLAN] Q&A mode active, deferring plan approval")
|
|
2103
|
+
return
|
|
2104
|
+
|
|
2089
2105
|
if self.deps.pending_approval is None:
|
|
2090
2106
|
logger.debug("[PLAN] No pending approval")
|
|
2091
2107
|
return
|
|
@@ -288,11 +288,6 @@ class UnifiedCommandProvider(Provider):
|
|
|
288
288
|
self.chat_screen.action_show_usage,
|
|
289
289
|
help="Display usage information for the current session",
|
|
290
290
|
)
|
|
291
|
-
yield DiscoveryHit(
|
|
292
|
-
"View Onboarding",
|
|
293
|
-
self.chat_screen.action_view_onboarding,
|
|
294
|
-
help="View the onboarding tutorial and helpful resources",
|
|
295
|
-
)
|
|
296
291
|
|
|
297
292
|
async def search(self, query: str) -> AsyncGenerator[Hit, None]:
|
|
298
293
|
"""Search for commands in alphabetical order."""
|
|
@@ -345,11 +340,6 @@ class UnifiedCommandProvider(Provider):
|
|
|
345
340
|
self.chat_screen.action_show_usage,
|
|
346
341
|
"Display usage information for the current session",
|
|
347
342
|
),
|
|
348
|
-
(
|
|
349
|
-
"View Onboarding",
|
|
350
|
-
self.chat_screen.action_view_onboarding,
|
|
351
|
-
"View the onboarding tutorial and helpful resources",
|
|
352
|
-
),
|
|
353
343
|
]
|
|
354
344
|
|
|
355
345
|
for title, callback, help_text in commands:
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"""Chat history widget - main container for message display."""
|
|
2
2
|
|
|
3
|
+
import logging
|
|
3
4
|
from collections.abc import Generator, Sequence
|
|
4
5
|
|
|
5
6
|
from pydantic_ai.messages import (
|
|
@@ -21,6 +22,8 @@ from .agent_response import AgentResponseWidget
|
|
|
21
22
|
from .partial_response import PartialResponseWidget
|
|
22
23
|
from .user_question import UserQuestionWidget
|
|
23
24
|
|
|
25
|
+
logger = logging.getLogger(__name__)
|
|
26
|
+
|
|
24
27
|
|
|
25
28
|
class ChatHistory(Widget):
|
|
26
29
|
"""Main widget for displaying chat message history."""
|
|
@@ -89,23 +92,44 @@ class ChatHistory(Widget):
|
|
|
89
92
|
def update_messages(self, messages: list[ModelMessage | HintMessage]) -> None:
|
|
90
93
|
"""Update the displayed messages using incremental mounting."""
|
|
91
94
|
if not self.vertical_tail:
|
|
95
|
+
logger.debug(
|
|
96
|
+
"[CHAT_HISTORY] update_messages called but vertical_tail is None"
|
|
97
|
+
)
|
|
92
98
|
return
|
|
93
99
|
|
|
94
100
|
self.items = messages
|
|
95
101
|
filtered = list(self.filtered_items())
|
|
96
102
|
|
|
103
|
+
logger.debug(
|
|
104
|
+
"[CHAT_HISTORY] update_messages - total=%d, filtered=%d, rendered=%d",
|
|
105
|
+
len(messages),
|
|
106
|
+
len(filtered),
|
|
107
|
+
self._rendered_count,
|
|
108
|
+
)
|
|
109
|
+
|
|
97
110
|
# Only mount new messages that haven't been rendered yet
|
|
98
111
|
if len(filtered) > self._rendered_count:
|
|
99
112
|
new_messages = filtered[self._rendered_count :]
|
|
113
|
+
logger.debug(
|
|
114
|
+
"[CHAT_HISTORY] Mounting %d new messages",
|
|
115
|
+
len(new_messages),
|
|
116
|
+
)
|
|
100
117
|
for item in new_messages:
|
|
101
118
|
widget: Widget
|
|
102
119
|
if isinstance(item, ModelRequest):
|
|
103
120
|
widget = UserQuestionWidget(item)
|
|
121
|
+
logger.debug("[CHAT_HISTORY] Mounting UserQuestionWidget")
|
|
104
122
|
elif isinstance(item, HintMessage):
|
|
105
123
|
widget = HintMessageWidget(item)
|
|
124
|
+
logger.debug("[CHAT_HISTORY] Mounting HintMessageWidget")
|
|
106
125
|
elif isinstance(item, ModelResponse):
|
|
107
126
|
widget = AgentResponseWidget(item)
|
|
127
|
+
logger.debug("[CHAT_HISTORY] Mounting AgentResponseWidget")
|
|
108
128
|
else:
|
|
129
|
+
logger.debug(
|
|
130
|
+
"[CHAT_HISTORY] Skipping unknown message type: %s",
|
|
131
|
+
type(item).__name__,
|
|
132
|
+
)
|
|
109
133
|
continue
|
|
110
134
|
|
|
111
135
|
# Mount before the PartialResponseWidget
|
|
@@ -115,6 +139,12 @@ class ChatHistory(Widget):
|
|
|
115
139
|
|
|
116
140
|
# Scroll to bottom to show newly added messages
|
|
117
141
|
self.vertical_tail.scroll_end(animate=False)
|
|
142
|
+
else:
|
|
143
|
+
logger.debug(
|
|
144
|
+
"[CHAT_HISTORY] No new messages to mount (filtered=%d, rendered=%d)",
|
|
145
|
+
len(filtered),
|
|
146
|
+
self._rendered_count,
|
|
147
|
+
)
|
|
118
148
|
|
|
119
149
|
def on_click(self, event: events.Click) -> None:
|
|
120
150
|
"""Focus the prompt input when clicking on the history area."""
|