pycode-kg 0.20.0__tar.gz → 0.21.1__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.
Files changed (62) hide show
  1. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/PKG-INFO +12 -13
  2. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/README.md +5 -4
  3. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/pyproject.toml +46 -19
  4. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/__init__.py +1 -1
  5. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/analysis/__init__.py +6 -0
  6. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/analysis/bridge.py +1 -1
  7. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/analysis/centrality.py +1 -1
  8. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/analysis/framework_detector.py +1 -1
  9. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/app.py +94 -366
  10. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/cmd_hooks.py +11 -27
  11. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/cmd_viz.py +107 -0
  12. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/explain.py +2 -8
  13. pycode_kg-0.21.1/src/pycode_kg/graph_html.py +131 -0
  14. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/layout3d.py +6 -16
  15. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/mcp_server.py +12 -19
  16. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/pycodekg.py +1 -1
  17. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/pycodekg_thorough_analysis.py +3 -3
  18. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/snapshots.py +1 -1
  19. pycode_kg-0.21.1/src/pycode_kg/theme.py +188 -0
  20. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/viz3d.py +93 -34
  21. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/LICENSE +0 -0
  22. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/.DS_Store +0 -0
  23. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/__main__.py +0 -0
  24. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/analysis/hybrid_rank.py +0 -0
  25. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/architecture.py +0 -0
  26. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/build_pycodekg_sqlite.py +0 -0
  27. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/__init__.py +0 -0
  28. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/cmd_analyze.py +0 -0
  29. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/cmd_architecture.py +0 -0
  30. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/cmd_bridges.py +0 -0
  31. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/cmd_build.py +0 -0
  32. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/cmd_build_full.py +0 -0
  33. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/cmd_centrality.py +0 -0
  34. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/cmd_explain.py +0 -0
  35. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/cmd_framework_nodes.py +0 -0
  36. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/cmd_init.py +0 -0
  37. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/cmd_mcp.py +0 -0
  38. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/cmd_model.py +0 -0
  39. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/cmd_query.py +0 -0
  40. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/cmd_snapshot.py +0 -0
  41. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/main.py +0 -0
  42. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/cli/options.py +0 -0
  43. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/config.py +0 -0
  44. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/graph.py +0 -0
  45. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/index.py +0 -0
  46. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/kg.py +0 -0
  47. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/module/__init__.py +0 -0
  48. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/module/base.py +0 -0
  49. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/module/extractor.py +0 -0
  50. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/module/types.py +0 -0
  51. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/pycodekg_query.py +0 -0
  52. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/pycodekg_snippet_packer.py +0 -0
  53. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/pycodekg_viz.py +0 -0
  54. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/pycodekg_viz3d.py +0 -0
  55. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/ranking/__init__.py +0 -0
  56. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/ranking/cli_rank.py +0 -0
  57. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/ranking/coderank.py +0 -0
  58. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/sql/004_add_centrality_table.sql +0 -0
  59. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/store.py +0 -0
  60. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/utils.py +0 -0
  61. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/visitor.py +0 -0
  62. {pycode_kg-0.20.0 → pycode_kg-0.21.1}/src/pycode_kg/viz3d_timeline.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pycode-kg
3
- Version: 0.20.0
3
+ Version: 0.21.1
4
4
  Summary: A tool to build a searchable knowledge graph from Python repositories
5
5
  License-Expression: Elastic-2.0
6
6
  License-File: LICENSE
@@ -17,7 +17,6 @@ Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Programming Language :: Python :: 3.13
18
18
  Provides-Extra: all
19
19
  Provides-Extra: dev
20
- Provides-Extra: kgdeps
21
20
  Provides-Extra: viz
22
21
  Provides-Extra: viz3d
23
22
  Requires-Dist: PyQt5 (>=5.15.0) ; extra == "all"
@@ -25,12 +24,11 @@ Requires-Dist: PyQt5 (>=5.15.0) ; extra == "viz3d"
25
24
  Requires-Dist: click (>=8.1.0,<9)
