kodit 0.3.0__py3-none-any.whl → 0.3.1__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.

kodit/_version.py CHANGED
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.3.0'
21
- __version_tuple__ = version_tuple = (0, 3, 0)
20
+ __version__ = version = '0.3.1'
21
+ __version_tuple__ = version_tuple = (0, 3, 1)
@@ -27,7 +27,6 @@ from kodit.domain.value_objects import (
27
27
  MultiSearchResult,
28
28
  SearchRequest,
29
29
  SearchResult,
30
- SnippetListItem,
31
30
  )
32
31
  from kodit.log import log_event
33
32
  from kodit.reporting import Reporter
@@ -225,17 +224,17 @@ class CodeIndexingApplicationService:
225
224
 
226
225
  return [
227
226
  MultiSearchResult(
228
- id=snippet["id"],
229
- uri=file["uri"],
230
- content=snippet["content"],
227
+ id=result.snippet.id,
228
+ uri=result.file.uri,
229
+ content=result.snippet.content,
231
230
  original_scores=fr.original_scores,
232
231
  )
233
- for (file, snippet), fr in zip(search_results, final_results, strict=True)
232
+ for result, fr in zip(search_results, final_results, strict=True)
234
233
  ]
235
234
 
236
235
  async def list_snippets(
237
236
  self, file_path: str | None = None, source_uri: str | None = None
238
- ) -> list[SnippetListItem]:
237
+ ) -> list[MultiSearchResult]:
239
238
  """List snippets with optional filtering."""
240
239
  log_event("kodit.index.list_snippets")
241
240
  return await self.snippet_domain_service.list_snippets(file_path, source_uri)
