From 4feb8aa4e01df4dc1b8a6a2441d712073dcbff9f Mon Sep 17 00:00:00 2001 From: phernandez Date: Fri, 3 Jan 2025 18:20:33 -0600 Subject: [PATCH] sync wip --- src/basic_memory/cli/commands/sync.py | 71 ++++++++++++++++--- src/basic_memory/markdown/knowledge_writer.py | 7 +- 2 files changed, 63 insertions(+), 15 deletions(-) diff --git a/src/basic_memory/cli/commands/sync.py b/src/basic_memory/cli/commands/sync.py index a3dcfdcc..748e3dfd 100644 --- a/src/basic_memory/cli/commands/sync.py +++ b/src/basic_memory/cli/commands/sync.py @@ -1,12 +1,17 @@ """Command module for basic-memory sync operations.""" from pathlib import Path -from typing import Optional, List, Tuple +from typing import Optional, List, Tuple, Dict from dataclasses import dataclass +from collections import defaultdict import typer import asyncio from loguru import logger from rich.console import Console +from rich.panel import Panel +from rich.padding import Padding +from rich.text import Text +from rich.tree import Tree from basic_memory.cli.app import app from basic_memory import db @@ -28,16 +33,64 @@ class ValidationIssue: file_path: str error: str -def display_validation_errors(issues: List[ValidationIssue]): - """Display validation errors in a clear, git-like format.""" - console.print("\n[red]Error: Invalid frontmatter in knowledge files[/red]\n") - +def group_issues_by_directory(issues: List[ValidationIssue]) -> Dict[str, List[ValidationIssue]]: + """Group validation issues by directory.""" + grouped = defaultdict(list) for issue in issues: - console.print(f"{issue.file_path}") - console.print(f" {issue.error}\n") + dir_name = Path(issue.file_path).parent.name + grouped[dir_name].append(issue) + return dict(grouped) - console.print("To fix, add required frontmatter fields to each file") - console.print("Once fixed, run 'basic-memory sync' again") +def display_validation_errors(issues: List[ValidationIssue]): + """Display validation errors in a rich, organized format.""" + # Create header + console.print() + console.print(Panel( + "[red bold]Error:[/red bold] Invalid frontmatter in knowledge files", + expand=False + )) + console.print() + + # Group issues by directory + grouped_issues = group_issues_by_directory(issues) + + # Create tree structure + tree = Tree("Knowledge Files") + for dir_name, dir_issues in sorted(grouped_issues.items()): + # Create branch for directory + branch = tree.add( + f"[bold blue]{dir_name}/[/bold blue] " + f"([yellow]{len(dir_issues)} files[/yellow])" + ) + + # Add each file issue + for issue in sorted(dir_issues, key=lambda x: x.file_path): + file_name = Path(issue.file_path).name + branch.add( + Text.assemble( + ("└─ ", "dim"), + (file_name, "yellow"), + ": ", + (issue.error, "red") + ) + ) + + # Display tree + console.print(Padding(tree, (1, 2))) + + # Add help text + console.print() + console.print(Panel( + Text.assemble( + ("To fix:", "bold"), + "\n1. Add required frontmatter fields to each file", + "\n2. Run ", + ("basic-memory sync", "bold cyan"), + " again" + ), + expand=False + )) + console.print() async def get_sync_service(db_type=DatabaseType.FILESYSTEM): diff --git a/src/basic_memory/markdown/knowledge_writer.py b/src/basic_memory/markdown/knowledge_writer.py index 6fd8376a..d1c74dc5 100644 --- a/src/basic_memory/markdown/knowledge_writer.py +++ b/src/basic_memory/markdown/knowledge_writer.py @@ -76,12 +76,7 @@ class KnowledgeWriter: # Outgoing relations for rel in entity.to_relations: - sections.append(f"- [[{rel.from_entity.name}]] {rel.relation_type}") - - # Incoming relations - for rel in entity.from_relations: - sections.append(f"- [[{rel.to_entity.name}]] {rel.relation_type}") - + sections.append(f"- {rel.relation_type} [[{rel.from_entity.name}]] ") sections.append("") if metadata: