town-elder 0.1.0__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.
- town_elder-0.1.0/PKG-INFO +20 -0
- town_elder-0.1.0/pyproject.toml +96 -0
- town_elder-0.1.0/src/town_elder/__init__.py +6 -0
- town_elder-0.1.0/src/town_elder/__main__.py +6 -0
- town_elder-0.1.0/src/town_elder/cli/__init__.py +1481 -0
- town_elder-0.1.0/src/town_elder/cli/__main__.py +6 -0
- town_elder-0.1.0/src/town_elder/cli_services.py +265 -0
- town_elder-0.1.0/src/town_elder/config.py +100 -0
- town_elder-0.1.0/src/town_elder/embeddings/__init__.py +4 -0
- town_elder-0.1.0/src/town_elder/embeddings/embedder.py +100 -0
- town_elder-0.1.0/src/town_elder/exceptions.py +31 -0
- town_elder-0.1.0/src/town_elder/git/__init__.py +5 -0
- town_elder-0.1.0/src/town_elder/git/diff_parser.py +181 -0
- town_elder-0.1.0/src/town_elder/git/runner.py +331 -0
- town_elder-0.1.0/src/town_elder/models.py +34 -0
- town_elder-0.1.0/src/town_elder/services/__init__.py +6 -0
- town_elder-0.1.0/src/town_elder/services/factory.py +65 -0
- town_elder-0.1.0/src/town_elder/services/index_service.py +78 -0
- town_elder-0.1.0/src/town_elder/services/query_service.py +38 -0
- town_elder-0.1.0/src/town_elder/storage/__init__.py +4 -0
- town_elder-0.1.0/src/town_elder/storage/vector_store.py +228 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: town-elder
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A semantic git CLI tool using zvec + fastembed
|
|
5
|
+
Author: Kalle Bylin
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Requires-Dist: typer[all]>=0.12.0
|
|
8
|
+
Requires-Dist: zvec>=0.1.0
|
|
9
|
+
Requires-Dist: fastembed>=0.2.0
|
|
10
|
+
Requires-Dist: pydantic>=2.0
|
|
11
|
+
Requires-Dist: pydantic-settings>=2.0
|
|
12
|
+
Requires-Dist: rich>=13.0
|
|
13
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
14
|
+
Requires-Dist: numpy>=1.20
|
|
15
|
+
Requires-Dist: pytest>=7.0 ; extra == 'dev'
|
|
16
|
+
Requires-Dist: pytest-cov>=4.0 ; extra == 'dev'
|
|
17
|
+
Requires-Dist: ruff>=0.3 ; extra == 'dev'
|
|
18
|
+
Requires-Dist: mypy>=1.0 ; extra == 'dev'
|
|
19
|
+
Requires-Python: >=3.10
|
|
20
|
+
Provides-Extra: dev
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "town-elder"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "A semantic git CLI tool using zvec + fastembed"
|
|
5
|
+
license = "MIT"
|
|
6
|
+
authors = [{ name = "Kalle Bylin" }]
|
|
7
|
+
requires-python = ">=3.10"
|
|
8
|
+
dependencies = [
|
|
9
|
+
"typer[all]>=0.12.0",
|
|
10
|
+
"zvec>=0.1.0",
|
|
11
|
+
"fastembed>=0.2.0",
|
|
12
|
+
"pydantic>=2.0",
|
|
13
|
+
"pydantic-settings>=2.0",
|
|
14
|
+
"rich>=13.0",
|
|
15
|
+
"python-dotenv>=1.0.0",
|
|
16
|
+
"numpy>=1.20",
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
[project.optional-dependencies]
|
|
20
|
+
dev = [
|
|
21
|
+
"pytest>=7.0",
|
|
22
|
+
"pytest-cov>=4.0",
|
|
23
|
+
"ruff>=0.3",
|
|
24
|
+
"mypy>=1.0",
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
[project.scripts]
|
|
28
|
+
te = "town_elder.cli:run"
|
|
29
|
+
|
|
30
|
+
[build-system]
|
|
31
|
+
requires = ["uv_build>=0.7.21,<0.8.0"]
|
|
32
|
+
build-backend = "uv_build"
|
|
33
|
+
|
|
34
|
+
[[tool.uv.index]]
|
|
35
|
+
name = "testpypi"
|
|
36
|
+
url = "https://test.pypi.org/simple/"
|
|
37
|
+
publish-url = "https://test.pypi.org/legacy/"
|
|
38
|
+
explicit = true
|
|
39
|
+
|
|
40
|
+
[tool.pytest.ini_options]
|
|
41
|
+
testpaths = ["tests"]
|
|
42
|
+
pythonpath = ["src"]
|
|
43
|
+
addopts = "-v --tb=short"
|
|
44
|
+
|
|
45
|
+
[tool.ruff]
|
|
46
|
+
target-version = "py310"
|
|
47
|
+
exclude = [
|
|
48
|
+
".venv",
|
|
49
|
+
"venv",
|
|
50
|
+
"__pycache__",
|
|
51
|
+
".git",
|
|
52
|
+
"build",
|
|
53
|
+
"dist",
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
[tool.ruff.lint]
|
|
57
|
+
select = [
|
|
58
|
+
# Core Security & Logic
|
|
59
|
+
"F", # Pyflakes (catches "hallucinated" variables and unused imports)
|
|
60
|
+
"E", # pycodestyle errors
|
|
61
|
+
"W", # pycodestyle warnings
|
|
62
|
+
"B", # flake8-bugbear (catches common bugs, e.g., mutable defaults)
|
|
63
|
+
"S", # flake8-bandit (security checks - agents LOVE hardcoding secrets)
|
|
64
|
+
|
|
65
|
+
# Modernization (Agents often write outdated Python)
|
|
66
|
+
"UP", # pyupgrade (forces modern syntax, e.g., pathlib over os.path)
|
|
67
|
+
"I", # isort (keeps imports tidy)
|
|
68
|
+
|
|
69
|
+
# Anti-Verbosity & Cleanliness (Agents are chatty coders)
|
|
70
|
+
"SIM", # flake8-simplify (removes useless code like `if x: return True`)
|
|
71
|
+
"RET", # flake8-return (fixes messy return logic)
|
|
72
|
+
"C4", # flake8-comprehensions (forces list/dict comprehensions)
|
|
73
|
+
"ARG", # flake8-unused-arguments (agents often hallucinate unused params)
|
|
74
|
+
"ERA", # eradicate (removes commented-out code - agents leave "notes" behind)
|
|
75
|
+
|
|
76
|
+
# Specific Pylint Rules (The Heavy Hitters)
|
|
77
|
+
"PLC0415", # Import outside top-level (The one you found!)
|
|
78
|
+
"PLR0912", # Too many branches (prevents spaghetti logic)
|
|
79
|
+
"PLR0913", # Too many arguments (forces cleaner function signatures)
|
|
80
|
+
"PLR2004", # Magic value comparison (stops `if x == 42`)
|
|
81
|
+
]
|
|
82
|
+
ignore = [
|
|
83
|
+
"E501", # line too long (handled by formatter)
|
|
84
|
+
"B008", # do not perform function calls in argument defaults
|
|
85
|
+
"B904", # exception chaining - typer.Exit replaces original exception intentionally
|
|
86
|
+
"S103", # os.chmod for setting executable bits on hook files is intentional
|
|
87
|
+
"S110", # try/except pass for ignoring invalid state file is intentional
|
|
88
|
+
"PLC0415", # lazy imports for optional dependencies
|
|
89
|
+
"ARG001", # unused CLI options - placeholder for future implementation
|
|
90
|
+
]
|
|
91
|
+
|
|
92
|
+
[tool.ruff.lint.per-file-ignores]
|
|
93
|
+
"tests/*" = ["S101", "S603", "S607", "B011"] # assert and subprocess calls are fine in tests
|
|
94
|
+
|
|
95
|
+
[tool.ruff.lint.isort]
|
|
96
|
+
known-first-party = ["town_elder"]
|