pycode-kg 0.28.2__tar.gz → 0.29.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.
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/PKG-INFO +8 -9
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/README.md +6 -6
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/pyproject.toml +6 -9
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/__init__.py +1 -1
- pycode_kg-0.29.0/src/pycode_kg/cli/cmd_mcp.py +37 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/explain.py +2 -2
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/mcp_server.py +232 -746
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/pycodekg_thorough_analysis.py +4 -2
- pycode_kg-0.28.2/src/pycode_kg/cli/cmd_mcp.py +0 -75
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/LICENSE +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/.DS_Store +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/__main__.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/analysis/__init__.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/analysis/bridge.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/analysis/centrality.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/analysis/framework_detector.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/app.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/architecture.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/build_pycodekg_sqlite.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/__init__.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/cmd_analyze.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/cmd_architecture.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/cmd_bridges.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/cmd_build.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/cmd_build_full.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/cmd_centrality.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/cmd_explain.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/cmd_framework_nodes.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/cmd_hooks.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/cmd_init.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/cmd_model.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/cmd_query.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/cmd_quilt.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/cmd_snapshot.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/cmd_viz.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/main.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/cli/options.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/config.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/graph.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/graph_html.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/index.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/kg.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/layout3d.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/module/__init__.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/module/base.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/module/extractor.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/module/types.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/pycodekg.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/ranking/__init__.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/ranking/cli_rank.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/ranking/coderank.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/render.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/report.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/resolution.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/scene3d.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/snapshots.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/sql/004_add_centrality_table.sql +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/store.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/theme.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/utils.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/visitor.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/src/pycode_kg/viz3d.py +0 -0
- {pycode_kg-0.28.2 → pycode_kg-0.29.0}/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.
|
|
3
|
+
Version: 0.29.0
|
|
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
|
|
@@ -21,11 +21,10 @@ Provides-Extra: viz3d
|
|
|
21
21
|
Requires-Dist: PyQt5 (>=5.15.0) ; extra == "all"
|
|
22
22
|
Requires-Dist: PyQt5 (>=5.15.0) ; extra == "viz3d"
|
|
23
23
|
Requires-Dist: click (>=8.1.0,<9)
|
|
24
|
-
Requires-Dist: kgmodule-utils[semantic,viz3d] (>=0.
|
|
24
|
+
Requires-Dist: kgmodule-utils[mcp,semantic,viz3d] (>=0.29.0)
|
|
25
25
|
Requires-Dist: kgmodule-utils[viz3d-qt,viz3d-render] (>=0.27.0) ; extra == "viz3d"
|
|
26
26
|
Requires-Dist: markdown (>=3.6) ; extra == "all"
|
|
27
27
|
Requires-Dist: markdown (>=3.6) ; extra == "viz3d"
|
|
28
|
-
Requires-Dist: mcp (>=1.3.0,<2)
|
|
29
28
|
Requires-Dist: networkx (>=3.0)
|
|
30
29
|
Requires-Dist: numpy (>=1.24.0)
|
|
31
30
|
Requires-Dist: pandas (>=2.0.0)
|
|
@@ -60,7 +59,7 @@ Description-Content-Type: text/markdown
|
|
|
60
59
|
|
|
61
60
|
[](https://www.python.org/)
|
|
62
61
|
[](https://www.elastic.co/licensing/elastic-license)
|
|
63
|
-
[](https://github.com/Flux-Frontiers/pycode_kg/releases)
|
|
64
63
|
[](https://github.com/Flux-Frontiers/pycode_kg/actions/workflows/ci.yml)
|
|
65
64
|
[](https://python-poetry.org/)
|
|
66
65
|
[](https://doi.org/10.5281/zenodo.19737993)
|
|
@@ -137,9 +136,9 @@ jq '.docstring_coverage.total' ~/.claude/pycodekg_analysis_latest.json
|
|
|
137
136
|
|
|
138
137
|
### 2. Agentic — MCP server for grounded AI workflows
|
|
139
138
|
|
|
140
|
-
Run `pycodekg mcp` and Claude (or any MCP-aware client) gets nineteen tools backed by the same graph: `
|
|
139
|
+
Run `pycodekg mcp` and Claude (or any MCP-aware client) gets nineteen tools backed by the same graph: `stats`, `query`, `pack`, `get_node`, `list_nodes`, `callers`, `explain`, `centrality`, `bridge_centrality`, `framework_nodes`, `analyze_repo`, `snapshot_list / show / diff`, and more. Setup for Claude Code, Claude Desktop, Kilo Code, Copilot, and Cline is a single line — see [docs/MCP.md](docs/MCP.md) and [docs/INSTALLATION.md](docs/INSTALLATION.md).
|
|
141
140
|
|
|
142
|
-
The agent benefit isn't subtle. Tools like `
|
|
141
|
+
The agent benefit isn't subtle. Tools like `pack` return *actual source* with line numbers and surrounding context; `callers` returns the *real* fan-in resolved across import aliases, not a regex's best guess. The agent stops fabricating function signatures and starts citing them. Multi-step workflows — *"find the auth path, list its callers, summarize what changes if I rename it"* — collapse from dozens of `grep`s and file reads into a handful of source-grounded calls.
|
|
143
142
|
|
|
144
143
|
Independent assessments tend to put it the same way:
|
|
145
144
|
|
|
@@ -255,7 +254,7 @@ src/pycode_kg/
|
|
|
255
254
|
└── viz3d_timeline.py # Metric history timeline
|
|
256
255
|
```
|
|
257
256
|
|
|
258
|
-
The MCP server, the CLI, and the Streamlit app are thin wrappers over the same store + index + ranking core — there is exactly one code path for each capability. The latest architectural deep-dive is in [docs/analysis_v0.
|
|
257
|
+
The MCP server, the CLI, and the Streamlit app are thin wrappers over the same store + index + ranking core — there is exactly one code path for each capability. The latest architectural deep-dive is in [docs/analysis_v0.29.0.md](docs/analysis_v0.29.0.md), produced (of course) by `pycodekg analyze` against this very repo.
|
|
259
258
|
|
|
260
259
|
---
|
|
261
260
|
|
|
@@ -282,13 +281,13 @@ If you use PyCodeKG in your research or project, please cite it:
|
|
|
282
281
|
|
|
283
282
|
[](https://doi.org/10.5281/zenodo.19737993)
|
|
284
283
|
|
|
285
|
-
> Suchanek, E. G. (2026). *PyCodeKG: A Knowledge Graph for Python Codebases* (Version 0.
|
|
284
|
+
> Suchanek, E. G. (2026). *PyCodeKG: A Knowledge Graph for Python Codebases* (Version 0.29.0) [Software]. Flux-Frontiers. https://doi.org/10.5281/zenodo.19737993
|
|
286
285
|
|
|
287
286
|
```bibtex
|
|
288
287
|
@software{suchanek_pycode_kg,
|
|
289
288
|
author = {Suchanek, Eric G.},
|
|
290
289
|
title = {{PyCodeKG}: A Knowledge Graph for Python Codebases},
|
|
291
|
-
version = {0.
|
|
290
|
+
version = {0.29.0},
|
|
292
291
|
year = {2026},
|
|
293
292
|
publisher = {Flux-Frontiers},
|
|
294
293
|
url = {https://github.com/Flux-Frontiers/pycode_kg},
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
[](https://www.python.org/)
|
|
7
7
|
[](https://www.elastic.co/licensing/elastic-license)
|
|
8
|
-
[](https://github.com/Flux-Frontiers/pycode_kg/releases)
|
|
9
9
|
[](https://github.com/Flux-Frontiers/pycode_kg/actions/workflows/ci.yml)
|
|
10
10
|
[](https://python-poetry.org/)
|
|
11
11
|
[](https://doi.org/10.5281/zenodo.19737993)
|
|
@@ -82,9 +82,9 @@ jq '.docstring_coverage.total' ~/.claude/pycodekg_analysis_latest.json
|
|
|
82
82
|
|
|
83
83
|
### 2. Agentic — MCP server for grounded AI workflows
|
|
84
84
|
|
|
85
|
-
Run `pycodekg mcp` and Claude (or any MCP-aware client) gets nineteen tools backed by the same graph: `
|
|
85
|
+
Run `pycodekg mcp` and Claude (or any MCP-aware client) gets nineteen tools backed by the same graph: `stats`, `query`, `pack`, `get_node`, `list_nodes`, `callers`, `explain`, `centrality`, `bridge_centrality`, `framework_nodes`, `analyze_repo`, `snapshot_list / show / diff`, and more. Setup for Claude Code, Claude Desktop, Kilo Code, Copilot, and Cline is a single line — see [docs/MCP.md](docs/MCP.md) and [docs/INSTALLATION.md](docs/INSTALLATION.md).
|
|
86
86
|
|
|
87
|
-
The agent benefit isn't subtle. Tools like `
|
|
87
|
+
The agent benefit isn't subtle. Tools like `pack` return *actual source* with line numbers and surrounding context; `callers` returns the *real* fan-in resolved across import aliases, not a regex's best guess. The agent stops fabricating function signatures and starts citing them. Multi-step workflows — *"find the auth path, list its callers, summarize what changes if I rename it"* — collapse from dozens of `grep`s and file reads into a handful of source-grounded calls.
|
|
88
88
|
|
|
89
89
|
Independent assessments tend to put it the same way:
|
|
90
90
|
|
|
@@ -200,7 +200,7 @@ src/pycode_kg/
|
|
|
200
200
|
└── viz3d_timeline.py # Metric history timeline
|
|
201
201
|
```
|
|
202
202
|
|
|
203
|
-
The MCP server, the CLI, and the Streamlit app are thin wrappers over the same store + index + ranking core — there is exactly one code path for each capability. The latest architectural deep-dive is in [docs/analysis_v0.
|
|
203
|
+
The MCP server, the CLI, and the Streamlit app are thin wrappers over the same store + index + ranking core — there is exactly one code path for each capability. The latest architectural deep-dive is in [docs/analysis_v0.29.0.md](docs/analysis_v0.29.0.md), produced (of course) by `pycodekg analyze` against this very repo.
|
|
204
204
|
|
|
205
205
|
---
|
|
206
206
|
|
|
@@ -227,13 +227,13 @@ If you use PyCodeKG in your research or project, please cite it:
|
|
|
227
227
|
|
|
228
228
|
[](https://doi.org/10.5281/zenodo.19737993)
|
|
229
229
|
|
|
230
|
-
> Suchanek, E. G. (2026). *PyCodeKG: A Knowledge Graph for Python Codebases* (Version 0.
|
|
230
|
+
> Suchanek, E. G. (2026). *PyCodeKG: A Knowledge Graph for Python Codebases* (Version 0.29.0) [Software]. Flux-Frontiers. https://doi.org/10.5281/zenodo.19737993
|
|
231
231
|
|
|
232
232
|
```bibtex
|
|
233
233
|
@software{suchanek_pycode_kg,
|
|
234
234
|
author = {Suchanek, Eric G.},
|
|
235
235
|
title = {{PyCodeKG}: A Knowledge Graph for Python Codebases},
|
|
236
|
-
version = {0.
|
|
236
|
+
version = {0.29.0},
|
|
237
237
|
year = {2026},
|
|
238
238
|
publisher = {Flux-Frontiers},
|
|
239
239
|
url = {https://github.com/Flux-Frontiers/pycode_kg},
|
|
@@ -70,7 +70,7 @@ torch = [
|
|
|
70
70
|
# ---------------------------------------------------------------------------
|
|
71
71
|
[project]
|
|
72
72
|
name = "pycode-kg"
|
|
73
|
-
version = "0.
|
|
73
|
+
version = "0.29.0"
|
|
74
74
|
description = "A tool to build a searchable knowledge graph from Python repositories"
|
|
75
75
|
readme = "README.md"
|
|
76
76
|
license = "Elastic-2.0"
|
|
@@ -90,13 +90,6 @@ classifiers = [
|
|
|
90
90
|
requires-python = ">=3.12,<3.14"
|
|
91
91
|
dependencies = [
|
|
92
92
|
"click>=8.1.0,<9",
|
|
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.3.0,<2",
|
|
100
93
|
"networkx>=3.0",
|
|
101
94
|
"numpy>=1.24.0",
|
|
102
95
|
"pandas>=2.0.0",
|
|
@@ -169,7 +162,11 @@ dependencies = [
|
|
|
169
162
|
# and the _domain_metrics() hook, none of which exist before 0.20.0.
|
|
170
163
|
# Against 0.19.x the manager silently reports itself as "kg-utils" and
|
|
171
164
|
# drops module_node_counts entirely.
|
|
172
|
-
|
|
165
|
+
#
|
|
166
|
+
# 0.29.0: the MCP server is kg_utils.mcp's ([mcp] brings mcp itself, capped
|
|
167
|
+
# below 2.0 there), PyCodeKG.stats() is the fleet stats shape, and LanceDB
|
|
168
|
+
# is gone.
|
|
169
|
+
"kgmodule-utils[semantic,viz3d,mcp]>=0.29.0",
|
|
173
170
|
]
|
|
174
171
|
|
|
175
172
|
[project.optional-dependencies]
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"""
|
|
2
|
+
cmd_mcp.py
|
|
3
|
+
|
|
4
|
+
``pycodekg mcp`` -- the fleet's standard MCP command, from :mod:`kg_utils.mcp`:
|
|
5
|
+
|
|
6
|
+
pycodekg mcp [--repo DIR] [--db FILE] [--vectors FILE] [--model NAME]
|
|
7
|
+
[--transport stdio|streamable-http] [--host H] [--port N]
|
|
8
|
+
[--manifest]
|
|
9
|
+
|
|
10
|
+
Registering it imports neither ``mcp`` nor the server module, so every other
|
|
11
|
+
``pycodekg`` command starts as fast as before.
|
|
12
|
+
|
|
13
|
+
Author: Eric G. Suchanek, PhD
|
|
14
|
+
|
|
15
|
+
License: Elastic 2.0
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
from typing import TYPE_CHECKING
|
|
22
|
+
|
|
23
|
+
from kg_utils.mcp import add_mcp_command
|
|
24
|
+
|
|
25
|
+
from pycode_kg.cli.main import cli
|
|
26
|
+
|
|
27
|
+
if TYPE_CHECKING:
|
|
28
|
+
from kg_utils.mcp import KGServer
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _build_server(repo: Path, db: Path | None, vectors: Path | None, model: str | None) -> KGServer:
|
|
32
|
+
from pycode_kg.mcp_server import build_server # noqa: PLC0415 -- see the module docstring
|
|
33
|
+
|
|
34
|
+
return build_server(repo, db, vectors, model)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
mcp_command = add_mcp_command(cli, _build_server)
|
|
@@ -26,7 +26,7 @@ def render_explain(
|
|
|
26
26
|
node_id: str,
|
|
27
27
|
*,
|
|
28
28
|
limit: int = 10,
|
|
29
|
-
snippets_hint: str = "
|
|
29
|
+
snippets_hint: str = "pack()",
|
|
30
30
|
) -> str:
|
|
31
31
|
"""
|
|
32
32
|
Render a Markdown natural-language explanation of a code node.
|
|
@@ -37,7 +37,7 @@ def render_explain(
|
|
|
37
37
|
(e.g. ``fn:src/pycode_kg/store.py:GraphStore.expand``).
|
|
38
38
|
:param limit: Maximum callers and callees to list. Pass 0 to list all.
|
|
39
39
|
:param snippets_hint: Closing call-to-action shown to the consumer for
|
|
40
|
-
retrieving the full source — ``"
|
|
40
|
+
retrieving the full source — ``"pack()"``
|
|
41
41
|
for MCP, ``"pycodekg pack"`` for CLI.
|
|
42
42
|
:return: Markdown string, or a "Node Not Found" header when the ID does
|
|
43
43
|
not exist in the knowledge graph.
|