@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,135 @@
1
+ /**
2
+ * ProofGraph AI Discoverability Diagnostic Engine
3
+ * Assesses knowledge completeness for AI agents to accurately synthesize entity information
4
+ */
5
+ export class AIDiscoverabilityEngine {
6
+ store;
7
+ constructor(store) {
8
+ this.store = store;
9
+ }
10
+ evaluate(entityIdOrName) {
11
+ let entity = this.store.getEntity(entityIdOrName);
12
+ if (!entity) {
13
+ const candidates = this.store.searchEntitiesByName(entityIdOrName, 1);
14
+ if (candidates.length > 0)
15
+ entity = candidates[0];
16
+ }
17
+ if (!entity) {
18
+ return {
19
+ entity: entityIdOrName,
20
+ entity_id: 'unknown',
21
+ overall_score: 0,
22
+ checklist: {
23
+ identity_clarity: { score: 0, status: 'fail', detail: 'Entity unindexed.' },
24
+ source_coverage: { score: 0, status: 'fail', detail: 'No sources found.' },
25
+ entity_consistency: { score: 0, status: 'fail', detail: 'No canonical records.' },
26
+ relationship_coverage: { score: 0, status: 'fail', detail: 'No relationships.' },
27
+ evidence_availability: { score: 0, status: 'fail', detail: 'No evidence excerpts.' },
28
+ freshness: { score: 0, status: 'fail', detail: 'No timestamp data.' },
29
+ technical_footprint: { score: 0, status: 'fail', detail: 'No technical repositories.' },
30
+ third_party_corroboration: { score: 0, status: 'fail', detail: 'No third-party citations.' },
31
+ },
32
+ recommendations: ['Register canonical entity and attach verified sources and claims.'],
33
+ };
34
+ }
35
+ const claims = this.store.getClaimsForEntity(entity.id);
36
+ const relationships = this.store.getRelationships(entity.id);
37
+ const allEvidence = this.store.getAllEvidence();
38
+ const entityEvidence = allEvidence.filter(e => claims.some(c => c.id === e.claim_id));
39
+ const allSources = this.store.getAllSources();
40
+ const entitySources = allSources.filter(s => entityEvidence.some(e => e.source_id === s.id));
41
+ // 1. Identity Clarity
42
+ const idClarityScore = entity.name && entity.description && entity.description.length > 40 ? 1.0 : 0.5;
43
+ // 2. Source Coverage
44
+ const sourceScore = entitySources.length >= 3 ? 1.0 : entitySources.length > 0 ? 0.6 : 0.2;
45
+ // 3. Entity Consistency
46
+ const consistencyScore = entity.canonical_url && entity.aliases.length >= 1 ? 1.0 : entity.canonical_url ? 0.75 : 0.3;
47
+ // 4. Relationship Coverage
48
+ const relScore = relationships.length >= 3 ? 1.0 : relationships.length > 0 ? 0.6 : 0.2;
49
+ // 5. Evidence Availability
50
+ const evScore = entityEvidence.length >= 3 ? 1.0 : entityEvidence.length > 0 ? 0.5 : 0.1;
51
+ // 6. Freshness
52
+ const hasRecent = entitySources.some(s => {
53
+ const year = new Date(s.last_verified || s.retrieved_at).getFullYear();
54
+ return year >= 2025;
55
+ });
56
+ const freshnessScore = hasRecent ? 1.0 : 0.6;
57
+ // 7. Technical Footprint
58
+ const hasTech = relationships.some(r => ['DEVELOPS', 'MAINTAINS', 'PUBLISHES', 'HAS_REPOSITORY', 'HAS_PACKAGE'].includes(r.relationship.toUpperCase()));
59
+ const techScore = hasTech ? 1.0 : 0.4;
60
+ // 8. Third Party Corroboration
61
+ const hasThirdParty = entitySources.some(s => ['established_publication', 'industry_directory', 'official_registry', 'academic_source'].includes(s.trust_class));
62
+ const thirdPartyScore = hasThirdParty ? 1.0 : 0.3;
63
+ const scores = [
64
+ idClarityScore,
65
+ sourceScore,
66
+ consistencyScore,
67
+ relScore,
68
+ evScore,
69
+ freshnessScore,
70
+ techScore,
71
+ thirdPartyScore,
72
+ ];
73
+ const overallScore = Number((scores.reduce((a, b) => a + b, 0) / scores.length).toFixed(2));
74
+ const recommendations = [];
75
+ if (idClarityScore < 0.8)
76
+ recommendations.push('Provide a rich, factual description of core entity capabilities and origin.');
77
+ if (sourceScore < 0.8)
78
+ recommendations.push('Attach additional authoritative source URLs across varied domains.');
79
+ if (relScore < 0.8)
80
+ recommendations.push('Map explicit relational edges (e.g. DEVELOPS, OWNS, PUBLISHES) to associated projects.');
81
+ if (thirdPartyScore < 0.8)
82
+ recommendations.push('Include third-party registry listings or independent publication citations.');
83
+ if (evScore < 0.8)
84
+ recommendations.push('Extract specific supporting text excerpts verifying core claims.');
85
+ return {
86
+ entity: entity.name,
87
+ entity_id: entity.id,
88
+ overall_score: overallScore,
89
+ checklist: {
90
+ identity_clarity: {
91
+ score: idClarityScore,
92
+ status: idClarityScore >= 0.8 ? 'pass' : idClarityScore >= 0.5 ? 'partial' : 'fail',
93
+ detail: 'Entity has comprehensive canonical name and unambiguous description.',
94
+ },
95
+ source_coverage: {
96
+ score: sourceScore,
97
+ status: sourceScore >= 0.8 ? 'pass' : sourceScore >= 0.5 ? 'partial' : 'fail',
98
+ detail: `Verified across ${entitySources.length} distinct source records.`,
99
+ },
100
+ entity_consistency: {
101
+ score: consistencyScore,
102
+ status: consistencyScore >= 0.8 ? 'pass' : 'partial',
103
+ detail: `Canonical URL defined with ${entity.aliases.length} recorded aliases.`,
104
+ },
105
+ relationship_coverage: {
106
+ score: relScore,
107
+ status: relScore >= 0.8 ? 'pass' : relScore >= 0.5 ? 'partial' : 'fail',
108
+ detail: `${relationships.length} structured relational graph edges connected.`,
109
+ },
110
+ evidence_availability: {
111
+ score: evScore,
112
+ status: evScore >= 0.8 ? 'pass' : evScore >= 0.5 ? 'partial' : 'fail',
113
+ detail: `${entityEvidence.length} granular proof excerpts verified.`,
114
+ },
115
+ freshness: {
116
+ score: freshnessScore,
117
+ status: freshnessScore >= 0.8 ? 'pass' : 'partial',
118
+ detail: hasRecent ? 'Sources verified within active recency window.' : 'Sources need re-verification.',
119
+ },
120
+ technical_footprint: {
121
+ score: techScore,
122
+ status: techScore >= 0.8 ? 'pass' : 'partial',
123
+ detail: hasTech ? 'Software repositories, packages, or developer artifacts verified.' : 'No technical repository linkage.',
124
+ },
125
+ third_party_corroboration: {
126
+ score: thirdPartyScore,
127
+ status: thirdPartyScore >= 0.8 ? 'pass' : 'fail',
128
+ detail: hasThirdParty ? 'Independent registries or third-party publications corroborate identity.' : 'Lacks third-party corroboration.',
129
+ },
130
+ },
131
+ recommendations,
132
+ };
133
+ }
134
+ }
135
+ //# sourceMappingURL=aiDiscoverability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aiDiscoverability.js","sourceRoot":"","sources":["../../src/engine/aiDiscoverability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * ProofGraph Claim Verification & Contradiction Detection Engine
3
+ */
4
+ import { Evidence, Source, ClaimStatus } from '../types/index.js';
5
+ import { GraphStore } from '../storage/graphStore.js';
6
+ export interface ClaimVerificationResult {
7
+ claim: string;
8
+ entity_id?: string;
9
+ status: ClaimStatus;
10
+ confidence: number;
11
+ explanation: string;
12
+ supporting_evidence: Evidence[];
13
+ contradicting_evidence: Evidence[];
14
+ sources_used: Source[];
15
+ has_conflicts: boolean;
16
+ }
17
+ export declare class ClaimVerifier {
18
+ private store;
19
+ constructor(store: GraphStore);
20
+ verify(claimStatement: string, entityId?: string): ClaimVerificationResult;
21
+ compareClaims(claims: string[]): {
22
+ comparisons: ClaimVerificationResult[];
23
+ consensus_summary: string;
24
+ discrepancies: string[];
25
+ };
26
+ }
@@ -0,0 +1,130 @@
1
+ /**
2
+ * ProofGraph Claim Verification & Contradiction Detection Engine
3
+ */
4
+ export class ClaimVerifier {
5
+ store;
6
+ constructor(store) {
7
+ this.store = store;
8
+ }
9
+ verify(claimStatement, entityId) {
10
+ const allClaims = this.store.getAllClaims();
11
+ const allEvidence = this.store.getAllEvidence();
12
+ const sourcesMap = new Map(this.store.getAllSources().map(s => [s.id, s]));
13
+ // 1. Find closest existing claim using token-based Jaccard similarity and semantic overlap
14
+ let matchedClaim;
15
+ const normStatement = claimStatement.toLowerCase().trim();
16
+ const stopWords = new Set(['the', 'a', 'an', 'is', 'are', 'was', 'were', 'in', 'on', 'at', 'to', 'for', 'of', 'and', 'or', 'with', 'by', 'that', 'this', 'does', 'do', 'as', 'it']);
17
+ const queryWords = normStatement
18
+ .split(/[^\w]+/)
19
+ .filter(w => w.length > 1 && !stopWords.has(w));
20
+ let bestScore = 0;
21
+ for (const c of allClaims) {
22
+ if (entityId && c.subject_id !== entityId && c.object_id !== entityId)
23
+ continue;
24
+ const claimLower = c.statement.toLowerCase();
25
+ if (claimLower === normStatement) {
26
+ matchedClaim = c;
27
+ break;
28
+ }
29
+ const claimWords = claimLower
30
+ .split(/[^\w]+/)
31
+ .filter(w => w.length > 1 && !stopWords.has(w));
32
+ // Calculate Jaccard similarity of non-stop words
33
+ const intersection = queryWords.filter(w => claimWords.includes(w)).length;
34
+ const union = new Set([...queryWords, ...claimWords]).size;
35
+ const jaccard = union > 0 ? intersection / union : 0;
36
+ // Ensure key distinguishing non-entity words are matched
37
+ if (jaccard >= 0.50 && jaccard > bestScore) {
38
+ bestScore = jaccard;
39
+ matchedClaim = c;
40
+ }
41
+ }
42
+ const relevantEvidence = [];
43
+ if (matchedClaim) {
44
+ for (const evId of matchedClaim.evidence_ids) {
45
+ const ev = this.store.getEvidence(evId);
46
+ if (ev)
47
+ relevantEvidence.push(ev);
48
+ }
49
+ }
50
+ else {
51
+ // Lexical search across evidence excerpts requiring majority of query terms to be present
52
+ if (queryWords.length >= 2) {
53
+ for (const ev of allEvidence) {
54
+ const excerptLower = ev.excerpt.toLowerCase();
55
+ const matchCount = queryWords.filter(term => excerptLower.includes(term)).length;
56
+ if (matchCount / queryWords.length >= 0.70) {
57
+ relevantEvidence.push(ev);
58
+ }
59
+ }
60
+ }
61
+ }
62
+ const supporting = relevantEvidence.filter(e => e.supports_claim);
63
+ const contradicting = relevantEvidence.filter(e => !e.supports_claim);
64
+ let status = 'unverified';
65
+ let confidence = 0.0;
66
+ let explanation = '';
67
+ const hasConflicts = supporting.length > 0 && contradicting.length > 0;
68
+ if (hasConflicts) {
69
+ status = 'conflicting';
70
+ confidence = 0.5;
71
+ explanation = `Conflicting evidence detected. ${supporting.length} sources support this assertion while ${contradicting.length} sources contradict it.`;
72
+ }
73
+ else if (supporting.length > 0) {
74
+ status = 'supported';
75
+ const maxConf = Math.max(...supporting.map(s => s.confidence));
76
+ confidence = Math.min(maxConf + (supporting.length > 1 ? 0.05 : 0), 0.99);
77
+ explanation = `Claim is directly supported by ${supporting.length} verified evidence source(s).`;
78
+ }
79
+ else if (contradicting.length > 0) {
80
+ status = 'contradicted';
81
+ const maxConf = Math.max(...contradicting.map(c => c.confidence));
82
+ confidence = maxConf;
83
+ explanation = `Claim is refuted by ${contradicting.length} verified evidence source(s).`;
84
+ }
85
+ else {
86
+ status = 'unverified';
87
+ confidence = 0.0;
88
+ explanation = 'No verifiable evidence currently exists in the graph to substantiate or refute this claim.';
89
+ }
90
+ const usedSources = [];
91
+ for (const ev of [...supporting, ...contradicting]) {
92
+ const src = sourcesMap.get(ev.source_id);
93
+ if (src && !usedSources.some(s => s.id === src.id)) {
94
+ usedSources.push(src);
95
+ }
96
+ }
97
+ return {
98
+ claim: claimStatement,
99
+ entity_id: entityId,
100
+ status,
101
+ confidence: Number(confidence.toFixed(2)),
102
+ explanation,
103
+ supporting_evidence: supporting,
104
+ contradicting_evidence: contradicting,
105
+ sources_used: usedSources,
106
+ has_conflicts: hasConflicts,
107
+ };
108
+ }
109
+ compareClaims(claims) {
110
+ const results = claims.map(c => this.verify(c));
111
+ const discrepancies = [];
112
+ for (let i = 0; i < results.length; i++) {
113
+ for (let j = i + 1; j < results.length; j++) {
114
+ if (results[i].status !== results[j].status && results[i].status !== 'unverified' && results[j].status !== 'unverified') {
115
+ discrepancies.push(`Divergence detected: "${results[i].claim}" is [${results[i].status}] whereas "${results[j].claim}" is [${results[j].status}].`);
116
+ }
117
+ }
118
+ }
119
+ let consensusSummary = 'All claims evaluated independently based on grounded evidence.';
120
+ if (discrepancies.length > 0) {
121
+ consensusSummary = `Found ${discrepancies.length} discrepancy points between evaluated statements.`;
122
+ }
123
+ return {
124
+ comparisons: results,
125
+ consensus_summary: consensusSummary,
126
+ discrepancies,
127
+ };
128
+ }
129
+ }
130
+ //# sourceMappingURL=claimVerifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claimVerifier.js","sourceRoot":"","sources":["../../src/engine/claimVerifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * ProofGraph Entity Consistency Audit Engine
3
+ * Internal diagnostic for identifying cross-platform footprint mismatches
4
+ */
5
+ import { ConsistencyAuditResult } from '../types/index.js';
6
+ import { GraphStore } from '../storage/graphStore.js';
7
+ export declare class ConsistencyAuditor {
8
+ private store;
9
+ constructor(store: GraphStore);
10
+ audit(entityIdOrName: string): ConsistencyAuditResult;
11
+ }
@@ -0,0 +1,172 @@
1
+ /**
2
+ * ProofGraph Entity Consistency Audit Engine
3
+ * Internal diagnostic for identifying cross-platform footprint mismatches
4
+ */
5
+ export class ConsistencyAuditor {
6
+ store;
7
+ constructor(store) {
8
+ this.store = store;
9
+ }
10
+ audit(entityIdOrName) {
11
+ let entity = this.store.getEntity(entityIdOrName);
12
+ if (!entity) {
13
+ const byName = this.store.searchEntitiesByName(entityIdOrName, 1);
14
+ if (byName.length > 0)
15
+ entity = byName[0];
16
+ }
17
+ if (!entity) {
18
+ return {
19
+ entity: entityIdOrName,
20
+ entity_id: 'unknown',
21
+ consistency_score: 0,
22
+ footprint: {
23
+ company_name: false,
24
+ website: false,
25
+ github_organization: false,
26
+ npm_scope: false,
27
+ mcp_registry: false,
28
+ schema_org: false,
29
+ email_domain: false,
30
+ },
31
+ issues: [
32
+ {
33
+ severity: 'high',
34
+ component: 'Entity Index',
35
+ message: `Entity "${entityIdOrName}" was not found in the verified graph.`,
36
+ recommendation: 'Register the canonical entity with verified source proofs.',
37
+ },
38
+ ],
39
+ verified_presence: {},
40
+ };
41
+ }
42
+ const meta = entity.metadata || {};
43
+ const issues = [];
44
+ const verifiedPresence = {};
45
+ let verifiedPoints = 0;
46
+ const totalPoints = 7;
47
+ // 1. Company / Entity Name
48
+ const hasName = Boolean(entity.name && entity.name.trim().length > 1);
49
+ if (hasName) {
50
+ verifiedPoints++;
51
+ verifiedPresence['name'] = entity.name;
52
+ }
53
+ else {
54
+ issues.push({
55
+ severity: 'high',
56
+ component: 'Name',
57
+ message: 'Primary canonical name is missing or ambiguous.',
58
+ recommendation: 'Set a formal canonical entity name.',
59
+ });
60
+ }
61
+ // 2. Canonical Website
62
+ const hasWebsite = Boolean(entity.canonical_url);
63
+ if (hasWebsite) {
64
+ verifiedPoints++;
65
+ verifiedPresence['website'] = entity.canonical_url;
66
+ if (!entity.canonical_url.startsWith('https://')) {
67
+ issues.push({
68
+ severity: 'medium',
69
+ component: 'Security',
70
+ message: 'Website is not served over secure HTTPS.',
71
+ recommendation: 'Enforce HTTPS for canonical URLs.',
72
+ });
73
+ }
74
+ }
75
+ else {
76
+ issues.push({
77
+ severity: 'high',
78
+ component: 'Website',
79
+ message: 'No official canonical website URL registered.',
80
+ recommendation: 'Link the official domain to the entity record.',
81
+ });
82
+ }
83
+ // 3. GitHub Organization
84
+ const hasGithub = Boolean(meta.github || meta.github_org);
85
+ if (hasGithub) {
86
+ verifiedPoints++;
87
+ verifiedPresence['github'] = meta.github || meta.github_org;
88
+ }
89
+ else {
90
+ issues.push({
91
+ severity: 'low',
92
+ component: 'GitHub Footprint',
93
+ message: 'No official GitHub organization or repository linkage discovered.',
94
+ recommendation: 'Add GitHub organization URL or repository links.',
95
+ });
96
+ }
97
+ // 4. npm Scope / Package Ecosystem
98
+ const hasNpm = Boolean(meta.npm || meta.npm_scope || meta.packages);
99
+ if (hasNpm) {
100
+ verifiedPoints++;
101
+ verifiedPresence['npm'] = meta.npm || meta.npm_scope || 'registered-packages';
102
+ }
103
+ else {
104
+ issues.push({
105
+ severity: 'low',
106
+ component: 'Package Footprint',
107
+ message: 'No official npm scope or package registry presence verified.',
108
+ recommendation: 'Verify package namespace ownership.',
109
+ });
110
+ }
111
+ // 5. MCP Registry
112
+ const hasMcp = Boolean(meta.mcp_name || meta.mcp_registry);
113
+ if (hasMcp) {
114
+ verifiedPoints++;
115
+ verifiedPresence['mcp'] = meta.mcp_name || meta.mcp_registry;
116
+ }
117
+ else {
118
+ issues.push({
119
+ severity: 'low',
120
+ component: 'MCP Registry',
121
+ message: 'No Model Context Protocol registry identifier listed.',
122
+ recommendation: 'Register server namespace on the official MCP registry.',
123
+ });
124
+ }
125
+ // 6. Schema.org / Structured Data
126
+ const hasSchema = Boolean(meta.schema_org || meta.structured_data);
127
+ if (hasSchema) {
128
+ verifiedPoints++;
129
+ verifiedPresence['schema_org'] = 'valid-json-ld';
130
+ }
131
+ else {
132
+ issues.push({
133
+ severity: 'medium',
134
+ component: 'Structured Data',
135
+ message: 'Missing Schema.org JSON-LD markup verification.',
136
+ recommendation: 'Implement Organization or SoftwareApplication JSON-LD schema on official pages.',
137
+ });
138
+ }
139
+ // 7. Email Domain Match
140
+ const hasEmail = Boolean(meta.email || meta.email_domain);
141
+ if (hasEmail) {
142
+ verifiedPoints++;
143
+ verifiedPresence['email'] = meta.email || meta.email_domain;
144
+ }
145
+ else {
146
+ issues.push({
147
+ severity: 'low',
148
+ component: 'Contact Provenance',
149
+ message: 'No verified official email domain linked.',
150
+ recommendation: 'Associate corporate email domain matching canonical website.',
151
+ });
152
+ }
153
+ const consistencyScore = Number((verifiedPoints / totalPoints).toFixed(2));
154
+ return {
155
+ entity: entity.name,
156
+ entity_id: entity.id,
157
+ consistency_score: consistencyScore,
158
+ footprint: {
159
+ company_name: hasName,
160
+ website: hasWebsite,
161
+ github_organization: hasGithub,
162
+ npm_scope: hasNpm,
163
+ mcp_registry: hasMcp,
164
+ schema_org: hasSchema,
165
+ email_domain: hasEmail,
166
+ },
167
+ issues,
168
+ verified_presence: verifiedPresence,
169
+ };
170
+ }
171
+ }
172
+ //# sourceMappingURL=consistencyAudit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consistencyAudit.js","sourceRoot":"","sources":["../../src/engine/consistencyAudit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * ProofGraph Multi-Format Exporter
3
+ * Supports JSON, JSON-LD, CSV, and GraphML
4
+ */
5
+ import { GraphStore } from '../storage/graphStore.js';
6
+ export declare class GraphExporter {
7
+ private store;
8
+ constructor(store: GraphStore);
9
+ toJSON(): string;
10
+ toJSONLD(): string;
11
+ toCSV(): {
12
+ entitiesCSV: string;
13
+ relationshipsCSV: string;
14
+ claimsCSV: string;
15
+ };
16
+ toGraphML(): string;
17
+ }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * ProofGraph Multi-Format Exporter
3
+ * Supports JSON, JSON-LD, CSV, and GraphML
4
+ */
5
+ import { SchemaOrgGenerator } from './schemaOrg.js';
6
+ export class GraphExporter {
7
+ store;
8
+ constructor(store) {
9
+ this.store = store;
10
+ }
11
+ toJSON() {
12
+ return JSON.stringify(this.store.toJSON(), null, 2);
13
+ }
14
+ toJSONLD() {
15
+ const entities = this.store.getAllEntities();
16
+ const graphNodes = entities.map(e => SchemaOrgGenerator.generateForEntity(e));
17
+ const jsonld = {
18
+ '@context': 'https://schema.org',
19
+ '@graph': graphNodes,
20
+ };
21
+ return JSON.stringify(jsonld, null, 2);
22
+ }
23
+ toCSV() {
24
+ // 1. Entities CSV
25
+ const entities = this.store.getAllEntities();
26
+ const entityRows = ['id,name,type,canonical_url,aliases,created_at'];
27
+ for (const e of entities) {
28
+ const escapedName = `"${e.name.replace(/"/g, '""')}"`;
29
+ const escapedAliases = `"${e.aliases.join(';').replace(/"/g, '""')}"`;
30
+ entityRows.push(`${e.id},${escapedName},${e.type},${e.canonical_url || ''},${escapedAliases},${e.created_at}`);
31
+ }
32
+ // 2. Relationships CSV
33
+ const relationships = this.store.getAllRelationships();
34
+ const relRows = ['source_id,relationship,target_id,confidence,created_at'];
35
+ for (const r of relationships) {
36
+ relRows.push(`${r.source_id},${r.relationship},${r.target_id},${r.confidence},${r.created_at || ''}`);
37
+ }
38
+ // 3. Claims CSV
39
+ const claims = this.store.getAllClaims();
40
+ const claimRows = ['id,subject_id,statement,status,confidence'];
41
+ for (const c of claims) {
42
+ const escapedStmt = `"${c.statement.replace(/"/g, '""')}"`;
43
+ claimRows.push(`${c.id},${c.subject_id},${escapedStmt},${c.status},${c.confidence}`);
44
+ }
45
+ return {
46
+ entitiesCSV: entityRows.join('\n'),
47
+ relationshipsCSV: relRows.join('\n'),
48
+ claimsCSV: claimRows.join('\n'),
49
+ };
50
+ }
51
+ toGraphML() {
52
+ const entities = this.store.getAllEntities();
53
+ const relationships = this.store.getAllRelationships();
54
+ let xml = `<?xml version="1.0" encoding="UTF-8"?>
55
+ <graphml xmlns="http://graphml.graphdrawing.org/xmlns"
56
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
57
+ xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
58
+ <key id="name" for="node" attr.name="name" attr.type="string"/>
59
+ <key id="type" for="node" attr.name="type" attr.type="string"/>
60
+ <key id="relationship" for="edge" attr.name="relationship" attr.type="string"/>
61
+ <key id="confidence" for="edge" attr.name="confidence" attr.type="double"/>
62
+ <graph id="ProofGraph" edgedefault="directed">
63
+ `;
64
+ for (const e of entities) {
65
+ const cleanName = e.name.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
66
+ xml += ` <node id="${e.id}">
67
+ <data key="name">${cleanName}</data>
68
+ <data key="type">${e.type}</data>
69
+ </node>\n`;
70
+ }
71
+ let edgeCounter = 1;
72
+ for (const r of relationships) {
73
+ xml += ` <edge id="e${edgeCounter++}" source="${r.source_id}" target="${r.target_id}">
74
+ <data key="relationship">${r.relationship}</data>
75
+ <data key="confidence">${r.confidence}</data>
76
+ </edge>\n`;
77
+ }
78
+ xml += ` </graph>
79
+ </graphml>`;
80
+ return xml;
81
+ }
82
+ }
83
+ //# sourceMappingURL=exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exporter.js","sourceRoot":"","sources":["../../src/engine/exporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * ProofGraph Relationship Traversal & Path Discovery Engine
3
+ */
4
+ import { Entity, Relationship, Evidence } from '../types/index.js';
5
+ import { GraphStore } from '../storage/graphStore.js';
6
+ export interface TraversalPathResult {
7
+ from_entity: Entity;
8
+ to_entity?: Entity;
9
+ hops: number;
10
+ path_sequence: string[];
11
+ relationships: Relationship[];
12
+ connecting_evidence: Evidence[];
13
+ summary: string;
14
+ }
15
+ export declare class GraphTraversalEngine {
16
+ private store;
17
+ constructor(store: GraphStore);
18
+ findRelationships(entityId: string, relationshipType?: string, depth?: number): {
19
+ origin: Entity | undefined;
20
+ direct_relationships: Relationship[];
21
+ traversal_nodes: Entity[];
22
+ traversal_edges: Relationship[];
23
+ };
24
+ explainConnection(sourceEntityId: string, targetEntityId: string): TraversalPathResult | null;
25
+ }