@aibuildinfra/proofgraph 1.0.0

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.
Files changed (76) hide show
  1. package/LICENSE +21 -0
  2. package/PRIVACY.md +8 -0
  3. package/README.md +193 -0
  4. package/SECURITY.md +27 -0
  5. package/dist/cli/index.d.ts +6 -0
  6. package/dist/cli/index.js +273 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/dashboard/server.d.ts +5 -0
  9. package/dist/dashboard/server.js +271 -0
  10. package/dist/dashboard/server.js.map +1 -0
  11. package/dist/data/seed.d.ts +6 -0
  12. package/dist/data/seed.js +325 -0
  13. package/dist/data/seed.js.map +1 -0
  14. package/dist/engine/aiDiscoverability.d.ts +11 -0
  15. package/dist/engine/aiDiscoverability.js +135 -0
  16. package/dist/engine/aiDiscoverability.js.map +1 -0
  17. package/dist/engine/claimVerifier.d.ts +26 -0
  18. package/dist/engine/claimVerifier.js +130 -0
  19. package/dist/engine/claimVerifier.js.map +1 -0
  20. package/dist/engine/consistencyAudit.d.ts +11 -0
  21. package/dist/engine/consistencyAudit.js +172 -0
  22. package/dist/engine/consistencyAudit.js.map +1 -0
  23. package/dist/engine/exporter.d.ts +17 -0
  24. package/dist/engine/exporter.js +83 -0
  25. package/dist/engine/exporter.js.map +1 -0
  26. package/dist/engine/graphTraversal.d.ts +25 -0
  27. package/dist/engine/graphTraversal.js +74 -0
  28. package/dist/engine/graphTraversal.js.map +1 -0
  29. package/dist/engine/resolver.d.ts +20 -0
  30. package/dist/engine/resolver.js +168 -0
  31. package/dist/engine/resolver.js.map +1 -0
  32. package/dist/engine/schemaOrg.d.ts +12 -0
  33. package/dist/engine/schemaOrg.js +105 -0
  34. package/dist/engine/schemaOrg.js.map +1 -0
  35. package/dist/engine/tokenOptimizer.d.ts +25 -0
  36. package/dist/engine/tokenOptimizer.js +166 -0
  37. package/dist/engine/tokenOptimizer.js.map +1 -0
  38. package/dist/engine/webPresence.d.ts +32 -0
  39. package/dist/engine/webPresence.js +63 -0
  40. package/dist/engine/webPresence.js.map +1 -0
  41. package/dist/index.d.ts +20 -0
  42. package/dist/index.js +35 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/mcp/prompts.d.ts +25 -0
  45. package/dist/mcp/prompts.js +136 -0
  46. package/dist/mcp/prompts.js.map +1 -0
  47. package/dist/mcp/resources.d.ts +27 -0
  48. package/dist/mcp/resources.js +118 -0
  49. package/dist/mcp/resources.js.map +1 -0
  50. package/dist/mcp/server.d.ts +15 -0
  51. package/dist/mcp/server.js +88 -0
  52. package/dist/mcp/server.js.map +1 -0
  53. package/dist/mcp/tools.d.ts +256 -0
  54. package/dist/mcp/tools.js +391 -0
  55. package/dist/mcp/tools.js.map +1 -0
  56. package/dist/security/robots.d.ts +15 -0
  57. package/dist/security/robots.js +78 -0
  58. package/dist/security/robots.js.map +1 -0
  59. package/dist/security/safeFetch.d.ts +23 -0
  60. package/dist/security/safeFetch.js +122 -0
  61. package/dist/security/safeFetch.js.map +1 -0
  62. package/dist/storage/graphStore.d.ts +70 -0
  63. package/dist/storage/graphStore.js +275 -0
  64. package/dist/storage/graphStore.js.map +1 -0
  65. package/dist/storage/sqliteAdapter.d.ts +14 -0
  66. package/dist/storage/sqliteAdapter.js +137 -0
  67. package/dist/storage/sqliteAdapter.js.map +1 -0
  68. package/dist/tests/proofgraph.test.d.ts +5 -0
  69. package/dist/tests/proofgraph.test.js +249 -0
  70. package/dist/tests/proofgraph.test.js.map +1 -0
  71. package/dist/types/index.d.ts +206 -0
  72. package/dist/types/index.js +6 -0
  73. package/dist/types/index.js.map +1 -0
  74. package/package.json +65 -0
  75. package/server.json +24 -0
  76. package/smithery.yaml +6 -0
