shotgun-sh 0.4.7.dev2__tar.gz → 0.4.7.dev3__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.7.dev2 → shotgun_sh-0.4.7.dev3}/PKG-INFO +2 -2
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/pyproject.toml +2 -2
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/codebase/core/change_detector.py +6 -2
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/codebase/core/ingestor.py +10 -3
- shotgun_sh-0.4.7.dev3/src/shotgun/codebase/core/kuzu_compat.py +98 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/codebase/core/manager.py +17 -4
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat/chat_screen.py +8 -0
- shotgun_sh-0.4.7.dev3/src/shotgun/tui/screens/kuzu_error_dialog.py +124 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/.gitignore +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/LICENSE +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/README.md +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/hatch_build.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/agent_manager.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/common.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/config/README.md +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/config/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/config/constants.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/config/manager.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/config/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/config/provider.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/config/streaming_test.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/context_analyzer/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/context_analyzer/analyzer.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/context_analyzer/constants.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/context_analyzer/formatter.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/context_analyzer/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/filters.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/chunking.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/compaction.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/constants.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/context_extraction.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/file_content_deduplication.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/history_building.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/history_processors.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/message_utils.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/token_counting/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/token_counting/anthropic.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/token_counting/base.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/token_counting/openai.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/token_counting/sentencepiece_counter.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/token_counting/tokenizer_cache.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/token_counting/utils.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/token_estimation.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/manager.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/error/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/error/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/export.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/llm.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/messages.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/plan.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/research.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/router/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/router/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/router/router.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/router/tools/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/router/tools/delegation_tools.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/router/tools/plan_tools.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/runner.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/specify.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tasks.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/codebase/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/codebase/codebase_shell.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/codebase/directory_lister.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/codebase/file_read.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/codebase/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/codebase/query_graph.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/codebase/retrieve_code.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/file_management.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/registry.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/web_search/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/web_search/anthropic.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/web_search/gemini.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/web_search/openai.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/web_search/utils.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/usage_manager.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/api_endpoints.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/build_constants.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/clear.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/codebase/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/codebase/commands.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/codebase/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/compact.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/config.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/context.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/error_handler.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/export.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/feedback.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/plan.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/research.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/spec/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/spec/backup.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/spec/commands.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/spec/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/spec/pull_service.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/specify.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/tasks.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/update.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/cli/utils.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/codebase/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/codebase/core/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/codebase/core/code_retrieval.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/codebase/core/cypher_models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/codebase/core/language_config.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/codebase/core/nl_query.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/codebase/core/parser_loader.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/codebase/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/codebase/service.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/exceptions.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/llm_proxy/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/llm_proxy/client.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/llm_proxy/clients.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/llm_proxy/constants.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/llm_proxy/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/logging_config.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/main.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/posthog_telemetry.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/agents/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/agents/export.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/agents/partials/codebase_understanding.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/agents/partials/common_agent_system_prompt.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/agents/partials/content_formatting.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/agents/partials/interactive_mode.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/agents/partials/router_delegation_mode.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/agents/plan.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/agents/research.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/agents/router.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/agents/specify.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/agents/state/codebase/codebase_graphs_available.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/agents/state/system_state.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/agents/tasks.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/codebase/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/codebase/cypher_query_patterns.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/codebase/cypher_system.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/codebase/enhanced_query_context.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/codebase/partials/cypher_rules.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/codebase/partials/graph_schema.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/codebase/partials/temporal_context.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/history/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/history/chunk_summarization.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/history/combine_summaries.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/history/incremental_summarization.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/history/summarization.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/loader.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/prompts/tools/web_search.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/py.typed +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/sdk/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/sdk/codebase.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/sdk/exceptions.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/sdk/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/sdk/services.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/sentry_telemetry.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/settings.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/shotgun_web/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/shotgun_web/client.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/shotgun_web/constants.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/shotgun_web/exceptions.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/shotgun_web/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/shotgun_web/shared_specs/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/shotgun_web/shared_specs/file_scanner.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/shotgun_web/shared_specs/hasher.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/shotgun_web/shared_specs/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/shotgun_web/shared_specs/upload_pipeline.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/shotgun_web/shared_specs/utils.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/shotgun_web/specs_client.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/shotgun_web/supabase_client.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/telemetry.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/app.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/commands/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/components/context_indicator.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/components/mode_indicator.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/components/prompt_input.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/components/spinner.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/components/splash.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/components/status_bar.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/components/vertical_tail.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/containers.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/dependencies.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/filtered_codebase_service.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/layout.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/protocols.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat/chat.tcss +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat/codebase_index_prompt_screen.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat/codebase_index_selection.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat/help_text.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat/prompt_history.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat.tcss +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat_screen/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat_screen/command_providers.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat_screen/hint_message.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat_screen/history/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat_screen/history/agent_response.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat_screen/history/chat_history.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat_screen/history/formatters.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat_screen/history/partial_response.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat_screen/history/user_question.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/chat_screen/messages.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/confirmation_dialog.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/directory_setup.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/feedback.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/github_issue.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/model_picker.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/pipx_migration.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/provider_config.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/shared_specs/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/shared_specs/create_spec_dialog.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/shared_specs/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/shared_specs/share_specs_dialog.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/shared_specs/upload_progress_screen.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/shotgun_auth.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/spec_pull.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/splash.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/screens/welcome.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/services/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/services/conversation_service.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/state/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/state/processing_state.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/styles.tcss +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/utils/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/utils/mode_progress.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/widgets/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/widgets/approval_widget.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/widgets/cascade_confirmation_widget.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/widgets/plan_panel.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/widgets/step_checkpoint_widget.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/tui/widgets/widget_coordinator.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/utils/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/utils/datetime_utils.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/utils/env_utils.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/utils/file_system_utils.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/utils/marketing.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/utils/source_detection.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/utils/update_checker.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: shotgun-sh
|
|
3
|
-
Version: 0.4.7.
|
|
3
|
+
Version: 0.4.7.dev3
|
|
4
4
|
Summary: AI-powered research, planning, and task management CLI tool
|
|
5
5
|
Project-URL: Homepage, https://shotgun.sh/
|
|
6
6
|
Project-URL: Repository, https://github.com/shotgun-sh/shotgun
|
|
@@ -34,7 +34,7 @@ Requires-Dist: posthog>=3.0.0
|
|
|
34
34
|
Requires-Dist: pydantic-ai>=1.26.0
|
|
35
35
|
Requires-Dist: pydantic-settings>=2.0.0
|
|
36
36
|
Requires-Dist: pyperclip>=1.10.0
|
|
37
|
-
Requires-Dist: real-ladybug==0.
|
|
37
|
+
Requires-Dist: real-ladybug==0.14.0
|
|
38
38
|
Requires-Dist: rich>=13.0.0
|
|
39
39
|
Requires-Dist: sentencepiece>=0.2.0
|
|
40
40
|
Requires-Dist: sentry-sdk[pure-eval]>=2.0.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "shotgun-sh"
|
|
3
|
-
version = "0.4.7.
|
|
3
|
+
version = "0.4.7.dev3"
|
|
4
4
|
description = "AI-powered research, planning, and task management CLI tool"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { text = "MIT" }
|
|
@@ -34,7 +34,7 @@ dependencies = [
|
|
|
34
34
|
"textual>=6.1.0",
|
|
35
35
|
"textual-dev>=1.7.0",
|
|
36
36
|
"textual-serve>=0.1.0",
|
|
37
|
-
"real_ladybug==0.
|
|
37
|
+
"real_ladybug==0.14.0",
|
|
38
38
|
"tree-sitter>=0.21.0",
|
|
39
39
|
"tree-sitter-python>=0.23.0",
|
|
40
40
|
"tree-sitter-javascript>=0.23.0",
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/codebase/core/change_detector.py
RENAMED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
"""Change detection for incremental graph updates."""
|
|
2
2
|
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
3
5
|
import hashlib
|
|
4
6
|
import os
|
|
5
7
|
from enum import Enum
|
|
6
8
|
from pathlib import Path
|
|
7
|
-
from typing import Any, cast
|
|
9
|
+
from typing import TYPE_CHECKING, Any, cast
|
|
8
10
|
|
|
9
11
|
import aiofiles
|
|
10
|
-
import real_ladybug as kuzu
|
|
11
12
|
|
|
12
13
|
from shotgun.logging_config import get_logger
|
|
13
14
|
|
|
15
|
+
if TYPE_CHECKING:
|
|
16
|
+
import real_ladybug as kuzu
|
|
17
|
+
|
|
14
18
|
logger = get_logger(__name__)
|
|
15
19
|
|
|
16
20
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"""Kuzu graph ingestor for building code knowledge graphs."""
|
|
2
2
|
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
3
5
|
import asyncio
|
|
4
6
|
import hashlib
|
|
5
7
|
import os
|
|
@@ -8,12 +10,16 @@ import uuid
|
|
|
8
10
|
from collections import defaultdict
|
|
9
11
|
from collections.abc import Callable
|
|
10
12
|
from pathlib import Path
|
|
11
|
-
from typing import Any
|
|
13
|
+
from typing import TYPE_CHECKING, Any
|
|
12
14
|
|
|
13
15
|
import aiofiles
|
|
14
|
-
import real_ladybug as kuzu
|
|
15
16
|
from tree_sitter import Node, Parser, QueryCursor
|
|
16
17
|
|
|
18
|
+
from shotgun.codebase.core.kuzu_compat import get_kuzu
|
|
19
|
+
|
|
20
|
+
if TYPE_CHECKING:
|
|
21
|
+
import real_ladybug as kuzu
|
|
22
|
+
|
|
17
23
|
from shotgun.codebase.core.language_config import LANGUAGE_CONFIGS, get_language_config
|
|
18
24
|
from shotgun.codebase.core.parser_loader import load_parsers
|
|
19
25
|
from shotgun.logging_config import get_logger
|
|
@@ -1760,7 +1766,8 @@ class CodebaseIngestor:
|
|
|
1760
1766
|
self.project_name = repo_path_obj.name
|
|
1761
1767
|
|
|
1762
1768
|
try:
|
|
1763
|
-
# Create database
|
|
1769
|
+
# Create database (lazy import kuzu for Windows compatibility)
|
|
1770
|
+
kuzu = get_kuzu()
|
|
1764
1771
|
logger.info(f"Creating Kuzu database at: {self.db_path}")
|
|
1765
1772
|
db = kuzu.Database(str(self.db_path))
|
|
1766
1773
|
conn = kuzu.Connection(db)
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"""Lazy import wrapper for kuzu (real_ladybug) with Windows compatibility handling."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
_kuzu_module: Any = None
|
|
9
|
+
_import_error: ImportError | None = None
|
|
10
|
+
|
|
11
|
+
# Windows VC++ download URL
|
|
12
|
+
_VC_REDIST_URL = "https://aka.ms/vs/17/release/vc_redist.x64.exe"
|
|
13
|
+
|
|
14
|
+
# Windows VC++ installation instructions
|
|
15
|
+
_WINDOWS_INSTALL_INSTRUCTIONS = f"""
|
|
16
|
+
To fix this, install the Visual C++ Redistributable:
|
|
17
|
+
|
|
18
|
+
1. Download from: {_VC_REDIST_URL}
|
|
19
|
+
2. Run the installer and follow the prompts
|
|
20
|
+
3. Restart your terminal and try again
|
|
21
|
+
|
|
22
|
+
Or run this PowerShell command (as Administrator):
|
|
23
|
+
Invoke-WebRequest -Uri "{_VC_REDIST_URL}" -OutFile "$env:TEMP\\vc_redist.x64.exe"
|
|
24
|
+
Start-Process -FilePath "$env:TEMP\\vc_redist.x64.exe" -ArgumentList "/install", "/quiet", "/norestart" -Wait
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def copy_vcpp_instructions_to_clipboard() -> bool:
|
|
29
|
+
"""Copy the VC++ Redistributable download URL to clipboard.
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
True if successful, False otherwise
|
|
33
|
+
"""
|
|
34
|
+
try:
|
|
35
|
+
import pyperclip # type: ignore[import-untyped]
|
|
36
|
+
|
|
37
|
+
pyperclip.copy(_VC_REDIST_URL)
|
|
38
|
+
return True
|
|
39
|
+
except Exception:
|
|
40
|
+
return False
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class KuzuImportError(ImportError):
|
|
44
|
+
"""Raised when kuzu cannot be imported, typically on Windows due to DLL issues."""
|
|
45
|
+
|
|
46
|
+
def __init__(self, original_error: ImportError) -> None:
|
|
47
|
+
self.original_error = original_error
|
|
48
|
+
if sys.platform == "win32":
|
|
49
|
+
message = (
|
|
50
|
+
"Failed to load the graph database library (real_ladybug).\n\n"
|
|
51
|
+
"This error typically occurs on Windows when the Visual C++ "
|
|
52
|
+
"Redistributable is not installed.\n"
|
|
53
|
+
f"{_WINDOWS_INSTALL_INSTRUCTIONS}\n"
|
|
54
|
+
f"Original error: {original_error}"
|
|
55
|
+
)
|
|
56
|
+
else:
|
|
57
|
+
message = f"Failed to import real_ladybug: {original_error}"
|
|
58
|
+
super().__init__(message)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def get_kuzu() -> Any:
|
|
62
|
+
"""Get the kuzu module, importing it lazily on first use.
|
|
63
|
+
|
|
64
|
+
Raises:
|
|
65
|
+
KuzuImportError: If kuzu cannot be imported (e.g., Windows DLL issues)
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
The real_ladybug module
|
|
69
|
+
"""
|
|
70
|
+
global _kuzu_module, _import_error
|
|
71
|
+
|
|
72
|
+
if _kuzu_module is not None:
|
|
73
|
+
return _kuzu_module
|
|
74
|
+
|
|
75
|
+
if _import_error is not None:
|
|
76
|
+
raise KuzuImportError(_import_error)
|
|
77
|
+
|
|
78
|
+
try:
|
|
79
|
+
import real_ladybug
|
|
80
|
+
|
|
81
|
+
_kuzu_module = real_ladybug
|
|
82
|
+
return _kuzu_module
|
|
83
|
+
except ImportError as e:
|
|
84
|
+
_import_error = e
|
|
85
|
+
raise KuzuImportError(e) from e
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def is_kuzu_available() -> bool:
|
|
89
|
+
"""Check if kuzu is available without raising an error.
|
|
90
|
+
|
|
91
|
+
Returns:
|
|
92
|
+
True if kuzu can be imported, False otherwise
|
|
93
|
+
"""
|
|
94
|
+
try:
|
|
95
|
+
get_kuzu()
|
|
96
|
+
return True
|
|
97
|
+
except KuzuImportError:
|
|
98
|
+
return False
|
|
@@ -9,13 +9,17 @@ import time
|
|
|
9
9
|
import uuid
|
|
10
10
|
from collections.abc import Awaitable, Callable
|
|
11
11
|
from pathlib import Path
|
|
12
|
-
from typing import Any, ClassVar
|
|
12
|
+
from typing import TYPE_CHECKING, Any, ClassVar
|
|
13
13
|
|
|
14
14
|
import anyio
|
|
15
|
-
import real_ladybug as kuzu
|
|
16
15
|
from watchdog.events import FileSystemEvent, FileSystemEventHandler
|
|
17
16
|
from watchdog.observers import Observer
|
|
18
17
|
|
|
18
|
+
from shotgun.codebase.core.kuzu_compat import get_kuzu
|
|
19
|
+
|
|
20
|
+
if TYPE_CHECKING:
|
|
21
|
+
import real_ladybug as kuzu
|
|
22
|
+
|
|
19
23
|
from shotgun.codebase.models import (
|
|
20
24
|
CodebaseGraph,
|
|
21
25
|
FileChange,
|
|
@@ -265,7 +269,8 @@ class CodebaseGraphManager:
|
|
|
265
269
|
"""
|
|
266
270
|
graph_path = self.storage_dir / f"{graph_id}.kuzu"
|
|
267
271
|
|
|
268
|
-
# Create database and connection
|
|
272
|
+
# Create database and connection (lazy import for Windows compatibility)
|
|
273
|
+
kuzu = get_kuzu()
|
|
269
274
|
lock = await self._get_lock()
|
|
270
275
|
async with lock:
|
|
271
276
|
db = kuzu.Database(str(graph_path))
|
|
@@ -412,7 +417,8 @@ class CodebaseGraphManager:
|
|
|
412
417
|
# Run build in thread pool
|
|
413
418
|
await anyio.to_thread.run_sync(ingestor.build_graph_from_directory, repo_path)
|
|
414
419
|
|
|
415
|
-
# Get statistics
|
|
420
|
+
# Get statistics (lazy import for Windows compatibility)
|
|
421
|
+
kuzu = get_kuzu()
|
|
416
422
|
lock = await self._get_lock()
|
|
417
423
|
async with lock:
|
|
418
424
|
db = kuzu.Database(str(graph_path))
|
|
@@ -554,6 +560,8 @@ class CodebaseGraphManager:
|
|
|
554
560
|
"relationships_removed": 0,
|
|
555
561
|
}
|
|
556
562
|
|
|
563
|
+
# Lazy import for Windows compatibility
|
|
564
|
+
kuzu = get_kuzu()
|
|
557
565
|
lock = await self._get_lock()
|
|
558
566
|
async with lock:
|
|
559
567
|
if graph_id not in self._connections:
|
|
@@ -622,6 +630,8 @@ class CodebaseGraphManager:
|
|
|
622
630
|
languages = build_options.get("languages")
|
|
623
631
|
exclude_patterns = build_options.get("exclude_patterns")
|
|
624
632
|
|
|
633
|
+
# Lazy import for Windows compatibility
|
|
634
|
+
kuzu = get_kuzu()
|
|
625
635
|
lock = await self._get_lock()
|
|
626
636
|
async with lock:
|
|
627
637
|
if graph_id not in self._connections:
|
|
@@ -1044,6 +1054,8 @@ class CodebaseGraphManager:
|
|
|
1044
1054
|
self, graph_id: str, query: str, parameters: dict[str, Any] | None = None
|
|
1045
1055
|
) -> list[dict[str, Any]]:
|
|
1046
1056
|
"""Internal query execution with connection management."""
|
|
1057
|
+
# Lazy import for Windows compatibility
|
|
1058
|
+
kuzu = get_kuzu()
|
|
1047
1059
|
lock = await self._get_lock()
|
|
1048
1060
|
async with lock:
|
|
1049
1061
|
if graph_id not in self._connections:
|
|
@@ -1264,6 +1276,7 @@ class CodebaseGraphManager:
|
|
|
1264
1276
|
|
|
1265
1277
|
# Try to open the database
|
|
1266
1278
|
def _open_and_query(g: str = gid, p: Path = db_path) -> bool:
|
|
1279
|
+
kuzu = get_kuzu()
|
|
1267
1280
|
db = kuzu.Database(str(p))
|
|
1268
1281
|
conn = kuzu.Connection(db)
|
|
1269
1282
|
try:
|
|
@@ -58,6 +58,7 @@ from shotgun.agents.router.models import (
|
|
|
58
58
|
RouterMode,
|
|
59
59
|
)
|
|
60
60
|
from shotgun.agents.runner import AgentRunner
|
|
61
|
+
from shotgun.codebase.core.kuzu_compat import KuzuImportError
|
|
61
62
|
from shotgun.codebase.core.manager import (
|
|
62
63
|
CodebaseAlreadyIndexedError,
|
|
63
64
|
CodebaseGraphManager,
|
|
@@ -111,6 +112,7 @@ from shotgun.tui.screens.chat_screen.messages import (
|
|
|
111
112
|
SubAgentStarted,
|
|
112
113
|
)
|
|
113
114
|
from shotgun.tui.screens.confirmation_dialog import ConfirmationDialog
|
|
115
|
+
from shotgun.tui.screens.kuzu_error_dialog import KuzuErrorDialog
|
|
114
116
|
from shotgun.tui.screens.shared_specs import (
|
|
115
117
|
CreateSpecDialog,
|
|
116
118
|
ShareSpecsAction,
|
|
@@ -1517,6 +1519,12 @@ class ChatScreen(Screen[None]):
|
|
|
1517
1519
|
logger.error(f"Invalid path error: {exc}")
|
|
1518
1520
|
self.agent_manager.add_hint_message(HintMessage(message=f"❌ {exc}"))
|
|
1519
1521
|
return
|
|
1522
|
+
except KuzuImportError as exc:
|
|
1523
|
+
progress_timer.stop()
|
|
1524
|
+
logger.error(f"Kuzu import error (Windows DLL issue): {exc}")
|
|
1525
|
+
# Show dialog with copy button for Windows users
|
|
1526
|
+
await self.app.push_screen_wait(KuzuErrorDialog())
|
|
1527
|
+
return
|
|
1520
1528
|
|
|
1521
1529
|
except Exception as exc: # pragma: no cover - defensive UI path
|
|
1522
1530
|
# Check if this is a kuzu corruption error and we have retries left
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"""Error dialog for Windows kuzu/graph database import failures."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from textual.app import ComposeResult
|
|
6
|
+
from textual.containers import Container, Horizontal
|
|
7
|
+
from textual.screen import ModalScreen
|
|
8
|
+
from textual.widgets import Button, Label, Static
|
|
9
|
+
|
|
10
|
+
from shotgun.codebase.core.kuzu_compat import (
|
|
11
|
+
_VC_REDIST_URL,
|
|
12
|
+
_WINDOWS_INSTALL_INSTRUCTIONS,
|
|
13
|
+
copy_vcpp_instructions_to_clipboard,
|
|
14
|
+
)
|
|
15
|
+
from shotgun.logging_config import get_logger
|
|
16
|
+
|
|
17
|
+
logger = get_logger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class KuzuErrorDialog(ModalScreen[bool]):
|
|
21
|
+
"""Error dialog for Windows kuzu import failures with copy button."""
|
|
22
|
+
|
|
23
|
+
DEFAULT_CSS = """
|
|
24
|
+
KuzuErrorDialog {
|
|
25
|
+
align: center middle;
|
|
26
|
+
background: rgba(0, 0, 0, 0.5);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
KuzuErrorDialog > #dialog-container {
|
|
30
|
+
width: 80%;
|
|
31
|
+
max-width: 90;
|
|
32
|
+
height: auto;
|
|
33
|
+
max-height: 90%;
|
|
34
|
+
border: wide $error;
|
|
35
|
+
padding: 1 2;
|
|
36
|
+
layout: vertical;
|
|
37
|
+
background: $surface;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
#error-title {
|
|
41
|
+
text-style: bold;
|
|
42
|
+
color: $error;
|
|
43
|
+
padding-bottom: 1;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
#error-message {
|
|
47
|
+
padding: 1 0;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
#instructions {
|
|
51
|
+
padding: 1 0;
|
|
52
|
+
color: $text-muted;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
#url-display {
|
|
56
|
+
padding: 1;
|
|
57
|
+
background: $surface-darken-1;
|
|
58
|
+
border: round $primary;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
#status-label {
|
|
62
|
+
color: $success;
|
|
63
|
+
padding: 1 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
#dialog-buttons {
|
|
67
|
+
layout: horizontal;
|
|
68
|
+
align-horizontal: right;
|
|
69
|
+
height: auto;
|
|
70
|
+
padding-top: 1;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
#dialog-buttons Button {
|
|
74
|
+
margin-left: 1;
|
|
75
|
+
}
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
BINDINGS = [
|
|
79
|
+
("escape", "close", "Close"),
|
|
80
|
+
]
|
|
81
|
+
|
|
82
|
+
def compose(self) -> ComposeResult:
|
|
83
|
+
with Container(id="dialog-container"):
|
|
84
|
+
yield Label("⚠ Graph Database Import Failed", id="error-title")
|
|
85
|
+
yield Static(
|
|
86
|
+
"The graph database library failed to load. "
|
|
87
|
+
"This typically occurs on Windows when the Visual C++ "
|
|
88
|
+
"Redistributable is not installed.\n\n"
|
|
89
|
+
"Install instructions:",
|
|
90
|
+
id="error-message",
|
|
91
|
+
)
|
|
92
|
+
yield Static(_WINDOWS_INSTALL_INSTRUCTIONS.strip(), id="instructions")
|
|
93
|
+
yield Static(f"Download URL: {_VC_REDIST_URL}", id="url-display")
|
|
94
|
+
yield Static("", id="status-label")
|
|
95
|
+
with Horizontal(id="dialog-buttons"):
|
|
96
|
+
yield Button("Copy Download URL", id="copy-btn", variant="primary")
|
|
97
|
+
yield Button("Close", id="close-btn")
|
|
98
|
+
|
|
99
|
+
def on_button_pressed(self, event: Button.Pressed) -> None:
|
|
100
|
+
"""Handle button presses."""
|
|
101
|
+
event.stop()
|
|
102
|
+
|
|
103
|
+
if event.button.id == "copy-btn":
|
|
104
|
+
self._copy_url()
|
|
105
|
+
elif event.button.id == "close-btn":
|
|
106
|
+
self.dismiss(True)
|
|
107
|
+
|
|
108
|
+
def _copy_url(self) -> None:
|
|
109
|
+
"""Copy the VC++ download URL to clipboard."""
|
|
110
|
+
status_label = self.query_one("#status-label", Static)
|
|
111
|
+
|
|
112
|
+
if copy_vcpp_instructions_to_clipboard():
|
|
113
|
+
status_label.update("✓ Copied URL to clipboard!")
|
|
114
|
+
self.query_one("#copy-btn", Button).label = "Copied!"
|
|
115
|
+
logger.debug(f"Copied VC++ URL to clipboard: {_VC_REDIST_URL}")
|
|
116
|
+
else:
|
|
117
|
+
status_label.update(
|
|
118
|
+
f"⚠ Could not copy. Please manually copy: {_VC_REDIST_URL}"
|
|
119
|
+
)
|
|
120
|
+
logger.warning("Failed to copy VC++ URL to clipboard")
|
|
121
|
+
|
|
122
|
+
def action_close(self) -> None:
|
|
123
|
+
"""Close the dialog."""
|
|
124
|
+
self.dismiss(True)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/context_analyzer/__init__.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/context_analyzer/analyzer.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/context_analyzer/constants.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/context_analyzer/formatter.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/context_analyzer/models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/__init__.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/chunking.py
RENAMED
|
File without changes
|
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/conversation/history/constants.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/router/tools/delegation_tools.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/router/tools/plan_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/codebase/__init__.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/codebase/codebase_shell.py
RENAMED
|
File without changes
|
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/codebase/file_read.py
RENAMED
|
File without changes
|
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/codebase/query_graph.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/codebase/retrieve_code.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/web_search/__init__.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/web_search/anthropic.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/web_search/gemini.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/web_search/openai.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev3}/src/shotgun/agents/tools/web_search/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|