kodit 0.3.2__py3-none-any.whl → 0.3.4__py3-none-any.whl

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 (70) hide show
  1. kodit/_version.py +2 -2
  2. kodit/application/factories/code_indexing_factory.py +56 -29
  3. kodit/application/services/code_indexing_application_service.py +152 -118
  4. kodit/cli.py +14 -41
  5. kodit/domain/entities.py +268 -197
  6. kodit/domain/protocols.py +61 -0
  7. kodit/domain/services/embedding_service.py +1 -1
  8. kodit/domain/services/index_query_service.py +66 -0
  9. kodit/domain/services/index_service.py +282 -0
  10. kodit/domain/value_objects.py +143 -65
  11. kodit/infrastructure/cloning/git/working_copy.py +17 -8
  12. kodit/infrastructure/cloning/metadata.py +37 -67
  13. kodit/infrastructure/embedding/embedding_factory.py +1 -1
  14. kodit/infrastructure/embedding/local_vector_search_repository.py +1 -1
  15. kodit/infrastructure/embedding/vectorchord_vector_search_repository.py +1 -1
  16. kodit/infrastructure/enrichment/null_enrichment_provider.py +4 -10
  17. kodit/infrastructure/git/git_utils.py +1 -63
  18. kodit/infrastructure/ignore/ignore_pattern_provider.py +1 -2
  19. kodit/infrastructure/indexing/auto_indexing_service.py +2 -12
  20. kodit/infrastructure/indexing/fusion_service.py +1 -1
  21. kodit/infrastructure/mappers/__init__.py +1 -0
  22. kodit/infrastructure/mappers/index_mapper.py +344 -0
  23. kodit/infrastructure/slicing/__init__.py +1 -0
  24. kodit/infrastructure/slicing/language_detection_service.py +18 -0
  25. kodit/infrastructure/slicing/slicer.py +894 -0
  26. kodit/infrastructure/sqlalchemy/embedding_repository.py +1 -1
  27. kodit/infrastructure/sqlalchemy/entities.py +203 -0
  28. kodit/infrastructure/sqlalchemy/index_repository.py +579 -0
  29. kodit/mcp.py +0 -7
  30. kodit/migrations/env.py +1 -1
  31. kodit/migrations/versions/4073b33f9436_add_file_processing_flag.py +36 -0
  32. kodit/migrations/versions/4552eb3f23ce_add_summary.py +4 -4
  33. kodit/migrations/versions/7c3bbc2ab32b_add_embeddings_table.py +24 -16
  34. kodit/migrations/versions/85155663351e_initial.py +64 -48
  35. kodit/migrations/versions/c3f5137d30f5_index_all_the_things.py +20 -14
  36. kodit/utils/__init__.py +1 -0
  37. kodit/utils/path_utils.py +54 -0
  38. {kodit-0.3.2.dist-info → kodit-0.3.4.dist-info}/METADATA +9 -4
  39. kodit-0.3.4.dist-info/RECORD +89 -0
  40. kodit/domain/enums.py +0 -9
  41. kodit/domain/repositories.py +0 -128
  42. kodit/domain/services/ignore_service.py +0 -45
  43. kodit/domain/services/indexing_service.py +0 -204
  44. kodit/domain/services/snippet_extraction_service.py +0 -89
  45. kodit/domain/services/snippet_service.py +0 -215
  46. kodit/domain/services/source_service.py +0 -85
  47. kodit/infrastructure/cloning/folder/__init__.py +0 -1
  48. kodit/infrastructure/cloning/folder/factory.py +0 -128
  49. kodit/infrastructure/cloning/folder/working_copy.py +0 -38
  50. kodit/infrastructure/cloning/git/factory.py +0 -153
  51. kodit/infrastructure/indexing/index_repository.py +0 -286
  52. kodit/infrastructure/indexing/snippet_domain_service_factory.py +0 -37
  53. kodit/infrastructure/snippet_extraction/__init__.py +0 -1
  54. kodit/infrastructure/snippet_extraction/language_detection_service.py +0 -39
  55. kodit/infrastructure/snippet_extraction/languages/csharp.scm +0 -12
  56. kodit/infrastructure/snippet_extraction/languages/go.scm +0 -26
  57. kodit/infrastructure/snippet_extraction/languages/java.scm +0 -12
  58. kodit/infrastructure/snippet_extraction/languages/javascript.scm +0 -24
  59. kodit/infrastructure/snippet_extraction/languages/python.scm +0 -22
  60. kodit/infrastructure/snippet_extraction/languages/typescript.scm +0 -25
  61. kodit/infrastructure/snippet_extraction/snippet_extraction_factory.py +0 -67
  62. kodit/infrastructure/snippet_extraction/snippet_query_provider.py +0 -45
  63. kodit/infrastructure/snippet_extraction/tree_sitter_snippet_extractor.py +0 -182
  64. kodit/infrastructure/sqlalchemy/file_repository.py +0 -78
  65. kodit/infrastructure/sqlalchemy/repository.py +0 -133
  66. kodit/infrastructure/sqlalchemy/snippet_repository.py +0 -259
  67. kodit-0.3.2.dist-info/RECORD +0 -103
  68. {kodit-0.3.2.dist-info → kodit-0.3.4.dist-info}/WHEEL +0 -0
  69. {kodit-0.3.2.dist-info → kodit-0.3.4.dist-info}/entry_points.txt +0 -0
  70. {kodit-0.3.2.dist-info → kodit-0.3.4.dist-info}/licenses/LICENSE +0 -0
