shotgun-sh 0.4.7.dev2__tar.gz → 0.4.7.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.7.dev2 → shotgun_sh-0.4.7.dev4}/PKG-INFO +13 -2
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/README.md +11 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/pyproject.toml +2 -2
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/codebase/core/change_detector.py +6 -2
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/codebase/core/ingestor.py +10 -3
- shotgun_sh-0.4.7.dev4/src/shotgun/codebase/core/kuzu_compat.py +119 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/codebase/core/manager.py +17 -4
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat/chat_screen.py +8 -0
- shotgun_sh-0.4.7.dev4/src/shotgun/tui/screens/kuzu_error_dialog.py +135 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/.gitignore +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/LICENSE +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/hatch_build.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/agent_manager.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/common.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/config/README.md +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/config/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/config/constants.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/config/manager.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/config/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/config/provider.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/config/streaming_test.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/context_analyzer/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/context_analyzer/analyzer.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/context_analyzer/constants.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/context_analyzer/formatter.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/context_analyzer/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/filters.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/history/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/history/chunking.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/history/compaction.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/history/constants.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/history/context_extraction.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/history/file_content_deduplication.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/history/history_building.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/history/history_processors.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/history/message_utils.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/history/token_counting/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/history/token_counting/anthropic.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/history/token_counting/base.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/history/token_counting/openai.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/history/token_counting/sentencepiece_counter.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/history/token_counting/tokenizer_cache.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/history/token_counting/utils.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/history/token_estimation.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/manager.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/conversation/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/error/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/error/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/export.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/llm.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/messages.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/plan.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/research.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/router/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/router/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/router/router.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/router/tools/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/router/tools/delegation_tools.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/router/tools/plan_tools.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/runner.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/specify.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/tasks.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/tools/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/tools/codebase/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/tools/codebase/codebase_shell.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/tools/codebase/directory_lister.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/tools/codebase/file_read.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/tools/codebase/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/tools/codebase/query_graph.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/tools/codebase/retrieve_code.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/tools/file_management.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/tools/registry.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/tools/web_search/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/tools/web_search/anthropic.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/tools/web_search/gemini.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/tools/web_search/openai.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/tools/web_search/utils.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/usage_manager.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/api_endpoints.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/build_constants.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/clear.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/codebase/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/codebase/commands.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/codebase/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/compact.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/config.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/context.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/error_handler.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/export.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/feedback.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/plan.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/research.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/spec/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/spec/backup.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/spec/commands.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/spec/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/spec/pull_service.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/specify.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/tasks.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/update.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/cli/utils.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/codebase/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/codebase/core/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/codebase/core/code_retrieval.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/codebase/core/cypher_models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/codebase/core/language_config.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/codebase/core/nl_query.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/codebase/core/parser_loader.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/codebase/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/codebase/service.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/exceptions.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/llm_proxy/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/llm_proxy/client.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/llm_proxy/clients.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/llm_proxy/constants.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/llm_proxy/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/logging_config.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/main.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/posthog_telemetry.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/agents/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/agents/export.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/agents/partials/codebase_understanding.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/agents/partials/common_agent_system_prompt.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/agents/partials/content_formatting.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/agents/partials/interactive_mode.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/agents/partials/router_delegation_mode.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/agents/plan.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/agents/research.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/agents/router.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/agents/specify.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/agents/state/codebase/codebase_graphs_available.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/agents/state/system_state.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/agents/tasks.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/codebase/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/codebase/cypher_query_patterns.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/codebase/cypher_system.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/codebase/enhanced_query_context.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/codebase/partials/cypher_rules.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/codebase/partials/graph_schema.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/codebase/partials/temporal_context.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/history/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/history/chunk_summarization.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/history/combine_summaries.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/history/incremental_summarization.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/history/summarization.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/loader.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/prompts/tools/web_search.j2 +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/py.typed +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/sdk/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/sdk/codebase.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/sdk/exceptions.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/sdk/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/sdk/services.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/sentry_telemetry.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/settings.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/shotgun_web/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/shotgun_web/client.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/shotgun_web/constants.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/shotgun_web/exceptions.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/shotgun_web/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/shotgun_web/shared_specs/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/shotgun_web/shared_specs/file_scanner.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/shotgun_web/shared_specs/hasher.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/shotgun_web/shared_specs/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/shotgun_web/shared_specs/upload_pipeline.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/shotgun_web/shared_specs/utils.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/shotgun_web/specs_client.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/shotgun_web/supabase_client.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/telemetry.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/app.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/commands/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/components/context_indicator.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/components/mode_indicator.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/components/prompt_input.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/components/spinner.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/components/splash.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/components/status_bar.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/components/vertical_tail.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/containers.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/dependencies.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/filtered_codebase_service.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/layout.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/protocols.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat/chat.tcss +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat/codebase_index_prompt_screen.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat/codebase_index_selection.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat/help_text.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat/prompt_history.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat.tcss +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat_screen/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat_screen/command_providers.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat_screen/hint_message.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat_screen/history/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat_screen/history/agent_response.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat_screen/history/chat_history.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat_screen/history/formatters.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat_screen/history/partial_response.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat_screen/history/user_question.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/chat_screen/messages.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/confirmation_dialog.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/directory_setup.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/feedback.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/github_issue.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/model_picker.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/pipx_migration.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/provider_config.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/shared_specs/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/shared_specs/create_spec_dialog.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/shared_specs/models.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/shared_specs/share_specs_dialog.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/shared_specs/upload_progress_screen.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/shotgun_auth.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/spec_pull.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/splash.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/screens/welcome.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/services/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/services/conversation_service.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/state/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/state/processing_state.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/styles.tcss +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/utils/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/utils/mode_progress.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/widgets/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/widgets/approval_widget.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/widgets/cascade_confirmation_widget.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/widgets/plan_panel.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/widgets/step_checkpoint_widget.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/tui/widgets/widget_coordinator.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/utils/__init__.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/utils/datetime_utils.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/utils/env_utils.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/utils/file_system_utils.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/utils/marketing.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/utils/source_detection.py +0 -0
- {shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/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.dev4
|
|
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
|
|
@@ -165,6 +165,17 @@ uv tool install --python 3.12 shotgun-sh
|
|
|
165
165
|
|
|
166
166
|
**Important:** Run in **PowerShell**, not Command Prompt or VS Developer shells.
|
|
167
167
|
|
|
168
|
+
#### Optional: Enable Code Indexing
|
|
169
|
+
|
|
170
|
+
Code indexing requires the Visual C++ Redistributable. Run this in PowerShell (as Administrator):
|
|
171
|
+
|
|
172
|
+
```powershell
|
|
173
|
+
# Download and install Visual C++ Redistributable
|
|
174
|
+
Import-Module BitsTransfer
|
|
175
|
+
Start-BitsTransfer -Source "https://aka.ms/vs/17/release/vc_redist.x64.exe" -Destination "$env:TEMP\vc_redist.x64.exe"
|
|
176
|
+
Start-Process -FilePath "$env:TEMP\vc_redist.x64.exe" -ArgumentList "/install", "/quiet", "/norestart" -Wait
|
|
177
|
+
```
|
|
178
|
+
|
|
168
179
|
</details>
|
|
169
180
|
|
|
170
181
|
_💡 Restart your terminal after installation_
|
|
@@ -110,6 +110,17 @@ uv tool install --python 3.12 shotgun-sh
|
|
|
110
110
|
|
|
111
111
|
**Important:** Run in **PowerShell**, not Command Prompt or VS Developer shells.
|
|
112
112
|
|
|
113
|
+
#### Optional: Enable Code Indexing
|
|
114
|
+
|
|
115
|
+
Code indexing requires the Visual C++ Redistributable. Run this in PowerShell (as Administrator):
|
|
116
|
+
|
|
117
|
+
```powershell
|
|
118
|
+
# Download and install Visual C++ Redistributable
|
|
119
|
+
Import-Module BitsTransfer
|
|
120
|
+
Start-BitsTransfer -Source "https://aka.ms/vs/17/release/vc_redist.x64.exe" -Destination "$env:TEMP\vc_redist.x64.exe"
|
|
121
|
+
Start-Process -FilePath "$env:TEMP\vc_redist.x64.exe" -ArgumentList "/install", "/quiet", "/norestart" -Wait
|
|
122
|
+
```
|
|
123
|
+
|
|
113
124
|
</details>
|
|
114
125
|
|
|
115
126
|
_💡 Restart your terminal after installation_
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "shotgun-sh"
|
|
3
|
-
version = "0.4.7.
|
|
3
|
+
version = "0.4.7.dev4"
|
|
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.dev4}/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,119 @@
|
|
|
1
|
+
"""Lazy import wrapper for kuzu (real_ladybug) with Windows compatibility handling."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
import webbrowser
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
_kuzu_module: Any = None
|
|
10
|
+
_import_error: ImportError | None = None
|
|
11
|
+
|
|
12
|
+
# Windows VC++ download URL
|
|
13
|
+
_VC_REDIST_URL = "https://aka.ms/vs/17/release/vc_redist.x64.exe"
|
|
14
|
+
|
|
15
|
+
# PowerShell installation script for VC++ Redistributable
|
|
16
|
+
_VC_INSTALL_SCRIPT = f"""\
|
|
17
|
+
# Download and install Visual C++ Redistributable (run as Administrator)
|
|
18
|
+
Import-Module BitsTransfer
|
|
19
|
+
Start-BitsTransfer -Source "{_VC_REDIST_URL}" -Destination "$env:TEMP\\vc_redist.x64.exe"
|
|
20
|
+
Start-Process -FilePath "$env:TEMP\\vc_redist.x64.exe" -ArgumentList "/install", "/quiet", "/norestart" -Wait\
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
# Windows VC++ installation instructions
|
|
24
|
+
_WINDOWS_INSTALL_INSTRUCTIONS = f"""
|
|
25
|
+
To fix this, install the Visual C++ Redistributable.
|
|
26
|
+
|
|
27
|
+
Option 1: Run this PowerShell script (as Administrator):
|
|
28
|
+
|
|
29
|
+
{_VC_INSTALL_SCRIPT}
|
|
30
|
+
|
|
31
|
+
Option 2: Download manually from:
|
|
32
|
+
{_VC_REDIST_URL}
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def copy_vcpp_script_to_clipboard() -> bool:
|
|
37
|
+
"""Copy the VC++ installation PowerShell script to clipboard.
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
True if successful, False otherwise
|
|
41
|
+
"""
|
|
42
|
+
try:
|
|
43
|
+
import pyperclip # type: ignore[import-untyped]
|
|
44
|
+
|
|
45
|
+
pyperclip.copy(_VC_INSTALL_SCRIPT)
|
|
46
|
+
return True
|
|
47
|
+
except Exception:
|
|
48
|
+
return False
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def open_vcpp_download_page() -> bool:
|
|
52
|
+
"""Open the VC++ Redistributable download page in the default browser.
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
True if successful, False otherwise
|
|
56
|
+
"""
|
|
57
|
+
try:
|
|
58
|
+
webbrowser.open(_VC_REDIST_URL)
|
|
59
|
+
return True
|
|
60
|
+
except Exception:
|
|
61
|
+
return False
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class KuzuImportError(ImportError):
|
|
65
|
+
"""Raised when kuzu cannot be imported, typically on Windows due to DLL issues."""
|
|
66
|
+
|
|
67
|
+
def __init__(self, original_error: ImportError) -> None:
|
|
68
|
+
self.original_error = original_error
|
|
69
|
+
if sys.platform == "win32":
|
|
70
|
+
message = (
|
|
71
|
+
"Failed to load the graph database library (real_ladybug).\n\n"
|
|
72
|
+
"This error typically occurs on Windows when the Visual C++ "
|
|
73
|
+
"Redistributable is not installed.\n"
|
|
74
|
+
f"{_WINDOWS_INSTALL_INSTRUCTIONS}\n"
|
|
75
|
+
f"Original error: {original_error}"
|
|
76
|
+
)
|
|
77
|
+
else:
|
|
78
|
+
message = f"Failed to import real_ladybug: {original_error}"
|
|
79
|
+
super().__init__(message)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def get_kuzu() -> Any:
|
|
83
|
+
"""Get the kuzu module, importing it lazily on first use.
|
|
84
|
+
|
|
85
|
+
Raises:
|
|
86
|
+
KuzuImportError: If kuzu cannot be imported (e.g., Windows DLL issues)
|
|
87
|
+
|
|
88
|
+
Returns:
|
|
89
|
+
The real_ladybug module
|
|
90
|
+
"""
|
|
91
|
+
global _kuzu_module, _import_error
|
|
92
|
+
|
|
93
|
+
if _kuzu_module is not None:
|
|
94
|
+
return _kuzu_module
|
|
95
|
+
|
|
96
|
+
if _import_error is not None:
|
|
97
|
+
raise KuzuImportError(_import_error)
|
|
98
|
+
|
|
99
|
+
try:
|
|
100
|
+
import real_ladybug
|
|
101
|
+
|
|
102
|
+
_kuzu_module = real_ladybug
|
|
103
|
+
return _kuzu_module
|
|
104
|
+
except ImportError as e:
|
|
105
|
+
_import_error = e
|
|
106
|
+
raise KuzuImportError(e) from e
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def is_kuzu_available() -> bool:
|
|
110
|
+
"""Check if kuzu is available without raising an error.
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
True if kuzu can be imported, False otherwise
|
|
114
|
+
"""
|
|
115
|
+
try:
|
|
116
|
+
get_kuzu()
|
|
117
|
+
return True
|
|
118
|
+
except KuzuImportError:
|
|
119
|
+
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,135 @@
|
|
|
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_INSTALL_SCRIPT,
|
|
12
|
+
_VC_REDIST_URL,
|
|
13
|
+
copy_vcpp_script_to_clipboard,
|
|
14
|
+
open_vcpp_download_page,
|
|
15
|
+
)
|
|
16
|
+
from shotgun.logging_config import get_logger
|
|
17
|
+
|
|
18
|
+
logger = get_logger(__name__)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class KuzuErrorDialog(ModalScreen[bool]):
|
|
22
|
+
"""Error dialog for Windows kuzu import failures with copy/open buttons."""
|
|
23
|
+
|
|
24
|
+
DEFAULT_CSS = """
|
|
25
|
+
KuzuErrorDialog {
|
|
26
|
+
align: center middle;
|
|
27
|
+
background: rgba(0, 0, 0, 0.5);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
KuzuErrorDialog > #dialog-container {
|
|
31
|
+
width: 90%;
|
|
32
|
+
max-width: 100;
|
|
33
|
+
height: auto;
|
|
34
|
+
max-height: 90%;
|
|
35
|
+
border: wide $error;
|
|
36
|
+
padding: 1 2;
|
|
37
|
+
layout: vertical;
|
|
38
|
+
background: $surface;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
#error-title {
|
|
42
|
+
text-style: bold;
|
|
43
|
+
color: $error;
|
|
44
|
+
padding-bottom: 1;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
#error-message {
|
|
48
|
+
padding: 1 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
#script-display {
|
|
52
|
+
padding: 1;
|
|
53
|
+
margin: 1 0;
|
|
54
|
+
background: $surface-darken-1;
|
|
55
|
+
border: round $primary;
|
|
56
|
+
overflow-x: auto;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
#status-label {
|
|
60
|
+
color: $success;
|
|
61
|
+
padding: 1 0;
|
|
62
|
+
min-height: 1;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
#dialog-buttons {
|
|
66
|
+
layout: horizontal;
|
|
67
|
+
align-horizontal: center;
|
|
68
|
+
height: auto;
|
|
69
|
+
padding-top: 1;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
#dialog-buttons Button {
|
|
73
|
+
margin: 0 1;
|
|
74
|
+
}
|
|
75
|
+
"""
|
|
76
|
+
|
|
77
|
+
BINDINGS = [
|
|
78
|
+
("escape", "close", "Close"),
|
|
79
|
+
]
|
|
80
|
+
|
|
81
|
+
def compose(self) -> ComposeResult:
|
|
82
|
+
with Container(id="dialog-container"):
|
|
83
|
+
yield Label("Code Indexing Requires Visual C++", id="error-title")
|
|
84
|
+
yield Static(
|
|
85
|
+
"The graph database library requires the Visual C++ Redistributable "
|
|
86
|
+
"to be installed on Windows.\n\n"
|
|
87
|
+
"Run this PowerShell script as Administrator:",
|
|
88
|
+
id="error-message",
|
|
89
|
+
)
|
|
90
|
+
yield Static(_VC_INSTALL_SCRIPT, id="script-display")
|
|
91
|
+
yield Static("", id="status-label")
|
|
92
|
+
with Horizontal(id="dialog-buttons"):
|
|
93
|
+
yield Button(
|
|
94
|
+
"Copy Script to Clipboard", id="copy-btn", variant="primary"
|
|
95
|
+
)
|
|
96
|
+
yield Button("Open Download Page", id="open-btn", variant="default")
|
|
97
|
+
yield Button("Close", id="close-btn", variant="default")
|
|
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_script()
|
|
105
|
+
elif event.button.id == "open-btn":
|
|
106
|
+
self._open_download()
|
|
107
|
+
elif event.button.id == "close-btn":
|
|
108
|
+
self.dismiss(True)
|
|
109
|
+
|
|
110
|
+
def _copy_script(self) -> None:
|
|
111
|
+
"""Copy the PowerShell installation script to clipboard."""
|
|
112
|
+
status_label = self.query_one("#status-label", Static)
|
|
113
|
+
|
|
114
|
+
if copy_vcpp_script_to_clipboard():
|
|
115
|
+
status_label.update("Copied script to clipboard!")
|
|
116
|
+
self.query_one("#copy-btn", Button).label = "Copied!"
|
|
117
|
+
logger.debug("Copied VC++ installation script to clipboard")
|
|
118
|
+
else:
|
|
119
|
+
status_label.update(f"Could not copy. Download from: {_VC_REDIST_URL}")
|
|
120
|
+
logger.warning("Failed to copy VC++ script to clipboard")
|
|
121
|
+
|
|
122
|
+
def _open_download(self) -> None:
|
|
123
|
+
"""Open the download page in the default browser."""
|
|
124
|
+
status_label = self.query_one("#status-label", Static)
|
|
125
|
+
|
|
126
|
+
if open_vcpp_download_page():
|
|
127
|
+
status_label.update("Opened download page in browser")
|
|
128
|
+
logger.debug(f"Opened VC++ download page: {_VC_REDIST_URL}")
|
|
129
|
+
else:
|
|
130
|
+
status_label.update(f"Could not open browser. URL: {_VC_REDIST_URL}")
|
|
131
|
+
logger.warning("Failed to open VC++ download page")
|
|
132
|
+
|
|
133
|
+
def action_close(self) -> None:
|
|
134
|
+
"""Close the dialog."""
|
|
135
|
+
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
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/context_analyzer/__init__.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/context_analyzer/analyzer.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/context_analyzer/constants.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/context_analyzer/formatter.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/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.dev4}/src/shotgun/agents/conversation/history/__init__.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/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.dev4}/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.dev4}/src/shotgun/agents/router/tools/delegation_tools.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/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.dev4}/src/shotgun/agents/tools/codebase/__init__.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/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.dev4}/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.dev4}/src/shotgun/agents/tools/codebase/query_graph.py
RENAMED
|
File without changes
|
{shotgun_sh-0.4.7.dev2 → shotgun_sh-0.4.7.dev4}/src/shotgun/agents/tools/codebase/retrieve_code.py
RENAMED
|
File without changes
|