kodit 0.3.3__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.
- kodit/_version.py +2 -2
- kodit/application/factories/code_indexing_factory.py +2 -24
- kodit/application/services/code_indexing_application_service.py +10 -2
- kodit/domain/services/index_service.py +25 -66
- kodit/domain/value_objects.py +10 -22
- kodit/infrastructure/slicing/__init__.py +1 -0
- kodit/infrastructure/slicing/language_detection_service.py +18 -0
- kodit/infrastructure/slicing/slicer.py +894 -0
- kodit/infrastructure/sqlalchemy/index_repository.py +29 -0
- kodit/migrations/versions/4073b33f9436_add_file_processing_flag.py +6 -4
- kodit/migrations/versions/4552eb3f23ce_add_summary.py +4 -4
- kodit/migrations/versions/7c3bbc2ab32b_add_embeddings_table.py +24 -16
- kodit/migrations/versions/85155663351e_initial.py +64 -48
- kodit/migrations/versions/c3f5137d30f5_index_all_the_things.py +20 -14
- {kodit-0.3.3.dist-info → kodit-0.3.4.dist-info}/METADATA +9 -4
- {kodit-0.3.3.dist-info → kodit-0.3.4.dist-info}/RECORD +19 -29
- kodit/infrastructure/snippet_extraction/__init__.py +0 -1
- kodit/infrastructure/snippet_extraction/factories.py +0 -13
- kodit/infrastructure/snippet_extraction/language_detection_service.py +0 -39
- kodit/infrastructure/snippet_extraction/languages/csharp.scm +0 -12
- kodit/infrastructure/snippet_extraction/languages/go.scm +0 -26
- kodit/infrastructure/snippet_extraction/languages/java.scm +0 -12
- kodit/infrastructure/snippet_extraction/languages/javascript.scm +0 -24
- kodit/infrastructure/snippet_extraction/languages/python.scm +0 -22
- kodit/infrastructure/snippet_extraction/languages/typescript.scm +0 -25
- kodit/infrastructure/snippet_extraction/snippet_extraction_factory.py +0 -67
- kodit/infrastructure/snippet_extraction/snippet_query_provider.py +0 -44
- kodit/infrastructure/snippet_extraction/tree_sitter_snippet_extractor.py +0 -182
- kodit/infrastructure/sqlalchemy/file_repository.py +0 -78
- {kodit-0.3.3.dist-info → kodit-0.3.4.dist-info}/WHEEL +0 -0
- {kodit-0.3.3.dist-info → kodit-0.3.4.dist-info}/entry_points.txt +0 -0
- {kodit-0.3.3.dist-info → kodit-0.3.4.dist-info}/licenses/LICENSE +0 -0
|
@@ -399,6 +399,35 @@ class SqlAlchemyIndexRepository(IndexRepository):
|
|
|
399
399
|
)
|
|
400
400
|
await self._session.execute(snippet_stmt)
|
|
401
401
|
|
|
402
|
+
async def delete_snippets_by_file_ids(self, file_ids: list[int]) -> None:
|
|
403
|
+
"""Delete snippets by file IDs.
|
|
404
|
+
|
|
405
|
+
This is used when files are removed from the working copy to clean up
|
|
406
|
+
orphaned snippets and their associated embeddings.
|
|
407
|
+
"""
|
|
408
|
+
if not file_ids:
|
|
409
|
+
return
|
|
410
|
+
|
|
411
|
+
# First get all snippets for these files
|
|
412
|
+
stmt = select(db_entities.Snippet).where(
|
|
413
|
+
db_entities.Snippet.file_id.in_(file_ids)
|
|
414
|
+
)
|
|
415
|
+
result = await self._session.scalars(stmt)
|
|
416
|
+
snippets = result.all()
|
|
417
|
+
|
|
418
|
+
# Delete all embeddings for these snippets
|
|
419
|
+
for snippet in snippets:
|
|
420
|
+
embedding_stmt = delete(db_entities.Embedding).where(
|
|
421
|
+
db_entities.Embedding.snippet_id == snippet.id
|
|
422
|
+
)
|
|
423
|
+
await self._session.execute(embedding_stmt)
|
|
424
|
+
|
|
425
|
+
# Now delete the snippets
|
|
426
|
+
snippet_stmt = delete(db_entities.Snippet).where(
|
|
427
|
+
db_entities.Snippet.file_id.in_(file_ids)
|
|
428
|
+
)
|
|
429
|
+
await self._session.execute(snippet_stmt)
|
|
430
|
+
|
|
402
431
|
async def update(self, index: domain_entities.Index) -> None:
|
|
403
432
|
"""Update an index by ensuring all domain objects are saved to database."""
|
|
404
433
|
if not index.id:
|
|
@@ -14,8 +14,8 @@ import sqlalchemy as sa
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
# revision identifiers, used by Alembic.
|
|
17
|
-
revision: str =
|
|
18
|
-
down_revision: Union[str, None] =
|
|
17
|
+
revision: str = "4073b33f9436"
|
|
18
|
+
down_revision: Union[str, None] = "4552eb3f23ce"
|
|
19
19
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
20
20
|
depends_on: Union[str, Sequence[str], None] = None
|
|
21
21
|
|
|
@@ -23,12 +23,14 @@ depends_on: Union[str, Sequence[str], None] = None
|
|
|
23
23
|
def upgrade() -> None:
|
|
24
24
|
"""Upgrade schema."""
|
|
25
25
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
26
|
-
op.add_column(
|
|
26
|
+
op.add_column(
|
|
27
|
+
"files", sa.Column("file_processing_status", sa.Integer(), nullable=False)
|
|
28
|
+
)
|
|
27
29
|
# ### end Alembic commands ###
|
|
28
30
|
|
|
29
31
|
|
|
30
32
|
def downgrade() -> None:
|
|
31
33
|
"""Downgrade schema."""
|
|
32
34
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
33
|
-
op.drop_column(
|
|
35
|
+
op.drop_column("files", "file_processing_status")
|
|
34
36
|
# ### end Alembic commands ###
|
|
@@ -14,8 +14,8 @@ import sqlalchemy as sa
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
# revision identifiers, used by Alembic.
|
|
17
|
-
revision: str =
|
|
18
|
-
down_revision: Union[str, None] =
|
|
17
|
+
revision: str = "4552eb3f23ce"
|
|
18
|
+
down_revision: Union[str, None] = "9e53ea8bb3b0"
|
|
19
19
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
20
20
|
depends_on: Union[str, Sequence[str], None] = None
|
|
21
21
|
|
|
@@ -23,12 +23,12 @@ depends_on: Union[str, Sequence[str], None] = None
|
|
|
23
23
|
def upgrade() -> None:
|
|
24
24
|
"""Upgrade schema."""
|
|
25
25
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
26
|
-
op.add_column(
|
|
26
|
+
op.add_column("snippets", sa.Column("summary", sa.UnicodeText(), nullable=False))
|
|
27
27
|
# ### end Alembic commands ###
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
def downgrade() -> None:
|
|
31
31
|
"""Downgrade schema."""
|
|
32
32
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
33
|
-
op.drop_column(
|
|
33
|
+
op.drop_column("snippets", "summary")
|
|
34
34
|
# ### end Alembic commands ###
|
|
@@ -14,8 +14,8 @@ import sqlalchemy as sa
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
# revision identifiers, used by Alembic.
|
|
17
|
-
revision: str =
|
|
18
|
-
down_revision: Union[str, None] =
|
|
17
|
+
revision: str = "7c3bbc2ab32b"
|
|
18
|
+
down_revision: Union[str, None] = "85155663351e"
|
|
19
19
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
20
20
|
depends_on: Union[str, Sequence[str], None] = None
|
|
21
21
|
|
|
@@ -23,25 +23,33 @@ depends_on: Union[str, Sequence[str], None] = None
|
|
|
23
23
|
def upgrade() -> None:
|
|
24
24
|
"""Upgrade schema."""
|
|
25
25
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
26
|
-
op.create_table(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
26
|
+
op.create_table(
|
|
27
|
+
"embeddings",
|
|
28
|
+
sa.Column("snippet_id", sa.Integer(), nullable=False),
|
|
29
|
+
sa.Column(
|
|
30
|
+
"type", sa.Enum("CODE", "TEXT", name="embeddingtype"), nullable=False
|
|
31
|
+
),
|
|
32
|
+
sa.Column("embedding", sa.JSON(), nullable=False),
|
|
33
|
+
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
|
|
34
|
+
sa.Column("created_at", sa.DateTime(), nullable=False),
|
|
35
|
+
sa.Column("updated_at", sa.DateTime(), nullable=False),
|
|
36
|
+
sa.ForeignKeyConstraint(
|
|
37
|
+
["snippet_id"],
|
|
38
|
+
["snippets.id"],
|
|
39
|
+
),
|
|
40
|
+
sa.PrimaryKeyConstraint("id"),
|
|
35
41
|
)
|
|
36
|
-
op.create_index(
|
|
37
|
-
|
|
42
|
+
op.create_index(
|
|
43
|
+
op.f("ix_embeddings_snippet_id"), "embeddings", ["snippet_id"], unique=False
|
|
44
|
+
)
|
|
45
|
+
op.create_index(op.f("ix_embeddings_type"), "embeddings", ["type"], unique=False)
|
|
38
46
|
# ### end Alembic commands ###
|
|
39
47
|
|
|
40
48
|
|
|
41
49
|
def downgrade() -> None:
|
|
42
50
|
"""Downgrade schema."""
|
|
43
51
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
44
|
-
op.drop_index(op.f(
|
|
45
|
-
op.drop_index(op.f(
|
|
46
|
-
op.drop_table(
|
|
52
|
+
op.drop_index(op.f("ix_embeddings_type"), table_name="embeddings")
|
|
53
|
+
op.drop_index(op.f("ix_embeddings_snippet_id"), table_name="embeddings")
|
|
54
|
+
op.drop_table("embeddings")
|
|
47
55
|
# ### end Alembic commands ###
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"""initial
|
|
3
3
|
|
|
4
4
|
Revision ID: 85155663351e
|
|
5
|
-
Revises:
|
|
5
|
+
Revises:
|
|
6
6
|
Create Date: 2025-05-08 13:45:16.687162
|
|
7
7
|
|
|
8
8
|
"""
|
|
@@ -14,7 +14,7 @@ import sqlalchemy as sa
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
# revision identifiers, used by Alembic.
|
|
17
|
-
revision: str =
|
|
17
|
+
revision: str = "85155663351e"
|
|
18
18
|
down_revision: Union[str, None] = None
|
|
19
19
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
20
20
|
depends_on: Union[str, Sequence[str], None] = None
|
|
@@ -23,48 +23,64 @@ depends_on: Union[str, Sequence[str], None] = None
|
|
|
23
23
|
def upgrade() -> None:
|
|
24
24
|
"""Upgrade schema."""
|
|
25
25
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
26
|
-
op.create_table(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
26
|
+
op.create_table(
|
|
27
|
+
"sources",
|
|
28
|
+
sa.Column("uri", sa.String(length=1024), nullable=False),
|
|
29
|
+
sa.Column("cloned_path", sa.String(length=1024), nullable=False),
|
|
30
|
+
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
|
|
31
|
+
sa.Column("created_at", sa.DateTime(), nullable=False),
|
|
32
|
+
sa.Column("updated_at", sa.DateTime(), nullable=False),
|
|
33
|
+
sa.PrimaryKeyConstraint("id"),
|
|
33
34
|
)
|
|
34
|
-
op.create_index(op.f(
|
|
35
|
-
op.create_table(
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
35
|
+
op.create_index(op.f("ix_sources_uri"), "sources", ["uri"], unique=True)
|
|
36
|
+
op.create_table(
|
|
37
|
+
"files",
|
|
38
|
+
sa.Column("source_id", sa.Integer(), nullable=False),
|
|
39
|
+
sa.Column("mime_type", sa.String(length=255), nullable=False),
|
|
40
|
+
sa.Column("uri", sa.String(length=1024), nullable=False),
|
|
41
|
+
sa.Column("cloned_path", sa.String(length=1024), nullable=False),
|
|
42
|
+
sa.Column("sha256", sa.String(length=64), nullable=False),
|
|
43
|
+
sa.Column("size_bytes", sa.Integer(), nullable=False),
|
|
44
|
+
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
|
|
45
|
+
sa.Column("created_at", sa.DateTime(), nullable=False),
|
|
46
|
+
sa.Column("updated_at", sa.DateTime(), nullable=False),
|
|
47
|
+
sa.ForeignKeyConstraint(
|
|
48
|
+
["source_id"],
|
|
49
|
+
["sources.id"],
|
|
50
|
+
),
|
|
51
|
+
sa.PrimaryKeyConstraint("id"),
|
|
47
52
|
)
|
|
48
|
-
op.create_index(op.f(
|
|
49
|
-
op.create_table(
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
op.create_index(op.f("ix_files_sha256"), "files", ["sha256"], unique=False)
|
|
54
|
+
op.create_table(
|
|
55
|
+
"indexes",
|
|
56
|
+
sa.Column("source_id", sa.Integer(), nullable=False),
|
|
57
|
+
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
|
|
58
|
+
sa.Column("created_at", sa.DateTime(), nullable=False),
|
|
59
|
+
sa.Column("updated_at", sa.DateTime(), nullable=False),
|
|
60
|
+
sa.ForeignKeyConstraint(
|
|
61
|
+
["source_id"],
|
|
62
|
+
["sources.id"],
|
|
63
|
+
),
|
|
64
|
+
sa.PrimaryKeyConstraint("id"),
|
|
56
65
|
)
|
|
57
|
-
op.create_index(op.f(
|
|
58
|
-
op.create_table(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
op.create_index(op.f("ix_indexes_source_id"), "indexes", ["source_id"], unique=True)
|
|
67
|
+
op.create_table(
|
|
68
|
+
"snippets",
|
|
69
|
+
sa.Column("file_id", sa.Integer(), nullable=False),
|
|
70
|
+
sa.Column("index_id", sa.Integer(), nullable=False),
|
|
71
|
+
sa.Column("content", sa.UnicodeText(), nullable=False),
|
|
72
|
+
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
|
|
73
|
+
sa.Column("created_at", sa.DateTime(), nullable=False),
|
|
74
|
+
sa.Column("updated_at", sa.DateTime(), nullable=False),
|
|
75
|
+
sa.ForeignKeyConstraint(
|
|
76
|
+
["file_id"],
|
|
77
|
+
["files.id"],
|
|
78
|
+
),
|
|
79
|
+
sa.ForeignKeyConstraint(
|
|
80
|
+
["index_id"],
|
|
81
|
+
["indexes.id"],
|
|
82
|
+
),
|
|
83
|
+
sa.PrimaryKeyConstraint("id"),
|
|
68
84
|
)
|
|
69
85
|
# ### end Alembic commands ###
|
|
70
86
|
|
|
@@ -72,11 +88,11 @@ def upgrade() -> None:
|
|
|
72
88
|
def downgrade() -> None:
|
|
73
89
|
"""Downgrade schema."""
|
|
74
90
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
75
|
-
op.drop_table(
|
|
76
|
-
op.drop_index(op.f(
|
|
77
|
-
op.drop_table(
|
|
78
|
-
op.drop_index(op.f(
|
|
79
|
-
op.drop_table(
|
|
80
|
-
op.drop_index(op.f(
|
|
81
|
-
op.drop_table(
|
|
91
|
+
op.drop_table("snippets")
|
|
92
|
+
op.drop_index(op.f("ix_indexes_source_id"), table_name="indexes")
|
|
93
|
+
op.drop_table("indexes")
|
|
94
|
+
op.drop_index(op.f("ix_files_sha256"), table_name="files")
|
|
95
|
+
op.drop_table("files")
|
|
96
|
+
op.drop_index(op.f("ix_sources_uri"), table_name="sources")
|
|
97
|
+
op.drop_table("sources")
|
|
82
98
|
# ### end Alembic commands ###
|
|
@@ -14,8 +14,8 @@ import sqlalchemy as sa
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
# revision identifiers, used by Alembic.
|
|
17
|
-
revision: str =
|
|
18
|
-
down_revision: Union[str, None] =
|
|
17
|
+
revision: str = "c3f5137d30f5"
|
|
18
|
+
down_revision: Union[str, None] = "7c3bbc2ab32b"
|
|
19
19
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
20
20
|
depends_on: Union[str, Sequence[str], None] = None
|
|
21
21
|
|
|
@@ -23,22 +23,28 @@ depends_on: Union[str, Sequence[str], None] = None
|
|
|
23
23
|
def upgrade() -> None:
|
|
24
24
|
"""Upgrade schema."""
|
|
25
25
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
26
|
-
op.create_index(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
op.create_index(op.f(
|
|
30
|
-
op.create_index(op.f(
|
|
31
|
-
op.create_index(op.f(
|
|
26
|
+
op.create_index(
|
|
27
|
+
op.f("ix_files_cloned_path"), "files", ["cloned_path"], unique=False
|
|
28
|
+
)
|
|
29
|
+
op.create_index(op.f("ix_files_mime_type"), "files", ["mime_type"], unique=False)
|
|
30
|
+
op.create_index(op.f("ix_files_uri"), "files", ["uri"], unique=False)
|
|
31
|
+
op.create_index(op.f("ix_snippets_file_id"), "snippets", ["file_id"], unique=False)
|
|
32
|
+
op.create_index(
|
|
33
|
+
op.f("ix_snippets_index_id"), "snippets", ["index_id"], unique=False
|
|
34
|
+
)
|
|
35
|
+
op.create_index(
|
|
36
|
+
op.f("ix_sources_cloned_path"), "sources", ["cloned_path"], unique=False
|
|
37
|
+
)
|
|
32
38
|
# ### end Alembic commands ###
|
|
33
39
|
|
|
34
40
|
|
|
35
41
|
def downgrade() -> None:
|
|
36
42
|
"""Downgrade schema."""
|
|
37
43
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
38
|
-
op.drop_index(op.f(
|
|
39
|
-
op.drop_index(op.f(
|
|
40
|
-
op.drop_index(op.f(
|
|
41
|
-
op.drop_index(op.f(
|
|
42
|
-
op.drop_index(op.f(
|
|
43
|
-
op.drop_index(op.f(
|
|
44
|
+
op.drop_index(op.f("ix_sources_cloned_path"), table_name="sources")
|
|
45
|
+
op.drop_index(op.f("ix_snippets_index_id"), table_name="snippets")
|
|
46
|
+
op.drop_index(op.f("ix_snippets_file_id"), table_name="snippets")
|
|
47
|
+
op.drop_index(op.f("ix_files_uri"), table_name="files")
|
|
48
|
+
op.drop_index(op.f("ix_files_mime_type"), table_name="files")
|
|
49
|
+
op.drop_index(op.f("ix_files_cloned_path"), table_name="files")
|
|
44
50
|
# ### end Alembic commands ###
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kodit
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
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/
|
|
@@ -92,13 +92,16 @@ code. This index is used to build a snippet library, ready for ingestion into an
|
|
|
92
92
|
|
|
93
93
|
- Index local directories and public Git repositories
|
|
94
94
|
- Build comprehensive snippet libraries for LLM ingestion
|
|
95
|
-
- Support for
|
|
96
|
-
-
|
|
95
|
+
- Support for 20+ programming languages including Python, JavaScript/TypeScript, Java, Go, Rust, C/C++, C#, HTML/CSS, and more
|
|
96
|
+
- Advanced code analysis with dependency tracking and call graph generation
|
|
97
|
+
- Intelligent snippet extraction with context-aware dependencies
|
|
98
|
+
- Efficient indexing with selective reindexing (only processes modified files)
|
|
97
99
|
- Privacy first: respects .gitignore and .noindex files
|
|
98
100
|
- **NEW in 0.3**: Auto-indexing configuration for shared server deployments
|
|
99
101
|
- **NEW in 0.3**: Enhanced Git provider support including Azure DevOps
|
|
100
102
|
- **NEW in 0.3**: Index private repositories via a PAT
|
|
101
103
|
- **NEW in 0.3**: Improved progress monitoring and reporting during indexing
|
|
104
|
+
- **NEW in 0.3**: Advanced code slicing infrastructure with Tree-sitter parsing
|
|
102
105
|
|
|
103
106
|
### MCP Server
|
|
104
107
|
|
|
@@ -111,7 +114,9 @@ intent. Kodit has been tested to work well with:
|
|
|
111
114
|
- [Cursor](https://docs.helix.ml/kodit/getting-started/integration/#integration-with-cursor)
|
|
112
115
|
- [Cline](https://docs.helix.ml/kodit/getting-started/integration/#integration-with-cline)
|
|
113
116
|
- Please contribute more instructions! ... any other assistant is likely to work ...
|
|
114
|
-
- **New in 0.3**:
|
|
117
|
+
- **New in 0.3**: Advanced search filters by source, language, author, date range, and file path
|
|
118
|
+
- **New in 0.3**: Hybrid search combining BM25 keyword search with semantic search
|
|
119
|
+
- **New in 0.4**: Enhanced MCP tools with rich context parameters and metadata
|
|
115
120
|
|
|
116
121
|
### Enterprise Ready
|
|
117
122
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
kodit/.gitignore,sha256=ztkjgRwL9Uud1OEi36hGQeDGk3OLK1NfDEO8YqGYy8o,11
|
|
2
2
|
kodit/__init__.py,sha256=aEKHYninUq1yh6jaNfvJBYg-6fenpN132nJt1UU6Jxs,59
|
|
3
|
-
kodit/_version.py,sha256=
|
|
3
|
+
kodit/_version.py,sha256=Mxups7YfGBY2vvCok_hLJKCtU6O1WHQJfsMY-bAJ0Yg,511
|
|
4
4
|
kodit/app.py,sha256=uv67TE83fZE7wrA7cz-sKosFrAXlKRr1B7fT-X_gMZQ,2103
|
|
5
5
|
kodit/cli.py,sha256=xh2MNA4sUTA3_yVbHGz-CRpbS0TTzKwf33XbScA74Gw,16626
|
|
6
6
|
kodit/config.py,sha256=VUoUi2t2yGhqOtm5MSZuaasNSklH50hfWn6GOrz3jnU,7518
|
|
@@ -11,21 +11,21 @@ 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
|
-
kodit/application/factories/code_indexing_factory.py,sha256=
|
|
14
|
+
kodit/application/factories/code_indexing_factory.py,sha256=R9f0wsj4-3NJFS5SEt_-OIGR_s_01gJXaL3PkZd8MlU,5911
|
|
15
15
|
kodit/application/services/__init__.py,sha256=p5UQNw-H5sxQvs5Etfte93B3cJ1kKW6DNxK34uFvU1E,38
|
|
16
|
-
kodit/application/services/code_indexing_application_service.py,sha256=
|
|
16
|
+
kodit/application/services/code_indexing_application_service.py,sha256=SuIuyBoSPOSjj5VaXIbxcYqaTEeMuUCu7w1tO8orrOY,14656
|
|
17
17
|
kodit/domain/__init__.py,sha256=TCpg4Xx-oF4mKV91lo4iXqMEfBT1OoRSYnbG-zVWolA,66
|
|
18
18
|
kodit/domain/entities.py,sha256=Mcku1Wmk3Xl3YJhY65_RoiLeffOLKOHI0uCAXWJrmvQ,8698
|
|
19
19
|
kodit/domain/errors.py,sha256=yIsgCjM_yOFIg8l7l-t7jM8pgeAX4cfPq0owf7iz3DA,106
|
|
20
20
|
kodit/domain/interfaces.py,sha256=Jkd0Ob4qSvhZHI9jRPFQ1n5Cv0SvU-y3Z-HCw2ikc4I,742
|
|
21
21
|
kodit/domain/protocols.py,sha256=L94FwChhCoj39xicaVrK2UFhFbPzi5JEXW_KmgODsLA,1859
|
|
22
|
-
kodit/domain/value_objects.py,sha256=
|
|
22
|
+
kodit/domain/value_objects.py,sha256=MBZ0WdqQghDmL0Coz_QjPMoVMCiL8pjtpJ5FgaIynoc,17342
|
|
23
23
|
kodit/domain/services/__init__.py,sha256=Q1GhCK_PqKHYwYE4tkwDz5BIyXkJngLBBOHhzvX8nzo,42
|
|
24
24
|
kodit/domain/services/bm25_service.py,sha256=nsfTan3XtDwXuuAu1LUv-6Jukm6qFKVqqCVymjyepZQ,3625
|
|
25
25
|
kodit/domain/services/embedding_service.py,sha256=7drYRC2kjg0WJmo06a2E9N0vDnwInUlBB96twjz2BT8,4526
|
|
26
26
|
kodit/domain/services/enrichment_service.py,sha256=XsXg3nV-KN4rqtC7Zro_ZiZ6RSq-1eA1MG6IDzFGyBA,1316
|
|
27
27
|
kodit/domain/services/index_query_service.py,sha256=02UWfyB_HoHUskunGuHeq5XwQLSWxGSK4OhvxcqIfY0,2022
|
|
28
|
-
kodit/domain/services/index_service.py,sha256=
|
|
28
|
+
kodit/domain/services/index_service.py,sha256=ezVGbWdII25adri4_yyvsAF2eJOt4xmoHRDuS_-c6Ro,10810
|
|
29
29
|
kodit/infrastructure/__init__.py,sha256=HzEYIjoXnkz_i_MHO2e0sIVYweUcRnl2RpyBiTbMObU,28
|
|
30
30
|
kodit/infrastructure/bm25/__init__.py,sha256=DmGbrEO34FOJy4e685BbyxLA7gPW1eqs2gAxsp6JOuM,34
|
|
31
31
|
kodit/infrastructure/bm25/bm25_factory.py,sha256=I4eo7qRslnyXIRkBf-StZ5ga2Evrr5J5YFocTChFD3g,884
|
|
@@ -59,23 +59,13 @@ kodit/infrastructure/indexing/fusion_service.py,sha256=2B0guBsuKz19uWcs18sIJpUJP
|
|
|
59
59
|
kodit/infrastructure/indexing/indexing_factory.py,sha256=LPjPCps_wJ9M_fZGRP02bfc2pvYc50ZSTYI99XwRRPg,918
|
|
60
60
|
kodit/infrastructure/mappers/__init__.py,sha256=QPHOjNreXmBPPovZ6elnYFS0vD-IsmrGl4TT01FCKro,77
|
|
61
61
|
kodit/infrastructure/mappers/index_mapper.py,sha256=ZSfu8kjTaa8_UY0nTqr4b02NS3VrjqZYkduCN71AL2g,12743
|
|
62
|
-
kodit/infrastructure/
|
|
63
|
-
kodit/infrastructure/
|
|
64
|
-
kodit/infrastructure/
|
|
65
|
-
kodit/infrastructure/snippet_extraction/snippet_extraction_factory.py,sha256=YA72kneJhR1nvgbYwH7fFAvTSMJw9bDoLGLhAAVpmq0,2272
|
|
66
|
-
kodit/infrastructure/snippet_extraction/snippet_query_provider.py,sha256=4bj4YtxmIC4r7TyU0QQYajmmDR1eIQKqWuJ6aZING2A,1283
|
|
67
|
-
kodit/infrastructure/snippet_extraction/tree_sitter_snippet_extractor.py,sha256=y2C5plTDvHOGTNdwcG4v_1Q15Pvq4mW7UlWsR3l5nCg,6177
|
|
68
|
-
kodit/infrastructure/snippet_extraction/languages/csharp.scm,sha256=gbBN4RiV1FBuTJF6orSnDFi8H9JwTw-d4piLJYsWUsc,222
|
|
69
|
-
kodit/infrastructure/snippet_extraction/languages/go.scm,sha256=SEX9mTOrhP2KiQW7oflDKkd21u5dK56QbJ4LvTDxY8A,533
|
|
70
|
-
kodit/infrastructure/snippet_extraction/languages/java.scm,sha256=kSEZT0QJAuhT7WpR2PklYiCX-03qRRpCAlcxfIbXPt4,227
|
|
71
|
-
kodit/infrastructure/snippet_extraction/languages/javascript.scm,sha256=Ini5TsVNmcBKQ8aL46a5Id9ut0g9UdmvmVqdMqRJtFk,446
|
|
72
|
-
kodit/infrastructure/snippet_extraction/languages/python.scm,sha256=ee85R9PBzwye3IMTE7-iVoKWd_ViU3EJISTyrFGrVeo,429
|
|
73
|
-
kodit/infrastructure/snippet_extraction/languages/typescript.scm,sha256=U-ujbbv4tylbUBj9wuhL-e5cW6hmgPCNs4xrIX3r_hE,448
|
|
62
|
+
kodit/infrastructure/slicing/__init__.py,sha256=x7cjvHA9Ay2weUYE_dpdAaPaStp20M-4U2b5MLgT5KM,37
|
|
63
|
+
kodit/infrastructure/slicing/language_detection_service.py,sha256=JGJXrq9bLyfnisWJXeP7y1jbZMmKAISdPBlRBCosUcE,684
|
|
64
|
+
kodit/infrastructure/slicing/slicer.py,sha256=Q5Syhe2KmYoCPvgP03XA6X0LVzrFgVyttRLEDHNrUSU,34305
|
|
74
65
|
kodit/infrastructure/sqlalchemy/__init__.py,sha256=UXPMSF_hgWaqr86cawRVqM8XdVNumQyyK5B8B97GnlA,33
|
|
75
66
|
kodit/infrastructure/sqlalchemy/embedding_repository.py,sha256=dC2Wzj_zQiWExwfScE1LAGiiyxPyg0YepwyLOgDwcs4,7905
|
|
76
67
|
kodit/infrastructure/sqlalchemy/entities.py,sha256=Dmh0z-dMI0wfMAPpf62kxU4md6NUH9P5Nx1QSTITOfg,5961
|
|
77
|
-
kodit/infrastructure/sqlalchemy/
|
|
78
|
-
kodit/infrastructure/sqlalchemy/index_repository.py,sha256=vPK-gl3JqMGjK_vOyXCzR_P-sN_p-BpuXy0m_A7Nkpo,21524
|
|
68
|
+
kodit/infrastructure/sqlalchemy/index_repository.py,sha256=fMnR3OxZN37dtp1M2Menf0xy31GjK1iv_0zn7EvRKYs,22575
|
|
79
69
|
kodit/infrastructure/ui/__init__.py,sha256=CzbLOBwIZ6B6iAHEd1L8cIBydCj-n_kobxJAhz2I9_Y,32
|
|
80
70
|
kodit/infrastructure/ui/progress.py,sha256=BaAeMEgXlSSb0c_t_NPxnThIktkzzCS9kegb5ExULJs,4791
|
|
81
71
|
kodit/infrastructure/ui/spinner.py,sha256=GcP115qtR0VEnGfMEtsGoAUpRzVGUSfiUXfoJJERngA,2357
|
|
@@ -83,17 +73,17 @@ kodit/migrations/README,sha256=ISVtAOvqvKk_5ThM5ioJE-lMkvf9IbknFUFVU_vPma4,58
|
|
|
83
73
|
kodit/migrations/__init__.py,sha256=lP5MuwlyWRMO6UcDWnQcQ3G-GYHcFb6rl9gYPHJ1sjo,40
|
|
84
74
|
kodit/migrations/env.py,sha256=m57TkFLYjQ4w2aw1YICXkeek27M6qjwRDMHvThWqIL0,2383
|
|
85
75
|
kodit/migrations/script.py.mako,sha256=zWziKtiwYKEWuwPV_HBNHwa9LCT45_bi01-uSNFaOOE,703
|
|
86
|
-
kodit/migrations/versions/4073b33f9436_add_file_processing_flag.py,sha256=
|
|
87
|
-
kodit/migrations/versions/4552eb3f23ce_add_summary.py,sha256=
|
|
88
|
-
kodit/migrations/versions/7c3bbc2ab32b_add_embeddings_table.py,sha256
|
|
89
|
-
kodit/migrations/versions/85155663351e_initial.py,sha256=
|
|
76
|
+
kodit/migrations/versions/4073b33f9436_add_file_processing_flag.py,sha256=c8dMcKQ-BBBr_2-92eJZFS3Fwe3__B2eNqvQeMZHs0w,917
|
|
77
|
+
kodit/migrations/versions/4552eb3f23ce_add_summary.py,sha256=WjyBQzFK8IXuvta15YBE23yaTMM1rZCXvPxW98MStng,870
|
|
78
|
+
kodit/migrations/versions/7c3bbc2ab32b_add_embeddings_table.py,sha256=JL6lxaYtGbXolrkNEujg5SWj3_aQBWReYP3I4vcibdo,1755
|
|
79
|
+
kodit/migrations/versions/85155663351e_initial.py,sha256=h8DWmSxVwTtWlmWNH8-S4AxfEIbCm_iWtR6Kg5psPnk,3605
|
|
90
80
|
kodit/migrations/versions/9e53ea8bb3b0_add_authors.py,sha256=a32Zm8KUQyiiLkjKNPYdaJDgjW6VsV-GhaLnPnK_fpI,3884
|
|
91
81
|
kodit/migrations/versions/__init__.py,sha256=9-lHzptItTzq_fomdIRBegQNm4Znx6pVjwD4MiqRIdo,36
|
|
92
|
-
kodit/migrations/versions/c3f5137d30f5_index_all_the_things.py,sha256=
|
|
82
|
+
kodit/migrations/versions/c3f5137d30f5_index_all_the_things.py,sha256=r7ukmJ_axXLAWewYx-F1fEmZ4JbtFd37i7cSb0tq3y0,1722
|
|
93
83
|
kodit/utils/__init__.py,sha256=DPEB1i8evnLF4Ns3huuAYg-0pKBFKUFuiDzOKG9r-sw,33
|
|
94
84
|
kodit/utils/path_utils.py,sha256=thK6YGGNvQThdBaCYCCeCvS1L8x-lwl3AoGht2jnjGw,1645
|
|
95
|
-
kodit-0.3.
|
|
96
|
-
kodit-0.3.
|
|
97
|
-
kodit-0.3.
|
|
98
|
-
kodit-0.3.
|
|
99
|
-
kodit-0.3.
|
|
85
|
+
kodit-0.3.4.dist-info/METADATA,sha256=rZKGzihHJy8kShI8lybNHWbhB7z4knuoLGLZ3ba987w,6871
|
|
86
|
+
kodit-0.3.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
87
|
+
kodit-0.3.4.dist-info/entry_points.txt,sha256=hoTn-1aKyTItjnY91fnO-rV5uaWQLQ-Vi7V5et2IbHY,40
|
|
88
|
+
kodit-0.3.4.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
89
|
+
kodit-0.3.4.dist-info/RECORD,,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"""Infrastructure services for snippet extraction."""
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"""Factories for creating snippet query providers."""
|
|
2
|
-
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
|
|
5
|
-
from kodit.infrastructure.snippet_extraction.snippet_query_provider import (
|
|
6
|
-
FileSystemSnippetQueryProvider,
|
|
7
|
-
SnippetQueryProvider,
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def create_snippet_query_provider() -> SnippetQueryProvider:
|
|
12
|
-
"""Create a snippet query provider."""
|
|
13
|
-
return FileSystemSnippetQueryProvider(Path(__file__).parent / "languages")
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"""Infrastructure implementation for language detection."""
|
|
2
|
-
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
|
|
5
|
-
from kodit.domain.services.index_service import LanguageDetectionService
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class FileSystemLanguageDetectionService(LanguageDetectionService):
|
|
9
|
-
"""Infrastructure implementation for language detection."""
|
|
10
|
-
|
|
11
|
-
def __init__(self, language_map: dict[str, str]) -> None:
|
|
12
|
-
"""Initialize the language detection service.
|
|
13
|
-
|
|
14
|
-
Args:
|
|
15
|
-
language_map: Mapping of file extensions to programming languages
|
|
16
|
-
|
|
17
|
-
"""
|
|
18
|
-
self.language_map = language_map
|
|
19
|
-
|
|
20
|
-
async def detect_language(self, file_path: Path) -> str:
|
|
21
|
-
"""Detect language based on file extension.
|
|
22
|
-
|
|
23
|
-
Args:
|
|
24
|
-
file_path: Path to the file to detect language for
|
|
25
|
-
|
|
26
|
-
Returns:
|
|
27
|
-
The detected programming language
|
|
28
|
-
|
|
29
|
-
Raises:
|
|
30
|
-
ValueError: If the language is not supported
|
|
31
|
-
|
|
32
|
-
"""
|
|
33
|
-
suffix = file_path.suffix.removeprefix(".").lower()
|
|
34
|
-
language = self.language_map.get(suffix)
|
|
35
|
-
|
|
36
|
-
if language is None:
|
|
37
|
-
raise ValueError(f"Unsupported language for file suffix: {suffix}")
|
|
38
|
-
|
|
39
|
-
return language
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
(function_declaration
|
|
2
|
-
name: (identifier) @function.name
|
|
3
|
-
body: (block) @function.body
|
|
4
|
-
) @function.def
|
|
5
|
-
|
|
6
|
-
(method_declaration
|
|
7
|
-
name: (field_identifier) @method.name
|
|
8
|
-
body: (block) @method.body
|
|
9
|
-
) @method.def
|
|
10
|
-
|
|
11
|
-
(import_declaration
|
|
12
|
-
(import_spec
|
|
13
|
-
path: (interpreted_string_literal) @import.name
|
|
14
|
-
)
|
|
15
|
-
) @import.statement
|
|
16
|
-
|
|
17
|
-
(identifier) @ident
|
|
18
|
-
|
|
19
|
-
(parameter_declaration
|
|
20
|
-
name: (identifier) @param.name
|
|
21
|
-
)
|
|
22
|
-
|
|
23
|
-
(package_clause "package" (package_identifier) @name.definition.module)
|
|
24
|
-
|
|
25
|
-
;; Exclude comments from being captured
|
|
26
|
-
(comment) @comment
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
(import_statement
|
|
2
|
-
(import_clause
|
|
3
|
-
(named_imports
|
|
4
|
-
(import_specifier
|
|
5
|
-
name: (identifier) @import.name
|
|
6
|
-
)
|
|
7
|
-
)
|
|
8
|
-
)
|
|
9
|
-
)
|
|
10
|
-
|
|
11
|
-
(function_declaration
|
|
12
|
-
name: (identifier) @function.name
|
|
13
|
-
body: (statement_block) @function.body
|
|
14
|
-
)
|
|
15
|
-
|
|
16
|
-
(class_declaration
|
|
17
|
-
name: (identifier) @class.name
|
|
18
|
-
body: (class_body) @class.body
|
|
19
|
-
) @class.def
|
|
20
|
-
|
|
21
|
-
(method_definition
|
|
22
|
-
name: (property_identifier) @function.name
|
|
23
|
-
body: (statement_block) @function.body
|
|
24
|
-
)
|