kodit 0.5.5__tar.gz → 0.5.6__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.

Potentially problematic release.


This version of kodit might be problematic. Click here for more details.

Files changed (355) hide show
  1. {kodit-0.5.5 → kodit-0.5.6}/PKG-INFO +1 -1
  2. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/_version.py +2 -2
  3. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/app.py +2 -0
  4. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/application/factories/server_factory.py +4 -0
  5. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/application/services/commit_indexing_application_service.py +213 -0
  6. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/application/services/enrichment_query_service.py +37 -0
  7. kodit-0.5.6/src/kodit/domain/enrichments/architecture/database_schema/__init__.py +1 -0
  8. kodit-0.5.6/src/kodit/domain/enrichments/architecture/database_schema/database_schema.py +17 -0
  9. kodit-0.5.6/src/kodit/domain/enrichments/history/__init__.py +1 -0
  10. kodit-0.5.6/src/kodit/domain/enrichments/history/commit_description/__init__.py +1 -0
  11. kodit-0.5.6/src/kodit/domain/enrichments/history/commit_description/commit_description.py +17 -0
  12. kodit-0.5.6/src/kodit/domain/enrichments/history/history.py +18 -0
  13. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/protocols.py +4 -0
  14. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/value_objects.py +4 -0
  15. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/cloning/git/git_python_adaptor.py +41 -0
  16. kodit-0.5.6/src/kodit/infrastructure/database_schema/__init__.py +1 -0
  17. kodit-0.5.6/src/kodit/infrastructure/database_schema/database_schema_detector.py +268 -0
  18. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/sqlalchemy/enrichment_v2_repository.py +29 -0
  19. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/application/services/commit_indexing_application_service_test.py +1 -0
  20. {kodit-0.5.5 → kodit-0.5.6}/tests/smoke.py +1 -1
  21. {kodit-0.5.5 → kodit-0.5.6}/.claude/commands/debug.md +0 -0
  22. {kodit-0.5.5 → kodit-0.5.6}/.claude/commands/new-requirement.md +0 -0
  23. {kodit-0.5.5 → kodit-0.5.6}/.claude/commands/refactor.md +0 -0
  24. {kodit-0.5.5 → kodit-0.5.6}/.claude/commands/update-docs.md +0 -0
  25. {kodit-0.5.5 → kodit-0.5.6}/.claude/settings.json +0 -0
  26. {kodit-0.5.5 → kodit-0.5.6}/.cursor/rules/kodit.mdc +0 -0
  27. {kodit-0.5.5 → kodit-0.5.6}/.cursor/rules/style.mdc +0 -0
  28. {kodit-0.5.5 → kodit-0.5.6}/.dockerignore +0 -0
  29. {kodit-0.5.5 → kodit-0.5.6}/.github/CODE_OF_CONDUCT.md +0 -0
  30. {kodit-0.5.5 → kodit-0.5.6}/.github/CONTRIBUTING.md +0 -0
  31. {kodit-0.5.5 → kodit-0.5.6}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  32. {kodit-0.5.5 → kodit-0.5.6}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  33. {kodit-0.5.5 → kodit-0.5.6}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  34. {kodit-0.5.5 → kodit-0.5.6}/.github/dependabot.yml +0 -0
  35. {kodit-0.5.5 → kodit-0.5.6}/.github/workflows/docker.yaml +0 -0
  36. {kodit-0.5.5 → kodit-0.5.6}/.github/workflows/docs.yaml +0 -0
  37. {kodit-0.5.5 → kodit-0.5.6}/.github/workflows/pull_request.yaml +0 -0
  38. {kodit-0.5.5 → kodit-0.5.6}/.github/workflows/pypi-test.yaml +0 -0
  39. {kodit-0.5.5 → kodit-0.5.6}/.github/workflows/pypi.yaml +0 -0
  40. {kodit-0.5.5 → kodit-0.5.6}/.github/workflows/test.yaml +0 -0
  41. {kodit-0.5.5 → kodit-0.5.6}/.gitignore +0 -0
  42. {kodit-0.5.5 → kodit-0.5.6}/.python-version +0 -0
  43. {kodit-0.5.5 → kodit-0.5.6}/.vscode/launch.json +0 -0
  44. {kodit-0.5.5 → kodit-0.5.6}/.vscode/settings.json +0 -0
  45. {kodit-0.5.5 → kodit-0.5.6}/CLAUDE.md +0 -0
  46. {kodit-0.5.5 → kodit-0.5.6}/Dockerfile +0 -0
  47. {kodit-0.5.5 → kodit-0.5.6}/LICENSE +0 -0
  48. {kodit-0.5.5 → kodit-0.5.6}/Makefile +0 -0
  49. {kodit-0.5.5 → kodit-0.5.6}/README.md +0 -0
  50. {kodit-0.5.5 → kodit-0.5.6}/alembic.ini +0 -0
  51. {kodit-0.5.5 → kodit-0.5.6}/docs/_index.md +0 -0
  52. {kodit-0.5.5 → kodit-0.5.6}/docs/demos/_index.md +0 -0
  53. {kodit-0.5.5 → kodit-0.5.6}/docs/demos/go-simple-microservice/index.md +0 -0
  54. {kodit-0.5.5 → kodit-0.5.6}/docs/demos/knock-knock-auth/index.md +0 -0
  55. {kodit-0.5.5 → kodit-0.5.6}/docs/developer/index.md +0 -0
  56. {kodit-0.5.5 → kodit-0.5.6}/docs/getting-started/_index.md +0 -0
  57. {kodit-0.5.5 → kodit-0.5.6}/docs/getting-started/installation/index.md +0 -0
  58. {kodit-0.5.5 → kodit-0.5.6}/docs/getting-started/integration/index.md +0 -0
  59. {kodit-0.5.5 → kodit-0.5.6}/docs/getting-started/quick-start/index.md +0 -0
  60. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/_index.md +0 -0
  61. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/api/index.md +0 -0
  62. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/api/openapi.json +0 -0
  63. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/api/templates/_content.md.j2 +0 -0
  64. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/api/templates/_example.md.j2 +0 -0
  65. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/api/templates/_object_schema.md.j2 +0 -0
  66. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/api/templates/_security_scheme.md.j2 +0 -0
  67. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/api/templates/api_doc_template.md.j2 +0 -0
  68. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/configuration/index.md +0 -0
  69. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/configuration/templates/template.j2 +0 -0
  70. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/deployment/docker-compose.yaml +0 -0
  71. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/deployment/index.md +0 -0
  72. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/deployment/kubernetes.yaml +0 -0
  73. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/hosted-kodit/index.md +0 -0
  74. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/indexing/index.md +0 -0
  75. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/mcp/index.md +0 -0
  76. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/sync/index.md +0 -0
  77. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/telemetry/index.md +0 -0
  78. {kodit-0.5.5 → kodit-0.5.6}/docs/reference/troubleshooting/index.md +0 -0
  79. {kodit-0.5.5 → kodit-0.5.6}/pyproject.toml +0 -0
  80. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/.gitignore +0 -0
  81. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/__init__.py +0 -0
  82. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/application/__init__.py +0 -0
  83. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/application/factories/__init__.py +0 -0
  84. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/application/factories/reporting_factory.py +0 -0
  85. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/application/services/__init__.py +0 -0
  86. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/application/services/code_search_application_service.py +0 -0
  87. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/application/services/indexing_worker_service.py +0 -0
  88. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/application/services/queue_service.py +0 -0
  89. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/application/services/reporting.py +0 -0
  90. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/application/services/sync_scheduler.py +0 -0
  91. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/cli.py +0 -0
  92. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/cli_utils.py +0 -0
  93. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/config.py +0 -0
  94. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/database.py +0 -0
  95. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/__init__.py +0 -0
  96. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/__init__.py +0 -0
  97. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/architecture/__init__.py +0 -0
  98. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/architecture/architecture.py +0 -0
  99. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/architecture/physical/__init__.py +0 -0
  100. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/architecture/physical/discovery_notes.py +0 -0
  101. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/architecture/physical/formatter.py +0 -0
  102. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/architecture/physical/physical.py +0 -0
  103. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/development/__init__.py +0 -0
  104. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/development/development.py +0 -0
  105. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/development/snippet/__init__.py +0 -0
  106. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/development/snippet/snippet.py +0 -0
  107. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/enricher.py +0 -0
  108. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/enrichment.py +0 -0
  109. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/request.py +0 -0
  110. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/response.py +0 -0
  111. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/usage/__init__.py +0 -0
  112. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/usage/api_docs.py +0 -0
  113. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/enrichments/usage/usage.py +0 -0
  114. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/entities/__init__.py +0 -0
  115. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/entities/git.py +0 -0
  116. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/errors.py +0 -0
  117. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/factories/__init__.py +0 -0
  118. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/factories/git_repo_factory.py +0 -0
  119. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/services/__init__.py +0 -0
  120. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/services/bm25_service.py +0 -0
  121. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/services/embedding_service.py +0 -0
  122. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/services/git_repository_service.py +0 -0
  123. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/services/git_service.py +0 -0
  124. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/services/physical_architecture_service.py +0 -0
  125. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/services/task_status_query_service.py +0 -0
  126. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/tracking/__init__.py +0 -0
  127. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/tracking/resolution_service.py +0 -0
  128. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/domain/tracking/trackable.py +0 -0
  129. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/__init__.py +0 -0
  130. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/__init__.py +0 -0
  131. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/client/__init__.py +0 -0
  132. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/client/base.py +0 -0
  133. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/client/exceptions.py +0 -0
  134. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/client/generated_endpoints.py +0 -0
  135. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/client/search_client.py +0 -0
  136. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/middleware/__init__.py +0 -0
  137. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/middleware/auth.py +0 -0
  138. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/__init__.py +0 -0
  139. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/dependencies.py +0 -0
  140. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/query_params.py +0 -0
  141. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/routers/__init__.py +0 -0
  142. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/routers/commits.py +0 -0
  143. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/routers/queue.py +0 -0
  144. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/routers/repositories.py +0 -0
  145. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/routers/search.py +0 -0
  146. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/schemas/__init__.py +0 -0
  147. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/schemas/commit.py +0 -0
  148. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/schemas/context.py +0 -0
  149. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/schemas/enrichment.py +0 -0
  150. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/schemas/queue.py +0 -0
  151. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/schemas/repository.py +0 -0
  152. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/schemas/search.py +0 -0
  153. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/schemas/snippet.py +0 -0
  154. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/schemas/tag.py +0 -0
  155. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/api/v1/schemas/task_status.py +0 -0
  156. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/bm25/__init__.py +0 -0
  157. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/bm25/local_bm25_repository.py +0 -0
  158. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/bm25/vectorchord_bm25_repository.py +0 -0
  159. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/cloning/git/__init__.py +0 -0
  160. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/cloning/git/working_copy.py +0 -0
  161. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/embedding/__init__.py +0 -0
  162. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/embedding/embedding_factory.py +0 -0
  163. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/embedding/embedding_providers/__init__.py +0 -0
  164. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/embedding/embedding_providers/batching.py +0 -0
  165. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/embedding/embedding_providers/hash_embedding_provider.py +0 -0
  166. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/embedding/embedding_providers/litellm_embedding_provider.py +0 -0
  167. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/embedding/embedding_providers/local_embedding_provider.py +0 -0
  168. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/embedding/local_vector_search_repository.py +0 -0
  169. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/embedding/vectorchord_vector_search_repository.py +0 -0
  170. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/enricher/__init__.py +0 -0
  171. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/enricher/enricher_factory.py +0 -0
  172. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/enricher/litellm_enricher.py +0 -0
  173. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/enricher/local_enricher.py +0 -0
  174. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/enricher/null_enricher.py +0 -0
  175. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/enricher/utils.py +0 -0
  176. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/git/__init__.py +0 -0
  177. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/git/git_utils.py +0 -0
  178. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/ignore/__init__.py +0 -0
  179. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/ignore/ignore_pattern_provider.py +0 -0
  180. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/indexing/__init__.py +0 -0
  181. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/indexing/fusion_service.py +0 -0
  182. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/mappers/__init__.py +0 -0
  183. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/mappers/task_mapper.py +0 -0
  184. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/mappers/task_status_mapper.py +0 -0
  185. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/physical_architecture/__init__.py +0 -0
  186. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/physical_architecture/detectors/__init__.py +0 -0
  187. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/physical_architecture/detectors/docker_compose_detector.py +0 -0
  188. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/physical_architecture/formatters/__init__.py +0 -0
  189. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/physical_architecture/formatters/narrative_formatter.py +0 -0
  190. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/providers/__init__.py +0 -0
  191. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/providers/async_batch_processor.py +0 -0
  192. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/providers/litellm_provider.py +0 -0
  193. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/reporting/__init__.py +0 -0
  194. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/reporting/db_progress.py +0 -0
  195. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/reporting/log_progress.py +0 -0
  196. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/reporting/telemetry_progress.py +0 -0
  197. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/slicing/__init__.py +0 -0
  198. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/slicing/api_doc_extractor.py +0 -0
  199. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/slicing/ast_analyzer.py +0 -0
  200. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/slicing/slicer.py +0 -0
  201. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/sqlalchemy/__init__.py +0 -0
  202. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/sqlalchemy/embedding_repository.py +0 -0
  203. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/sqlalchemy/enrichment_association_repository.py +0 -0
  204. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/sqlalchemy/entities.py +0 -0
  205. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/sqlalchemy/git_branch_repository.py +0 -0
  206. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/sqlalchemy/git_commit_repository.py +0 -0
  207. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/sqlalchemy/git_file_repository.py +0 -0
  208. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/sqlalchemy/git_repository.py +0 -0
  209. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/sqlalchemy/git_tag_repository.py +0 -0
  210. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/sqlalchemy/query.py +0 -0
  211. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/sqlalchemy/repository.py +0 -0
  212. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/sqlalchemy/task_repository.py +0 -0
  213. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/sqlalchemy/task_status_repository.py +0 -0
  214. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/infrastructure/sqlalchemy/unit_of_work.py +0 -0
  215. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/log.py +0 -0
  216. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/mcp.py +0 -0
  217. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/middleware.py +0 -0
  218. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/README +0 -0
  219. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/__init__.py +0 -0
  220. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/env.py +0 -0
  221. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/script.py.mako +0 -0
  222. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/versions/04b80f802e0c_foreign_key_review.py +0 -0
  223. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/versions/19f8c7faf8b9_add_generic_enrichment_type.py +0 -0
  224. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/versions/4073b33f9436_add_file_processing_flag.py +0 -0
  225. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/versions/4552eb3f23ce_add_summary.py +0 -0
  226. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/versions/4b1a3b2c8fa5_refactor_git_tracking.py +0 -0
  227. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/versions/7c3bbc2ab32b_add_embeddings_table.py +0 -0
  228. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/versions/7f15f878c3a1_add_new_git_entities.py +0 -0
  229. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/versions/85155663351e_initial.py +0 -0
  230. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/versions/9cf0e87de578_add_queue.py +0 -0
  231. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/versions/9e53ea8bb3b0_add_authors.py +0 -0
  232. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/versions/__init__.py +0 -0
  233. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/versions/b9cd1c3fd762_add_task_status.py +0 -0
  234. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/versions/c3f5137d30f5_index_all_the_things.py +0 -0
  235. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/migrations/versions/f9e5ef5e688f_add_git_commits_number.py +0 -0
  236. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/py.typed +0 -0
  237. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/utils/__init__.py +0 -0
  238. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/utils/dump_config.py +0 -0
  239. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/utils/dump_openapi.py +0 -0
  240. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/utils/generate_api_paths.py +0 -0
  241. {kodit-0.5.5 → kodit-0.5.6}/src/kodit/utils/path_utils.py +0 -0
  242. {kodit-0.5.5 → kodit-0.5.6}/tests/__init__.py +0 -0
  243. {kodit-0.5.5 → kodit-0.5.6}/tests/conftest.py +0 -0
  244. {kodit-0.5.5 → kodit-0.5.6}/tests/docker-smoke.sh +0 -0
  245. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/__init__.py +0 -0
  246. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/application/__init__.py +0 -0
  247. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/application/services/__init__.py +0 -0
  248. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/application/services/code_search_application_service_test.py +0 -0
  249. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/application/services/queue_service_get_task_test.py +0 -0
  250. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/application/services/queue_service_test.py +0 -0
  251. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/application/services/reporting_test.py +0 -0
  252. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/cli_test.py +0 -0
  253. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/domain/__init__.py +0 -0
  254. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/domain/bm25_service_test.py +0 -0
  255. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/domain/embedding_service_test.py +0 -0
  256. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/domain/entities_test.py +0 -0
  257. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/domain/language_detection_service_test.py +0 -0
  258. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/domain/services/__init__.py +0 -0
  259. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/domain/services/git_repository_service_test.py +0 -0
  260. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/e2e.py +0 -0
  261. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/__init__.py +0 -0
  262. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/bm25/__init__.py +0 -0
  263. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/bm25/local_bm25_repository_test.py +0 -0
  264. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/cloning/__init__.py +0 -0
  265. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/cloning/git/__init__.py +0 -0
  266. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/cloning/git/git_python_adaptor_test.py +0 -0
  267. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/cloning/git_cloning/__init__.py +0 -0
  268. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/cloning/git_cloning/working_copy_test.py +0 -0
  269. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/embedding/__init__.py +0 -0
  270. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/embedding/batching_test.py +0 -0
  271. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/embedding/embedding_factory_test.py +0 -0
  272. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/embedding/embedding_provider/__init__.py +0 -0
  273. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/embedding/embedding_provider/hash_embedding_provider_test.py +0 -0
  274. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/embedding/embedding_provider/litellm_embedding_provider_test.py +0 -0
  275. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/embedding/embedding_provider/local_embedding_provider_test.py +0 -0
  276. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/embedding/test_litellm_socket_providers.py +0 -0
  277. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/enricher/__init__.py +0 -0
  278. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/enricher/null_enricher_test.py +0 -0
  279. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/mappers/__init__.py +0 -0
  280. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/physical_architecture/__init__.py +0 -0
  281. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/physical_architecture/detectors/__init__.py +0 -0
  282. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/physical_architecture/detectors/docker_compose_detector_test.py +0 -0
  283. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/physical_architecture/end_to_end_test.py +0 -0
  284. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/physical_architecture/fixtures/simple_web_app/docker-compose.yml +0 -0
  285. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/physical_architecture/formatters/__init__.py +0 -0
  286. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/physical_architecture/formatters/narrative_formatter_test.py +0 -0
  287. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/providers/__init__.py +0 -0
  288. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/providers/litellm_provider_test.py +0 -0
  289. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/__init__.py +0 -0
  290. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/api_doc_extractor_test.py +0 -0
  291. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/ast_analyzer_test.py +0 -0
  292. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/__init__.py +0 -0
  293. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/c/main.c +0 -0
  294. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/c/models.c +0 -0
  295. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/c/models.h +0 -0
  296. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/c/utils.c +0 -0
  297. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/c/utils.h +0 -0
  298. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/cpp/main.cpp +0 -0
  299. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/cpp/models.cpp +0 -0
  300. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/cpp/models.hpp +0 -0
  301. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/cpp/utils.cpp +0 -0
  302. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/cpp/utils.hpp +0 -0
  303. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/csharp/Main.cs +0 -0
  304. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/csharp/Models.cs +0 -0
  305. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/csharp/Utils.cs +0 -0
  306. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/css/components.css +0 -0
  307. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/css/main.css +0 -0
  308. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/css/utilities.css +0 -0
  309. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/go/api/pkg/controller/filestore.go +0 -0
  310. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/go/api/pkg/controller/filestore_test.go +0 -0
  311. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/go/main.go +0 -0
  312. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/go/models.go +0 -0
  313. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/go/utils.go +0 -0
  314. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/html/components.html +0 -0
  315. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/html/forms.html +0 -0
  316. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/html/main.html +0 -0
  317. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/java/Main.java +0 -0
  318. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/java/Models.java +0 -0
  319. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/java/Utils.java +0 -0
  320. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/javascript/main.js +0 -0
  321. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/javascript/models.js +0 -0
  322. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/javascript/utils.js +0 -0
  323. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/python/__init__.py +0 -0
  324. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/python/main.py +0 -0
  325. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/python/models.py +0 -0
  326. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/python/submodule/__init__.py +0 -0
  327. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/python/submodule/main.py +0 -0
  328. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/python/utils.py +0 -0
  329. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/rust/main.rs +0 -0
  330. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/rust/models.rs +0 -0
  331. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/data/rust/utils.rs +0 -0
  332. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/slicing/slicer_test.py +0 -0
  333. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/snippets/__init__.py +0 -0
  334. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/snippets/csharp.cs +0 -0
  335. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/snippets/golang.go +0 -0
  336. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/snippets/javascript.js +0 -0
  337. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/snippets/knock_knock_server.py +0 -0
  338. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/snippets/python.py +0 -0
  339. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/snippets/typescript.tsx +0 -0
  340. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/sqlalchemy/__init__.py +0 -0
  341. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/sqlalchemy/embedding_repository_test.py +0 -0
  342. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/sqlalchemy/git_branch_repository_test.py +0 -0
  343. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/sqlalchemy/git_file_repository_test.py +0 -0
  344. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/sqlalchemy/git_repository_test.py +0 -0
  345. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/sqlalchemy/git_tag_repository_test.py +0 -0
  346. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/sqlalchemy/repository_test.py +0 -0
  347. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/sqlalchemy/task_repository_test.py +0 -0
  348. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/infrastructure/sqlalchemy/task_status_repository_test.py +0 -0
  349. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/log_test.py +0 -0
  350. {kodit-0.5.5 → kodit-0.5.6}/tests/kodit/mcp_test.py +0 -0
  351. {kodit-0.5.5 → kodit-0.5.6}/tests/utils/__init__.py +0 -0
  352. {kodit-0.5.5 → kodit-0.5.6}/tests/utils/path_utils_test.py +0 -0
  353. {kodit-0.5.5 → kodit-0.5.6}/tests/vectorchord-smoke.sh +0 -0
  354. {kodit-0.5.5 → kodit-0.5.6}/understanding_architecture.md +0 -0
  355. {kodit-0.5.5 → kodit-0.5.6}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kodit
