gitflow-analytics 3.9.3__tar.gz → 3.10.4__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.
Files changed (214) hide show
  1. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/PKG-INFO +1 -1
  2. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/_version.py +1 -1
  3. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/cli_wizards/install_wizard.py +243 -20
  4. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics.egg-info/PKG-INFO +1 -1
  5. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/CHANGELOG.md +0 -0
  6. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/CLAUDE.md +0 -0
  7. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/LICENSE +0 -0
  8. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/MANIFEST.in +0 -0
  9. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/README.md +0 -0
  10. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/README.md +0 -0
  11. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/REFACTOR.md +0 -0
  12. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/SECURITY.md +0 -0
  13. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/STRUCTURE.md +0 -0
  14. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/_archive/temp-files/PROGRESS_TRACKING_FIXES.md +0 -0
  15. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/_archive/temp-files/SYNTAX_ERROR_FIX.md +0 -0
  16. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/architecture/README.md +0 -0
  17. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/architecture/branch-analysis-optimization.md +0 -0
  18. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/architecture/caching-strategy.md +0 -0
  19. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/architecture/llm-classifier-refactoring.md +0 -0
  20. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/architecture/ml-pipeline.md +0 -0
  21. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/configuration/configuration.md +0 -0
  22. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/deployment/README.md +0 -0
  23. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/design/README.md +0 -0
  24. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/design/circuit-breaker-implementation.md +0 -0
  25. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/design/commit-classification-design.md +0 -0
  26. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/design/git_pm_correlation_design.md +0 -0
  27. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/design/platform-agnostic-pm-framework.md +0 -0
  28. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/design/qualitative_data_extraction.md +0 -0
  29. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/developer/README.md +0 -0
  30. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/developer/contributing.md +0 -0
  31. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/developer/development-setup.md +0 -0
  32. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/developer/training-guide.md +0 -0
  33. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/examples/README.md +0 -0
  34. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/getting-started/README.md +0 -0
  35. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/getting-started/first-analysis.md +0 -0
  36. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/getting-started/installation.md +0 -0
  37. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/getting-started/quickstart.md +0 -0
  38. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/guides/README.md +0 -0
  39. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/guides/chatgpt-setup.md +0 -0
  40. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/guides/identity-resolution-enhanced.md +0 -0
  41. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/guides/interactive-launcher.md +0 -0
  42. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/guides/managing-aliases.md +0 -0
  43. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/guides/ml-categorization.md +0 -0
  44. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/guides/pm-platform-setup.md +0 -0
  45. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/guides/troubleshooting.md +0 -0
  46. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/quick-reference/launcher-and-identity.md +0 -0
  47. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/reference/README.md +0 -0
  48. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/reference/cache-system.md +0 -0
  49. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/reference/cli-commands.md +0 -0
  50. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/reference/configuration-schema.md +0 -0
  51. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/docs/reference/json-export-schema.md +0 -0
  52. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/pyproject.toml +0 -0
  53. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/setup.cfg +0 -0
  54. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/__init__.py +0 -0
  55. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/classification/__init__.py +0 -0
  56. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/classification/batch_classifier.py +0 -0
  57. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/classification/classifier.py +0 -0
  58. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/classification/feature_extractor.py +0 -0
  59. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/classification/linguist_analyzer.py +0 -0
  60. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/classification/model.py +0 -0
  61. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/cli.py +0 -0
  62. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/cli_wizards/__init__.py +0 -0
  63. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/cli_wizards/run_launcher.py +0 -0
  64. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/config/__init__.py +0 -0
  65. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/config/aliases.py +0 -0
  66. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/config/errors.py +0 -0
  67. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/config/loader.py +0 -0
  68. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/config/profiles.py +0 -0
  69. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/config/repository.py +0 -0
  70. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/config/schema.py +0 -0
  71. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/config/validator.py +0 -0
  72. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/config.py +0 -0
  73. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/constants.py +0 -0
  74. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/core/__init__.py +0 -0
  75. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/core/analyzer.py +0 -0
  76. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/core/branch_mapper.py +0 -0
  77. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/core/cache.py +0 -0
  78. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/core/data_fetcher.py +0 -0
  79. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/core/git_auth.py +0 -0
  80. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/core/git_timeout_wrapper.py +0 -0
  81. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/core/identity.py +0 -0
  82. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/core/metrics_storage.py +0 -0
  83. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/core/progress.py +0 -0
  84. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/core/schema_version.py +0 -0
  85. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/core/subprocess_git.py +0 -0
  86. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/extractors/__init__.py +0 -0
  87. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/extractors/base.py +0 -0
  88. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/extractors/ml_tickets.py +0 -0
  89. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/extractors/story_points.py +0 -0
  90. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/extractors/tickets.py +0 -0
  91. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/identity_llm/__init__.py +0 -0
  92. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/identity_llm/analysis_pass.py +0 -0
  93. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/identity_llm/analyzer.py +0 -0
  94. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/identity_llm/models.py +0 -0
  95. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/integrations/__init__.py +0 -0
  96. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/integrations/github_integration.py +0 -0
  97. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/integrations/jira_integration.py +0 -0
  98. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/integrations/orchestrator.py +0 -0
  99. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/metrics/__init__.py +0 -0
  100. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/metrics/activity_scoring.py +0 -0
  101. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/metrics/branch_health.py +0 -0
  102. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/metrics/dora.py +0 -0
  103. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/models/__init__.py +0 -0
  104. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/models/database.py +0 -0
  105. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/pm_framework/__init__.py +0 -0
  106. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/pm_framework/adapters/__init__.py +0 -0
  107. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/pm_framework/adapters/jira_adapter.py +0 -0
  108. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/pm_framework/base.py +0 -0
  109. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/pm_framework/models.py +0 -0
  110. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/pm_framework/orchestrator.py +0 -0
  111. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/pm_framework/registry.py +0 -0
  112. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/__init__.py +0 -0
  113. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/chatgpt_analyzer.py +0 -0
  114. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/classifiers/__init__.py +0 -0
  115. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/classifiers/change_type.py +0 -0
  116. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/classifiers/domain_classifier.py +0 -0
  117. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/classifiers/intent_analyzer.py +0 -0
  118. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/classifiers/llm/__init__.py +0 -0
  119. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/classifiers/llm/base.py +0 -0
  120. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/classifiers/llm/batch_processor.py +0 -0
  121. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/classifiers/llm/cache.py +0 -0
  122. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/classifiers/llm/cost_tracker.py +0 -0
  123. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/classifiers/llm/openai_client.py +0 -0
  124. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/classifiers/llm/prompts.py +0 -0
  125. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/classifiers/llm/response_parser.py +0 -0
  126. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/classifiers/llm_commit_classifier.py +0 -0
  127. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/classifiers/risk_analyzer.py +0 -0
  128. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/core/__init__.py +0 -0
  129. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/core/llm_fallback.py +0 -0
  130. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/core/nlp_engine.py +0 -0
  131. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/core/pattern_cache.py +0 -0
  132. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/core/processor.py +0 -0
  133. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/enhanced_analyzer.py +0 -0
  134. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/example_enhanced_usage.py +0 -0
  135. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/models/__init__.py +0 -0
  136. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/models/schemas.py +0 -0
  137. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/utils/__init__.py +0 -0
  138. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/utils/batch_processor.py +0 -0
  139. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/utils/cost_tracker.py +0 -0
  140. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/utils/metrics.py +0 -0
  141. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/qualitative/utils/text_processing.py +0 -0
  142. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/__init__.py +0 -0
  143. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/analytics_writer.py +0 -0
  144. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/base.py +0 -0
  145. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/branch_health_writer.py +0 -0
  146. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/classification_writer.py +0 -0
  147. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/cli_integration.py +0 -0
  148. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/csv_writer.py +0 -0
  149. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/data_models.py +0 -0
  150. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/database_report_generator.py +0 -0
  151. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/example_usage.py +0 -0
  152. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/factory.py +0 -0
  153. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/formatters.py +0 -0
  154. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/html_generator.py +0 -0
  155. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/interfaces.py +0 -0
  156. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/json_exporter.py +0 -0
  157. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/narrative_writer.py +0 -0
  158. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/story_point_correlation.py +0 -0
  159. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/reports/weekly_trends_writer.py +0 -0
  160. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/security/__init__.py +0 -0
  161. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/security/config.py +0 -0
  162. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/security/extractors/__init__.py +0 -0
  163. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/security/extractors/dependency_checker.py +0 -0
  164. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/security/extractors/secret_detector.py +0 -0
  165. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/security/extractors/vulnerability_scanner.py +0 -0
  166. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/security/llm_analyzer.py +0 -0
  167. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/security/security_analyzer.py +0 -0
  168. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/training/__init__.py +0 -0
  169. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/training/model_loader.py +0 -0
  170. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/training/pipeline.py +0 -0
  171. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/ui/__init__.py +0 -0
  172. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/ui/progress_display.py +0 -0
  173. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics/verify_activity.py +0 -0
  174. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics.egg-info/SOURCES.txt +0 -0
  175. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics.egg-info/dependency_links.txt +0 -0
  176. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics.egg-info/entry_points.txt +0 -0
  177. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics.egg-info/requires.txt +0 -0
  178. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/src/gitflow_analytics.egg-info/top_level.txt +0 -0
  179. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/__init__.py +0 -0
  180. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/conftest.py +0 -0
  181. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/core/__init__.py +0 -0
  182. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/core/test_analyzer.py +0 -0
  183. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/core/test_cache.py +0 -0
  184. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/core/test_data_fetcher.py +0 -0
  185. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/core/test_identity.py +0 -0
  186. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/core/test_progress.py +0 -0
  187. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/extractors/__init__.py +0 -0
  188. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/integrations/__init__.py +0 -0
  189. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/metrics/__init__.py +0 -0
  190. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/models/__init__.py +0 -0
  191. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/qualitative/__init__.py +0 -0
  192. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/qualitative/test_basic_integration.py +0 -0
  193. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/reports/__init__.py +0 -0
  194. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_atomic_caching.py +0 -0
  195. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_classification_system.py +0 -0
  196. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_cli.py +0 -0
  197. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_config.py +0 -0
  198. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_config_extends.py +0 -0
  199. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_config_profiles.py +0 -0
  200. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_config_story_points.py +0 -0
  201. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_jira_connection.py +0 -0
  202. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_llm_commit_classification.py +0 -0
  203. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_march_2025_comparison.py +0 -0
  204. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_metrics.py +0 -0
  205. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_ml_accuracy.py +0 -0
  206. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_ml_components.py +0 -0
  207. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_ml_comprehensive.py +0 -0
  208. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_ml_integration.py +0 -0
  209. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_pm_env_resolution.py +0 -0
  210. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_report_abstraction.py +0 -0
  211. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_reports.py +0 -0
  212. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_story_points_analysis.py +0 -0
  213. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_training_pipeline.py +0 -0
  214. {gitflow_analytics-3.9.3 → gitflow_analytics-3.10.4}/tests/test_two_step_process.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitflow-analytics
