@terminals-tech/graph
Version:
Language-first event graph system. Extract relationships from text, find patterns, and navigate event chains.
109 lines (108 loc) • 2.54 kB
TypeScript
/**
* GraphProcessor - Scalable graph algorithms for 100K+ events
* Phase 3: Efficient graph operations
*/
import { Event, Relation } from './TextGraph';
export interface GraphNode {
id: string;
data: any;
weight?: number;
}
export interface GraphEdge {
from: string;
to: string;
weight?: number;
type?: string;
}
export interface Subgraph {
nodes: Set<string>;
edges: GraphEdge[];
}
export interface Path {
nodes: string[];
totalWeight: number;
length: number;
}
export interface PageRankResult {
node: string;
score: number;
rank: number;
}
export interface Cluster {
id: number;
nodes: Set<string>;
center?: string;
density: number;
}
export declare class GraphProcessor {
private adjacencyList;
private reverseIndex;
private edgeWeights;
private nodeData;
private pageRankCache;
private clusters;
private isDirty;
private nodeCount;
private edgeCount;
private processedEvents;
private edgeHashes;
/**
* Add event to graph incrementally (idempotent)
*/
addEvent(event: Event, relations: Relation[]): void;
/**
* Add edge between nodes (idempotent)
*/
addEdge(from: string, to: string, weight?: number, type?: string): void;
/**
* Calculate PageRank scores using power iteration
*/
calculatePageRank(iterations?: number, damping?: number): PageRankResult[];
/**
* Find connected components (clusters)
*/
findClusters(): Cluster[];
/**
* Find shortest path using BFS
*/
findPath(from: string, to: string): Path | null;
/**
* Find all paths between two nodes (limited depth)
*/
findAllPaths(from: string, to: string, maxDepth?: number): Path[];
/**
* Get subgraph around a node
*/
getSubgraph(nodeId: string, depth?: number): Subgraph;
/**
* Detect cycles in the graph
*/
detectCycles(): string[][];
/**
* Calculate graph statistics
*/
getStatistics(): {
nodes: number;
edges: number;
density: number;
avgDegree: number;
maxDegree: number;
connected: boolean;
cyclic: boolean;
};
/**
* Clear the graph
*/
clear(): void;
/**
* Create a snapshot for rollback
*/
private createSnapshot;
/**
* Restore from snapshot
*/
private restoreSnapshot;
private formatPageRankResults;
private calculateClusterDensity;
private findClusterCenter;
}