3
- Version: 0.5.5
3
+ Version: 0.5.6
4
4
  Summary: Code indexing for better AI code generation
5
5
  Project-URL: Homepage, https://docs.helixml.tech/kodit/
6
6
  Project-URL: Documentation, https://docs.helixml.tech/kodit/
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.5.5'
32
- __version_tuple__ = version_tuple = (0, 5, 5)
31
+ __version__ = version = '0.5.6'
32
+ __version_tuple__ = version_tuple = (0, 5, 6)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -63,6 +63,8 @@ async def app_lifespan(_: FastAPI) -> AsyncIterator[AppLifespanState]:
63
63
  )
64
64
  )
65
65
  )
66
+ except StopAsyncIteration:
67
+ pass
66
68
  except Exception as e:
67
69
  raise ValueError("Embedding service is not accessible") from e
68
70
  try:
@@ -50,6 +50,9 @@ from kodit.infrastructure.bm25.vectorchord_bm25_repository import (
50
50
  VectorChordBM25Repository,
51
51
  )
52
52
  from kodit.infrastructure.cloning.git.git_python_adaptor import GitPythonAdapter
53
+ from kodit.infrastructure.database_schema.database_schema_detector import (
54
+ DatabaseSchemaDetector,
55
+ )
53
56
  from kodit.infrastructure.embedding.embedding_factory import (
54
57
  embedding_domain_service_factory,
55
58
  )