3
- Version: 3.9.3
3
+ Version: 3.10.4
4
4
  Summary: Analyze Git repositories for developer productivity insights
5
5
  Author-email: Bob Matyas <bobmatnyc@gmail.com>
6
6
  License: MIT
@@ -1,4 +1,4 @@
1
1
  """Version information for gitflow-analytics."""
2
2
 
3
- __version__ = "3.9.3"
3
+ __version__ = "3.10.4"
4
4
  __version_info__ = tuple(int(x) for x in __version__.split("."))
@@ -7,6 +7,8 @@ and comprehensive configuration generation.
7
7
  import getpass
8
8
  import logging
9
9
  import os
10
+ import re
11
+ import shutil
10
12
  import stat
11
13
  import subprocess
12
14
  import sys
@@ -18,6 +20,8 @@ from typing import Optional
18
20
  import click
19
21
  import requests
20
22
  import yaml
23
+ from git import GitCommandError, Repo
24
+ from git.exc import InvalidGitRepositoryError
21
25
  from github import Github
22
26
  from github.GithubException import GithubException
23
27
 
@@ -490,6 +494,203 @@ class InstallWizard:
490
494
  logger.debug(f"Path validation error: {type(e).__name__}")
491
495
  return None
492
496
 
497
+ def _detect_git_url(self, input_str: str) -> Optional[str]:
498
+ """Detect if input is a Git URL and normalize it.
499
+
500
+ Args:
501
+ input_str: User input string
502
+
503
+ Returns:
504
+ Normalized Git URL if detected, None if it's a local path
505
+ """
506
+ import re
507
+
508
+ # HTTPS URL patterns
509
+ https_pattern = r"^https?://[^/]+/[^/]+/[^/]+(?:\.git)?$"
510
+ # SSH URL pattern
511
+ ssh_pattern = r"^git@[^:]+:[^/]+/[^/]+(?:\.git)?$"
512
+
513
+ input_str = input_str.strip()
514
+
515
+ if re.match(https_pattern, input_str, re.IGNORECASE) or re.match(ssh_pattern, input_str):
516
+ # Ensure .git extension for consistency
517
+ if not input_str.endswith(".git"):
518
+ input_str = input_str + ".git"
519
+ return input_str
520
+
521
+ return None
522
+
523
+ def _clone_git_repository(self, git_url: str) -> Optional[tuple[Path, str]]:
524
+ """Clone a Git repository to the local repos/ directory.
525
+
526
+ Args:
527
+ git_url: Git URL to clone
528
+
529
+ Returns:
530
+ Tuple of (local_path, original_url) if successful, None if failed
531
+ """
532
+ try:
533
+ # Extract repository name from URL
534
+ # Handle both HTTPS and SSH formats
535
+ match = re.search(r"/([^/]+?)(?:\.git)?$", git_url)
536
+ if not match:
537
+ click.echo("❌ Could not extract repository name from URL")
538
+ return None
539
+
540
+ repo_name = match.group(1)
541
+ click.echo(f"📦 Repository: {repo_name}")
542
+
543
+ # Create repos directory in current working directory
544
+ repos_dir = Path.cwd() / "repos"
545
+ repos_dir.mkdir(parents=True, exist_ok=True)
546
+ click.echo(f"📁 Clone directory: {repos_dir}")
547
+
548
+ # Target path for cloned repository
549
+ target_path = repos_dir / repo_name
550
+
551
+ # Check if repository already exists
552
+ if target_path.exists():
553
+ click.echo(f"⚠️ Directory already exists: {target_path}")
554
+
555
+ # Check if it's a valid git repository
556
+ try:
557
+ existing_repo = Repo(target_path)
558
+ if existing_repo.working_dir:
559
+ click.echo("✅ Found existing git repository")
560
+
561
+ # Check if remote URL matches
562
+ try:
563
+ origin_url = existing_repo.remotes.origin.url
564
+ if origin_url == git_url or self._normalize_git_url(
565
+ origin_url
566
+ ) == self._normalize_git_url(git_url):
567
+ click.echo(f"✅ Remote URL matches: {origin_url}")
568
+
569
+ # Offer to update
570
+ if click.confirm(
571
+ "Update existing repository (git pull)?", default=True
572
+ ):
573
+ click.echo("🔄 Updating repository...")
574
+ origin = existing_repo.remotes.origin
575
+ origin.pull()
576
+ click.echo("✅ Repository updated")
577
+
578
+ return (target_path, git_url)
579
+ else:
580
+ click.echo("⚠️ Remote URL mismatch:")
581
+ click.echo(f" Existing: {origin_url}")
582
+ click.echo(f" Requested: {git_url}")
583
+ if not click.confirm(
584
+ "Use existing repository anyway?", default=False
585
+ ):
586
+ return None
587
+ return (target_path, git_url)
588
+ except Exception as e:
589
+ click.echo(f"⚠️ Could not check remote URL: {type(e).__name__}")
590
+ if click.confirm("Use existing repository anyway?", default=False):
591
+ return (target_path, git_url)
592
+ return None
593
+ except InvalidGitRepositoryError:
594
+ click.echo("❌ Directory exists but is not a git repository")
595
+ if not click.confirm("Remove and re-clone?", default=False):
596
+ return None
597
+
598
+ # Remove existing directory
599
+ shutil.rmtree(target_path)
600
+ click.echo("🗑️ Removed existing directory")
601
+
602
+ # Clone the repository
603
+ click.echo(f"🔄 Cloning {git_url}...")
604
+ click.echo(" This may take a moment depending on repository size...")
605
+
606
+ # Clone with progress
607
+ Repo.clone_from(git_url, target_path, progress=self._get_git_progress())
608
+
609
+ # Verify clone succeeded
610
+ if not (target_path / ".git").exists():
611
+ click.echo("❌ Clone appeared to succeed but .git directory not found")
612
+ return None
613
+
614
+ click.echo(f"✅ Successfully cloned to: {target_path}")
615
+ return (target_path, git_url)
616
+
617
+ except GitCommandError as e:
618
+ click.echo("❌ Git clone failed")
619
+
620
+ # Parse error message for common issues
621
+ error_str = str(e).lower()
622
+ if "authentication failed" in error_str or "permission denied" in error_str:
623
+ click.echo("🔐 Authentication required")
624
+ click.echo(" For HTTPS: Configure Git credentials or use a personal access token")
625
+ click.echo(" For SSH: Ensure your SSH key is added to your Git provider")
626
+ elif "not found" in error_str or "does not exist" in error_str:
627
+ click.echo("🔍 Repository not found")
628
+ click.echo(" Check the URL and ensure you have access")
629
+ elif "network" in error_str or "timeout" in error_str:
630
+ click.echo("🌐 Network error")
631
+ click.echo(" Check your internet connection and try again")
632
+ else:
633
+ logger.debug(f"Git clone error type: {type(e).__name__}")
634
+
635
+ return None
636
+
637
+ except OSError as e:
638
+ error_type = type(e).__name__
639
+ click.echo(f"❌ File system error: {error_type}")
640
+ if "space" in str(e).lower():
641
+ click.echo("💾 Insufficient disk space")
642
+ logger.debug(f"Clone file system error: {error_type}")
643
+ return None
644
+
645
+ except Exception as e:
646
+ error_type = type(e).__name__
647
+ click.echo(f"❌ Unexpected error during clone: {error_type}")
648
+ logger.error(f"Clone error type: {error_type}")
649
+ return None
650
+
651
+ def _normalize_git_url(self, url: str) -> str:
652
+ """Normalize Git URL for comparison.
653
+
654
+ Args:
655
+ url: Git URL to normalize
656
+
657
+ Returns:
658
+ Normalized URL (lowercase, with .git extension)
659
+ """
660
+ url = url.lower().strip()
661
+ if not url.endswith(".git"):
662
+ url = url + ".git"
663
+ return url
664
+
665
+ def _get_git_progress(self):
666
+ """Get a Git progress handler for clone operations.
667
+
668
+ Returns:
669
+ Progress handler for GitPython or None
670
+ """
671
+ try:
672
+ from git import RemoteProgress
673
+
674
+ class CloneProgress(RemoteProgress):
675
+ """Progress handler for git clone operations."""
676
+
677
+ def __init__(self):
678
+ super().__init__()
679
+ self.last_percent = 0
680
+
681
+ def update(self, op_code, cur_count, max_count=None, message=""):
682
+ if max_count:
683
+ percent = int((cur_count / max_count) * 100)
684
+ # Only show updates every 10%
685
+ if percent >= self.last_percent + 10:
686
+ click.echo(f" Progress: {percent}%")
687
+ self.last_percent = percent
688
+
689
+ return CloneProgress()
690
+ except Exception:
691
+ # If progress handler fails, return None (clone will work without it)
692
+ return None
693
+
493
694
  def _setup_manual_repos(self) -> bool:
