Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
eaef11e
refactor: update dependencies and improve graph handling
Anchel123 Jun 1, 2026
98fc391
feat: enhance combobox type safety and element menu positioning
Anchel123 Jul 8, 2026
94953fc
feat: update API proxy target and add element menu tests
Anchel123 Jul 8, 2026
b14ed9e
feat: improve graph element handling and enhance toolbar accessibility
Anchel123 Jul 8, 2026
7b0cde0
fix: resolve build and compilation errors
Anchel123 Jul 8, 2026
da01b49
Fix remaining PR #697 code quality issues
Anchel123 Jul 8, 2026
b86d5f9
Improve path zoom handling and remove unnecessary state updates
Anchel123 Jul 8, 2026
bcf5e7a
Reduce link zoom multiplier to 1.1x for better spacing
Anchel123 Jul 8, 2026
bf30fd7
Remove automatic path zoom - just highlight paths without forcing zoom
Anchel123 Jul 8, 2026
d64403e
fix: improve path zoom behavior - zoom all paths on response, then zo…
Anchel123 Jul 8, 2026
babe0ba
fix: add graphId to ForceGraph for incremental data updates
Anchel123 Jul 8, 2026
6745207
fix: update @falkordb/canvas dependency to version 0.2.5
Anchel123 Jul 9, 2026
4807a29
fix: improve element menu removal test for deterministic assertions
Anchel123 Jul 9, 2026
0bb7392
fix: update API proxy target to local development server
Anchel123 Jul 9, 2026
d063625
fix: set viewport in browser context to ensure desktop layout on page…
Anchel123 Jul 9, 2026
d14b29d
Merge branch 'staging' into add-layouts
Anchel123 Jul 12, 2026
e39f528
fix: resolve combobox crash from repo objects and legacy graph name l…
Anchel123 Jul 12, 2026
a18f422
fix: compose AsyncGraphQuery graph name immediately for explicit bran…
Anchel123 Jul 13, 2026
8492264
fix: normalize /api/list_repos payload for both string[] and object b…
Anchel123 Jul 13, 2026
eb13fa6
fix(e2e): seed synthesized CALLS edges into the actual indexed graph
Anchel123 Jul 13, 2026
0875796
fix(e2e): correct category checkbox order and metrics panel read race
Anchel123 Jul 13, 2026
89166c6
fix: update API proxy target to use the production URL
Anchel123 Jul 20, 2026
7463dff
Revert "fix: update API proxy target to use the production URL"
Anchel123 Jul 20, 2026
7b5c156
test(e2e): wait for element menu to appear after right-click
Naseem77 Jul 23, 2026
4d4e727
test(e2e): select category checkboxes by label instead of index
Naseem77 Jul 23, 2026
8cde46f
test(e2e): fix metrics panel poll to parse '<n> Nodes' text
Naseem77 Jul 23, 2026
9f5f56a
fix(api): resolve repo_info metadata lookup for full graph keys
Naseem77 Jul 23, 2026
56aa648
test(e2e): focus a node before right-clicking canvas center
Naseem77 Jul 23, 2026
d87b7e9
fix: address unresolved PR review feedback
Anchel123 Jul 23, 2026
ec3289a
fix: resolve new PR review comments
Anchel123 Jul 23, 2026
8b72a66
fix: address latest PR review threads
Anchel123 Jul 23, 2026
ba2054d
fix: address latest review comments
Anchel123 Jul 23, 2026
dfe62ff
fix: address newest PR review findings
Anchel123 Jul 23, 2026
d6b7c2a
fix: align canvas with local React 19 setup
Anchel123 Jul 23, 2026
56b496b
fix: update dependencies and improve component implementations
Anchel123 Jul 23, 2026
cb2f7c9
chore: downgrade React and React DOM to version 18.3.1 and update cor…
Anchel123 Jul 23, 2026
3639af3
fix: correct insertIndex calculation in RemoveLastPath function
Anchel123 Jul 23, 2026
84fcd20
fix: address latest review comments
Anchel123 Jul 23, 2026
1b53c48
fix: avoid duplicate graph existence lookup
Anchel123 Jul 23, 2026
2fa562f
chore: upgrade React and related dependencies; refactor DataPanel com…
Anchel123 Jul 23, 2026
42424e0
fix: address latest review comments
Anchel123 Jul 23, 2026
bffa01b
fix: guard element menu repo URL for links
Anchel123 Jul 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 40 additions & 3 deletions api/graph.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,9 +131,17 @@ def __init__(self, name: str, branch: Optional[str] = None) -> None:
# Normalize empty / None to DEFAULT_BRANCH so the stored
# branch matches the key actually used by compose_graph_name.
self.branch = branch or DEFAULT_BRANCH
self.name = compose_graph_name(self.project, self.branch)
self.db = create_falkordb()
# Legacy (pre-T17) graphs are stored under the bare project
# name. Prefer that existing graph over composing a new,
# empty ``code:{project}:{branch}`` key out from under it.
if branch in (None, "", DEFAULT_BRANCH) and name in self.db.list_graphs():
self.name = name
else:
self.name = compose_graph_name(self.project, self.branch)