@@ -255,6 +258,7 @@ class ServerFactory:
255
258
  text_search_service=self.text_search_service(),
256
259
  embedding_repository=self.embedding_repository(),
257
260
  architecture_service=self.architecture_service(),
261
+ database_schema_detector=DatabaseSchemaDetector(),
258
262
  enrichment_v2_repository=self.enrichment_v2_repository(),
259
263
  enricher_service=self.enricher(),
260
264
  enrichment_association_repository=self.enrichment_association_repository(),
@@ -14,6 +14,9 @@ if TYPE_CHECKING:
14
14
  from kodit.application.services.enrichment_query_service import (
15
15
  EnrichmentQueryService,
16
16
  )
17
+ from kodit.domain.enrichments.architecture.database_schema.database_schema import (
18
+ DatabaseSchemaEnrichment,
19
+ )
17
20
  from kodit.domain.enrichments.architecture.physical.physical import (
18
21
  PhysicalArchitectureEnrichment,
19
22
  )
@@ -27,6 +30,9 @@ from kodit.domain.enrichments.enrichment import (
27
30
  EnrichmentAssociation,
28
31
  EnrichmentV2,
29
32
  )
33
+ from kodit.domain.enrichments.history.commit_description.commit_description import (
34
+ CommitDescriptionEnrichment,
35
+ )
30
36
  from kodit.domain.enrichments.request import (
31
37
  EnrichmentRequest as GenericEnrichmentRequest,
32
38
  )