26
25
  Requires-Dist: detect-secrets (>=1.5.0) ; extra == "all"
27
26
  Requires-Dist: detect-secrets (>=1.5.0) ; extra == "dev"
28
- Requires-Dist: doc-kg (>=0.18.1) ; extra == "dev"
29
- Requires-Dist: doc-kg (>=0.18.1) ; extra == "kgdeps"
30
- Requires-Dist: kgmodule-utils[semantic,sqlite-vec] (>=0.6.2)
27
+ Requires-Dist: kgmodule-utils[semantic,sqlite-vec,viz] (>=0.9.0)
31
28
  Requires-Dist: markdown (>=3.6) ; extra == "all"
32
29
  Requires-Dist: markdown (>=3.6) ; extra == "viz3d"
33
- Requires-Dist: mcp (>=1.0.0)
30
+ Requires-Dist: mcp (>=1.0.0,<2)
31
+ Requires-Dist: networkx (>=3.0)
34
32
  Requires-Dist: numpy (>=1.24.0)
35
33
  Requires-Dist: pandas (>=2.0.0)
36
34
  Requires-Dist: param (>=2.0.0) ; extra == "all"
@@ -56,12 +54,12 @@ Requires-Dist: ruff (>=0.4.0) ; extra == "all"
56
54
  Requires-Dist: ruff (>=0.4.0) ; extra == "dev"
57
55
  Requires-Dist: safetensors (>=0.5.0)
58
56
  Requires-Dist: sentence-transformers (>=5.4.1)
59
- Requires-Dist: streamlit (>=1.35.0) ; extra == "all"
60
- Requires-Dist: streamlit (>=1.35.0) ; extra == "viz"
57
+ Requires-Dist: streamlit (>=1.56.0) ; extra == "all"
58
+ Requires-Dist: streamlit (>=1.56.0) ; extra == "viz"
61
59
  Requires-Dist: torch (>=2.5.1)
62
60
  Requires-Dist: trame-vtk (>=2.0.0) ; extra == "all"
63
61
  Requires-Dist: trame-vtk (>=2.0.0) ; extra == "viz3d"
64
- Requires-Dist: transformers (>=4.40.0,<4.57)
62
+ Requires-Dist: transformers (>=5.5.0,<6)
65
63
  Requires-Dist: ty (>=0.0.41) ; extra == "all"
66
64
  Requires-Dist: ty (>=0.0.41) ; extra == "dev"
67
65
  Project-URL: Homepage, https://github.com/Flux-Frontiers/pycode_kg
@@ -75,7 +73,7 @@ Description-Content-Type: text/markdown
75
73
 