kodit/cli.py CHANGED
@@ -260,12 +260,7 @@ async def code( # noqa: PLR0913
260
260
  return
261
261
 
262
262
  for snippet in snippets:
263
- click.echo("-" * 80)
264
- click.echo(f"{snippet.uri}")
265
- click.echo(f"Original scores: {snippet.original_scores}")
266
- click.echo(snippet.content)
267
- click.echo("-" * 80)
268
- click.echo()
263
+ click.echo(str(snippet))
269
264
 
270
265
 
271
266
  @search.command()
@@ -322,12 +317,7 @@ async def keyword( # noqa: PLR0913
322
317
  return
323
318
 
324
319
  for snippet in snippets:
325
- click.echo("-" * 80)
326
- click.echo(f"{snippet.uri}")
327
- click.echo(f"Original scores: {snippet.original_scores}")
328
- click.echo(snippet.content)
329
- click.echo("-" * 80)
330
- click.echo()
320
+ click.echo(str(snippet))
331
321
 
332
322
 
333
323
  @search.command()
@@ -387,12 +377,7 @@ async def text( # noqa: PLR0913
387
377
  return
388
378
 
389
379
  for snippet in snippets:
390
- click.echo("-" * 80)
391
- click.echo(f"{snippet.uri}")
392
- click.echo(f"Original scores: {snippet.original_scores}")
393
- click.echo(snippet.content)
394
- click.echo("-" * 80)
395
- click.echo()
380
+ click.echo(str(snippet))
396
381
 
397
382
 
398
383
  @search.command()
@@ -462,12 +447,7 @@ async def hybrid( # noqa: PLR0913
462
447
  return
463
448
 
464
449
  for snippet in snippets:
465
- click.echo("-" * 80)
466
- click.echo(f"{snippet.uri}")
467
- click.echo(f"Original scores: {snippet.original_scores}")
468
- click.echo(snippet.content)
469
- click.echo("-" * 80)
470
- click.echo()
450
+ click.echo(str(snippet))
471
451
 
472
452
 
473
453
  @cli.group()
@@ -499,9 +479,7 @@ async def snippets(
499
479
  )
500
480
  snippets = await service.list_snippets(file_path=by_path, source_uri=by_source)
501
481
  for snippet in snippets:
502
- click.echo(f"{snippet.id}: [{snippet.source_uri}] {snippet.file_path}")
503
- click.echo(f" {snippet.content}")
504
- click.echo()
482
+ click.echo(str(snippet))
505
483
 
506
484
 
507
485
  @cli.command()
kodit/config.py CHANGED
@@ -9,7 +9,12 @@ from typing import TYPE_CHECKING, Any, Literal, TypeVar
9
9
 
10
10
  import click
11
11
  from pydantic import BaseModel, Field, field_validator
12
- from pydantic_settings import BaseSettings, SettingsConfigDict
12
+ from pydantic_settings import (
13
+ BaseSettings,
14
+ EnvSettingsSource,
15
+ PydanticBaseSettingsSource,
16
+ SettingsConfigDict,
17
+ )
13
18
 
14
19
  if TYPE_CHECKING:
15
20
  from collections.abc import Callable, Coroutine
@@ -57,7 +62,7 @@ class AutoIndexingConfig(BaseModel):
57
62
 
58
63
  @field_validator("sources", mode="before")
59
64
  @classmethod
60
- def parse_sources(cls, v: Any) -> list[AutoIndexingSource]:
65
+ def parse_sources(cls, v: Any) -> Any:
61
66
  """Parse sources from environment variables or other formats."""
62
67
  if v is None:
63
68
  return []
@@ -76,6 +81,36 @@ class AutoIndexingConfig(BaseModel):
76
81
  return v
77
82
 
78
83
 
84
+ class CustomAutoIndexingEnvSource(EnvSettingsSource):
85
+ """Custom environment source for parsing AutoIndexingConfig."""
86
+
87
+ def __call__(self) -> dict[str, Any]:
88
+ """Load settings from env vars with custom auto-indexing parsing."""
89
+ d: dict[str, Any] = {}
90
+
91
+ # First get the standard env vars
92
+ env_vars = super().__call__()
93
+ d.update(env_vars)
94
+
95
+ # Custom parsing for auto-indexing sources
96
+ auto_indexing_sources = []
97
+ i = 0
98
+ while True:
99
+ # Note: env_vars keys are lowercase due to Pydantic Settings normalization
100
+ uri_key = f"auto_indexing_sources_{i}_uri"
101
+ if uri_key in self.env_vars:
102
+ uri_value = self.env_vars[uri_key]
103
+ auto_indexing_sources.append({"uri": uri_value})
104
+ i += 1
105
+ else:
106
+ break
107
+
108
+ if auto_indexing_sources:
109
+ d["auto_indexing"] = {"sources": auto_indexing_sources}
110
+
111
+ return d
112
+
113
+
79
114
  class AppContext(BaseSettings):
80
115
  """Global context for the kodit project. Provides a shared state for the app."""
81
116
 
@@ -83,10 +118,35 @@ class AppContext(BaseSettings):
83
118
  env_file=".env",
84
119
  env_file_encoding="utf-8",
85
120
  env_nested_delimiter="_",
121
+ env_nested_max_split=1,
86
122
  nested_model_default_partial_update=True,
87
123
  extra="ignore",
88
124
  )
89
125
 
126
+ @classmethod
127
+ def settings_customise_sources(
128
+ cls,
129
+ settings_cls: type[BaseSettings],
130
+ init_settings: PydanticBaseSettingsSource,
131
+ env_settings: PydanticBaseSettingsSource, # noqa: ARG003
132
+ dotenv_settings: PydanticBaseSettingsSource,
133
+ file_secret_settings: PydanticBaseSettingsSource,
134
+ ) -> tuple[PydanticBaseSettingsSource, ...]:
135
+ """Customize settings sources to use custom auto-indexing parsing."""
136
+ custom_env_settings = CustomAutoIndexingEnvSource(
137
+ settings_cls,
138
+ env_nested_delimiter=settings_cls.model_config.get("env_nested_delimiter"),
139
+ env_ignore_empty=settings_cls.model_config.get("env_ignore_empty", False),
140
+ env_parse_none_str=settings_cls.model_config.get("env_parse_none_str", ""),
141
+ env_parse_enums=settings_cls.model_config.get("env_parse_enums", None),
142
+ )
143
+ return (
144
+ init_settings,
145
+ custom_env_settings,
146
+ dotenv_settings,
147
+ file_secret_settings,
148
+ )
149
+
90
150
  data_dir: Path = Field(default=DEFAULT_BASE_DIR)
91
151
  db_url: str = Field(default=DEFAULT_DB_URL)
92
152
  log_level: str = Field(default=DEFAULT_LOG_LEVEL)
@@ -142,8 +202,6 @@ class AppContext(BaseSettings):
142
202
 
143
203
  with_app_context = click.make_pass_decorator(AppContext)
144
204
 
145
- T = TypeVar("T")
146
-
147
205
 
148
206
  def wrap_async(f: Callable[..., Coroutine[Any, Any, T]]) -> Callable[..., T]:
149
207
  """Decorate async Click commands.
@@ -8,6 +8,7 @@ from kodit.domain.value_objects import (
8
8
  FusionResult,
9
9
  IndexCreateRequest,
10
10
  IndexView,
11
+ SnippetWithFile,
11
12
  )
12
13
 
13
14
 
@@ -51,7 +52,7 @@ class IndexRepository(ABC):
51
52
  """Update the content of an existing snippet."""
52
53
 
53
54
  @abstractmethod
54
- async def list_snippets_by_ids(self, ids: list[int]) -> list[tuple[dict, dict]]:
55
+ async def list_snippets_by_ids(self, ids: list[int]) -> list[SnippetWithFile]:
55
56
  """List snippets by IDs."""
56
57
 
57
58
 
@@ -190,14 +191,14 @@ class IndexingDomainService:
190
191
  """
191
192
  return self.fusion_service.reciprocal_rank_fusion(rankings, k)
192
193
 
193
- async def get_snippets_by_ids(self, ids: list[int]) -> list[tuple[dict, dict]]:
194
+ async def get_snippets_by_ids(self, ids: list[int]) -> list[SnippetWithFile]:
194
195
  """Get snippets by IDs.
195
196
 
196
197
  Args:
197
198
  ids: List of snippet IDs to retrieve.
198
199
 
199
200
  Returns:
200
- List of (file, snippet) tuples.
201
+ List of SnippetWithFile objects containing file and snippet information.
201
202
 
202
203
  """
203
204
  return await self.index_repository.list_snippets_by_ids(ids)
@@ -14,6 +14,7 @@ from kodit.domain.services.snippet_extraction_service import (
14
14
  )
15
15
  from kodit.domain.value_objects import (
16
16
  MultiSearchRequest,
17
+ MultiSearchResult,
17
18
  SnippetExtractionRequest,
18
19
  SnippetListItem,
19
20
  )
@@ -170,7 +171,7 @@ class SnippetDomainService:
170
171
 
171
172
  async def list_snippets(
172
173
  self, file_path: str | None = None, source_uri: str | None = None
173
- ) -> list[SnippetListItem]:
174
+ ) -> list[MultiSearchResult]:
174
175
  """List snippets with optional filtering.
175
176
 
176
177
  Args:
@@ -178,10 +179,22 @@ class SnippetDomainService:
178
179
  source_uri: Optional source URI to filter by
179
180
 
180
181
  Returns:
181
- List of snippet items matching the criteria
182
+ List of search results matching the criteria
182
183
 
183
184
  """
184
- return list(await self.snippet_repository.list_snippets(file_path, source_uri))
185
+ snippet_items = await self.snippet_repository.list_snippets(
186
+ file_path, source_uri
187
+ )
188
+ # Convert SnippetListItem to MultiSearchResult for unified display format
189
+ return [
190
+ MultiSearchResult(
191
+ id=item.id,
192
+ uri=item.source_uri,
193
+ content=item.content,
194
+ original_scores=[],
195
+ )
196
+ for item in snippet_items
197
+ ]
185
198
 
186
199
  def _should_process_file(self, file: Any) -> bool:
187
200
  """Check if a file should be processed for snippet extraction.
@@ -182,6 +182,18 @@ class MultiSearchResult:
182
182
  content: str
183
183
  original_scores: list[float]
184
184
 
185
+ def __str__(self) -> str:
186
+ """Return formatted string representation for all snippet display."""
187
+ lines = [
188
+ "-" * 80,
189
+ f"ID: {self.id} | {self.uri}",
190
+ f"Original scores: {self.original_scores}",
191
+ self.content,
192
+ "-" * 80,
193
+ "",
194
+ ]
195
+ return "\n".join(lines)
196
+
185
197
 
186
198
  @dataclass
187
199
  class FusionRequest:
@@ -289,6 +301,29 @@ class SnippetListItem:
289
301
  source_uri: str
290
302
 
291
303
 
304
+ @dataclass
305
+ class FileInfo:
306
+ """Domain model for file information."""
307
+
308
+ uri: str
309
+
310
+
311
+ @dataclass
312
+ class SnippetInfo:
313
+ """Domain model for snippet information."""
314
+
315
+ id: int
316
+ content: str
317
+
318
+
319
+ @dataclass
320
+ class SnippetWithFile:
321
+ """Domain model for snippet with associated file information."""
322
+
323
+ file: FileInfo
324
+ snippet: SnippetInfo
325
+
326
+
292
327
  class LanguageMapping:
293
328
  """Value object for language-to-extension mappings.
294
329
 
@@ -8,7 +8,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
8
8
 
9
9
  from kodit.domain.entities import Embedding, File, Index, Snippet, Source
10
10
  from kodit.domain.services.indexing_service import IndexRepository
11
- from kodit.domain.value_objects import IndexView
11
+ from kodit.domain.value_objects import FileInfo, IndexView, SnippetInfo, SnippetWithFile
12
12
 
13
13
  T = TypeVar("T")
14
14
 
@@ -221,14 +221,14 @@ class SQLAlchemyIndexRepository(IndexRepository):
221
221
  snippet.content = content
222
222
  # SQLAlchemy will automatically track this change
223
223
 
224
- async def list_snippets_by_ids(self, ids: list[int]) -> list[tuple[dict, dict]]:
224
+ async def list_snippets_by_ids(self, ids: list[int]) -> list[SnippetWithFile]:
225
225
  """List snippets by IDs.
226
226
 
227
227
  Args:
228
228
  ids: List of snippet IDs to retrieve.
229
229
 
230
230
  Returns:
231
- List of (file, snippet) tuples.
231
+ List of SnippetWithFile objects containing file and snippet information.
232
232
 
233
233
  """
234
234
  query = (
@@ -241,27 +241,9 @@ class SQLAlchemyIndexRepository(IndexRepository):
241
241
  # Create a dictionary for O(1) lookup of results by ID
242
242
  id_to_result = {}
243
243
  for snippet, file in rows.all():
244
- id_to_result[snippet.id] = (
245
- {
246
- "id": file.id,
247
- "source_id": file.source_id,
248
- "mime_type": file.mime_type,
249
- "uri": file.uri,
250
- "cloned_path": file.cloned_path,
251
- "sha256": file.sha256,
252
- "size_bytes": file.size_bytes,
253
- "extension": file.extension,
254
- "created_at": file.created_at,
255
- "updated_at": file.updated_at,
256
- },
257
- {
258
- "id": snippet.id,
259
- "file_id": snippet.file_id,
260
- "index_id": snippet.index_id,
261
- "content": snippet.content,
262
- "created_at": snippet.created_at,
263
- "updated_at": snippet.updated_at,
264
- },
244
+ id_to_result[snippet.id] = SnippetWithFile(
245
+ file=FileInfo(uri=file.uri),
246
+ snippet=SnippetInfo(id=snippet.id, content=snippet.content)
265
247
  )
266
248
 
267
249
  # Check that all IDs are present
kodit/mcp.py CHANGED
@@ -203,7 +203,7 @@ async def search( # noqa: PLR0913
203
203
 
204
204
  def output_fusion(snippets: list[MultiSearchResult]) -> str:
205
205
  """Fuse the snippets into a single output."""
206
- return "\n\n".join(f"{snippet.uri}\n{snippet.content}" for snippet in snippets)
206
+ return "\n\n".join(str(snippet) for snippet in snippets)
207
207
 
208
208
 
209
209
  @mcp.tool()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kodit
3
- Version: 0.3.0
3
+ Version: 0.3.1
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/
@@ -83,7 +83,7 @@ If you're an engineer working with AI-powered coding assistants, Kodit helps by
83
83
  providing relevant and up-to-date examples of your task so that LLMs make less mistakes
84
84
  and produce fewer hallucinations.
85
85
 
86
- ## Features
86
+ ## Features
87
87
 
88
88
  ### Codebase Indexing
89
89
 
@@ -94,7 +94,11 @@ code. This index is used to build a snippet library, ready for ingestion into an
94
94
  - Build comprehensive snippet libraries for LLM ingestion
95
95
  - Support for multiple codebase types and languages
96
96
  - Efficient indexing and search capabilities
97
- - Privacy first: respects .gitignore and .noindex files.
97
+ - Privacy first: respects .gitignore and .noindex files
98
+ - **NEW in 0.3**: Auto-indexing configuration for shared server deployments
99
+ - **NEW in 0.3**: Enhanced Git provider support including Azure DevOps
100
+ - **NEW in 0.3**: Index private repositories via a PAT
101
+ - **NEW in 0.3**: Improved progress monitoring and reporting during indexing
98
102
 
99
103
  ### MCP Server
100
104
 
@@ -107,6 +111,7 @@ intent. Kodit has been tested to work well with:
107
111
  - [Cursor](https://docs.helix.ml/kodit/getting-started/integration/#integration-with-cursor)
108
112
  - [Cline](https://docs.helix.ml/kodit/getting-started/integration/#integration-with-cline)
109
113
  - Please contribute more instructions! ... any other assistant is likely to work ...
114
+ - **New in 0.3**: Filter snippets by source, language, author or timestamp.
110
115
 
111
116
  ### Enterprise Ready
112
117
 
@@ -127,7 +132,12 @@ Supported providers:
127
132
  - Secure, private LLM enclave with [Helix](https://helix.ml).
128
133
  - Any other OpenAI compatible API
129
134
 
130
- ## 🚀 Quick Start
135
+ **NEW in 0.3**: Enhanced deployment options:
136
+
137
+ - Docker Compose configurations with VectorChord
138
+ - Kubernetes manifests for production deployments
139
+
140
+ ## Quick Start
131
141
 
132
142
  1. [Install Kodit](https://docs.helix.ml/kodit/getting-started/installation/)
133
143
  2. [Index codebases](https://docs.helix.ml/kodit/getting-started/quick-start/)
@@ -1,34 +1,34 @@
1
1
  kodit/.gitignore,sha256=ztkjgRwL9Uud1OEi36hGQeDGk3OLK1NfDEO8YqGYy8o,11
2
2
  kodit/__init__.py,sha256=aEKHYninUq1yh6jaNfvJBYg-6fenpN132nJt1UU6Jxs,59
3
- kodit/_version.py,sha256=AGmG_Lx0-9ztFw_7d9mYbaYuC-2abxE1oXOUNAY29YY,511
3
+ kodit/_version.py,sha256=lOWWIGJeBi0KkFopWU_n3GH71C1PsaZ-ZYDfxFkne6c,511
4
4
  kodit/app.py,sha256=uv67TE83fZE7wrA7cz-sKosFrAXlKRr1B7fT-X_gMZQ,2103
5
- kodit/cli.py,sha256=ihecBP7Og0F-wXYZ63TMeYzuqgFpfd7O-g4NRB3pufo,16864
6
- kodit/config.py,sha256=myWtVujjd7xQh3tPK_zGC1L5D5PYoPknYvUBoMLJ1kM,5414
5
+ kodit/cli.py,sha256=fGk2VMJDrgaj0T9w-97Xh6LVqus6vVehWJUTkjgWtyk,16013
6
+ kodit/config.py,sha256=VUoUi2t2yGhqOtm5MSZuaasNSklH50hfWn6GOrz3jnU,7518
7
7
  kodit/database.py,sha256=kI9yBm4uunsgV4-QeVoCBL0wLzU4kYmYv5qZilGnbPE,1740
8
8
  kodit/log.py,sha256=sHPHYetlMcKTor2VaFLMyao1_fZ_xhuzqXCAt5F5UMU,8575
9
- kodit/mcp.py,sha256=onmUbZ1-mnBkQOUF6KymNZMiTo19tt6pDOmyBQEz8Jg,6454
9
+ kodit/mcp.py,sha256=4rvj76SUbO-FfoJgOY31CR5r0y0VxMAKkVKNuKLgwB0,6431
10
10
  kodit/middleware.py,sha256=I6FOkqG9-8RH5kR1-0ZoQWfE4qLCB8lZYv8H_OCH29o,2714
11
11
  kodit/reporting.py,sha256=icce1ZyiADsA_Qz-mSjgn2H4SSqKuGfLKnw-yrl9nsg,2722
12
12
  kodit/application/__init__.py,sha256=mH50wTpgP9dhbKztFsL8Dda9Hi18TSnMVxXtpp4aGOA,35
13
13
  kodit/application/factories/__init__.py,sha256=bU5CvEnaBePZ7JbkCOp1MGTNP752bnU2uEqmfy5FdRk,37
14
14
  kodit/application/factories/code_indexing_factory.py,sha256=pyGcTmqhBRjw0tDvp5UpG0roBf3ROqYvBcHyvaLZ-qQ,4927
15
15
  kodit/application/services/__init__.py,sha256=p5UQNw-H5sxQvs5Etfte93B3cJ1kKW6DNxK34uFvU1E,38
16
- kodit/application/services/code_indexing_application_service.py,sha256=EHg2X3tN2nU8XBvIoB1xqV7jGypACmawiBmg7HZ0lcs,12537
16
+ kodit/application/services/code_indexing_application_service.py,sha256=HGaZDZG0GPLxxQ1-GUgeEx_AsZhG0FAtdUugoD68uI0,12521
17
17
  kodit/domain/__init__.py,sha256=TCpg4Xx-oF4mKV91lo4iXqMEfBT1OoRSYnbG-zVWolA,66
18
18
  kodit/domain/entities.py,sha256=fErA9ZTAqlofkqhBte8FOnV0PHf1MUORb37bW0-Dgc4,5624
19
19
  kodit/domain/enums.py,sha256=Ik_h3D3eZ0FsSlPsU0ikm-Yv3Rmvzicffi9yBn19UIE,191
20
20
  kodit/domain/errors.py,sha256=yIsgCjM_yOFIg8l7l-t7jM8pgeAX4cfPq0owf7iz3DA,106
21
21
  kodit/domain/interfaces.py,sha256=Jkd0Ob4qSvhZHI9jRPFQ1n5Cv0SvU-y3Z-HCw2ikc4I,742
22
22
  kodit/domain/repositories.py,sha256=KAIx_-qZD68pAByc1JNVxSCRLjseayHKn5ykqsE6uWw,3781
23
- kodit/domain/value_objects.py,sha256=iIFtn9D75NLx0NjHrxXvwTO6Z06Lrx0gKFkezzlwTGc,12777
23
+ kodit/domain/value_objects.py,sha256=7OtjtgdVB0rhWwezJB_-A6cCqk_ijmkefMRv2ql5AQ0,13479
24
24
  kodit/domain/services/__init__.py,sha256=Q1GhCK_PqKHYwYE4tkwDz5BIyXkJngLBBOHhzvX8nzo,42
25
25
  kodit/domain/services/bm25_service.py,sha256=nsfTan3XtDwXuuAu1LUv-6Jukm6qFKVqqCVymjyepZQ,3625
26
26
  kodit/domain/services/embedding_service.py,sha256=Wh6Y2NR_GRnud8dq1Q7S6F40aNe-S2UyD5Nqz9LChTM,4507
27
27
  kodit/domain/services/enrichment_service.py,sha256=XsXg3nV-KN4rqtC7Zro_ZiZ6RSq-1eA1MG6IDzFGyBA,1316
28
28
  kodit/domain/services/ignore_service.py,sha256=boEN-IRLmUtwO9ZnuACaVFZbIKrtUG8YwnsXKEDIG28,1136
29
- kodit/domain/services/indexing_service.py,sha256=FEizu2GkvZA32xHOYXXch0LuHoWg6Z-BbJMPjZslzjc,5853
29
+ kodit/domain/services/indexing_service.py,sha256=vBjg9G75XoNfwH7m43l16zEmKdemHkzrgwunguiWix8,5911
30
30
  kodit/domain/services/snippet_extraction_service.py,sha256=QW_99bXWpr8g6ZI-hp4Aj57VCSrUf71dLwQca5T6pyg,3065
31
- kodit/domain/services/snippet_service.py,sha256=Mefq6IbMEv_O9YZeHoMprKKdn1K1hixA9MLCeq_qZ64,6485
31
+ kodit/domain/services/snippet_service.py,sha256=OyiDPJx5O2I1EyYnH_W-rvggti0DUefp4JaKIblHhR8,6867
32
32
  kodit/domain/services/source_service.py,sha256=9XGS3imJn65v855cztsJSaaFod6LhkF2xfUVMaytx-A,3068
33
33
  kodit/infrastructure/__init__.py,sha256=HzEYIjoXnkz_i_MHO2e0sIVYweUcRnl2RpyBiTbMObU,28
34
34
  kodit/infrastructure/bm25/__init__.py,sha256=DmGbrEO34FOJy4e685BbyxLA7gPW1eqs2gAxsp6JOuM,34
@@ -64,7 +64,7 @@ kodit/infrastructure/ignore/ignore_pattern_provider.py,sha256=9m2XCsgW87UBTfzHr6
64
64
  kodit/infrastructure/indexing/__init__.py,sha256=7UPRa2jwCAsa0Orsp6PqXSF8iIXJVzXHMFmrKkI9yH8,38
65
65
  kodit/infrastructure/indexing/auto_indexing_service.py,sha256=uXggladN3PTU5Jzhz0Kq-0aObvq3Dq9YbjYKCSkaQA8,3131
66
66
  kodit/infrastructure/indexing/fusion_service.py,sha256=mXUUcx3-8e75mWkxXMfl30HIoFXrTNHzB1w90MmEbak,1806
67
- kodit/infrastructure/indexing/index_repository.py,sha256=4aSCBE_Gn9ihOx_kXOpUTTIv6_Q71-VRFHEBgpWaAEw,8906
67
+ kodit/infrastructure/indexing/index_repository.py,sha256=qs1RiFuf29kbKX4unP98_4-f9vQCmpCo-q-zvCCFPCE,8287
68
68
  kodit/infrastructure/indexing/indexing_factory.py,sha256=LPjPCps_wJ9M_fZGRP02bfc2pvYc50ZSTYI99XwRRPg,918
69
69
  kodit/infrastructure/indexing/snippet_domain_service_factory.py,sha256=OMp9qRJSAT3oWqsMyF1fgI2Mb_G-SA22crbbaCb7c-Q,1253
70
70
  kodit/infrastructure/snippet_extraction/__init__.py,sha256=v6KqrRDjSj0nt87m7UwRGx2GN_fz_14VWq9Q0uABR_s,54
@@ -95,8 +95,8 @@ kodit/migrations/versions/85155663351e_initial.py,sha256=Cg7zlF871o9ShV5rQMQ1v7h
95
95
  kodit/migrations/versions/9e53ea8bb3b0_add_authors.py,sha256=a32Zm8KUQyiiLkjKNPYdaJDgjW6VsV-GhaLnPnK_fpI,3884
96
96
  kodit/migrations/versions/__init__.py,sha256=9-lHzptItTzq_fomdIRBegQNm4Znx6pVjwD4MiqRIdo,36
97
97
  kodit/migrations/versions/c3f5137d30f5_index_all_the_things.py,sha256=rI8LmjF-I2OMxZ2nOIF_NRmqOLXe45hL_iz_nx97DTQ,1680
98
- kodit-0.3.0.dist-info/METADATA,sha256=7VZ989c731WalePCDWB1KSIUKJ9vS5hcgYVuI2Souiw,5867
99
- kodit-0.3.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
100
- kodit-0.3.0.dist-info/entry_points.txt,sha256=hoTn-1aKyTItjnY91fnO-rV5uaWQLQ-Vi7V5et2IbHY,40
101
- kodit-0.3.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
102
- kodit-0.3.0.dist-info/RECORD,,
98
+ kodit-0.3.1.dist-info/METADATA,sha256=iI5UCxq-ih4cF-GVJLyNQ8wdRxwC907Jj6pddwiIsJo,6358
99
+ kodit-0.3.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
100
+ kodit-0.3.1.dist-info/entry_points.txt,sha256=hoTn-1aKyTItjnY91fnO-rV5uaWQLQ-Vi7V5et2IbHY,40
101
+ kodit-0.3.1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
102
+ kodit-0.3.1.dist-info/RECORD,,
File without changes