@@ -63,6 +69,9 @@ from kodit.domain.value_objects import (
63
69
  TaskOperation,
64
70
  TrackableType,
65
71
  )
72
+ from kodit.infrastructure.database_schema.database_schema_detector import (
73
+ DatabaseSchemaDetector,
74
+ )
66
75
  from kodit.infrastructure.slicing.api_doc_extractor import APIDocExtractor
67
76
  from kodit.infrastructure.slicing.slicer import Slicer
68
77
  from kodit.infrastructure.sqlalchemy import entities as db_entities
@@ -82,6 +91,73 @@ You are a professional software developer. You will be given a snippet of code.
82
91
  Please provide a concise explanation of the code.
83
92
  """
84
93
 
94
+ COMMIT_DESCRIPTION_SYSTEM_PROMPT = """
95
+ You are a professional software developer. You will be given a git commit diff.
96
+ Please provide a concise description of what changes were made and why.
97
+ """
98
+
99
+ DATABASE_SCHEMA_SYSTEM_PROMPT = """
100
+ You are an expert database architect and documentation specialist.
101
+ Your task is to create clear, visual documentation of database schemas.
102
+ """
103
+
104
+ DATABASE_SCHEMA_TASK_PROMPT = """
105
+ You will be provided with a database schema discovery report.
106
+ Please create comprehensive database schema documentation.
107
+
108
+ <schema_report>
109
+ {schema_report}
110
+ </schema_report>
111
+
112
+ **Return the following:**
113
+
114
+ ## Entity List
115
+
116
+ For each table/entity, write one line:
117
+ - **[Table Name]**: [brief description of what it stores]
118
+
119
+ ## Mermaid ERD
120
+
121
+ Create a Mermaid Entity Relationship Diagram showing:
122
+ - All entities (tables)
123
+ - Key relationships between entities (if apparent from names or common patterns)
124
+ - Use standard ERD notation
125
+
126
+ Example format:
127
+ ```mermaid
128
+ erDiagram
129
+ User ||--o{{ Order : places
130
+ User {{
131
+ int id PK
132
+ string email
133
+ string name
134
+ }}
135
+ Order {{
136
+ int id PK
137
+ int user_id FK
138
+ datetime created_at
139
+ }}
140
+ ```
141
+
142
+ If specific field details aren't available, show just the entity boxes and
143
+ relationships.
144
+
145
+ ## Key Observations
146
+
147
+ Answer these questions in 1-2 sentences each:
148
+ 1. What is the primary data model pattern (e.g., user-centric,
149
+ event-sourced, multi-tenant)?
150
+ 2. What migration strategy is being used?
151
+ 3. Are there any notable database design patterns or concerns?
152
+
153
+ ## Rules:
154
+ - Be concise and focus on the high-level structure
155
+ - Infer reasonable relationships from table names when explicit information
156
+ isn't available
157
+ - If no database schema is found, state that clearly
158
+ - Keep entity descriptions to 10 words or less
159
+ """
160
+
85
161
 
86
162
  class CommitIndexingApplicationService:
87
163
  """Application service for commit indexing operations."""
@@ -103,6 +179,7 @@ class CommitIndexingApplicationService:
103
179
  text_search_service: EmbeddingDomainService,
104
180
  embedding_repository: SqlAlchemyEmbeddingRepository,
105
181
  architecture_service: PhysicalArchitectureService,
182
+ database_schema_detector: DatabaseSchemaDetector,
106
183
  enricher_service: Enricher,
107
184
  enrichment_v2_repository: EnrichmentV2Repository,
108
185
  enrichment_association_repository: EnrichmentAssociationRepository,
@@ -124,6 +201,7 @@ class CommitIndexingApplicationService:
124
201
  self.text_search_service = text_search_service
125
202
  self.embedding_repository = embedding_repository
126
203
  self.architecture_service = architecture_service
204
+ self.database_schema_detector = database_schema_detector
127
205
  self.enrichment_v2_repository = enrichment_v2_repository
128
206
  self.enrichment_association_repository = enrichment_association_repository
129
207
  self.enricher_service = enricher_service
@@ -191,6 +269,10 @@ class CommitIndexingApplicationService:
191
269
  await self.process_architecture_discovery(repository_id, commit_sha)
192
270
  elif task.type == TaskOperation.CREATE_PUBLIC_API_DOCS_FOR_COMMIT:
193
271
  await self.process_api_docs(repository_id, commit_sha)
272
+ elif task.type == TaskOperation.CREATE_COMMIT_DESCRIPTION_FOR_COMMIT:
273
+ await self.process_commit_description(repository_id, commit_sha)
274
+ elif task.type == TaskOperation.CREATE_DATABASE_SCHEMA_FOR_COMMIT:
275
+ await self.process_database_schema(repository_id, commit_sha)
194
276
  else:
195
277
  raise ValueError(f"Unknown task type: {task.type}")
196
278
  else:
@@ -798,6 +880,137 @@ class CommitIndexingApplicationService:
798
880
  ]
799
881
  )
800
882
 
883
+ async def process_commit_description(
884
+ self, repository_id: int, commit_sha: str
885
+ ) -> None:
886
+ """Handle COMMIT_DESCRIPTION task - generate commit descriptions."""
887
+ async with self.operation.create_child(
888
+ TaskOperation.CREATE_COMMIT_DESCRIPTION_FOR_COMMIT,
889
+ trackable_type=TrackableType.KODIT_REPOSITORY,
890
+ trackable_id=repository_id,
891
+ ) as step:
892
+ # Check if commit description already exists for this commit
893
+ if await self.enrichment_query_service.has_commit_description_for_commit(
894
+ commit_sha
895
+ ):
896
+ await step.skip("Commit description already exists for commit")
897
+ return
898
+
899
+ # Get repository path
900
+ repo = await self.repo_repository.get(repository_id)
901
+ if not repo.cloned_path:
902
+ raise ValueError(f"Repository {repository_id} has never been cloned")
903
+
904
+ await step.set_total(3)
905
+ await step.set_current(1, "Getting commit diff")
906
+
907
+ # Get the diff for this commit
908
+ diff = await self.scanner.git_adapter.get_commit_diff(
909
+ repo.cloned_path, commit_sha
910
+ )
911
+
912
+ if not diff or len(diff.strip()) == 0:
913
+ await step.skip("No diff found for commit")
914
+ return
915
+
916
+ await step.set_current(2, "Enriching commit description with LLM")
917
+
918
+ # Enrich the diff through the enricher
919
+ enrichment_request = GenericEnrichmentRequest(
920
+ id=commit_sha,
921
+ text=diff,
922
+ system_prompt=COMMIT_DESCRIPTION_SYSTEM_PROMPT,
923
+ )
924
+
925
+ enriched_content = ""
926
+ async for response in self.enricher_service.enrich([enrichment_request]):
927
+ enriched_content = response.text
928
+
929
+ # Create and save commit description enrichment
930
+ enrichment = await self.enrichment_v2_repository.save(
931
+ CommitDescriptionEnrichment(
932
+ content=enriched_content,
933
+ )
934
+ )
935
+ if not enrichment or not enrichment.id:
936
+ raise ValueError(
937
+ f"Failed to save commit description enrichment for commit "
938
+ f"{commit_sha}"
939
+ )
940
+ await self.enrichment_association_repository.save(
941
+ CommitEnrichmentAssociation(
942
+ enrichment_id=enrichment.id,
943
+ entity_id=commit_sha,
944
+ )
945
+ )
946
+
947
+ await step.set_current(3, "Commit description enrichment completed")
948
+
949
+ async def process_database_schema(
950
+ self, repository_id: int, commit_sha: str
951
+ ) -> None:
952
+ """Handle DATABASE_SCHEMA task - discover and document database schemas."""
953
+ async with self.operation.create_child(
954
+ TaskOperation.CREATE_DATABASE_SCHEMA_FOR_COMMIT,
955
+ trackable_type=TrackableType.KODIT_REPOSITORY,
956
+ trackable_id=repository_id,
957
+ ) as step:
958
+ # Check if database schema already exists for this commit
959
+ if await self.enrichment_query_service.has_database_schema_for_commit(
960
+ commit_sha
961
+ ):
962
+ await step.skip("Database schema already exists for commit")
963
+ return
964
+
965
+ # Get repository path
966
+ repo = await self.repo_repository.get(repository_id)
967
+ if not repo.cloned_path:
968
+ raise ValueError(f"Repository {repository_id} has never been cloned")
969
+
970
+ await step.set_total(3)
971
+ await step.set_current(1, "Discovering database schemas")
972
+
973
+ # Discover database schemas
974
+ schema_report = await self.database_schema_detector.discover_schemas(
975
+ repo.cloned_path
976
+ )
977
+
978
+ if "No database schemas detected" in schema_report:
979
+ await step.skip("No database schemas found in repository")
980
+ return
981
+
982
+ await step.set_current(2, "Enriching schema documentation with LLM")
983
+
984
+ # Enrich the schema report through the enricher
985
+ enrichment_request = GenericEnrichmentRequest(
986
+ id=commit_sha,
987
+ text=DATABASE_SCHEMA_TASK_PROMPT.format(schema_report=schema_report),
988
+ system_prompt=DATABASE_SCHEMA_SYSTEM_PROMPT,
989
+ )
990
+
991
+ enriched_content = ""
992
+ async for response in self.enricher_service.enrich([enrichment_request]):
993
+ enriched_content = response.text
994
+
995
+ # Create and save database schema enrichment
996
+ enrichment = await self.enrichment_v2_repository.save(
997
+ DatabaseSchemaEnrichment(
998
+ content=enriched_content,
999
+ )
1000
+ )
1001
+ if not enrichment or not enrichment.id:
1002
+ raise ValueError(
1003
+ f"Failed to save database schema enrichment for commit {commit_sha}"
1004
+ )
1005
+ await self.enrichment_association_repository.save(
1006
+ CommitEnrichmentAssociation(
1007
+ enrichment_id=enrichment.id,
1008
+ entity_id=commit_sha,
1009
+ )
1010
+ )
1011
+
1012
+ await step.set_current(3, "Database schema enrichment completed")
1013
+
801
1014
  async def _new_snippets_for_type(
802
1015
  self, all_snippets: list[EnrichmentV2], embedding_type: EmbeddingType
803
1016
  ) -> list[EnrichmentV2]:
@@ -5,6 +5,9 @@ import structlog
5
5
  from kodit.domain.enrichments.architecture.architecture import (
6
6
  ENRICHMENT_TYPE_ARCHITECTURE,
7
7
  )
8
+ from kodit.domain.enrichments.architecture.database_schema.database_schema import (
9
+ ENRICHMENT_SUBTYPE_DATABASE_SCHEMA,
10
+ )
8
11
  from kodit.domain.enrichments.architecture.physical.physical import (
9
12
  ENRICHMENT_SUBTYPE_PHYSICAL,
10
13
  )
@@ -14,6 +17,10 @@ from kodit.domain.enrichments.development.snippet.snippet import (
14
17
  ENRICHMENT_SUBTYPE_SNIPPET_SUMMARY,
15
18
  )
16
19
  from kodit.domain.enrichments.enrichment import EnrichmentAssociation, EnrichmentV2
20
+ from kodit.domain.enrichments.history.commit_description.commit_description import (
21
+ ENRICHMENT_SUBTYPE_COMMIT_DESCRIPTION,
22
+ )
23
+ from kodit.domain.enrichments.history.history import ENRICHMENT_TYPE_HISTORY
17
24
  from kodit.domain.enrichments.usage.api_docs import ENRICHMENT_SUBTYPE_API_DOCS
18
25
  from kodit.domain.enrichments.usage.usage import ENRICHMENT_TYPE_USAGE
19
26
  from kodit.domain.protocols import (
@@ -215,6 +222,36 @@ class EnrichmentQueryService:
215
222
  api_docs = await self.get_api_docs_for_commit(commit_sha)
216
223
  return len(api_docs) > 0
217
224
 
225
+ async def get_commit_description_for_commit(
226
+ self, commit_sha: str
227
+ ) -> list[EnrichmentV2]:
228
+ """Get commit description enrichments for a commit."""
229
+ return await self.get_enrichments_for_commit(
230
+ commit_sha,
231
+ enrichment_type=ENRICHMENT_TYPE_HISTORY,
232
+ enrichment_subtype=ENRICHMENT_SUBTYPE_COMMIT_DESCRIPTION,
233
+ )
234
+
235
+ async def has_commit_description_for_commit(self, commit_sha: str) -> bool:
236
+ """Check if a commit has commit description enrichments."""
237
+ commit_descriptions = await self.get_commit_description_for_commit(commit_sha)
238
+ return len(commit_descriptions) > 0
239
+
240
+ async def get_database_schema_for_commit(
241
+ self, commit_sha: str
242
+ ) -> list[EnrichmentV2]:
243
+ """Get database schema enrichments for a commit."""
244
+ return await self.get_enrichments_for_commit(
245
+ commit_sha,
246
+ enrichment_type=ENRICHMENT_TYPE_ARCHITECTURE,
247
+ enrichment_subtype=ENRICHMENT_SUBTYPE_DATABASE_SCHEMA,
248
+ )
249
+
250
+ async def has_database_schema_for_commit(self, commit_sha: str) -> bool:
251
+ """Check if a commit has database schema enrichments."""
252
+ database_schemas = await self.get_database_schema_for_commit(commit_sha)
253
+ return len(database_schemas) > 0
254
+
218
255
  async def associations_for_enrichments(
219
256
  self, enrichments: list[EnrichmentV2]
220
257
  ) -> list[EnrichmentAssociation]:
@@ -0,0 +1 @@
1
+ """Database schema enrichments."""
@@ -0,0 +1,17 @@
1
+ """Database schema enrichment domain entity."""
2
+
3
+ from dataclasses import dataclass
4
+
5
+ from kodit.domain.enrichments.architecture.architecture import ArchitectureEnrichment
6
+
7
+ ENRICHMENT_SUBTYPE_DATABASE_SCHEMA = "database_schema"
8
+
9
+
10
+ @dataclass(frozen=True)
11
+ class DatabaseSchemaEnrichment(ArchitectureEnrichment):
12
+ """Enrichment containing database schema information for a commit."""
13
+
14
+ @property
15
+ def subtype(self) -> str | None:
16
+ """Return the enrichment subtype."""
17
+ return ENRICHMENT_SUBTYPE_DATABASE_SCHEMA
@@ -0,0 +1 @@
1
+ """History enrichments."""
@@ -0,0 +1 @@
1
+ """Commit description enrichments."""
@@ -0,0 +1,17 @@
1
+ """Commit description enrichment domain entity."""
2
+
3
+ from dataclasses import dataclass
4
+
5
+ from kodit.domain.enrichments.history.history import HistoryEnrichment
6
+
7
+ ENRICHMENT_SUBTYPE_COMMIT_DESCRIPTION = "commit_description"
8
+
9
+
10
+ @dataclass(frozen=True)
11
+ class CommitDescriptionEnrichment(HistoryEnrichment):
12
+ """Enrichment containing a description of what a commit did."""
13
+
14
+ @property
15
+ def subtype(self) -> str | None:
16
+ """Return the enrichment subtype."""
17
+ return ENRICHMENT_SUBTYPE_COMMIT_DESCRIPTION
@@ -0,0 +1,18 @@
1
+ """History enrichment domain entity."""
2
+
3
+ from abc import ABC
4
+ from dataclasses import dataclass
5
+
6
+ from kodit.domain.enrichments.enrichment import CommitEnrichment
7
+
8
+ ENRICHMENT_TYPE_HISTORY = "history"
9
+
10
+
11
+ @dataclass(frozen=True)
12
+ class HistoryEnrichment(CommitEnrichment, ABC):
13
+ """Enrichment containing historical information for a commit."""
14
+
15
+ @property
16
+ def type(self) -> str:
17
+ """Return the enrichment type."""
18
+ return ENRICHMENT_TYPE_HISTORY
@@ -213,6 +213,10 @@ class GitAdapter(ABC):
213
213
  ) -> list[str]:
214
214
  """Get only commit SHAs for a branch (much faster than full commit data)."""
215
215
 
216
+ @abstractmethod
217
+ async def get_commit_diff(self, local_path: Path, commit_sha: str) -> str:
218
+ """Get the diff for a specific commit."""
219
+
216
220
 
217
221
  class SnippetRepositoryV2(ABC):
218
222
  """Repository for snippet operations."""
@@ -614,6 +614,8 @@ class TaskOperation(StrEnum):
614
614
  "kodit.commit.create_architecture_enrichment"
615
615
  )
616
616
  CREATE_PUBLIC_API_DOCS_FOR_COMMIT = "kodit.commit.create_public_api_docs"
617
+ CREATE_COMMIT_DESCRIPTION_FOR_COMMIT = "kodit.commit.create_commit_description"
618
+ CREATE_DATABASE_SCHEMA_FOR_COMMIT = "kodit.commit.create_database_schema"
617
619
 
618
620
  def is_repository_operation(self) -> bool:
619
621
  """Check if the task operation is a repository operation."""
@@ -639,6 +641,8 @@ class PrescribedOperations:
639
641
  TaskOperation.CREATE_SUMMARY_EMBEDDINGS_FOR_COMMIT,
640
642
  TaskOperation.CREATE_ARCHITECTURE_ENRICHMENT_FOR_COMMIT,
641
643
  TaskOperation.CREATE_PUBLIC_API_DOCS_FOR_COMMIT,
644
+ TaskOperation.CREATE_COMMIT_DESCRIPTION_FOR_COMMIT,
645
+ TaskOperation.CREATE_DATABASE_SCHEMA_FOR_COMMIT,
642
646
  ]
643
647
  SYNC_REPOSITORY: ClassVar[list[TaskOperation]] = [
644
648
  TaskOperation.SCAN_REPOSITORY,
@@ -532,3 +532,44 @@ class GitPythonAdapter(GitAdapter):
532
532
  raise
533
533
 
534
534
  return await asyncio.get_event_loop().run_in_executor(self.executor, _get_tags)
535
+
536
+ async def get_commit_diff(self, local_path: Path, commit_sha: str) -> str:
537
+ """Get the diff for a specific commit."""
538
+
539
+ def _get_diff() -> str:
540
+ try:
541
+ repo = Repo(local_path)
542
+ commit = repo.commit(commit_sha)
543
+
544
+ # If this is the first commit (no parents), show diff against empty tree
545
+ if not commit.parents:
546
+ diffs = commit.diff(None, create_patch=True)
547
+ if not diffs:
548
+ return ""
549
+ first_diff = diffs[0]
550
+ diff_bytes = first_diff.diff
551
+ if isinstance(diff_bytes, bytes):
552
+ return diff_bytes.decode("utf-8")
553
+ return str(diff_bytes) if diff_bytes is not None else ""
554
+
555
+ # For commits with parents, show diff against first parent
556
+ parent = commit.parents[0]
557
+ diffs = parent.diff(commit, create_patch=True)
558
+
559
+ # Combine all diffs into a single string
560
+ diff_text = ""
561
+ for diff in diffs:
562
+ diff_bytes = diff.diff
563
+ if diff_bytes and isinstance(diff_bytes, bytes):
564
+ diff_text += diff_bytes.decode("utf-8")
565
+ except Exception as e:
566
+ self._log.error(
567
+ f"Failed to get diff for commit {commit_sha} in {local_path}: {e}"
568
+ )
569
+ raise
570
+ else:
571
+ return diff_text
572
+
573
+ return await asyncio.get_event_loop().run_in_executor(
574
+ self.executor, _get_diff
575
+ )
@@ -0,0 +1 @@
1
+ """Database schema detection infrastructure."""