@nahisaho/musubix-ontology-mcp 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/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/inference/index.d.ts +6 -0
- package/dist/inference/index.d.ts.map +1 -0
- package/dist/inference/index.js +6 -0
- package/dist/inference/index.js.map +1 -0
- package/dist/inference/rule-engine.d.ts +149 -0
- package/dist/inference/rule-engine.d.ts.map +1 -0
- package/dist/inference/rule-engine.js +478 -0
- package/dist/inference/rule-engine.js.map +1 -0
- package/dist/integration/index.d.ts +6 -0
- package/dist/integration/index.d.ts.map +1 -0
- package/dist/integration/index.js +6 -0
- package/dist/integration/index.js.map +1 -0
- package/dist/integration/pattern-bridge.d.ts +146 -0
- package/dist/integration/pattern-bridge.d.ts.map +1 -0
- package/dist/integration/pattern-bridge.js +517 -0
- package/dist/integration/pattern-bridge.js.map +1 -0
- package/dist/privacy/index.d.ts +6 -0
- package/dist/privacy/index.d.ts.map +1 -0
- package/dist/privacy/index.js +6 -0
- package/dist/privacy/index.js.map +1 -0
- package/dist/privacy/privacy-guard.d.ts +43 -0
- package/dist/privacy/privacy-guard.d.ts.map +1 -0
- package/dist/privacy/privacy-guard.js +59 -0
- package/dist/privacy/privacy-guard.js.map +1 -0
- package/dist/store/index.d.ts +7 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +7 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/n3-store.d.ts +115 -0
- package/dist/store/n3-store.d.ts.map +1 -0
- package/dist/store/n3-store.js +344 -0
- package/dist/store/n3-store.js.map +1 -0
- package/dist/store/ontology-store.d.ts +59 -0
- package/dist/store/ontology-store.d.ts.map +1 -0
- package/dist/store/ontology-store.js +135 -0
- package/dist/store/ontology-store.js.map +1 -0
- package/dist/types.d.ts +81 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,517 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Pattern-Ontology Integration Bridge
|
|
3
|
+
* @traceability TSK-INT-001, REQ-INT-001
|
|
4
|
+
*
|
|
5
|
+
* Integrates Pattern Library Learning with Ontology Reasoning:
|
|
6
|
+
* - Converts patterns to RDF triples for knowledge graph
|
|
7
|
+
* - Applies inference rules to discover pattern relationships
|
|
8
|
+
* - Enables semantic querying of pattern library
|
|
9
|
+
*/
|
|
10
|
+
import { RuleEngine } from '../inference/rule-engine.js';
|
|
11
|
+
/**
|
|
12
|
+
* Namespace URIs
|
|
13
|
+
*/
|
|
14
|
+
const NS = {
|
|
15
|
+
pattern: 'https://musubix.dev/ontology/pattern#',
|
|
16
|
+
sdd: 'https://musubix.dev/ontology/sdd#',
|
|
17
|
+
rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
|
|
18
|
+
rdfs: 'http://www.w3.org/2000/01/rdf-schema#',
|
|
19
|
+
owl: 'http://www.w3.org/2002/07/owl#',
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Pattern-Ontology Integration Bridge
|
|
23
|
+
*
|
|
24
|
+
* Provides bidirectional integration between:
|
|
25
|
+
* - Pattern Library (structural code patterns)
|
|
26
|
+
* - Ontology Store (semantic knowledge graph)
|
|
27
|
+
*/
|
|
28
|
+
export class PatternOntologyBridge {
|
|
29
|
+
store;
|
|
30
|
+
ruleEngine;
|
|
31
|
+
config;
|
|
32
|
+
patternCache = new Map();
|
|
33
|
+
constructor(store, config) {
|
|
34
|
+
this.store = store;
|
|
35
|
+
this.config = {
|
|
36
|
+
enableInference: config?.enableInference ?? true,
|
|
37
|
+
minConfidence: config?.minConfidence ?? 0.5,
|
|
38
|
+
maxInferenceIterations: config?.maxInferenceIterations ?? 5,
|
|
39
|
+
};
|
|
40
|
+
this.ruleEngine = new RuleEngine({
|
|
41
|
+
maxIterations: this.config.maxInferenceIterations,
|
|
42
|
+
});
|
|
43
|
+
// Add pattern-specific inference rules
|
|
44
|
+
this.addPatternInferenceRules();
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Add pattern-specific inference rules
|
|
48
|
+
*/
|
|
49
|
+
addPatternInferenceRules() {
|
|
50
|
+
// Subsumption transitivity
|
|
51
|
+
this.ruleEngine.addRule({
|
|
52
|
+
id: 'pattern-subsumes-trans',
|
|
53
|
+
name: 'Pattern Subsumption Transitivity',
|
|
54
|
+
description: 'If A subsumes B and B subsumes C, then A subsumes C',
|
|
55
|
+
priority: 90,
|
|
56
|
+
conditions: [
|
|
57
|
+
{ type: 'transitive', predicate: `${NS.pattern}subsumes` },
|
|
58
|
+
],
|
|
59
|
+
actions: [],
|
|
60
|
+
});
|
|
61
|
+
// Subsumes implies specializes inverse
|
|
62
|
+
this.ruleEngine.addRule({
|
|
63
|
+
id: 'pattern-subsumes-inverse',
|
|
64
|
+
name: 'Subsumes-Specializes Inverse',
|
|
65
|
+
description: 'If A subsumes B, then B specializes A',
|
|
66
|
+
priority: 85,
|
|
67
|
+
conditions: [
|
|
68
|
+
{ type: 'inverse', predicate1: `${NS.pattern}subsumes`, predicate2: `${NS.pattern}specializes` },
|
|
69
|
+
],
|
|
70
|
+
actions: [],
|
|
71
|
+
});
|
|
72
|
+
// SimilarTo is symmetric
|
|
73
|
+
this.ruleEngine.addRule({
|
|
74
|
+
id: 'pattern-similar-sym',
|
|
75
|
+
name: 'Pattern Similarity Symmetry',
|
|
76
|
+
description: 'If A similarTo B, then B similarTo A',
|
|
77
|
+
priority: 80,
|
|
78
|
+
conditions: [
|
|
79
|
+
{ type: 'symmetric', predicate: `${NS.pattern}similarTo` },
|
|
80
|
+
],
|
|
81
|
+
actions: [],
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Import pattern into ontology
|
|
86
|
+
*/
|
|
87
|
+
importPattern(pattern) {
|
|
88
|
+
const patternUri = this.getPatternUri(pattern.id);
|
|
89
|
+
// Store pattern in cache
|
|
90
|
+
this.patternCache.set(pattern.id, pattern);
|
|
91
|
+
// Create pattern entity triples
|
|
92
|
+
const triples = [
|
|
93
|
+
// Type declaration
|
|
94
|
+
{
|
|
95
|
+
subject: patternUri,
|
|
96
|
+
predicate: `${NS.rdf}type`,
|
|
97
|
+
object: `${NS.pattern}Pattern`,
|
|
98
|
+
},
|
|
99
|
+
// Name
|
|
100
|
+
{
|
|
101
|
+
subject: patternUri,
|
|
102
|
+
predicate: `${NS.rdfs}label`,
|
|
103
|
+
object: pattern.name,
|
|
104
|
+
},
|
|
105
|
+
// Language
|
|
106
|
+
{
|
|
107
|
+
subject: patternUri,
|
|
108
|
+
predicate: `${NS.pattern}language`,
|
|
109
|
+
object: pattern.language,
|
|
110
|
+
},
|
|
111
|
+
// AST root type
|
|
112
|
+
{
|
|
113
|
+
subject: patternUri,
|
|
114
|
+
predicate: `${NS.pattern}astType`,
|
|
115
|
+
object: pattern.ast.type,
|
|
116
|
+
},
|
|
117
|
+
// Frequency
|
|
118
|
+
{
|
|
119
|
+
subject: patternUri,
|
|
120
|
+
predicate: `${NS.pattern}frequency`,
|
|
121
|
+
object: String(pattern.frequency),
|
|
122
|
+
},
|
|
123
|
+
// Hole count
|
|
124
|
+
{
|
|
125
|
+
subject: patternUri,
|
|
126
|
+
predicate: `${NS.pattern}holeCount`,
|
|
127
|
+
object: String(pattern.holes.length),
|
|
128
|
+
},
|
|
129
|
+
];
|
|
130
|
+
// Add hole types
|
|
131
|
+
for (const hole of pattern.holes) {
|
|
132
|
+
triples.push({
|
|
133
|
+
subject: patternUri,
|
|
134
|
+
predicate: `${NS.pattern}hasHoleType`,
|
|
135
|
+
object: hole.type,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
// Add AST structure classification
|
|
139
|
+
const structureClass = this.classifyASTStructure(pattern.ast);
|
|
140
|
+
triples.push({
|
|
141
|
+
subject: patternUri,
|
|
142
|
+
predicate: `${NS.pattern}structureClass`,
|
|
143
|
+
object: structureClass,
|
|
144
|
+
});
|
|
145
|
+
// Add complexity metrics
|
|
146
|
+
const complexity = this.calculateComplexity(pattern.ast);
|
|
147
|
+
triples.push({
|
|
148
|
+
subject: patternUri,
|
|
149
|
+
predicate: `${NS.pattern}complexity`,
|
|
150
|
+
object: String(complexity),
|
|
151
|
+
});
|
|
152
|
+
// Store triples
|
|
153
|
+
return this.store.addTriples(triples) === triples.length;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Import multiple patterns
|
|
157
|
+
*/
|
|
158
|
+
importPatterns(patterns) {
|
|
159
|
+
let imported = 0;
|
|
160
|
+
for (const pattern of patterns) {
|
|
161
|
+
if (this.importPattern(pattern)) {
|
|
162
|
+
imported++;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Discover relationships after import
|
|
166
|
+
if (this.config.enableInference) {
|
|
167
|
+
this.discoverRelationships(patterns);
|
|
168
|
+
}
|
|
169
|
+
return imported;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Discover relationships between patterns
|
|
173
|
+
*/
|
|
174
|
+
discoverRelationships(patterns) {
|
|
175
|
+
const relationships = [];
|
|
176
|
+
for (let i = 0; i < patterns.length; i++) {
|
|
177
|
+
for (let j = i + 1; j < patterns.length; j++) {
|
|
178
|
+
const a = patterns[i];
|
|
179
|
+
const b = patterns[j];
|
|
180
|
+
// Check subsumption
|
|
181
|
+
const subsumption = this.checkSubsumption(a, b);
|
|
182
|
+
if (subsumption) {
|
|
183
|
+
relationships.push(subsumption);
|
|
184
|
+
this.addRelationshipTriple(subsumption);
|
|
185
|
+
}
|
|
186
|
+
// Check similarity
|
|
187
|
+
const similarity = this.checkSimilarity(a, b);
|
|
188
|
+
if (similarity && similarity.confidence >= this.config.minConfidence) {
|
|
189
|
+
relationships.push(similarity);
|
|
190
|
+
this.addRelationshipTriple(similarity);
|
|
191
|
+
}
|
|
192
|
+
// Check composition
|
|
193
|
+
const composition = this.checkComposition(a, b);
|
|
194
|
+
if (composition) {
|
|
195
|
+
relationships.push(composition);
|
|
196
|
+
this.addRelationshipTriple(composition);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// Apply inference rules
|
|
201
|
+
if (this.config.enableInference) {
|
|
202
|
+
this.applyInference();
|
|
203
|
+
}
|
|
204
|
+
return relationships;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Check if pattern A subsumes pattern B
|
|
208
|
+
*/
|
|
209
|
+
checkSubsumption(a, b) {
|
|
210
|
+
// A subsumes B if A is more general (has more holes at same positions)
|
|
211
|
+
if (a.ast.type !== b.ast.type)
|
|
212
|
+
return null;
|
|
213
|
+
if (a.language !== b.language)
|
|
214
|
+
return null;
|
|
215
|
+
const aHoleCount = a.holes.length;
|
|
216
|
+
const bHoleCount = b.holes.length;
|
|
217
|
+
// More holes = more general
|
|
218
|
+
if (aHoleCount > bHoleCount) {
|
|
219
|
+
const confidence = Math.min(1.0, (aHoleCount - bHoleCount) / Math.max(aHoleCount, 1) + 0.5);
|
|
220
|
+
return {
|
|
221
|
+
source: a.id,
|
|
222
|
+
target: b.id,
|
|
223
|
+
relation: 'subsumes',
|
|
224
|
+
confidence,
|
|
225
|
+
evidence: [`A has ${aHoleCount} holes, B has ${bHoleCount} holes`],
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Check similarity between patterns
|
|
232
|
+
*/
|
|
233
|
+
checkSimilarity(a, b) {
|
|
234
|
+
if (a.language !== b.language)
|
|
235
|
+
return null;
|
|
236
|
+
// Calculate structural similarity
|
|
237
|
+
const similarity = this.calculateASTSimilarity(a.ast, b.ast);
|
|
238
|
+
if (similarity >= this.config.minConfidence) {
|
|
239
|
+
return {
|
|
240
|
+
source: a.id,
|
|
241
|
+
target: b.id,
|
|
242
|
+
relation: 'similarTo',
|
|
243
|
+
confidence: similarity,
|
|
244
|
+
evidence: [`Structural similarity: ${(similarity * 100).toFixed(1)}%`],
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Check if pattern A contains pattern B
|
|
251
|
+
*/
|
|
252
|
+
checkComposition(a, b) {
|
|
253
|
+
if (a.language !== b.language)
|
|
254
|
+
return null;
|
|
255
|
+
// Check if B's AST structure appears in A's children
|
|
256
|
+
const contains = this.containsStructure(a.ast, b.ast);
|
|
257
|
+
if (contains) {
|
|
258
|
+
return {
|
|
259
|
+
source: a.id,
|
|
260
|
+
target: b.id,
|
|
261
|
+
relation: 'composedOf',
|
|
262
|
+
confidence: 0.8,
|
|
263
|
+
evidence: [`Pattern A contains structure of pattern B`],
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Calculate AST similarity
|
|
270
|
+
*/
|
|
271
|
+
calculateASTSimilarity(a, b) {
|
|
272
|
+
if (a.type !== b.type)
|
|
273
|
+
return 0;
|
|
274
|
+
let matches = 1;
|
|
275
|
+
let total = 1;
|
|
276
|
+
// Compare children
|
|
277
|
+
const maxChildren = Math.max(a.children.length, b.children.length);
|
|
278
|
+
const minChildren = Math.min(a.children.length, b.children.length);
|
|
279
|
+
total += maxChildren;
|
|
280
|
+
matches += minChildren;
|
|
281
|
+
// Recursively compare matching children
|
|
282
|
+
for (let i = 0; i < minChildren; i++) {
|
|
283
|
+
const childSim = this.calculateASTSimilarity(a.children[i], b.children[i]);
|
|
284
|
+
matches += childSim;
|
|
285
|
+
total += 1;
|
|
286
|
+
}
|
|
287
|
+
return matches / total;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Check if AST A contains structure B
|
|
291
|
+
*/
|
|
292
|
+
containsStructure(a, b) {
|
|
293
|
+
if (a.type === b.type && this.calculateASTSimilarity(a, b) > 0.9) {
|
|
294
|
+
return true;
|
|
295
|
+
}
|
|
296
|
+
for (const child of a.children) {
|
|
297
|
+
if (this.containsStructure(child, b)) {
|
|
298
|
+
return true;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Add relationship triple to store
|
|
305
|
+
*/
|
|
306
|
+
addRelationshipTriple(rel) {
|
|
307
|
+
const sourceUri = this.getPatternUri(rel.source);
|
|
308
|
+
const targetUri = this.getPatternUri(rel.target);
|
|
309
|
+
const predicateUri = `${NS.pattern}${rel.relation}`;
|
|
310
|
+
this.store.addTriple({
|
|
311
|
+
subject: sourceUri,
|
|
312
|
+
predicate: predicateUri,
|
|
313
|
+
object: targetUri,
|
|
314
|
+
});
|
|
315
|
+
// Add confidence as annotation
|
|
316
|
+
this.store.addTriple({
|
|
317
|
+
subject: `${sourceUri}_${rel.relation}_${targetUri}`,
|
|
318
|
+
predicate: `${NS.pattern}confidence`,
|
|
319
|
+
object: String(rel.confidence),
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Apply inference rules
|
|
324
|
+
*/
|
|
325
|
+
applyInference() {
|
|
326
|
+
// Get all triples
|
|
327
|
+
const results = this.store.query({});
|
|
328
|
+
const triples = results.map(r => ({
|
|
329
|
+
subject: r.subject,
|
|
330
|
+
predicate: r.predicate,
|
|
331
|
+
object: r.object,
|
|
332
|
+
}));
|
|
333
|
+
// Apply rules
|
|
334
|
+
const { triples: inferred, stats } = this.ruleEngine.applyRules(triples);
|
|
335
|
+
// Add new triples
|
|
336
|
+
for (const triple of inferred) {
|
|
337
|
+
if (!this.store.has(triple)) {
|
|
338
|
+
this.store.addTriple(triple);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return stats;
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Query patterns by criteria
|
|
345
|
+
*/
|
|
346
|
+
queryPatterns(criteria) {
|
|
347
|
+
const results = [];
|
|
348
|
+
const relationships = [];
|
|
349
|
+
// Build query pattern
|
|
350
|
+
const patterns = [];
|
|
351
|
+
if (criteria.language) {
|
|
352
|
+
const langResults = this.store.query({
|
|
353
|
+
predicate: `${NS.pattern}language`,
|
|
354
|
+
object: criteria.language,
|
|
355
|
+
});
|
|
356
|
+
patterns.push(...langResults.map(r => r.subject));
|
|
357
|
+
}
|
|
358
|
+
if (criteria.astType) {
|
|
359
|
+
const typeResults = this.store.query({
|
|
360
|
+
predicate: `${NS.pattern}astType`,
|
|
361
|
+
object: criteria.astType,
|
|
362
|
+
});
|
|
363
|
+
patterns.push(...typeResults.map(r => r.subject));
|
|
364
|
+
}
|
|
365
|
+
// Get unique pattern URIs
|
|
366
|
+
const patternUris = patterns.length > 0
|
|
367
|
+
? [...new Set(patterns)]
|
|
368
|
+
: this.store.getSubjectsOfType(`${NS.pattern}Pattern`);
|
|
369
|
+
// Retrieve patterns from cache
|
|
370
|
+
for (const uri of patternUris) {
|
|
371
|
+
const id = this.getPatternIdFromUri(uri);
|
|
372
|
+
const pattern = this.patternCache.get(id);
|
|
373
|
+
if (pattern) {
|
|
374
|
+
// Apply frequency filter
|
|
375
|
+
if (criteria.minFrequency && pattern.frequency < criteria.minFrequency) {
|
|
376
|
+
continue;
|
|
377
|
+
}
|
|
378
|
+
results.push(pattern);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
// Get relationships if requested
|
|
382
|
+
if (criteria.hasRelation && criteria.relatedTo) {
|
|
383
|
+
const relResults = this.store.query({
|
|
384
|
+
predicate: `${NS.pattern}${criteria.hasRelation}`,
|
|
385
|
+
object: this.getPatternUri(criteria.relatedTo),
|
|
386
|
+
});
|
|
387
|
+
for (const r of relResults) {
|
|
388
|
+
relationships.push({
|
|
389
|
+
source: this.getPatternIdFromUri(r.subject),
|
|
390
|
+
target: criteria.relatedTo,
|
|
391
|
+
relation: criteria.hasRelation,
|
|
392
|
+
confidence: 1.0,
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
return { patterns: results, relationships };
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Find related patterns
|
|
400
|
+
*/
|
|
401
|
+
findRelatedPatterns(patternId, relation) {
|
|
402
|
+
const patternUri = this.getPatternUri(patternId);
|
|
403
|
+
const relationships = [];
|
|
404
|
+
const relations = relation
|
|
405
|
+
? [relation]
|
|
406
|
+
: ['subsumes', 'specializes', 'similarTo', 'composedOf', 'usedWith', 'derivedFrom'];
|
|
407
|
+
for (const rel of relations) {
|
|
408
|
+
// Outgoing relationships
|
|
409
|
+
const outgoing = this.store.query({
|
|
410
|
+
subject: patternUri,
|
|
411
|
+
predicate: `${NS.pattern}${rel}`,
|
|
412
|
+
});
|
|
413
|
+
for (const r of outgoing) {
|
|
414
|
+
relationships.push({
|
|
415
|
+
source: patternId,
|
|
416
|
+
target: this.getPatternIdFromUri(r.object),
|
|
417
|
+
relation: rel,
|
|
418
|
+
confidence: 1.0,
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
// Incoming relationships
|
|
422
|
+
const incoming = this.store.query({
|
|
423
|
+
predicate: `${NS.pattern}${rel}`,
|
|
424
|
+
object: patternUri,
|
|
425
|
+
});
|
|
426
|
+
for (const r of incoming) {
|
|
427
|
+
relationships.push({
|
|
428
|
+
source: this.getPatternIdFromUri(r.subject),
|
|
429
|
+
target: patternId,
|
|
430
|
+
relation: rel,
|
|
431
|
+
confidence: 1.0,
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
return relationships;
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Get pattern URI
|
|
439
|
+
*/
|
|
440
|
+
getPatternUri(id) {
|
|
441
|
+
return `${NS.pattern}${id}`;
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Extract pattern ID from URI
|
|
445
|
+
*/
|
|
446
|
+
getPatternIdFromUri(uri) {
|
|
447
|
+
return uri.replace(NS.pattern, '');
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Classify AST structure
|
|
451
|
+
*/
|
|
452
|
+
classifyASTStructure(ast) {
|
|
453
|
+
const type = ast.type.toLowerCase();
|
|
454
|
+
if (type.includes('function') || type.includes('method')) {
|
|
455
|
+
return 'function-like';
|
|
456
|
+
}
|
|
457
|
+
if (type.includes('class') || type.includes('interface')) {
|
|
458
|
+
return 'type-definition';
|
|
459
|
+
}
|
|
460
|
+
if (type.includes('if') || type.includes('switch') || type.includes('conditional')) {
|
|
461
|
+
return 'conditional';
|
|
462
|
+
}
|
|
463
|
+
if (type.includes('for') || type.includes('while') || type.includes('loop')) {
|
|
464
|
+
return 'loop';
|
|
465
|
+
}
|
|
466
|
+
if (type.includes('try') || type.includes('catch')) {
|
|
467
|
+
return 'error-handling';
|
|
468
|
+
}
|
|
469
|
+
if (type.includes('import') || type.includes('export')) {
|
|
470
|
+
return 'module';
|
|
471
|
+
}
|
|
472
|
+
return 'other';
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* Calculate AST complexity
|
|
476
|
+
*/
|
|
477
|
+
calculateComplexity(ast) {
|
|
478
|
+
let complexity = 1;
|
|
479
|
+
for (const child of ast.children) {
|
|
480
|
+
complexity += this.calculateComplexity(child);
|
|
481
|
+
}
|
|
482
|
+
// Bonus for certain node types
|
|
483
|
+
if (ast.type.includes('If') || ast.type.includes('Loop') || ast.type.includes('Try')) {
|
|
484
|
+
complexity += 1;
|
|
485
|
+
}
|
|
486
|
+
return complexity;
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Export pattern graph as Turtle
|
|
490
|
+
*/
|
|
491
|
+
async exportAsTurtle() {
|
|
492
|
+
return this.store.exportTurtle({
|
|
493
|
+
pattern: NS.pattern,
|
|
494
|
+
sdd: NS.sdd,
|
|
495
|
+
rdf: NS.rdf,
|
|
496
|
+
rdfs: NS.rdfs,
|
|
497
|
+
owl: NS.owl,
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Get statistics
|
|
502
|
+
*/
|
|
503
|
+
getStats() {
|
|
504
|
+
const patterns = this.store.getSubjectsOfType(`${NS.pattern}Pattern`);
|
|
505
|
+
let relationshipCount = 0;
|
|
506
|
+
const relations = ['subsumes', 'specializes', 'similarTo', 'composedOf', 'usedWith', 'derivedFrom'];
|
|
507
|
+
for (const rel of relations) {
|
|
508
|
+
relationshipCount += this.store.query({ predicate: `${NS.pattern}${rel}` }).length;
|
|
509
|
+
}
|
|
510
|
+
return {
|
|
511
|
+
patternCount: patterns.length,
|
|
512
|
+
tripleCount: this.store.size,
|
|
513
|
+
relationshipCount,
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
//# sourceMappingURL=pattern-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pattern-bridge.js","sourceRoot":"","sources":["../../src/integration/pattern-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/privacy/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/privacy/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Privacy guard for ontology store
|
|
3
|
+
* @traceability TSK-ONTO-008, REQ-ONTO-001-F008
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Privacy guard configuration
|
|
7
|
+
*/
|
|
8
|
+
export interface PrivacyGuardConfig {
|
|
9
|
+
/** Block all external network calls */
|
|
10
|
+
blockExternalCommunication: boolean;
|
|
11
|
+
/** Allow only local file system storage */
|
|
12
|
+
localStorageOnly: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Privacy guard to ensure ontology data stays local
|
|
16
|
+
*
|
|
17
|
+
* @description
|
|
18
|
+
* - All data stored locally only
|
|
19
|
+
* - No external network communication
|
|
20
|
+
* - Enforces local-first architecture
|
|
21
|
+
*/
|
|
22
|
+
export declare class OntologyPrivacyGuard {
|
|
23
|
+
private config;
|
|
24
|
+
constructor(config?: Partial<PrivacyGuardConfig>);
|
|
25
|
+
/**
|
|
26
|
+
* Check if external communication is blocked
|
|
27
|
+
*/
|
|
28
|
+
isExternalCommunicationBlocked(): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Check if storage is local only
|
|
31
|
+
*/
|
|
32
|
+
isLocalStorageOnly(): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Validate storage path is local
|
|
35
|
+
*/
|
|
36
|
+
validateStoragePath(path: string): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Assert privacy constraints
|
|
39
|
+
* @throws Error if constraints are violated
|
|
40
|
+
*/
|
|
41
|
+
assertPrivacyConstraints(storagePath: string): void;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=privacy-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"privacy-guard.d.ts","sourceRoot":"","sources":["../../src/privacy/privacy-guard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,0BAA0B,EAAE,OAAO,CAAC;IACpC,2CAA2C;IAC3C,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,GAAE,OAAO,CAAC,kBAAkB,CAAM;IAOpD;;OAEG;IACH,8BAA8B,IAAI,OAAO;IAIzC;;OAEG;IACH,kBAAkB,IAAI,OAAO;IAI7B;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAe1C;;;OAGG;IACH,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;CAKpD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Privacy guard for ontology store
|
|
3
|
+
* @traceability TSK-ONTO-008, REQ-ONTO-001-F008
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Privacy guard to ensure ontology data stays local
|
|
7
|
+
*
|
|
8
|
+
* @description
|
|
9
|
+
* - All data stored locally only
|
|
10
|
+
* - No external network communication
|
|
11
|
+
* - Enforces local-first architecture
|
|
12
|
+
*/
|
|
13
|
+
export class OntologyPrivacyGuard {
|
|
14
|
+
config;
|
|
15
|
+
constructor(config = {}) {
|
|
16
|
+
this.config = {
|
|
17
|
+
blockExternalCommunication: config.blockExternalCommunication ?? true,
|
|
18
|
+
localStorageOnly: config.localStorageOnly ?? true,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Check if external communication is blocked
|
|
23
|
+
*/
|
|
24
|
+
isExternalCommunicationBlocked() {
|
|
25
|
+
return this.config.blockExternalCommunication;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Check if storage is local only
|
|
29
|
+
*/
|
|
30
|
+
isLocalStorageOnly() {
|
|
31
|
+
return this.config.localStorageOnly;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Validate storage path is local
|
|
35
|
+
*/
|
|
36
|
+
validateStoragePath(path) {
|
|
37
|
+
if (!this.config.localStorageOnly)
|
|
38
|
+
return true;
|
|
39
|
+
// Block remote paths
|
|
40
|
+
const remotePatterns = [
|
|
41
|
+
/^https?:\/\//i,
|
|
42
|
+
/^s3:\/\//i,
|
|
43
|
+
/^gs:\/\//i,
|
|
44
|
+
/^azure:\/\//i,
|
|
45
|
+
/^ftp:\/\//i,
|
|
46
|
+
];
|
|
47
|
+
return !remotePatterns.some(pattern => pattern.test(path));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Assert privacy constraints
|
|
51
|
+
* @throws Error if constraints are violated
|
|
52
|
+
*/
|
|
53
|
+
assertPrivacyConstraints(storagePath) {
|
|
54
|
+
if (!this.validateStoragePath(storagePath)) {
|
|
55
|
+
throw new Error(`Privacy violation: Remote storage path not allowed: ${storagePath}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=privacy-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"privacy-guard.js","sourceRoot":"","sources":["../../src/privacy/privacy-guard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH;;;;;;;GAOG;AACH,MAAM,OAAO,oBAAoB;IACvB,MAAM,CAAqB;IAEnC,YAAY,SAAsC,EAAE;QAClD,IAAI,CAAC,MAAM,GAAG;YACZ,0BAA0B,EAAE,MAAM,CAAC,0BAA0B,IAAI,IAAI;YACrE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,IAAI;SAClD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,8BAA8B;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,IAAY;QAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC;QAE/C,qBAAqB;QACrB,MAAM,cAAc,GAAG;YACrB,eAAe;YACf,WAAW;YACX,WAAW;YACX,cAAc;YACd,YAAY;SACb,CAAC;QAEF,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED;;;OAGG;IACH,wBAAwB,CAAC,WAAmB;QAC1C,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,uDAAuD,WAAW,EAAE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Ontology store module
|
|
3
|
+
* @traceability TSK-ONTO-001
|
|
4
|
+
*/
|
|
5
|
+
export { OntologyStore } from './ontology-store.js';
|
|
6
|
+
export { N3Store, type QueryPattern, type N3QueryResult, type InferenceRule } from './n3-store.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|