interlinked-mapper 0.3.4__tar.gz → 0.3.5__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.4 → interlinked_mapper-0.3.5}/PKG-INFO +1 -1
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/mcp_server.py +37 -34
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked_mapper.egg-info/PKG-INFO +1 -1
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/pyproject.toml +1 -1
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/__init__.py +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/analyzer/__init__.py +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/analyzer/dead_code.py +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/analyzer/embeddings.py +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/analyzer/graph.py +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/analyzer/parser.py +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/analyzer/similarity.py +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/cli.py +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/commander/__init__.py +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/commander/llm.py +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/commander/query.py +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/commander/repl.py +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/models.py +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/__init__.py +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/dist/assets/index-CyhrxsQU.css +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/dist/assets/index-Dh01aXoE.js +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/dist/index.html +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/index.html +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/index.html.d3-legacy +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/package-lock.json +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/package.json +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/src/App.tsx +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/src/graph/GraphCanvas.tsx +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/src/graph/nodePrograms.ts +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/src/index.css +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/src/main.tsx +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/src/state/graphStore.ts +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/src/state/sseClient.ts +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/src/theme.ts +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/src/types.ts +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/src/vite-env.d.ts +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/tsconfig.json +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/vite.config.ts +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/layouts.py +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/server.py +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked_mapper.egg-info/SOURCES.txt +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked_mapper.egg-info/dependency_links.txt +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked_mapper.egg-info/entry_points.txt +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked_mapper.egg-info/requires.txt +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked_mapper.egg-info/top_level.txt +0 -0
- {interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/setup.cfg +0 -0
|
@@ -41,46 +41,46 @@ from interlinked.analyzer.dead_code import detect_dead_code
|
|
|
41
41
|
from interlinked.commander.query import QueryEngine
|
|
42
42
|
|
|
43
43
|
|
|
44
|
+
def _start_background_analysis(graph: CodeGraph, engine: QueryEngine, project_path: str) -> None:
|
|
45
|
+
"""Run similarity + embeddings in background threads (non-blocking).
|
|
46
|
+
|
|
47
|
+
Mirrors the pattern used by the REST API server: parse returns fast,
|
|
48
|
+
then similarity fingerprinting and embedding builds run in the background.
|
|
49
|
+
"""
|
|
50
|
+
import threading
|
|
51
|
+
|
|
52
|
+
# Similarity in background thread
|
|
53
|
+
def _run_similarity():
|
|
54
|
+
try:
|
|
55
|
+
from interlinked.analyzer.similarity import analyze_similarity
|
|
56
|
+
analyze_similarity(graph)
|
|
57
|
+
except Exception:
|
|
58
|
+
pass
|
|
59
|
+
threading.Thread(target=_run_similarity, daemon=True, name="mcp-similarity").start()
|
|
60
|
+
|
|
61
|
+
# Embeddings in background thread (via build_async which spawns its own thread)
|
|
62
|
+
try:
|
|
63
|
+
from interlinked.visualizer.server import _start_embedding_build, _collect_function_sources
|
|
64
|
+
_start_embedding_build(graph, project_path, engine)
|
|
65
|
+
except Exception:
|
|
66
|
+
pass
|
|
67
|
+
|
|
68
|
+
|
|
44
69
|
def build_graph(project_path: str) -> tuple[CodeGraph, QueryEngine]:
|
|
45
|
-
"""Parse a project and build the graph + query engine.
|
|
70
|
+
"""Parse a project and build the graph + query engine.
|
|
71
|
+
|
|
72
|
+
Returns immediately after parsing + dead code detection.
|
|
73
|
+
Similarity and embeddings run in background threads.
|
|
74
|
+
"""
|
|
46
75
|
nodes, edges = parse_project(project_path)
|
|
47
76
|
graph = CodeGraph()
|
|
48
77
|
graph.build_from(nodes, edges)
|
|
49
78
|
detect_dead_code(graph)
|
|
50
79
|
|
|
51
|
-
# Run similarity analysis if available
|
|
52
|
-
try:
|
|
53
|
-
from interlinked.analyzer.similarity import analyze_similarity
|
|
54
|
-
analyze_similarity(graph)
|
|
55
|
-
except Exception:
|
|
56
|
-
pass
|
|
57
|
-
|
|
58
80
|
engine = QueryEngine(graph)
|
|
59
81
|
|
|
60
|
-
#
|
|
61
|
-
|
|
62
|
-
from interlinked.analyzer.embeddings import EmbeddingIndex, is_available
|
|
63
|
-
if is_available():
|
|
64
|
-
from pathlib import Path
|
|
65
|
-
emb_index = EmbeddingIndex(project_path)
|
|
66
|
-
engine._embedding_index = emb_index
|
|
67
|
-
# Collect function sources
|
|
68
|
-
from interlinked.models import SymbolType
|
|
69
|
-
functions = []
|
|
70
|
-
for node in graph.all_nodes(include_proposed=False):
|
|
71
|
-
if node.symbol_type not in (SymbolType.FUNCTION, SymbolType.METHOD):
|
|
72
|
-
continue
|
|
73
|
-
if node.file_path and node.line_start and node.line_end:
|
|
74
|
-
try:
|
|
75
|
-
lines = Path(node.file_path).read_text(encoding="utf-8", errors="replace").splitlines()
|
|
76
|
-
source = "\n".join(lines[max(0, node.line_start - 1):min(len(lines), node.line_end)])
|
|
77
|
-
if source:
|
|
78
|
-
functions.append({"id": node.id, "source": source})
|
|
79
|
-
except Exception:
|
|
80
|
-
pass
|
|
81
|
-
emb_index.build_async(functions)
|
|
82
|
-
except Exception:
|
|
83
|
-
pass
|
|
82
|
+
# Kick off similarity + embeddings in background (non-blocking)
|
|
83
|
+
_start_background_analysis(graph, engine, project_path)
|
|
84
84
|
|
|
85
85
|
return graph, engine
|
|
86
86
|
|
|
@@ -520,7 +520,8 @@ def _dispatch_via_server(name: str, args: dict[str, Any], server_url: str) -> st
|
|
|
520
520
|
if method == "GET":
|
|
521
521
|
r = httpx.get(url, timeout=30.0)
|
|
522
522
|
else:
|
|
523
|
-
|
|
523
|
+
timeout = 120.0 if "switch_project" in path else 30.0
|
|
524
|
+
r = httpx.post(url, json=body, timeout=timeout)
|
|
524
525
|
data = r.json()
|
|
525
526
|
|
|
526
527
|
# Extract the most useful part of the response for the LLM
|
|
@@ -621,8 +622,10 @@ def _dispatch_tool(
|
|
|
621
622
|
|
|
622
623
|
elif name == "interlinked_switch_project":
|
|
623
624
|
from interlinked.visualizer.server import _rebuild_graph
|
|
624
|
-
result = _rebuild_graph(args["path"], graph)
|
|
625
|
+
result = _rebuild_graph(args["path"], graph, run_similarity=False)
|
|
625
626
|
engine.reset_filter()
|
|
627
|
+
# Background similarity + embeddings — matches REST API pattern
|
|
628
|
+
_start_background_analysis(graph, engine, args["path"])
|
|
626
629
|
return json.dumps(result, indent=2)
|
|
627
630
|
|
|
628
631
|
elif name == "interlinked_edges_between":
|
|
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
|
|
File without changes
|
|
File without changes
|
{interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/index.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/package.json
RENAMED
|
File without changes
|
{interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/src/App.tsx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/src/index.css
RENAMED
|
File without changes
|
{interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/src/main.tsx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/src/theme.ts
RENAMED
|
File without changes
|
{interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/src/types.ts
RENAMED
|
File without changes
|
|
File without changes
|
{interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/tsconfig.json
RENAMED
|
File without changes
|
{interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked/visualizer/frontend/vite.config.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked_mapper.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked_mapper.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked_mapper.egg-info/requires.txt
RENAMED
|
File without changes
|
{interlinked_mapper-0.3.4 → interlinked_mapper-0.3.5}/interlinked_mapper.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|