@@ -0,0 +1,78 @@
1
+ /**
2
+ * ProofGraph Robots.txt Parser & Compliance Engine
3
+ */
4
+ export class RobotsParser {
5
+ rules = [];
6
+ constructor(robotsTxtContent) {
7
+ if (robotsTxtContent) {
8
+ this.parse(robotsTxtContent);
9
+ }
10
+ }
11
+ parse(content) {
12
+ const lines = content.split(/\r?\n/);
13
+ let currentUserAgent = '*';
14
+ let currentDisallows = [];
15
+ let currentAllows = [];
16
+ let currentDelay;
17
+ for (const rawLine of lines) {
18
+ const line = rawLine.replace(/#.*$/, '').trim();
19
+ if (!line)
20
+ continue;
21
+ const [key, ...rest] = line.split(':');
22
+ const directive = key.trim().toLowerCase();
23
+ const value = rest.join(':').trim();
24
+ if (directive === 'user-agent') {
25
+ if (currentDisallows.length > 0 || currentAllows.length > 0) {
26
+ this.rules.push({
27
+ userAgent: currentUserAgent,
28
+ disallow: currentDisallows,
29
+ allow: currentAllows,
30
+ crawlDelay: currentDelay,
31
+ });
32
+ currentDisallows = [];
33
+ currentAllows = [];
34
+ currentDelay = undefined;
35
+ }
36
+ currentUserAgent = value.toLowerCase();
37
+ }
38
+ else if (directive === 'disallow') {
39
+ if (value)
40
+ currentDisallows.push(value);
41
+ }
42
+ else if (directive === 'allow') {
43
+ if (value)
44
+ currentAllows.push(value);
45
+ }
46
+ else if (directive === 'crawl-delay') {
47
+ currentDelay = parseFloat(value) || undefined;
48
+ }
49
+ }
50
+ if (currentDisallows.length > 0 || currentAllows.length > 0) {
51
+ this.rules.push({
52
+ userAgent: currentUserAgent,
53
+ disallow: currentDisallows,
54
+ allow: currentAllows,
55
+ crawlDelay: currentDelay,
56
+ });
57
+ }
58
+ }
59
+ isAllowed(pathname, userAgent = 'ProofGraph-Bot') {
60
+ const ua = userAgent.toLowerCase();
61
+ const matchingRule = this.rules.find(r => r.userAgent === ua) ||
62
+ this.rules.find(r => r.userAgent === '*');
63
+ if (!matchingRule)
64
+ return true;
65
+ // Check allow first
66
+ for (const allowPath of matchingRule.allow) {
67
+ if (pathname.startsWith(allowPath))
68
+ return true;
69
+ }
70
+ // Check disallow
71
+ for (const disallowPath of matchingRule.disallow) {
72
+ if (pathname.startsWith(disallowPath))
73
+ return false;
74
+ }
75
+ return true;
76
+ }
77
+ }
78
+ //# sourceMappingURL=robots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"robots.js","sourceRoot":"","sources":["../../src/security/robots.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * ProofGraph Safe Fetch & SSRF Protection Engine
3
+ * Prevents SSRF vulnerabilities, blocks private addresses and cloud metadata
4
+ */
5
+ import { URL } from 'node:url';
6
+ export interface SafeFetchOptions {
7
+ timeoutMs?: number;
8
+ maxSizeBytes?: number;
9
+ allowDevLocalhost?: boolean;
10
+ }
11
+ export declare class SecurityError extends Error {
12
+ constructor(message: string);
13
+ }
14
+ export declare function isPrivateOrForbiddenHost(hostname: string, allowDevLocalhost?: boolean): boolean;
15
+ export declare function validateSafeUrl(rawUrl: string, allowDevLocalhost?: boolean): URL;
16
+ export declare function computeSha256(content: string): string;
17
+ export declare function safeFetch(rawUrl: string, options?: SafeFetchOptions): Promise<{
18
+ text: string;
19
+ status: number;
20
+ contentType: string;
21
+ contentHash: string;
22
+ etag?: string;
23
+ }>;
@@ -0,0 +1,122 @@
1
+ /**
2
+ * ProofGraph Safe Fetch & SSRF Protection Engine
3
+ * Prevents SSRF vulnerabilities, blocks private addresses and cloud metadata
4
+ */
5
+ import { URL } from 'node:url';
6
+ import { createHash } from 'node:crypto';
7
+ export class SecurityError extends Error {
8
+ constructor(message) {
9
+ super(message);
10
+ this.name = 'SecurityError';
11
+ }
12
+ }
13
+ export function isPrivateOrForbiddenHost(hostname, allowDevLocalhost = false) {
14
+ const host = hostname.toLowerCase().trim();
15
+ if (allowDevLocalhost && (host === 'localhost' || host === '127.0.0.1')) {
16
+ return false;
17
+ }
18
+ // Exact hostname blocks
19
+ if (host === 'localhost' ||
20
+ host === '127.0.0.1' ||
21
+ host === '0.0.0.0' ||
22
+ host === '::1' ||
23
+ host === 'metadata.google.internal' ||
24
+ host === 'instance-data' ||
25
+ host.endsWith('.local') ||
26
+ host.endsWith('.internal')) {
27
+ return true;
28
+ }
29
+ // IPv4 Pattern checks
30
+ const ipv4Match = host.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);
31
+ if (ipv4Match) {
32
+ const octets = ipv4Match.slice(1, 5).map(Number);
33
+ if (octets.some(o => o < 0 || o > 255))
34
+ return true;
35
+ const [o1, o2, o3, o4] = octets;
36
+ // Loopback: 127.0.0.0/8
37
+ if (o1 === 127)
38
+ return true;
39
+ // Private RFC 1918: 10.0.0.0/8
40
+ if (o1 === 10)
41
+ return true;
42
+ // Private RFC 1918: 172.16.0.0/12
43
+ if (o1 === 172 && o2 >= 16 && o2 <= 31)
44
+ return true;
45
+ // Private RFC 1918: 192.168.0.0/16
46
+ if (o1 === 192 && o2 === 168)
47
+ return true;
48
+ // Link-local / Cloud metadata: 169.254.0.0/16 (e.g. 169.254.169.254)
49
+ if (o1 === 169 && o2 === 254)
50
+ return true;
51
+ // Current network / Zero: 0.0.0.0/8
52
+ if (o1 === 0)
53
+ return true;
54
+ // Carrier Grade NAT: 100.64.0.0/10
55
+ if (o1 === 100 && o2 >= 64 && o2 <= 127)
56
+ return true;
57
+ }
58
+ // IPv6 prefix checks
59
+ if (host.startsWith('fe80:') || host.startsWith('fc00:') || host.startsWith('fd00:') || host === '::1') {
60
+ return true;
61
+ }
62
+ return false;
63
+ }
64
+ export function validateSafeUrl(rawUrl, allowDevLocalhost = false) {
65
+ let parsed;
66
+ try {
67
+ parsed = new URL(rawUrl);
68
+ }
69
+ catch {
70
+ throw new SecurityError(`Invalid URL format: ${rawUrl}`);
71
+ }
72
+ if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
73
+ throw new SecurityError(`Disallowed protocol "${parsed.protocol}". Only http/https are permitted.`);
74
+ }
75
+ if (isPrivateOrForbiddenHost(parsed.hostname, allowDevLocalhost)) {
76
+ throw new SecurityError(`Access to host "${parsed.hostname}" is forbidden by ProofGraph SSRF policy.`);
77
+ }
78
+ return parsed;
79
+ }
80
+ export function computeSha256(content) {
81
+ return createHash('sha256').update(content, 'utf8').digest('hex');
82
+ }
83
+ export async function safeFetch(rawUrl, options = {}) {
84
+ const parsed = validateSafeUrl(rawUrl, options.allowDevLocalhost);
85
+ const timeoutMs = options.timeoutMs || 8000;
86
+ const maxSizeBytes = options.maxSizeBytes || 1024 * 1024; // 1MB limit
87
+ const controller = new AbortController();
88
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
89
+ try {
90
+ const response = await fetch(parsed.toString(), {
91
+ signal: controller.signal,
92
+ headers: {
93
+ 'User-Agent': 'ProofGraph-Bot/1.0 (+https://aibuildinfra.com/proofgraph/bot; neutral-evidence-collector)',
94
+ 'Accept': 'text/html,application/xhtml+xml,application/json,text/plain;q=0.9',
95
+ },
96
+ redirect: 'follow',
97
+ });
98
+ // Revalidate redirected final URL
99
+ const finalUrl = new URL(response.url);
100
+ if (isPrivateOrForbiddenHost(finalUrl.hostname, options.allowDevLocalhost)) {
101
+ throw new SecurityError(`Redirect target "${finalUrl.hostname}" violates SSRF security policy.`);
102
+ }
103
+ const contentType = response.headers.get('content-type') || '';
104
+ const etag = response.headers.get('etag') || undefined;
105
+ const text = await response.text();
106
+ if (text.length > maxSizeBytes) {
107
+ throw new Error(`Response body exceeds maximum allowed size (${maxSizeBytes} bytes).`);
108
+ }
109
+ const contentHash = computeSha256(text);
110
+ return {
111
+ text,
112
+ status: response.status,
113
+ contentType,
114
+ contentHash,
115
+ etag,
116
+ };
117
+ }
118
+ finally {
119
+ clearTimeout(timer);
120
+ }
121
+ }
122
+ //# sourceMappingURL=safeFetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safeFetch.js","sourceRoot":"","sources":["../../src/security/safeFetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * ProofGraph Graph Store
3
+ * High-performance graph storage with SQLite backing and in-memory index
4
+ */
5
+ import { Entity, Claim, Evidence, Source, Relationship, RelationshipType } from '../types/index.js';
6
+ export declare function makeCanonicalId(type: string, slugOrName: string): string;
7
+ export declare class GraphStore {
8
+ private entities;
9
+ private claims;
10
+ private evidence;
11
+ private sources;
12
+ private relationships;
13
+ private aliasIndex;
14
+ constructor();
15
+ addEntity(entity: Omit<Entity, 'created_at' | 'updated_at'> & {
16
+ created_at?: string;
17
+ updated_at?: string;
18
+ }): Entity;
19
+ getEntity(id: string): Entity | undefined;
20
+ getAllEntities(): Entity[];
21
+ searchEntitiesByName(query: string, limit?: number): Entity[];
22
+ private indexEntityAliases;
23
+ findEntityByAlias(alias: string): Entity | undefined;
24
+ addSource(source: Source): Source;
25
+ getSource(id: string): Source | undefined;
26
+ getAllSources(): Source[];
27
+ getSourceByUrl(url: string): Source | undefined;
28
+ addEvidence(ev: Evidence): Evidence;
29
+ getEvidence(id: string): Evidence | undefined;
30
+ getAllEvidence(): Evidence[];
31
+ getEvidenceForClaim(claimId: string): Evidence[];
32
+ addClaim(claim: Omit<Claim, 'created_at' | 'updated_at'> & {
33
+ created_at?: string;
34
+ updated_at?: string;
35
+ }): Claim;
36
+ getClaim(id: string): Claim | undefined;
37
+ getAllClaims(): Claim[];
38
+ getClaimsForEntity(entityId: string): Claim[];
39
+ addRelationship(rel: Relationship): Relationship;
40
+ getRelationships(entityId: string, type?: RelationshipType, direction?: 'out' | 'in' | 'both'): Relationship[];
41
+ getAllRelationships(): Relationship[];
42
+ traverse(startId: string, options?: {
43
+ maxDepth?: number;
44
+ relationshipFilter?: string[];
45
+ targetId?: string;
46
+ }): {
47
+ nodes: Entity[];
48
+ edges: Relationship[];
49
+ paths: Array<{
50
+ path: string[];
51
+ edges: Relationship[];
52
+ }>;
53
+ };
54
+ clear(): void;
55
+ toJSON(): {
56
+ entities: Entity[];
57
+ claims: Claim[];
58
+ evidence: Evidence[];
59
+ sources: Source[];
60
+ relationships: Relationship[];
61
+ };
62
+ fromJSON(data: {
63
+ entities?: Entity[];
64
+ claims?: Claim[];
65
+ evidence?: Evidence[];
66
+ sources?: Source[];
67
+ relationships?: Relationship[];
68
+ }): void;
69
+ }
70
+ export declare const globalGraphStore: GraphStore;
@@ -0,0 +1,275 @@
1
+ /**
2
+ * ProofGraph Graph Store
3
+ * High-performance graph storage with SQLite backing and in-memory index
4
+ */
5
+ export function makeCanonicalId(type, slugOrName) {
6
+ const cleanType = type.toLowerCase().replace(/[^a-z0-9]/g, '-');
7
+ const cleanSlug = slugOrName
8
+ .toLowerCase()
9
+ .trim()
10
+ .replace(/https?:\/\//g, '')
11
+ .replace(/[^\w\s-]/g, '')
12
+ .replace(/[\s_-]+/g, '-')
13
+ .replace(/^-+|-+$/g, '');
14
+ return `entity:${cleanType}:${cleanSlug}`;
15
+ }
16
+ export class GraphStore {
17
+ entities = new Map();
18
+ claims = new Map();
19
+ evidence = new Map();
20
+ sources = new Map();
21
+ relationships = [];
22
+ aliasIndex = new Map(); // normalized alias -> entityId
23
+ constructor() { }
24
+ // ---------------- Entity Operations ----------------
25
+ addEntity(entity) {
26
+ const now = new Date().toISOString();
27
+ const completeEntity = {
28
+ ...entity,
29
+ aliases: entity.aliases || [],
30
+ metadata: entity.metadata || {},
31
+ created_at: entity.created_at || now,
32
+ updated_at: entity.updated_at || now,
33
+ };
34
+ this.entities.set(completeEntity.id, completeEntity);
35
+ // Index primary name and aliases
36
+ this.indexEntityAliases(completeEntity);
37
+ return completeEntity;
38
+ }
39
+ getEntity(id) {
40
+ return this.entities.get(id);
41
+ }
42
+ getAllEntities() {
43
+ return Array.from(this.entities.values());
44
+ }
45
+ searchEntitiesByName(query, limit = 10) {
46
+ const normalized = query.toLowerCase().trim();
47
+ if (!normalized)
48
+ return [];
49
+ const scored = [];
50
+ for (const entity of this.entities.values()) {
51
+ let score = 0;
52
+ const nameLower = entity.name.toLowerCase();
53
+ if (nameLower === normalized) {
54
+ score = 1.0;
55
+ }
56
+ else if (nameLower.includes(normalized) || normalized.includes(nameLower)) {
57
+ score = 0.85;
58
+ }
59
+ else if (entity.aliases.some(a => a.toLowerCase() === normalized)) {
60
+ score = 0.95;
61
+ }
62
+ else if (entity.aliases.some(a => a.toLowerCase().includes(normalized))) {
63
+ score = 0.75;
64
+ }
65
+ else if (entity.description.toLowerCase().includes(normalized)) {
66
+ score = 0.5;
67
+ }
68
+ if (score > 0) {
69
+ scored.push({ entity, score });
70
+ }
71
+ }
72
+ scored.sort((a, b) => b.score - a.score);
73
+ return scored.slice(0, limit).map(s => s.entity);
74
+ }
75
+ indexEntityAliases(entity) {
76
+ this.aliasIndex.set(entity.name.toLowerCase().trim(), entity.id);
77
+ for (const alias of entity.aliases) {
78
+ this.aliasIndex.set(alias.toLowerCase().trim(), entity.id);
79
+ }
80
+ }
81
+ findEntityByAlias(alias) {
82
+ const normalized = alias.toLowerCase().trim();
83
+ const id = this.aliasIndex.get(normalized);
84
+ return id ? this.entities.get(id) : undefined;
85
+ }
86
+ // ---------------- Source Operations ----------------
87
+ addSource(source) {
88
+ this.sources.set(source.id, source);
89
+ return source;
90
+ }
91
+ getSource(id) {
92
+ return this.sources.get(id);
93
+ }
94
+ getAllSources() {
95
+ return Array.from(this.sources.values());
96
+ }
97
+ getSourceByUrl(url) {
98
+ for (const s of this.sources.values()) {
99
+ if (s.url === url)
100
+ return s;
101
+ }
102
+ return undefined;
103
+ }
104
+ // ---------------- Evidence Operations ----------------
105
+ addEvidence(ev) {
106
+ this.evidence.set(ev.id, ev);
107
+ return ev;
108
+ }
109
+ getEvidence(id) {
110
+ return this.evidence.get(id);
111
+ }
112
+ getAllEvidence() {
113
+ return Array.from(this.evidence.values());
114
+ }
115
+ getEvidenceForClaim(claimId) {
116
+ const results = [];
117
+ for (const ev of this.evidence.values()) {
118
+ if (ev.claim_id === claimId) {
119
+ results.push(ev);
120
+ }
121
+ }
122
+ return results;
123
+ }
124
+ // ---------------- Claim Operations ----------------
125
+ addClaim(claim) {
126
+ const now = new Date().toISOString();
127
+ const fullClaim = {
128
+ ...claim,
129
+ evidence_ids: claim.evidence_ids || [],
130
+ created_at: claim.created_at || now,
131
+ updated_at: claim.updated_at || now,
132
+ };
133
+ this.claims.set(fullClaim.id, fullClaim);
134
+ return fullClaim;
135
+ }
136
+ getClaim(id) {
137
+ return this.claims.get(id);
138
+ }
139
+ getAllClaims() {
140
+ return Array.from(this.claims.values());
141
+ }
142
+ getClaimsForEntity(entityId) {
143
+ return Array.from(this.claims.values()).filter(c => c.subject_id === entityId || c.object_id === entityId);
144
+ }
145
+ // ---------------- Relationship Operations ----------------
146
+ addRelationship(rel) {
147
+ const existing = this.relationships.find(r => r.source_id === rel.source_id && r.target_id === rel.target_id && r.relationship === rel.relationship);
148
+ if (existing) {
149
+ existing.confidence = rel.confidence;
150
+ existing.metadata = { ...existing.metadata, ...rel.metadata };
151
+ return existing;
152
+ }
153
+ const newRel = {
154
+ ...rel,
155
+ created_at: rel.created_at || new Date().toISOString(),
156
+ };
157
+ this.relationships.push(newRel);
158
+ return newRel;
159
+ }
160
+ getRelationships(entityId, type, direction = 'both') {
161
+ return this.relationships.filter(r => {
162
+ const matchOut = r.source_id === entityId;
163
+ const matchIn = r.target_id === entityId;
164
+ const dirMatch = direction === 'both' ? (matchOut || matchIn) : direction === 'out' ? matchOut : matchIn;
165
+ const typeMatch = !type || r.relationship.toUpperCase() === type.toUpperCase();
166
+ return dirMatch && typeMatch;
167
+ });
168
+ }
169
+ getAllRelationships() {
170
+ return [...this.relationships];
171
+ }
172
+ // ---------------- Graph Traversal ----------------
173
+ traverse(startId, options = {}) {
174
+ const maxDepth = options.maxDepth || 2;
175
+ const visitedNodes = new Set([startId]);
176
+ const visitedEdges = new Set();
177
+ const foundNodes = new Map();
178
+ const foundEdges = [];
179
+ const discoveredPaths = [];
180
+ const startEntity = this.getEntity(startId);
181
+ if (startEntity) {
182
+ foundNodes.set(startEntity.id, startEntity);
183
+ }
184
+ const queue = [{ currentId: startId, depth: 0, path: [startId], edges: [] }];
185
+ while (queue.length > 0) {
186
+ const item = queue.shift();
187
+ if (item.depth >= maxDepth)
188
+ continue;
189
+ const outgoing = this.relationships.filter(r => r.source_id === item.currentId);
190
+ const incoming = this.relationships.filter(r => r.target_id === item.currentId);
191
+ const allAdj = [
192
+ ...outgoing.map(r => ({ nextId: r.target_id, rel: r })),
193
+ ...incoming.map(r => ({ nextId: r.source_id, rel: r })),
194
+ ];
195
+ for (const { nextId, rel } of allAdj) {
196
+ if (options.relationshipFilter && options.relationshipFilter.length > 0) {
197
+ if (!options.relationshipFilter.includes(rel.relationship.toUpperCase())) {
198
+ continue;
199
+ }
200
+ }
201
+ const edgeKey = `${rel.source_id}->${rel.relationship}->${rel.target_id}`;
202
+ if (!visitedEdges.has(edgeKey)) {
203
+ visitedEdges.add(edgeKey);
204
+ foundEdges.push(rel);
205
+ }
206
+ const targetEntity = this.getEntity(nextId);
207
+ if (targetEntity) {
208
+ foundNodes.set(targetEntity.id, targetEntity);
209
+ }
210
+ const newPath = [...item.path, nextId];
211
+ const newEdges = [...item.edges, rel];
212
+ if (options.targetId && nextId === options.targetId) {
213
+ discoveredPaths.push({ path: newPath, edges: newEdges });
214
+ }
215
+ if (!visitedNodes.has(nextId)) {
216
+ visitedNodes.add(nextId);
217
+ queue.push({
218
+ currentId: nextId,
219
+ depth: item.depth + 1,
220
+ path: newPath,
221
+ edges: newEdges,
222
+ });
223
+ }
224
+ }
225
+ }
226
+ return {
227
+ nodes: Array.from(foundNodes.values()),
228
+ edges: foundEdges,
229
+ paths: discoveredPaths,
230
+ };
231
+ }
232
+ // ---------------- Export & Clear ----------------
233
+ clear() {
234
+ this.entities.clear();
235
+ this.claims.clear();
236
+ this.evidence.clear();
237
+ this.sources.clear();
238
+ this.relationships = [];
239
+ this.aliasIndex.clear();
240
+ }
241
+ toJSON() {
242
+ return {
243
+ entities: this.getAllEntities(),
244
+ claims: this.getAllClaims(),
245
+ evidence: this.getAllEvidence(),
246
+ sources: this.getAllSources(),
247
+ relationships: this.getAllRelationships(),
248
+ };
249
+ }
250
+ fromJSON(data) {
251
+ if (data.entities) {
252
+ for (const e of data.entities)
253
+ this.addEntity(e);
254
+ }
255
+ if (data.sources) {
256
+ for (const s of data.sources)
257
+ this.addSource(s);
258
+ }
259
+ if (data.evidence) {
260
+ for (const ev of data.evidence)
261
+ this.addEvidence(ev);
262
+ }
263
+ if (data.claims) {
264
+ for (const c of data.claims)
265
+ this.addClaim(c);
266
+ }
267
+ if (data.relationships) {
268
+ for (const r of data.relationships)
269
+ this.addRelationship(r);
270
+ }
271
+ }
272
+ }
273
+ // Global Singleton Instance
274
+ export const globalGraphStore = new GraphStore();
275
+ //# sourceMappingURL=graphStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphStore.js","sourceRoot":"","sources":["../../src/storage/graphStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * ProofGraph SQLite Storage Adapter
3
+ * Provides persistent SQLite storage using node:sqlite DatabaseSync
4
+ */
5
+ import { GraphStore } from './graphStore.js';
6
+ export declare class SQLiteAdapter {
7
+ private dbPath;
8
+ private db;
9
+ constructor(dbPath?: string);
10
+ init(): Promise<void>;
11
+ private createSchema;
12
+ saveGraph(store: GraphStore): void;
13
+ loadGraph(store: GraphStore): void;
14
+ }