interlinked-mapper 0.1.2__tar.gz → 0.1.4__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.1.2 → interlinked_mapper-0.1.4}/PKG-INFO +1 -1
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked/mcp_server.py +1 -42
- interlinked_mapper-0.1.4/interlinked/visualizer/frontend/index.html +2144 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked/visualizer/server.py +2 -2
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked_mapper.egg-info/PKG-INFO +1 -1
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked_mapper.egg-info/SOURCES.txt +1 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/pyproject.toml +4 -1
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked/__init__.py +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked/analyzer/__init__.py +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked/analyzer/dead_code.py +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked/analyzer/graph.py +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked/analyzer/parser.py +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked/analyzer/similarity.py +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked/cli.py +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked/commander/__init__.py +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked/commander/llm.py +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked/commander/query.py +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked/commander/repl.py +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked/models.py +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked/visualizer/__init__.py +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked/visualizer/layouts.py +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked_mapper.egg-info/dependency_links.txt +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked_mapper.egg-info/entry_points.txt +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked_mapper.egg-info/requires.txt +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/interlinked_mapper.egg-info/top_level.txt +0 -0
- {interlinked_mapper-0.1.2 → interlinked_mapper-0.1.4}/setup.cfg +0 -0
|
@@ -25,7 +25,6 @@ from __future__ import annotations
|
|
|
25
25
|
|
|
26
26
|
import json
|
|
27
27
|
import os
|
|
28
|
-
import threading
|
|
29
28
|
from pathlib import Path
|
|
30
29
|
from typing import Any
|
|
31
30
|
|
|
@@ -65,7 +64,7 @@ def create_mcp_server(project_path: str) -> Server:
|
|
|
65
64
|
to parse, which exceeds Windsurf's startup timeout).
|
|
66
65
|
"""
|
|
67
66
|
# Lazy state — built on first tool call
|
|
68
|
-
_state: dict[str, Any] = {"graph": None, "engine": None, "ready": False
|
|
67
|
+
_state: dict[str, Any] = {"graph": None, "engine": None, "ready": False}
|
|
69
68
|
|
|
70
69
|
def _ensure_ready() -> tuple[CodeGraph, QueryEngine]:
|
|
71
70
|
if not _state["ready"]:
|
|
@@ -237,18 +236,6 @@ def create_mcp_server(project_path: str) -> Server:
|
|
|
237
236
|
"required": ["api_key"],
|
|
238
237
|
},
|
|
239
238
|
),
|
|
240
|
-
Tool(
|
|
241
|
-
name="interlinked_visualizer",
|
|
242
|
-
description="Start the interactive web visualizer for the analyzed project. Opens a browser UI showing the codebase graph with live updates as you use other interlinked tools. Returns the URL. Calling again returns the existing URL if already running.",
|
|
243
|
-
inputSchema={
|
|
244
|
-
"type": "object",
|
|
245
|
-
"properties": {
|
|
246
|
-
"port": {"type": "integer", "description": "Port to run on (default 8420)", "default": 8420},
|
|
247
|
-
"host": {"type": "string", "description": "Host to bind to (default 127.0.0.1)", "default": "127.0.0.1"},
|
|
248
|
-
},
|
|
249
|
-
"required": [],
|
|
250
|
-
},
|
|
251
|
-
),
|
|
252
239
|
]
|
|
253
240
|
|
|
254
241
|
@server.call_tool()
|
|
@@ -258,14 +245,6 @@ def create_mcp_server(project_path: str) -> Server:
|
|
|
258
245
|
try:
|
|
259
246
|
graph, engine = _ensure_ready()
|
|
260
247
|
|
|
261
|
-
if name == "interlinked_visualizer":
|
|
262
|
-
if _state["visualizer_url"]:
|
|
263
|
-
return [TextContent(type="text", text=f"Visualizer already running at {_state['visualizer_url']}")]
|
|
264
|
-
host = arguments.get("host", "127.0.0.1")
|
|
265
|
-
port = arguments.get("port", 8420)
|
|
266
|
-
result = _start_visualizer(graph, engine, host, port, project_path, _state)
|
|
267
|
-
return [TextContent(type="text", text=result)]
|
|
268
|
-
|
|
269
248
|
result = _dispatch_tool(name, arguments, engine, graph, api_key)
|
|
270
249
|
if name == "interlinked_set_api_key":
|
|
271
250
|
api_key = arguments.get("api_key", "")
|
|
@@ -278,26 +257,6 @@ def create_mcp_server(project_path: str) -> Server:
|
|
|
278
257
|
return server
|
|
279
258
|
|
|
280
259
|
|
|
281
|
-
def _start_visualizer(
|
|
282
|
-
graph: CodeGraph, engine: QueryEngine,
|
|
283
|
-
host: str, port: int, project_path: str, _state: dict[str, Any],
|
|
284
|
-
) -> str:
|
|
285
|
-
"""Start the web visualizer in a background thread, sharing the MCP graph/engine."""
|
|
286
|
-
import uvicorn
|
|
287
|
-
from interlinked.visualizer.server import create_app
|
|
288
|
-
|
|
289
|
-
app = create_app(graph, initial_path=project_path, engine=engine)
|
|
290
|
-
url = f"http://{host}:{port}"
|
|
291
|
-
|
|
292
|
-
def _run():
|
|
293
|
-
uvicorn.run(app, host=host, port=port, log_level="warning")
|
|
294
|
-
|
|
295
|
-
t = threading.Thread(target=_run, daemon=True)
|
|
296
|
-
t.start()
|
|
297
|
-
_state["visualizer_url"] = url
|
|
298
|
-
return f"Visualizer started at {url} — open in your browser. MCP tool calls will update the graph in real time."
|
|
299
|
-
|
|
300
|
-
|
|
301
260
|
def _dispatch_tool(
|
|
302
261
|
name: str, args: dict[str, Any],
|
|
303
262
|
engine: QueryEngine, graph: CodeGraph, api_key: str,
|