self.db = create_falkordb()
if not hasattr(self, "db"):
self.db = create_falkordb()
self.g = self.db.select_graph(self.name)

# Initialize the backlog as disabled by default
Expand Down Expand Up @@ -829,19 +837,48 @@ def __init__(self, name: str, branch: Optional[str] = None) -> None:
if parsed is not None:
self.project, self.branch = parsed
self.name = name
self._needs_resolution = False
else:
self.project = name
self.branch = branch or DEFAULT_BRANCH
self.name = compose_graph_name(self.project, self.branch)
if branch in (None, "", DEFAULT_BRANCH):
# Composition is deferred until ``graph_exists``/first query
# so we can prefer an existing legacy (pre-T17) bare graph
# over composing a new, empty ``code:{project}:_default``
# key; see ``_resolve_name``.
self.name = name
self._needs_resolution = True
else:
# A specific branch was requested: compose immediately,
# same as before this bare-name fallback existed.
self.name = compose_graph_name(self.project, self.branch)
self._needs_resolution = False
self.db = _async_db()
self.g = self.db.select_graph(self.name)

async def _resolve_name(self, graphs: Optional[list[str]] = None) -> None:
"""Resolve a bare project name to its actual FalkorDB graph key.

Prefers an existing legacy graph (stored under the bare project
name) over composing a new ``code:{project}:{branch}`` key.
"""
if not getattr(self, "_needs_resolution", False):
return
self._needs_resolution = False
if graphs is None:
graphs = await self.db.list_graphs()
if self.name not in graphs:
self.name = compose_graph_name(self.project, self.branch)
self.g = self.db.select_graph(self.name)

async def graph_exists(self) -> bool:
"""Check if this graph exists, reusing the current connection."""
graphs = await self.db.list_graphs()
await self._resolve_name(graphs)
return self.name in graphs
Comment thread
Anchel123 marked this conversation as resolved.

async def _query(self, q: str, params: Optional[dict] = None):
await self._resolve_name()
return await self.g.query(q, params)

async def get_sub_graph(self, limit: int) -> dict:
Expand Down
4 changes: 3 additions & 1 deletion api/index.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,9 @@ async def repo_info(data: RepoRequest, _=Depends(public_or_auth)):
stats = await g.stats()
finally:
await g.close()
info = await async_get_repo_info(data.repo, data.branch)
# Use the parsed project/branch so full graph keys
# (``code:{project}:{branch}``) resolve the same as plain repo names.
info = await async_get_repo_info(g.project, g.branch)

if info is None:
return JSONResponse({"status": f'Missing repository "{data.repo}"'}, status_code=400)
Expand Down
Loading
Loading