76
74
  [![Python](https://img.shields.io/badge/python-3.12%20%7C%203.13-blue.svg)](https://www.python.org/)
77
75
  [![License: Elastic-2.0](https://img.shields.io/badge/License-Elastic%202.0-blue.svg)](https://www.elastic.co/licensing/elastic-license)
78
- [![Version](https://img.shields.io/badge/version-0.20.0-blue.svg)](https://github.com/Flux-Frontiers/pycode_kg/releases)
76
+ [![Version](https://img.shields.io/badge/version-0.21.1-blue.svg)](https://github.com/Flux-Frontiers/pycode_kg/releases)
79
77
  [![CI](https://github.com/Flux-Frontiers/pycode_kg/actions/workflows/ci.yml/badge.svg)](https://github.com/Flux-Frontiers/pycode_kg/actions/workflows/ci.yml)
80
78
  [![Poetry](https://img.shields.io/endpoint?url=https://python-poetry.org/badge/v0.json)](https://python-poetry.org/)
81
79
  [![DOI](https://zenodo.org/badge/1202379010.svg)](https://zenodo.org/badge/latestdoi/1202379010)
@@ -215,6 +213,7 @@ The graph is built around four node kinds (module, class, function, method) and
215
213
  | **Pull source-grounded context for an LLM** | `pycodekg pack "..." --format md` | [docs/CHEATSHEET.md](docs/CHEATSHEET.md) |
216
214
  | **Run a hybrid semantic + structural query** | `pycodekg query "..."` | [docs/CHEATSHEET.md](docs/CHEATSHEET.md) |
217
215
  | **Browse the graph interactively** | `pycodekg viz` (Streamlit) | [docs/INSTALLATION.md](docs/INSTALLATION.md) |
216
+ | **Share a graph as one file** | `pycodekg viz-export -o graph.html` | opens from `file://`, no server |
218
217
  | **See call graphs in 3-D** *(active development — functional but rough)* | `pycodekg viz3d --layout funnel` | [docs/VIZ3D.md](docs/VIZ3D.md) |
219
218
  | **Wire it into Claude / Copilot / Cline** | `pycodekg mcp` | [docs/MCP.md](docs/MCP.md) |
220
219
 
@@ -271,13 +270,13 @@ If you use PyCodeKG in your research or project, please cite it:
271
270
 
272
271
  [![DOI](https://zenodo.org/badge/1202379010.svg)](https://zenodo.org/badge/latestdoi/1202379010)
273
272
 
274
- > Suchanek, E. G. (2026). *PyCodeKG: A Knowledge Graph for Python Codebases* (Version 0.20.0) [Software]. Flux-Frontiers. https://doi.org/10.5281/zenodo.19834777
273
+ > Suchanek, E. G. (2026). *PyCodeKG: A Knowledge Graph for Python Codebases* (Version 0.21.1) [Software]. Flux-Frontiers. https://doi.org/10.5281/zenodo.19834777
275
274
 
276
275
  ```bibtex
277
276
  @software{suchanek_pycode_kg,
278
277
  author = {Suchanek, Eric G.},
279
278
  title = {{PyCodeKG}: A Knowledge Graph for Python Codebases},
280
- version = {0.20.0},
279
+ version = {0.21.1},
281
280
  year = {2026},
282
281
  publisher = {Flux-Frontiers},
283
282
  url = {https://github.com/Flux-Frontiers/pycode_kg},
@@ -301,5 +300,5 @@ If you use PyCodeKG in your research or project, please cite it:
301
300
 
302
301
  ---
303
302
 
304
- *Built for Python developers and AI agents that work alongside them — egs · Last updated May 2026*
303
+ *Built for Python developers and AI agents that work alongside them — egs · Last updated July 2026*
305
304
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  [![Python](https://img.shields.io/badge/python-3.12%20%7C%203.13-blue.svg)](https://www.python.org/)
7
7
  [![License: Elastic-2.0](https://img.shields.io/badge/License-Elastic%202.0-blue.svg)](https://www.elastic.co/licensing/elastic-license)
8
- [![Version](https://img.shields.io/badge/version-0.20.0-blue.svg)](https://github.com/Flux-Frontiers/pycode_kg/releases)
8
+ [![Version](https://img.shields.io/badge/version-0.21.1-blue.svg)](https://github.com/Flux-Frontiers/pycode_kg/releases)
9
9
  [![CI](https://github.com/Flux-Frontiers/pycode_kg/actions/workflows/ci.yml/badge.svg)](https://github.com/Flux-Frontiers/pycode_kg/actions/workflows/ci.yml)
10
10
  [![Poetry](https://img.shields.io/endpoint?url=https://python-poetry.org/badge/v0.json)](https://python-poetry.org/)
11
11
  [![DOI](https://zenodo.org/badge/1202379010.svg)](https://zenodo.org/badge/latestdoi/1202379010)
@@ -145,6 +145,7 @@ The graph is built around four node kinds (module, class, function, method) and
145
145
  | **Pull source-grounded context for an LLM** | `pycodekg pack "..." --format md` | [docs/CHEATSHEET.md](docs/CHEATSHEET.md) |
146
146
  | **Run a hybrid semantic + structural query** | `pycodekg query "..."` | [docs/CHEATSHEET.md](docs/CHEATSHEET.md) |
147
147
  | **Browse the graph interactively** | `pycodekg viz` (Streamlit) | [docs/INSTALLATION.md](docs/INSTALLATION.md) |
148
+ | **Share a graph as one file** | `pycodekg viz-export -o graph.html` | opens from `file://`, no server |
148
149
  | **See call graphs in 3-D** *(active development — functional but rough)* | `pycodekg viz3d --layout funnel` | [docs/VIZ3D.md](docs/VIZ3D.md) |
149
150
  | **Wire it into Claude / Copilot / Cline** | `pycodekg mcp` | [docs/MCP.md](docs/MCP.md) |
150
151
 
@@ -201,13 +202,13 @@ If you use PyCodeKG in your research or project, please cite it:
201
202
 
202
203
  [![DOI](https://zenodo.org/badge/1202379010.svg)](https://zenodo.org/badge/latestdoi/1202379010)
203
204
 
204
- > Suchanek, E. G. (2026). *PyCodeKG: A Knowledge Graph for Python Codebases* (Version 0.20.0) [Software]. Flux-Frontiers. https://doi.org/10.5281/zenodo.19834777
205
+ > Suchanek, E. G. (2026). *PyCodeKG: A Knowledge Graph for Python Codebases* (Version 0.21.1) [Software]. Flux-Frontiers. https://doi.org/10.5281/zenodo.19834777
205
206
 
206
207
  ```bibtex
207
208
  @software{suchanek_pycode_kg,
208
209
  author = {Suchanek, Eric G.},
209
210
  title = {{PyCodeKG}: A Knowledge Graph for Python Codebases},
210
- version = {0.20.0},
211
+ version = {0.21.1},
211
212
  year = {2026},
212
213
  publisher = {Flux-Frontiers},
213
214
  url = {https://github.com/Flux-Frontiers/pycode_kg},
@@ -231,4 +232,4 @@ If you use PyCodeKG in your research or project, please cite it:
231
232
 
232
233
  ---
233
234
 
234
- *Built for Python developers and AI agents that work alongside them — egs · Last updated May 2026*
235
+ *Built for Python developers and AI agents that work alongside them — egs · Last updated July 2026*
@@ -1,7 +1,7 @@
1
1
  # pyproject.toml — PyCodeKG package configuration (PEP 621)
2
2
  #
3
3
  # Author: Eric G. Suchanek, PhD
4
- # Last Revision: 2026-07-15
4
+ # Last Revision: 2026-07-29
5
5
  #
6
6
  # Build system : Poetry 2.x with PEP 621 [project] table
7
7
  #
@@ -10,7 +10,6 @@
10
10
  # pip install -e ".[dev]" core + dev tools (pytest, ruff, ty, etc.)
11
11
  # pip install -e ".[viz]" core + Streamlit/Plotly/PyVis visualizer
12
12
  # pip install -e ".[viz3d]" core + PyVista 3D visualizer
13
- # pip install -e ".[kgdeps]" core + KG integrations (doc-kg, agent-kg)
14
13
  # pip install -e ".[all]" everything above
15
14
  # pip install -e "." core runtime only
16
15
  #
@@ -20,7 +19,6 @@
20
19
  # poetry install --extras "dev" core + dev tools only
21
20
  # poetry install --extras "viz" core + Streamlit/Plotly visualizer only
22
21
  # poetry install --extras "viz3d" core + 3D visualizer only
23
- # poetry install --extras "kgdeps" core + KG integrations only
24
22
  # poetry install core runtime only
25
23
  #
26
24
  # First-time setup
@@ -46,12 +44,33 @@ build-backend = "poetry.core.masonry.api"
46
44
  [tool.poetry]
47
45
  packages = [{ include = "pycode_kg", from = "src" }]
48
46
 
47
+ # CPU-only torch on Linux: dev/CI here has no GPU, but the default PyPI linux
48
+ # wheel bundles the full CUDA runtime (~2.7G of nvidia-* packages, ~700M of
49
+ # triton) regardless. "explicit" priority means only packages naming this
50
+ # source use it — nothing else is redirected off PyPI. This affects local/CI
51
+ # installs only; it is not part of published wheel metadata, so `pip install
52
+ # pycode-kg` for a GPU user still resolves torch normally.
53
+ #
54
+ # Linux only: macOS/Windows torch builds are already CPU/MPS, and this index
55
+ # publishes the macOS ones without the "+cpu" local version label, so locking
56
+ # it globally leaves those platforms with no installable candidate.
57
+ [[tool.poetry.source]]
58
+ name = "pytorch-cpu"
59
+ url = "https://download.pytorch.org/whl/cpu"
60
+ priority = "explicit"
61
+
62
+ [tool.poetry.dependencies]
63
+ torch = [
64
+ { markers = "sys_platform == 'linux'", source = "pytorch-cpu" },
65
+ { markers = "sys_platform != 'linux'" },
66
+ ]
67
+
49
68
  # ---------------------------------------------------------------------------
50
69
  # PEP 621 project metadata
51
70
  # ---------------------------------------------------------------------------
52
71
  [project]
53
72
  name = "pycode-kg"
54
- version = "0.20.0"
73
+ version = "0.21.1"
55
74
  description = "A tool to build a searchable knowledge graph from Python repositories"
56
75
  readme = "README.md"
57
76
  license = "Elastic-2.0"
@@ -71,15 +90,22 @@ classifiers = [
71
90
  requires-python = ">=3.12,<3.14"
72
91
  dependencies = [
73
92
  "click>=8.1.0,<9",
74
- "mcp>=1.0.0",
93
+ # Upper-bounded: mcp 2.0 removed the bundled `mcp.server.fastmcp` module
94
+ # (FastMCP was split out into the standalone `fastmcp` package) and rebuilt
95
+ # mcp.server around new submodules. src/pycode_kg/mcp_server.py imports
96
+ # FastMCP from mcp, so an unbounded floor lets a clean install pull 2.x and
97
+ # break `pycodekg-mcp` at import time. Lift this only alongside a port to
98
+ # the standalone fastmcp package.
99
+ "mcp>=1.0.0,<2",
100
+ "networkx>=3.0",
75
101
  "numpy>=1.24.0",
76
102
  "pandas>=2.0.0",
77
103
  "rich>=14.3.3,<15",
78
104
  "safetensors>=0.5.0",
79
105
  "sentence-transformers>=5.4.1",
80
106
  "torch>=2.5.1",
81
- "transformers>=4.40.0,<4.57",
82
- "kgmodule-utils[semantic,sqlite-vec]>=0.6.2",
107
+ "transformers>=5.5.0,<6",
108
+ "kgmodule-utils[semantic,sqlite-vec,viz]>=0.9.0",
83
109
  ]
84
110
 
85
111
  [project.optional-dependencies]
@@ -91,13 +117,11 @@ dev = [
91
117
  "pytest>=8.0.0",
92
118
  "pytest-cov>=5.0.0",
93
119
  "ruff>=0.4.0",
94
- "doc-kg>=0.18.1",
95
- # agent-kg not yet on PyPI — install manually: pip install git+https://github.com/Flux-Frontiers/agent_kg.git
96
120
  ]
97
121
  viz = [
98
122
  "plotly>=5.14.0",
99
123
  "pyvis>=0.3.2",
100
- "streamlit>=1.35.0",
124
+ "streamlit>=1.56.0",
101
125
  ]
102
126
  viz3d = [
103
127
  "markdown>=3.6",
@@ -108,10 +132,13 @@ viz3d = [
108
132
  "trame-vtk>=2.0.0",
109
133
  ]
110
134
 
111
- # note that dockg is on pypi; agent-kg is not yet — install manually from git
112
- kgdeps = [
113
- "doc-kg>=0.18.1",
114
- ]
135
+ # Cross-KG sibling packages (doc-kg, pycode-kg, agent-kg, kg-rag) are NOT
136
+ # declared here. They are never imported by this package, and listing them
137
+ # forces poetry's universal resolution to reconcile the transformers pin of
138
+ # every *published* sibling against this project's own -- a deadlock, since
139
+ # doc-kg and pycode-kg each depend on the other. Install them by hand:
140
+ # pip install doc-kg pycode-kg # both on PyPI
141
+ # pip install agent-kg kg-rag # both on PyPI as of 2026-07-29
115
142
  all = [
116
143
  "detect-secrets>=1.5.0",
117
144
  "markdown>=3.6",
@@ -126,7 +153,7 @@ all = [
126
153
  "pyvistaqt>=0.11.0",
127
154
  "pyvis>=0.3.2",
128
155
  "ruff>=0.4.0",
129
- "streamlit>=1.35.0",
156
+ "streamlit>=1.56.0",
130
157
  "trame-vtk>=2.0.0",
131
158
  "ty>=0.0.41",
132
159
  ]
@@ -160,10 +187,10 @@ pycodekg-viz3d = "pycode_kg.cli.cmd_viz:viz3d"
160
187
  [tool.ruff]
161
188
  line-length = 100
162
189
  target-version = "py312"
163
- # Vendored Claude Code skills — not project code. The pre-commit hook's
164
- # exclude can't cover these (it runs with pass_filenames: false), so the
165
- # exclusion must live here.
166
- extend-exclude = [".claude"]
190
+ # Vendored agent scratch dirs (Claude Code skills, Codex) — not project code.
191
+ # The pre-commit hook's exclude can't cover these (it runs with
192
+ # pass_filenames: false), so the exclusion must live here.
193
+ extend-exclude = [".claude", ".agents", ".codex"]
167
194
 
168
195
  [tool.ruff.lint]
169
196
  # B023, BLE001, PLC0415 replace the retired pylint hook's cell-var-from-loop,
@@ -32,7 +32,7 @@ KGModule SDK (build new domain KGs)::
32
32
  from pycode_kg import KGModule, KGExtractor, PyCodeKGExtractor, NodeSpec, EdgeSpec
33
33
  """
34
34
 
35
- __version__ = "0.20.0"
35
+ __version__ = "0.21.1"
36
36
  __author__ = "Eric G. Suchanek, PhD"
37
37
 
38
38
  # Low-level primitives (locked v0 contract)
@@ -1,5 +1,7 @@
1
1
  """Analysis primitives for PyCodeKG."""
2
2
 
3
+ from kg_utils.analysis.scores import MetricRef, ScoreSet, available_metrics, load_scores
4
+
3
5
  from .centrality import (
4
6
  CentralityConfig,
5
7
  CentralityRecord,
@@ -10,6 +12,10 @@ from .centrality import (
10
12
  __all__ = [
11
13
  "CentralityConfig",
12
14
  "CentralityRecord",
15
+ "MetricRef",
16
+ "ScoreSet",
13
17
  "StructuralImportanceRanker",
14
18
  "aggregate_module_scores",
19
+ "available_metrics",
20
+ "load_scores",
15
21
  ]
@@ -4,7 +4,7 @@ Measures module interaction complexity: how many unique modules each module call
4
4
  For well-modularized codebases, identifies orchestrator and hub modules.
5
5
 
6
6
  Author: Eric G. Suchanek, PhD
7
- Last Revision: 2026-03-12 17:30:35
7
+ Last Revision: 2026-04-27 23:29:23
8
8
  License: Elastic 2.0
9
9
  """
10
10
 
@@ -12,7 +12,7 @@ Public API:
12
12
  - :func:`aggregate_module_scores` — roll node scores up to module level.
13
13
 
14
14
  Author: Eric G. Suchanek, PhD
15
- Last Revision: 2026-03-11 12:45:30
15
+ Last Revision: 2026-05-01 21:46:11
16
16
  """
17
17
 
18
18
  from __future__ import annotations
@@ -3,7 +3,7 @@ Framework Detector for PyCodeKG.
3
3
  Identifies repo-defining abstractions using centrality and cross-module signals.
4
4
 
5
5
  Author: Eric G. Suchanek, PhD
6
- Last Revision: 2026-03-12 17:30:35
6
+ Last Revision: 2026-07-15 22:51:18
7
7
  License: Elastic 2.0
8
8
  """
9
9