494
695
  """Setup manual repository configuration.
495
696
 
@@ -497,44 +698,66 @@ class InstallWizard:
497
698
  True if setup successful, False otherwise
498
699
  """
499
700
  click.echo("\n📦 Manual Repository Mode")
500
- click.echo("You can specify one or more local repository paths.")
701
+ click.echo("You can specify one or more local repository paths or Git URLs.")
702
+ click.echo("Supported formats:")
703
+ click.echo(" • Local path: /path/to/repo or ~/repos/myproject")
704
+ click.echo(" • HTTPS URL: https://github.com/owner/repo.git")
705
+ click.echo(" • SSH URL: git@github.com:owner/repo.git")
501
706
  click.echo()
502
707
 
503
708
  repositories = []
504
709
  while True:
505
- repo_path_str = click.prompt(
506
- "Enter repository path (or press Enter to finish)",
710
+ repo_input = click.prompt(
711
+ "Enter repository path or Git URL (or press Enter to finish)",
507
712
  type=str,
508
713
  default="",
509
714
  show_default=False,
510
715
  ).strip()
511
716
 
512
- if not repo_path_str:
717
+ if not repo_input:
513
718
  if not repositories:
514
719
  click.echo("❌ At least one repository is required")
515
720
  continue
516
721
  break
517
722
 
518
- # Validate path is safe
519
- path_obj = self._validate_directory_path(repo_path_str, "Repository path")
520
- if path_obj is None:
521
- continue # Re-prompt
522
-
523
- if not path_obj.exists():
524
- click.echo(f"⚠️ Path does not exist: {path_obj}")
525
- if not click.confirm("Add anyway?", default=False):
723
+ # Check if input is a Git URL
724
+ git_url = self._detect_git_url(repo_input)
725
+ if git_url:
726
+ # Handle Git URL cloning
727
+ result = self._clone_git_repository(git_url)
728
+ if result is None:
729
+ # Clone failed, ask user if they want to retry or skip
730
+ if not click.confirm("Try a different repository?", default=True):
731
+ if repositories:
732
+ break # User has other repos, can finish
733
+ continue # User has no repos yet, must add at least one
526
734
  continue
527
735
 
528
- # Check if it's a git repository
529
- if (path_obj / ".git").exists():
530
- click.echo(f" Valid git repository: {path_obj}")
736
+ # Clone successful
737
+ local_path, original_url = result
738
+ repositories.append({"path": str(local_path), "git_url": original_url})
739
+ click.echo(f"Added repository #{len(repositories)}")
531
740
  else:
532
- click.echo(f"⚠️ Not a git repository: {path_obj}")
533
- if not click.confirm("Add anyway?", default=False):
534
- continue
741
+ # Handle local path
742
+ path_obj = self._validate_directory_path(repo_input, "Repository path")
743
+ if path_obj is None:
744
+ continue # Re-prompt
745
+
746
+ if not path_obj.exists():
747
+ click.echo(f"⚠️ Path does not exist: {path_obj}")
748
+ if not click.confirm("Add anyway?", default=False):
749
+ continue
750
+
751
+ # Check if it's a git repository
752
+ if (path_obj / ".git").exists():
753
+ click.echo(f"✅ Valid git repository: {path_obj}")
754
+ else:
755
+ click.echo(f"⚠️ Not a git repository: {path_obj}")
756
+ if not click.confirm("Add anyway?", default=False):
757
+ continue
535
758
 
536
- repositories.append({"path": str(path_obj)})
537
- click.echo(f"Added repository #{len(repositories)}")
759
+ repositories.append({"path": str(path_obj)})
760
+ click.echo(f"Added repository #{len(repositories)}")
538
761
 
539
762
  if not click.confirm("Add another repository?", default=False):
540
763
  break
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitflow-analytics
3
- Version: 3.9.3
3
+ Version: 3.10.4
4
4
  Summary: Analyze Git repositories for developer productivity insights
5
5
  Author-email: Bob Matyas <bobmatnyc@gmail.com>
6
6
  License: MIT