interlinked-mapper 0.3.8__tar.gz → 0.3.9__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.
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/PKG-INFO +1 -1
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/analyzer/graph.py +27 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/analyzer/similarity.py +7 -2
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/commander/query.py +28 -2
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked_mapper.egg-info/PKG-INFO +1 -1
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/pyproject.toml +1 -1
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/__init__.py +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/analyzer/__init__.py +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/analyzer/dead_code.py +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/analyzer/embeddings.py +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/analyzer/parser.py +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/cli.py +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/commander/__init__.py +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/commander/llm.py +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/commander/repl.py +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/mcp_server.py +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/models.py +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/__init__.py +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/dist/assets/index-CyhrxsQU.css +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/dist/assets/index-Dh01aXoE.js +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/dist/index.html +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/index.html +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/index.html.d3-legacy +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/package-lock.json +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/package.json +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/src/App.tsx +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/src/graph/GraphCanvas.tsx +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/src/graph/nodePrograms.ts +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/src/index.css +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/src/main.tsx +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/src/state/graphStore.ts +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/src/state/sseClient.ts +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/src/theme.ts +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/src/types.ts +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/src/vite-env.d.ts +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/tsconfig.json +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/vite.config.ts +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/layouts.py +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/server.py +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked_mapper.egg-info/SOURCES.txt +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked_mapper.egg-info/dependency_links.txt +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked_mapper.egg-info/entry_points.txt +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked_mapper.egg-info/requires.txt +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked_mapper.egg-info/top_level.txt +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/setup.cfg +0 -0
- {interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/tests/test_accuracy.py +0 -0
|
@@ -12,6 +12,27 @@ from interlinked.models import (
|
|
|
12
12
|
)
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
# Method names so common on builtins (dict, list, set, str, etc.) that resolving
|
|
16
|
+
# them to project symbols by bare-name matching is almost always a false positive.
|
|
17
|
+
# e.g. `op_dict.items()` should NOT resolve to `ActionCost.items`.
|
|
18
|
+
_BUILTIN_METHOD_NAMES: frozenset[str] = frozenset({
|
|
19
|
+
# dict
|
|
20
|
+
"items", "keys", "values", "get", "pop", "update", "setdefault",
|
|
21
|
+
"clear", "copy",
|
|
22
|
+
# list / sequence
|
|
23
|
+
"append", "extend", "insert", "remove", "sort", "reverse",
|
|
24
|
+
"count", "index",
|
|
25
|
+
# set
|
|
26
|
+
"add", "discard", "union", "intersection", "difference",
|
|
27
|
+
"issubset", "issuperset",
|
|
28
|
+
# str
|
|
29
|
+
"strip", "split", "join", "replace", "startswith", "endswith",
|
|
30
|
+
"lower", "upper", "format", "encode", "decode",
|
|
31
|
+
# general
|
|
32
|
+
"close", "read", "write", "flush", "seek", "tell",
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
|
|
15
36
|
class CodeGraph:
|
|
16
37
|
"""The core graph structure representing an entire Python project.
|
|
17
38
|
|
|
@@ -215,6 +236,12 @@ class CodeGraph:
|
|
|
215
236
|
source = next(iter(candidates))
|
|
216
237
|
|
|
217
238
|
if target not in node_ids:
|
|
239
|
+
# Never resolve bare builtin method names — they match too
|
|
240
|
+
# broadly (e.g. "items" matching ActionCost.items when the
|
|
241
|
+
# actual call is dict.items()).
|
|
242
|
+
if target in _BUILTIN_METHOD_NAMES:
|
|
243
|
+
return edge
|
|
244
|
+
|
|
218
245
|
candidates = name_index.get(target, set())
|
|
219
246
|
if len(candidates) == 1:
|
|
220
247
|
target = next(iter(candidates))
|
|
@@ -257,8 +257,13 @@ def get_rich_context(graph: CodeGraph, node: NodeData) -> dict:
|
|
|
257
257
|
context["callers"] = [{"id": n.id, "name": n.name} for n in callers[:20]]
|
|
258
258
|
context["callees"] = [{"id": n.id, "name": n.name} for n in callees[:20]]
|
|
259
259
|
|
|
260
|
-
# Fingerprint
|
|
261
|
-
|
|
260
|
+
# Fingerprint — slim version (drop ast_tree, minhash, ast_node_counts)
|
|
261
|
+
fp = node.metadata.get("fingerprint")
|
|
262
|
+
if fp and isinstance(fp, dict):
|
|
263
|
+
_heavy = {"ast_tree", "minhash", "ast_node_counts", "source_snippet"}
|
|
264
|
+
context["fingerprint"] = {k: v for k, v in fp.items() if k not in _heavy}
|
|
265
|
+
else:
|
|
266
|
+
context["fingerprint"] = fp
|
|
262
267
|
|
|
263
268
|
return context
|
|
264
269
|
|
|
@@ -12,6 +12,30 @@ from interlinked.models import (
|
|
|
12
12
|
)
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
# Fields in node.metadata["fingerprint"] that are huge and useless in
|
|
16
|
+
# serialized query/snapshot output. Kept in memory for similarity scoring.
|
|
17
|
+
_FINGERPRINT_HEAVY_KEYS = frozenset({
|
|
18
|
+
"ast_tree", "minhash", "ast_node_counts",
|
|
19
|
+
"source_snippet",
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _slim_node_dict(d: dict) -> dict:
|
|
24
|
+
"""Strip heavy fingerprint fields from a serialized NodeData dict."""
|
|
25
|
+
meta = d.get("metadata")
|
|
26
|
+
if not meta or "fingerprint" not in meta:
|
|
27
|
+
return d
|
|
28
|
+
fp = meta["fingerprint"]
|
|
29
|
+
if not isinstance(fp, dict):
|
|
30
|
+
return d
|
|
31
|
+
d = d.copy()
|
|
32
|
+
d["metadata"] = meta.copy()
|
|
33
|
+
d["metadata"]["fingerprint"] = {
|
|
34
|
+
k: v for k, v in fp.items() if k not in _FINGERPRINT_HEAVY_KEYS
|
|
35
|
+
}
|
|
36
|
+
return d
|
|
37
|
+
|
|
38
|
+
|
|
15
39
|
class QueryEngine:
|
|
16
40
|
"""Provides a high-level API for querying and manipulating the code graph.
|
|
17
41
|
|
|
@@ -407,7 +431,7 @@ class QueryEngine:
|
|
|
407
431
|
|
|
408
432
|
self._notify()
|
|
409
433
|
|
|
410
|
-
return [r.model_dump() for r in results]
|
|
434
|
+
return [_slim_node_dict(r.model_dump()) for r in results]
|
|
411
435
|
|
|
412
436
|
def trace_variable(self, var_name: str, origin: str | None = None) -> str:
|
|
413
437
|
"""Trace a variable's path through reads/writes and highlight it.
|
|
@@ -1205,7 +1229,9 @@ class QueryEngine:
|
|
|
1205
1229
|
|
|
1206
1230
|
def snapshot(self) -> dict:
|
|
1207
1231
|
"""Get the current graph snapshot as a dict (for JSON serialization)."""
|
|
1208
|
-
|
|
1232
|
+
snap = self.graph.snapshot(self.state).model_dump()
|
|
1233
|
+
snap["nodes"] = [_slim_node_dict(n) for n in snap.get("nodes", [])]
|
|
1234
|
+
return snap
|
|
1209
1235
|
|
|
1210
1236
|
# ── Stats ────────────────────────────────────────────────────────
|
|
1211
1237
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/index.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/package.json
RENAMED
|
File without changes
|
{interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/src/App.tsx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/src/index.css
RENAMED
|
File without changes
|
{interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/src/main.tsx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/src/theme.ts
RENAMED
|
File without changes
|
{interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/src/types.ts
RENAMED
|
File without changes
|
|
File without changes
|
{interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/tsconfig.json
RENAMED
|
File without changes
|
{interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked/visualizer/frontend/vite.config.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked_mapper.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked_mapper.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked_mapper.egg-info/requires.txt
RENAMED
|
File without changes
|
{interlinked_mapper-0.3.8 → interlinked_mapper-0.3.9}/interlinked_mapper.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|