@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.
- package/LICENSE +21 -0
- package/PRIVACY.md +8 -0
- package/README.md +193 -0
- package/SECURITY.md +27 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.js +273 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/dashboard/server.d.ts +5 -0
- package/dist/dashboard/server.js +271 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/data/seed.d.ts +6 -0
- package/dist/data/seed.js +325 -0
- package/dist/data/seed.js.map +1 -0
- package/dist/engine/aiDiscoverability.d.ts +11 -0
- package/dist/engine/aiDiscoverability.js +135 -0
- package/dist/engine/aiDiscoverability.js.map +1 -0
- package/dist/engine/claimVerifier.d.ts +26 -0
- package/dist/engine/claimVerifier.js +130 -0
- package/dist/engine/claimVerifier.js.map +1 -0
- package/dist/engine/consistencyAudit.d.ts +11 -0
- package/dist/engine/consistencyAudit.js +172 -0
- package/dist/engine/consistencyAudit.js.map +1 -0
- package/dist/engine/exporter.d.ts +17 -0
- package/dist/engine/exporter.js +83 -0
- package/dist/engine/exporter.js.map +1 -0
- package/dist/engine/graphTraversal.d.ts +25 -0
- package/dist/engine/graphTraversal.js +74 -0
- package/dist/engine/graphTraversal.js.map +1 -0
- package/dist/engine/resolver.d.ts +20 -0
- package/dist/engine/resolver.js +168 -0
- package/dist/engine/resolver.js.map +1 -0
- package/dist/engine/schemaOrg.d.ts +12 -0
- package/dist/engine/schemaOrg.js +105 -0
- package/dist/engine/schemaOrg.js.map +1 -0
- package/dist/engine/tokenOptimizer.d.ts +25 -0
- package/dist/engine/tokenOptimizer.js +166 -0
- package/dist/engine/tokenOptimizer.js.map +1 -0
- package/dist/engine/webPresence.d.ts +32 -0
- package/dist/engine/webPresence.js +63 -0
- package/dist/engine/webPresence.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/prompts.d.ts +25 -0
- package/dist/mcp/prompts.js +136 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/resources.d.ts +27 -0
- package/dist/mcp/resources.js +118 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts +15 -0
- package/dist/mcp/server.js +88 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +256 -0
- package/dist/mcp/tools.js +391 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/security/robots.d.ts +15 -0
- package/dist/security/robots.js +78 -0
- package/dist/security/robots.js.map +1 -0
- package/dist/security/safeFetch.d.ts +23 -0
- package/dist/security/safeFetch.js +122 -0
- package/dist/security/safeFetch.js.map +1 -0
- package/dist/storage/graphStore.d.ts +70 -0
- package/dist/storage/graphStore.js +275 -0
- package/dist/storage/graphStore.js.map +1 -0
- package/dist/storage/sqliteAdapter.d.ts +14 -0
- package/dist/storage/sqliteAdapter.js +137 -0
- package/dist/storage/sqliteAdapter.js.map +1 -0
- package/dist/tests/proofgraph.test.d.ts +5 -0
- package/dist/tests/proofgraph.test.js +249 -0
- package/dist/tests/proofgraph.test.js.map +1 -0
- package/dist/types/index.d.ts +206 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +65 -0
- package/server.json +24 -0
- 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
|
+
}
|