@@ -1,259 +0,0 @@
1
- """SQLAlchemy implementation of snippet repository."""
2
-
3
- import builtins
4
- from collections.abc import Sequence
5
- from pathlib import Path
6
- from typing import Any
7
-
8
- from sqlalchemy import delete, or_, select
9
- from sqlalchemy.ext.asyncio import AsyncSession
10
-
11
- from kodit.domain.entities import (
12
- Author,
13
- AuthorFileMapping,
14
- Embedding,
15
- File,
16
- Snippet,
17
- Source,
18
- )
19
- from kodit.domain.repositories import SnippetRepository
20
- from kodit.domain.value_objects import (
21
- LanguageMapping,
22
- MultiSearchRequest,
23
- SnippetWithContext,
24
- )
25
-
26
-
27
- class SqlAlchemySnippetRepository(SnippetRepository):
28
- """SQLAlchemy implementation of snippet repository."""
29
-
30
- def __init__(self, session: AsyncSession) -> None:
31
- """Initialize the SQLAlchemy snippet repository.
32
-
33
- Args:
34
- session: The SQLAlchemy async session to use for database operations
35
-
36
- """
37
- self.session = session
38
-
39
- async def get(self, id: int) -> Snippet | None: # noqa: A002
40
- """Get a snippet by ID."""
41
- return await self.session.get(Snippet, id)
42
-
43
- async def save(self, entity: Snippet) -> Snippet:
44
- """Save entity."""
45
- self.session.add(entity)
46
- return entity
47
-
48
- async def delete(self, id: int) -> None: # noqa: A002
49
- """Delete entity by ID."""
50
- snippet = await self.get(id)
51
- if snippet:
52
- await self.session.delete(snippet)
53
-
54
- async def list(self) -> Sequence[Snippet]:
55
- """List all entities."""
56
- return (await self.session.scalars(select(Snippet))).all()
57
-
58
- async def get_by_id(self, snippet_id: int) -> Snippet | None:
59
- """Get a snippet by ID.
60
-
61
- Args:
62
- snippet_id: The ID of the snippet to retrieve
63
-
64
- Returns:
65
- The Snippet instance if found, None otherwise
66
-
67
- """
68
- query = select(Snippet).where(Snippet.id == snippet_id)
69
- result = await self.session.execute(query)
70
- return result.scalar_one_or_none()
71
-
72
- async def get_by_index(self, index_id: int) -> Sequence[Snippet]:
73
- """Get all snippets for an index.
74
-
75
- Args:
76
- index_id: The ID of the index to get snippets for
77
-
78
- Returns:
79
- A list of Snippet instances
80
-
81
- """
82
- query = select(Snippet).where(Snippet.index_id == index_id)
83
- result = await self.session.execute(query)
84
- return list(result.scalars())
85
-
86
- async def delete_by_index(self, index_id: int) -> None:
87
- """Delete all snippets for an index.
88
-
89
- Args:
90
- index_id: The ID of the index to delete snippets for
91
-
92
- """
93
- # First get all snippets for this index
94
- snippets = await self.get_by_index(index_id)
95
-
96
- # Delete all embeddings for these snippets, if there are any
97
- for snippet in snippets:
98
- query = delete(Embedding).where(Embedding.snippet_id == snippet.id)
99
- await self.session.execute(query)
100
-
101
- # Now delete the snippets
102
- query = delete(Snippet).where(Snippet.index_id == index_id)
103
- await self.session.execute(query)
104
-
105
- async def list_snippets(
106
- self, file_path: str | None = None, source_uri: str | None = None
107
- ) -> Sequence[SnippetWithContext]:
108
- """List snippets with optional filtering by file path and source URI.
109
-
110
- Args:
111
- file_path: Optional file or directory path to filter by. Can be relative
112
- (uri) or absolute (cloned_path).
113
- source_uri: Optional source URI to filter by. If None, returns snippets from
114
- all sources.
115
-
116
- Returns:
117
- A sequence of SnippetWithContext instances matching the criteria
118
-
119
- """
120
- # Build the base query with joins for all required entities
121
- query = self._build_base_query()
122
-
123
- # Apply filters
124
- if file_path is not None:
125
- query = query.where(
126
- or_(
127
- File.cloned_path.like(f"%{file_path}%"),
128
- File.uri.like(f"%{file_path}%"),
129
- )
130
- )
131
-
132
- if source_uri is not None:
133
- query = query.where(Source.uri == source_uri)
134
-
135
- result = await self.session.execute(query)
136
- return self._process_results(result)
137
-
138
- def _get_relative_path(self, file_path: str, source_path: str) -> str:
139
- """Calculate the relative path of a file from the source root.
140
-
141
- Args:
142
- file_path: The full path to the file
143
- source_path: The full path to the source root
144
-
145
- Returns:
146
- The relative path from the source root
147
-
148
- """
149
- try:
150
- file_path_obj = Path(file_path)
151
- source_path_obj = Path(source_path)
152
- return str(file_path_obj.relative_to(source_path_obj))
153
- except ValueError:
154
- # If the file is not relative to the source, return the filename
155
- return Path(file_path).name
156
-
157
- def _apply_filters(self, query: Any, filters: Any) -> Any:
158
- """Apply filters to the query.
159
-
160
- Args:
161
- query: The base query to apply filters to
162
- filters: The filters to apply
163
-
164
- Returns:
165
- The modified query with filters applied
166
-
167
- """
168
- if not filters:
169
- return query
170
-
171
- # Language filter (using file extension)
172
- if filters.language:
173
- extensions = LanguageMapping.get_extensions_with_fallback(filters.language)
174
- query = query.where(File.extension.in_(extensions))
175
-
176
- # Author filter
177
- if filters.author:
178
- query = query.where(Author.name.ilike(f"%{filters.author}%"))
179
-
180
- # Date filters
181
- if filters.created_after:
182
- query = query.where(Snippet.created_at >= filters.created_after)
183
-
184
- if filters.created_before:
185
- query = query.where(Snippet.created_at <= filters.created_before)
186
-
187
- # Source repository filter
188
- if filters.source_repo:
189
- query = query.where(Source.uri.like(f"%{filters.source_repo}%"))
190
-
191
- return query
192
-
193
- def _build_base_query(self) -> Any:
194
- """Build the base query with joins for all required entities.
195
-
196
- Returns:
197
- The base query with joins
198
-
199
- """
200
- return (
201
- select(Snippet, File, Source, Author)
202
- .join(File, Snippet.file_id == File.id)
203
- .join(Source, File.source_id == Source.id)
204
- .outerjoin(AuthorFileMapping, AuthorFileMapping.file_id == File.id)
205
- .outerjoin(Author, AuthorFileMapping.author_id == Author.id)
206
- )
207
-
208
- def _process_results(self, result: Any) -> builtins.list[SnippetWithContext]:
209
- """Process query results into SnippetWithContext objects.
210
-
211
- Args:
212
- result: The query result
213
-
214
- Returns:
215
- List of SnippetWithContext objects
216
-
217
- """
218
- # Group results by snippet ID and collect authors
219
- id_to_result: dict[int, SnippetWithContext] = {}
220
- for snippet, file, source, author in result.all():
221
- if snippet.id not in id_to_result:
222
- id_to_result[snippet.id] = SnippetWithContext(
223
- snippet=snippet,
224
- file=file,
225
- source=source,
226
- authors=[],
227
- )
228
- # Add author if it exists (outer join might return None)
229
- if author is not None:
230
- id_to_result[snippet.id].authors.append(author)
231
-
232
- return list(id_to_result.values())
233
-
234
- async def search(self, request: MultiSearchRequest) -> Sequence[SnippetWithContext]:
235
- """Search snippets with filters.
236
-
237
- Args:
238
- request: The search request containing queries and optional filters.
239
-
240
- Returns:
241
- A sequence of SnippetWithContext instances matching the search criteria.
242
-
243
- """
244
- # Build the base query with joins for all required entities
245
- query = self._build_base_query()
246
-
247
- # Apply filters if provided
248
- query = self._apply_filters(query, request.filters)
249
-
250
- # Only apply top_k limit if there are no search queries
251
- # This ensures that when used for pre-filtering (with search queries),
252
- # all matching snippets are returned for the search services to consider
253
- if request.top_k and not any(
254
- [request.keywords, request.code_query, request.text_query]
255
- ):
256
- query = query.limit(request.top_k)
257
-
258
- result = await self.session.execute(query)
259
- return self._process_results(result)
@@ -1,103 +0,0 @@
1
- kodit/.gitignore,sha256=ztkjgRwL9Uud1OEi36hGQeDGk3OLK1NfDEO8YqGYy8o,11
2
- kodit/__init__.py,sha256=aEKHYninUq1yh6jaNfvJBYg-6fenpN132nJt1UU6Jxs,59
3
- kodit/_version.py,sha256=5NopxuphNnyGZECYEkvIUFi0KZxwtDHmTpW5R266eSo,511
4
- kodit/app.py,sha256=uv67TE83fZE7wrA7cz-sKosFrAXlKRr1B7fT-X_gMZQ,2103
5
- kodit/cli.py,sha256=a-bJQ_Jyz201TEbgJPNvPDa0Qyt3kfSKqBuypeVqG_k,17219
6
- kodit/config.py,sha256=VUoUi2t2yGhqOtm5MSZuaasNSklH50hfWn6GOrz3jnU,7518
7
- kodit/database.py,sha256=kI9yBm4uunsgV4-QeVoCBL0wLzU4kYmYv5qZilGnbPE,1740
8
- kodit/log.py,sha256=WOsLRitpCBtJa5IcsyZpKr146kXXHK2nU5VA90gcJdQ,8736
9
- kodit/mcp.py,sha256=6gCJvjTqWGWUicuidbpMPtM1Vtqvlc0fKUua3l-EVPQ,6273
10
- kodit/middleware.py,sha256=I6FOkqG9-8RH5kR1-0ZoQWfE4qLCB8lZYv8H_OCH29o,2714
11
- kodit/reporting.py,sha256=icce1ZyiADsA_Qz-mSjgn2H4SSqKuGfLKnw-yrl9nsg,2722
12
- kodit/application/__init__.py,sha256=mH50wTpgP9dhbKztFsL8Dda9Hi18TSnMVxXtpp4aGOA,35
13
- kodit/application/factories/__init__.py,sha256=bU5CvEnaBePZ7JbkCOp1MGTNP752bnU2uEqmfy5FdRk,37
14
- kodit/application/factories/code_indexing_factory.py,sha256=pyGcTmqhBRjw0tDvp5UpG0roBf3ROqYvBcHyvaLZ-qQ,4927
15
- kodit/application/services/__init__.py,sha256=p5UQNw-H5sxQvs5Etfte93B3cJ1kKW6DNxK34uFvU1E,38
16
- kodit/application/services/code_indexing_application_service.py,sha256=PXnBbDnaYqU6xnKGTcOjmYZbjcQZed-_ehf6Uzhx5v4,12809
17
- kodit/domain/__init__.py,sha256=TCpg4Xx-oF4mKV91lo4iXqMEfBT1OoRSYnbG-zVWolA,66
18
- kodit/domain/entities.py,sha256=6UBPi7zH9bCIgeXg0Poq6LQu01O5JvoHaWqNusNJ3iA,5787
19
- kodit/domain/enums.py,sha256=Ik_h3D3eZ0FsSlPsU0ikm-Yv3Rmvzicffi9yBn19UIE,191
20
- kodit/domain/errors.py,sha256=yIsgCjM_yOFIg8l7l-t7jM8pgeAX4cfPq0owf7iz3DA,106
21
- kodit/domain/interfaces.py,sha256=Jkd0Ob4qSvhZHI9jRPFQ1n5Cv0SvU-y3Z-HCw2ikc4I,742
22
- kodit/domain/repositories.py,sha256=VgNV4NXywh6LtxN1GU2fg8bn8mNZ2wgVXZEugqOOb1M,3796
23
- kodit/domain/value_objects.py,sha256=h9KMAB0neX3gQT2mTC8JxyxxuDXuJ2lyG0czUhkZc0E,15575
24
- kodit/domain/services/__init__.py,sha256=Q1GhCK_PqKHYwYE4tkwDz5BIyXkJngLBBOHhzvX8nzo,42
25
- kodit/domain/services/bm25_service.py,sha256=nsfTan3XtDwXuuAu1LUv-6Jukm6qFKVqqCVymjyepZQ,3625
26
- kodit/domain/services/embedding_service.py,sha256=Wh6Y2NR_GRnud8dq1Q7S6F40aNe-S2UyD5Nqz9LChTM,4507
27
- kodit/domain/services/enrichment_service.py,sha256=XsXg3nV-KN4rqtC7Zro_ZiZ6RSq-1eA1MG6IDzFGyBA,1316
28
- kodit/domain/services/ignore_service.py,sha256=boEN-IRLmUtwO9ZnuACaVFZbIKrtUG8YwnsXKEDIG28,1136
29
- kodit/domain/services/indexing_service.py,sha256=7Yb6lyyd_VpZldK_CVMeOXpzXq-08Et-WRhulCWDQdM,5920
30
- kodit/domain/services/snippet_extraction_service.py,sha256=QW_99bXWpr8g6ZI-hp4Aj57VCSrUf71dLwQca5T6pyg,3065
31
- kodit/domain/services/snippet_service.py,sha256=EyJQoT9UkJdMM2yfC1cFlj0yZVxK5a7NzleeM8lqWR0,7355
32
- kodit/domain/services/source_service.py,sha256=9XGS3imJn65v855cztsJSaaFod6LhkF2xfUVMaytx-A,3068
33
- kodit/infrastructure/__init__.py,sha256=HzEYIjoXnkz_i_MHO2e0sIVYweUcRnl2RpyBiTbMObU,28
34
- kodit/infrastructure/bm25/__init__.py,sha256=DmGbrEO34FOJy4e685BbyxLA7gPW1eqs2gAxsp6JOuM,34
35
- kodit/infrastructure/bm25/bm25_factory.py,sha256=I4eo7qRslnyXIRkBf-StZ5ga2Evrr5J5YFocTChFD3g,884
36
- kodit/infrastructure/bm25/local_bm25_repository.py,sha256=B1ggfHdjC9sFIh62MmSul2tsutWsWFQx5S1Xn07X_I8,4531
37
- kodit/infrastructure/bm25/vectorchord_bm25_repository.py,sha256=Jyic55V-38XeTad462Ge751iKyc0X8RNVBM9pr_DVJk,7439
38
- kodit/infrastructure/cloning/__init__.py,sha256=IzIvX-yeRRFZ-lfvPVSEe_qXszO6DGQdjKwwDigexyQ,30
39
- kodit/infrastructure/cloning/metadata.py,sha256=Z8Vtr7Nl5UuS7NZYf9Aooedr8SMk4nEkBjNUPyaPMVQ,4342
40
- kodit/infrastructure/cloning/folder/__init__.py,sha256=w6ykrVtbYJlUDEXAjqgf6w2rMsUMCrrpIbl3QMjubgY,37
41
- kodit/infrastructure/cloning/folder/factory.py,sha256=vl1hwnYA7lczjotn2fahJQAt7IK96CSArx8cSaRFKeY,4242
42
- kodit/infrastructure/cloning/folder/working_copy.py,sha256=FPhwzuPj40yGoYvwcm9VG8mv8MbJxwfby_N5JS-_daA,1154
43
- kodit/infrastructure/cloning/git/__init__.py,sha256=20ePcp0qE6BuLsjsv4KYB1DzKhMIMsPXwEqIEZtjTJs,34
44
- kodit/infrastructure/cloning/git/factory.py,sha256=cY0cxapp0NCvjMRpzesW_qRzbWbh-tMKIeAj0Eodyhw,5409
45
- kodit/infrastructure/cloning/git/working_copy.py,sha256=IwXQ0Ta59ykVkrxAyhJk0ijOO6aaub7UI-bXFDyNT0k,1562
46
- kodit/infrastructure/embedding/__init__.py,sha256=F-8nLlWAerYJ0MOIA4tbXHLan8bW5rRR84vzxx6tRKI,39
47
- kodit/infrastructure/embedding/embedding_factory.py,sha256=1AypjhWJGxvLnZt1SEH_FHPk9P0Vkt9fXdSGzFPp2ow,3432
48
- kodit/infrastructure/embedding/local_vector_search_repository.py,sha256=cEclb0tllFDsFBMKUUh8sL4FXFId1Nymh8WTqIORfow,3486
49
- kodit/infrastructure/embedding/vectorchord_vector_search_repository.py,sha256=BFB9txeoNKHkuB0PJA-mZ2zi78zJogW9XvAQzIFeroA,8011
50
- kodit/infrastructure/embedding/embedding_providers/__init__.py,sha256=qeZ-oAIAxMl5QqebGtO1lq-tHjl_ucAwOXePklcwwGk,34
51
- kodit/infrastructure/embedding/embedding_providers/batching.py,sha256=a8CL9PX2VLmbeg616fc_lQzfC4BWTVn32m4SEhXpHxc,3279
52
- kodit/infrastructure/embedding/embedding_providers/hash_embedding_provider.py,sha256=V6OdCuWyQQOvo3OJGRi-gBKDApIcrELydFg7T696P5s,2257
53
- kodit/infrastructure/embedding/embedding_providers/local_embedding_provider.py,sha256=U5fc8jUP8wF-nq1zo-CfSbJbLQyE-3muKmRCaYGtytk,4387
54
- kodit/infrastructure/embedding/embedding_providers/openai_embedding_provider.py,sha256=LIK9Iir7geraZoqiaNbeHv3hXrghZRDpYGJDEjZaqzQ,4086
55
- kodit/infrastructure/enrichment/__init__.py,sha256=8acZKNzql8Fs0lceFu9U3KoUrOptRBtVIxr_Iw6lz3Y,40
56
- kodit/infrastructure/enrichment/enrichment_factory.py,sha256=Pz0Rb1I68udL_zXY3KvJ3LR3aK_9mdF1nMRGQUu4lM0,1828
57
- kodit/infrastructure/enrichment/local_enrichment_provider.py,sha256=8CATNtgMHgBRt24GrYEwaZKrroNCxMJS-39xQJoG3N0,3818
58
- kodit/infrastructure/enrichment/null_enrichment_provider.py,sha256=5Ksyxl3qDLxUjmOeIdHZ0UAIULy7RcbLXJoT7_CNXoQ,775
59
- kodit/infrastructure/enrichment/openai_enrichment_provider.py,sha256=fenq4HiJ2UkrzsE2D0A0qpmro38z9mKaIzKKU5v7hnY,3189
60
- kodit/infrastructure/git/__init__.py,sha256=0iMosFzudj4_xNIMe2SRbV6l5bWqkjnUsZoFsoZFuM8,33
61
- kodit/infrastructure/git/git_utils.py,sha256=2DH6cyTjDRwFfL5Bzt1y2w0DwHZNypbC6R0Gm_A3hhg,2476
62
- kodit/infrastructure/ignore/__init__.py,sha256=VzFv8XOzHmsu0MEGnWVSF6KsgqLBmvHlRqAkT1Xb1MY,36
63
- kodit/infrastructure/ignore/ignore_pattern_provider.py,sha256=9m2XCsgW87UBTfzHr6Z0Ns6WpzwkLir3zyBY3PwsgXk,2225
64
- kodit/infrastructure/indexing/__init__.py,sha256=7UPRa2jwCAsa0Orsp6PqXSF8iIXJVzXHMFmrKkI9yH8,38
65
- kodit/infrastructure/indexing/auto_indexing_service.py,sha256=uXggladN3PTU5Jzhz0Kq-0aObvq3Dq9YbjYKCSkaQA8,3131
66
- kodit/infrastructure/indexing/fusion_service.py,sha256=mXUUcx3-8e75mWkxXMfl30HIoFXrTNHzB1w90MmEbak,1806
67
- kodit/infrastructure/indexing/index_repository.py,sha256=4m_kFHQ3OSQdf2pgR1RM72g-k4UZHyHbtYKUwJ8huRs,8719
68
- kodit/infrastructure/indexing/indexing_factory.py,sha256=LPjPCps_wJ9M_fZGRP02bfc2pvYc50ZSTYI99XwRRPg,918
69
- kodit/infrastructure/indexing/snippet_domain_service_factory.py,sha256=OMp9qRJSAT3oWqsMyF1fgI2Mb_G-SA22crbbaCb7c-Q,1253
70
- kodit/infrastructure/snippet_extraction/__init__.py,sha256=v6KqrRDjSj0nt87m7UwRGx2GN_fz_14VWq9Q0uABR_s,54
71
- kodit/infrastructure/snippet_extraction/language_detection_service.py,sha256=Lo9xPLVia-70yP9gzyH4cQcBQzsp7WXjGOa5NBggScg,1158
72
- kodit/infrastructure/snippet_extraction/snippet_extraction_factory.py,sha256=YA72kneJhR1nvgbYwH7fFAvTSMJw9bDoLGLhAAVpmq0,2272
73
- kodit/infrastructure/snippet_extraction/snippet_query_provider.py,sha256=pLjFExJx5bX4s6a_mMA4-AfjtfBaC2wjTV3GjYD2HVE,1284
74
- kodit/infrastructure/snippet_extraction/tree_sitter_snippet_extractor.py,sha256=8B14jy_QS9SBA5jNpLtSSOayKP1WgMeCQEsZPuyAs8o,6190
75
- kodit/infrastructure/snippet_extraction/languages/csharp.scm,sha256=gbBN4RiV1FBuTJF6orSnDFi8H9JwTw-d4piLJYsWUsc,222
76
- kodit/infrastructure/snippet_extraction/languages/go.scm,sha256=SEX9mTOrhP2KiQW7oflDKkd21u5dK56QbJ4LvTDxY8A,533
77
- kodit/infrastructure/snippet_extraction/languages/java.scm,sha256=kSEZT0QJAuhT7WpR2PklYiCX-03qRRpCAlcxfIbXPt4,227
78
- kodit/infrastructure/snippet_extraction/languages/javascript.scm,sha256=Ini5TsVNmcBKQ8aL46a5Id9ut0g9UdmvmVqdMqRJtFk,446
79
- kodit/infrastructure/snippet_extraction/languages/python.scm,sha256=ee85R9PBzwye3IMTE7-iVoKWd_ViU3EJISTyrFGrVeo,429
80
- kodit/infrastructure/snippet_extraction/languages/typescript.scm,sha256=U-ujbbv4tylbUBj9wuhL-e5cW6hmgPCNs4xrIX3r_hE,448
81
- kodit/infrastructure/sqlalchemy/__init__.py,sha256=UXPMSF_hgWaqr86cawRVqM8XdVNumQyyK5B8B97GnlA,33
82
- kodit/infrastructure/sqlalchemy/embedding_repository.py,sha256=u29RVt4W0WqHj6TkrydMHw2iF5_jERHtlidDjWRQvqc,7886
83
- kodit/infrastructure/sqlalchemy/file_repository.py,sha256=9_kXHJ1YiWA1ingpvBNq8cuxkMu59PHwl_m9_Ttnq2o,2353
84
- kodit/infrastructure/sqlalchemy/repository.py,sha256=EpZnOjR3wfPEqIauWw_KczpkSqBQPTq5sIyCpJCuW2w,4565
85
- kodit/infrastructure/sqlalchemy/snippet_repository.py,sha256=aBsr2U6RUQftWnkOHka809WH9YxS4Tpg34knZ--WNms,8473
86
- kodit/infrastructure/ui/__init__.py,sha256=CzbLOBwIZ6B6iAHEd1L8cIBydCj-n_kobxJAhz2I9_Y,32
87
- kodit/infrastructure/ui/progress.py,sha256=BaAeMEgXlSSb0c_t_NPxnThIktkzzCS9kegb5ExULJs,4791
88
- kodit/infrastructure/ui/spinner.py,sha256=GcP115qtR0VEnGfMEtsGoAUpRzVGUSfiUXfoJJERngA,2357
89
- kodit/migrations/README,sha256=ISVtAOvqvKk_5ThM5ioJE-lMkvf9IbknFUFVU_vPma4,58
90
- kodit/migrations/__init__.py,sha256=lP5MuwlyWRMO6UcDWnQcQ3G-GYHcFb6rl9gYPHJ1sjo,40
91
- kodit/migrations/env.py,sha256=j89vEWdSgfnreTAz5ZvFAPlsMGI8SfKti0MlWhm7Jbc,2364
92
- kodit/migrations/script.py.mako,sha256=zWziKtiwYKEWuwPV_HBNHwa9LCT45_bi01-uSNFaOOE,703
93
- kodit/migrations/versions/4552eb3f23ce_add_summary.py,sha256=_saoHs5HGzc_z2OzBkFKrifTLQfoNox3BpSBeiKg_f8,870
94
- kodit/migrations/versions/7c3bbc2ab32b_add_embeddings_table.py,sha256=-61qol9PfQKILCDQRA5jEaats9aGZs9Wdtp-j-38SF4,1644
95
- kodit/migrations/versions/85155663351e_initial.py,sha256=Cg7zlF871o9ShV5rQMQ1v7hRV7fI59veDY9cjtTrs-8,3306
96
- kodit/migrations/versions/9e53ea8bb3b0_add_authors.py,sha256=a32Zm8KUQyiiLkjKNPYdaJDgjW6VsV-GhaLnPnK_fpI,3884
97
- kodit/migrations/versions/__init__.py,sha256=9-lHzptItTzq_fomdIRBegQNm4Znx6pVjwD4MiqRIdo,36
98
- kodit/migrations/versions/c3f5137d30f5_index_all_the_things.py,sha256=rI8LmjF-I2OMxZ2nOIF_NRmqOLXe45hL_iz_nx97DTQ,1680
99
- kodit-0.3.2.dist-info/METADATA,sha256=JDWIO27pGDjCMUm5gRWUWjdQhRgEGC8J0O3gMFki6p8,6358
100
- kodit-0.3.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
101
- kodit-0.3.2.dist-info/entry_points.txt,sha256=hoTn-1aKyTItjnY91fnO-rV5uaWQLQ-Vi7V5et2IbHY,40
102
- kodit-0.3.2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
103
- kodit-0.3.2.dist-info/RECORD,,
File without changes