@nahisaho/yata-local 1.6.6

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 (77) hide show
  1. package/dist/auto-updater.d.ts +101 -0
  2. package/dist/auto-updater.d.ts.map +1 -0
  3. package/dist/auto-updater.js +402 -0
  4. package/dist/auto-updater.js.map +1 -0
  5. package/dist/database.d.ts +229 -0
  6. package/dist/database.d.ts.map +1 -0
  7. package/dist/database.js +959 -0
  8. package/dist/database.js.map +1 -0
  9. package/dist/index.d.ts +298 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +436 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/io.d.ts +77 -0
  14. package/dist/io.d.ts.map +1 -0
  15. package/dist/io.js +403 -0
  16. package/dist/io.js.map +1 -0
  17. package/dist/kgpr/diff-engine.d.ts +110 -0
  18. package/dist/kgpr/diff-engine.d.ts.map +1 -0
  19. package/dist/kgpr/diff-engine.js +335 -0
  20. package/dist/kgpr/diff-engine.js.map +1 -0
  21. package/dist/kgpr/index.d.ts +16 -0
  22. package/dist/kgpr/index.d.ts.map +1 -0
  23. package/dist/kgpr/index.js +14 -0
  24. package/dist/kgpr/index.js.map +1 -0
  25. package/dist/kgpr/kgpr-manager.d.ts +122 -0
  26. package/dist/kgpr/kgpr-manager.d.ts.map +1 -0
  27. package/dist/kgpr/kgpr-manager.js +344 -0
  28. package/dist/kgpr/kgpr-manager.js.map +1 -0
  29. package/dist/kgpr/privacy-filter.d.ts +109 -0
  30. package/dist/kgpr/privacy-filter.d.ts.map +1 -0
  31. package/dist/kgpr/privacy-filter.js +295 -0
  32. package/dist/kgpr/privacy-filter.js.map +1 -0
  33. package/dist/kgpr/types.d.ts +234 -0
  34. package/dist/kgpr/types.d.ts.map +1 -0
  35. package/dist/kgpr/types.js +54 -0
  36. package/dist/kgpr/types.js.map +1 -0
  37. package/dist/query-engine.d.ts +78 -0
  38. package/dist/query-engine.d.ts.map +1 -0
  39. package/dist/query-engine.js +368 -0
  40. package/dist/query-engine.js.map +1 -0
  41. package/dist/reasoning.d.ts +112 -0
  42. package/dist/reasoning.d.ts.map +1 -0
  43. package/dist/reasoning.js +455 -0
  44. package/dist/reasoning.js.map +1 -0
  45. package/dist/types.d.ts +580 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +37 -0
  48. package/dist/types.js.map +1 -0
  49. package/dist/wake-sleep/cycle-manager.d.ts +76 -0
  50. package/dist/wake-sleep/cycle-manager.d.ts.map +1 -0
  51. package/dist/wake-sleep/cycle-manager.js +291 -0
  52. package/dist/wake-sleep/cycle-manager.js.map +1 -0
  53. package/dist/wake-sleep/index.d.ts +15 -0
  54. package/dist/wake-sleep/index.d.ts.map +1 -0
  55. package/dist/wake-sleep/index.js +19 -0
  56. package/dist/wake-sleep/index.js.map +1 -0
  57. package/dist/wake-sleep/pattern-compressor.d.ts +86 -0
  58. package/dist/wake-sleep/pattern-compressor.d.ts.map +1 -0
  59. package/dist/wake-sleep/pattern-compressor.js +333 -0
  60. package/dist/wake-sleep/pattern-compressor.js.map +1 -0
  61. package/dist/wake-sleep/sleep-phase.d.ts +79 -0
  62. package/dist/wake-sleep/sleep-phase.d.ts.map +1 -0
  63. package/dist/wake-sleep/sleep-phase.js +329 -0
  64. package/dist/wake-sleep/sleep-phase.js.map +1 -0
  65. package/dist/wake-sleep/types.d.ts +244 -0
  66. package/dist/wake-sleep/types.d.ts.map +1 -0
  67. package/dist/wake-sleep/types.js +35 -0
  68. package/dist/wake-sleep/types.js.map +1 -0
  69. package/dist/wake-sleep/wake-phase.d.ts +83 -0
  70. package/dist/wake-sleep/wake-phase.d.ts.map +1 -0
  71. package/dist/wake-sleep/wake-phase.js +457 -0
  72. package/dist/wake-sleep/wake-phase.js.map +1 -0
  73. package/dist/yata-bridge.d.ts +78 -0
  74. package/dist/yata-bridge.d.ts.map +1 -0
  75. package/dist/yata-bridge.js +193 -0
  76. package/dist/yata-bridge.js.map +1 -0
  77. package/package.json +60 -0
@@ -0,0 +1,455 @@
1
+ /**
2
+ * YATA Local - Reasoning Engine
3
+ *
4
+ * @packageDocumentation
5
+ * @module @nahisaho/yata-local/reasoning
6
+ *
7
+ * @see REQ-YL-REASON-001 ~ REQ-YL-REASON-004
8
+ */
9
+ /**
10
+ * Reasoning engine for inference and constraint validation
11
+ */
12
+ export class ReasoningEngine {
13
+ db;
14
+ queryEngine;
15
+ rules = new Map();
16
+ constraints = new Map();
17
+ constructor(db, queryEngine) {
18
+ this.db = db;
19
+ this.queryEngine = queryEngine;
20
+ this.initializeBuiltInRules();
21
+ this.initializeBuiltInConstraints();
22
+ }
23
+ /**
24
+ * Initialize built-in inference rules
25
+ * @see REQ-YL-REASON-001
26
+ */
27
+ initializeBuiltInRules() {
28
+ // Type inheritance rule: if A extends B and B extends C, then A extends C
29
+ this.rules.set('transitive-extends', {
30
+ id: 'transitive-extends',
31
+ name: 'Transitive Inheritance',
32
+ description: 'If A extends B and B extends C, infer A extends C',
33
+ pattern: {
34
+ nodes: [
35
+ { variable: 'a', type: 'class' },
36
+ { variable: 'b', type: 'class' },
37
+ { variable: 'c', type: 'class' },
38
+ ],
39
+ edges: [
40
+ { sourceVar: 'a', targetVar: 'b', type: 'extends' },
41
+ { sourceVar: 'b', targetVar: 'c', type: 'extends' },
42
+ ],
43
+ },
44
+ inference: {
45
+ sourceVar: 'a',
46
+ targetVar: 'c',
47
+ type: 'extends',
48
+ },
49
+ confidence: 1.0,
50
+ });
51
+ // Implementation implies type compatibility
52
+ this.rules.set('implements-type', {
53
+ id: 'implements-type',
54
+ name: 'Interface Implementation',
55
+ description: 'If class implements interface, class is type-compatible with interface',
56
+ pattern: {
57
+ nodes: [
58
+ { variable: 'class', type: 'class' },
59
+ { variable: 'interface', type: 'interface' },
60
+ ],
61
+ edges: [{ sourceVar: 'class', targetVar: 'interface', type: 'implements' }],
62
+ },
63
+ inference: {
64
+ sourceVar: 'class',
65
+ targetVar: 'interface',
66
+ type: 'type-compatible',
67
+ },
68
+ confidence: 1.0,
69
+ });
70
+ // Dependency chain: if A depends on B and B depends on C, A transitively depends on C
71
+ this.rules.set('transitive-dependency', {
72
+ id: 'transitive-dependency',
73
+ name: 'Transitive Dependency',
74
+ description: 'If A depends on B and B depends on C, infer A transitively depends on C',
75
+ pattern: {
76
+ nodes: [
77
+ { variable: 'a' },
78
+ { variable: 'b' },
79
+ { variable: 'c' },
80
+ ],
81
+ edges: [
82
+ { sourceVar: 'a', targetVar: 'b', type: 'depends-on' },
83
+ { sourceVar: 'b', targetVar: 'c', type: 'depends-on' },
84
+ ],
85
+ },
86
+ inference: {
87
+ sourceVar: 'a',
88
+ targetVar: 'c',
89
+ type: 'transitively-depends-on',
90
+ },
91
+ confidence: 0.9,
92
+ });
93
+ // Method override: if class extends base and has method with same name
94
+ this.rules.set('method-override', {
95
+ id: 'method-override',
96
+ name: 'Method Override',
97
+ description: 'If class extends base and both have same-named method, method overrides',
98
+ pattern: {
99
+ nodes: [
100
+ { variable: 'child', type: 'class' },
101
+ { variable: 'parent', type: 'class' },
102
+ { variable: 'childMethod', type: 'method' },
103
+ { variable: 'parentMethod', type: 'method' },
104
+ ],
105
+ edges: [
106
+ { sourceVar: 'child', targetVar: 'parent', type: 'extends' },
107
+ { sourceVar: 'child', targetVar: 'childMethod', type: 'has-method' },
108
+ { sourceVar: 'parent', targetVar: 'parentMethod', type: 'has-method' },
109
+ ],
110
+ },
111
+ inference: {
112
+ sourceVar: 'childMethod',
113
+ targetVar: 'parentMethod',
114
+ type: 'overrides',
115
+ },
116
+ confidence: 0.8,
117
+ });
118
+ }
119
+ /**
120
+ * Initialize built-in constraints
121
+ * @see REQ-YL-REASON-003
122
+ */
123
+ initializeBuiltInConstraints() {
124
+ // No circular inheritance
125
+ this.constraints.set('no-circular-inheritance', {
126
+ id: 'no-circular-inheritance',
127
+ name: 'No Circular Inheritance',
128
+ description: 'Classes must not have circular inheritance chains',
129
+ type: 'graph',
130
+ check: async (db) => {
131
+ const violations = [];
132
+ const { entities } = db.queryEntities({ type: 'class' }, 10000);
133
+ for (const entity of entities) {
134
+ const visited = new Set();
135
+ let current = entity.id;
136
+ while (current) {
137
+ if (visited.has(current)) {
138
+ violations.push({
139
+ entityId: entity.id,
140
+ constraintId: 'no-circular-inheritance',
141
+ message: `Circular inheritance detected: ${entity.name}`,
142
+ severity: 'error',
143
+ });
144
+ break;
145
+ }
146
+ visited.add(current);
147
+ const rels = db.getRelationships(current, 'out');
148
+ const extendsRel = rels.find(r => r.type === 'extends');
149
+ current = extendsRel?.targetId ?? '';
150
+ }
151
+ }
152
+ return violations;
153
+ },
154
+ });
155
+ // All imports must resolve
156
+ this.constraints.set('imports-resolve', {
157
+ id: 'imports-resolve',
158
+ name: 'Imports Must Resolve',
159
+ description: 'All import relationships must have valid targets',
160
+ type: 'referential',
161
+ check: async (db) => {
162
+ const violations = [];
163
+ const { entities } = db.queryEntities({}, 10000);
164
+ for (const entity of entities) {
165
+ const rels = db.getRelationships(entity.id, 'out');
166
+ for (const rel of rels) {
167
+ if (rel.type === 'imports') {
168
+ const target = db.getEntity(rel.targetId);
169
+ if (!target) {
170
+ violations.push({
171
+ entityId: entity.id,
172
+ relationshipId: rel.id,
173
+ constraintId: 'imports-resolve',
174
+ message: `Unresolved import: ${rel.targetId}`,
175
+ severity: 'error',
176
+ });
177
+ }
178
+ }
179
+ }
180
+ }
181
+ return violations;
182
+ },
183
+ });
184
+ // Entity must have name
185
+ this.constraints.set('entity-has-name', {
186
+ id: 'entity-has-name',
187
+ name: 'Entity Must Have Name',
188
+ description: 'All entities must have a non-empty name',
189
+ type: 'cardinality',
190
+ check: async (db) => {
191
+ const violations = [];
192
+ const { entities } = db.queryEntities({}, 10000);
193
+ for (const entity of entities) {
194
+ if (!entity.name || entity.name.trim() === '') {
195
+ violations.push({
196
+ entityId: entity.id,
197
+ constraintId: 'entity-has-name',
198
+ message: `Entity has no name: ${entity.id}`,
199
+ severity: 'error',
200
+ });
201
+ }
202
+ }
203
+ return violations;
204
+ },
205
+ });
206
+ // Function should have return type
207
+ this.constraints.set('function-return-type', {
208
+ id: 'function-return-type',
209
+ name: 'Function Return Type',
210
+ description: 'Functions should have a declared return type',
211
+ type: 'property',
212
+ check: async (db) => {
213
+ const violations = [];
214
+ const { entities } = db.queryEntities({ type: 'function' }, 10000);
215
+ for (const entity of entities) {
216
+ if (!entity.metadata.returnType) {
217
+ violations.push({
218
+ entityId: entity.id,
219
+ constraintId: 'function-return-type',
220
+ message: `Function ${entity.name} has no return type`,
221
+ severity: 'warning',
222
+ });
223
+ }
224
+ }
225
+ return violations;
226
+ },
227
+ });
228
+ }
229
+ /**
230
+ * Add custom inference rule
231
+ */
232
+ addRule(rule) {
233
+ this.rules.set(rule.id, rule);
234
+ }
235
+ /**
236
+ * Remove inference rule
237
+ */
238
+ removeRule(ruleId) {
239
+ return this.rules.delete(ruleId);
240
+ }
241
+ /**
242
+ * Get all rules
243
+ */
244
+ getRules() {
245
+ return Array.from(this.rules.values());
246
+ }
247
+ /**
248
+ * Add custom constraint
249
+ */
250
+ addConstraint(constraint) {
251
+ this.constraints.set(constraint.id, constraint);
252
+ }
253
+ /**
254
+ * Remove constraint
255
+ */
256
+ removeConstraint(constraintId) {
257
+ return this.constraints.delete(constraintId);
258
+ }
259
+ /**
260
+ * Get all constraints
261
+ */
262
+ getConstraints() {
263
+ return Array.from(this.constraints.values());
264
+ }
265
+ /**
266
+ * Run inference on the graph
267
+ * @see REQ-YL-REASON-001
268
+ */
269
+ infer(options = {}) {
270
+ const maxIterations = options.maxIterations ?? 10;
271
+ const rulesToApply = options.rules
272
+ ? Array.from(this.rules.values()).filter(r => options.rules.includes(r.id))
273
+ : Array.from(this.rules.values());
274
+ const result = {
275
+ inferred: [],
276
+ appliedRules: [],
277
+ };
278
+ // Fixed-point iteration
279
+ let changed = true;
280
+ let iteration = 0;
281
+ while (changed && iteration < maxIterations) {
282
+ changed = false;
283
+ iteration++;
284
+ for (const rule of rulesToApply) {
285
+ const matches = this.queryEngine.matchPattern(rule.pattern);
286
+ for (const match of matches) {
287
+ const sourceId = match.bindings[rule.inference.sourceVar];
288
+ const targetId = match.bindings[rule.inference.targetVar];
289
+ if (!sourceId || !targetId)
290
+ continue;
291
+ // Check if relationship already exists
292
+ const existingRels = this.db.getRelationships(sourceId, 'out');
293
+ const exists = existingRels.some(r => r.targetId === targetId && r.type === rule.inference.type);
294
+ if (!exists) {
295
+ result.inferred.push({
296
+ sourceId,
297
+ targetId,
298
+ type: rule.inference.type,
299
+ confidence: rule.confidence * match.confidence,
300
+ rule: rule.id,
301
+ });
302
+ changed = true;
303
+ if (!result.appliedRules.includes(rule.id)) {
304
+ result.appliedRules.push(rule.id);
305
+ }
306
+ }
307
+ }
308
+ }
309
+ }
310
+ return result;
311
+ }
312
+ /**
313
+ * Validate graph against constraints
314
+ * @see REQ-YL-REASON-003
315
+ */
316
+ async validate(options = {}) {
317
+ const constraintsToCheck = options.constraints
318
+ ? Array.from(this.constraints.values()).filter(c => options.constraints.includes(c.id))
319
+ : Array.from(this.constraints.values());
320
+ const allViolations = [];
321
+ for (const constraint of constraintsToCheck) {
322
+ const violations = await constraint.check(this.db);
323
+ allViolations.push(...violations);
324
+ }
325
+ const errorCount = allViolations.filter(v => v.severity === 'error').length;
326
+ const warningCount = allViolations.filter(v => v.severity === 'warning').length;
327
+ return {
328
+ valid: errorCount === 0,
329
+ violations: allViolations,
330
+ summary: {
331
+ total: allViolations.length,
332
+ errors: errorCount,
333
+ warnings: warningCount,
334
+ info: allViolations.filter(v => v.severity === 'info').length,
335
+ },
336
+ };
337
+ }
338
+ /**
339
+ * Compute confidence score for entity relationship
340
+ * @see REQ-YL-REASON-004
341
+ */
342
+ computeConfidence(sourceId, targetId, relType) {
343
+ // Direct relationship
344
+ const directRels = this.db.getRelationships(sourceId, 'out');
345
+ const directRel = directRels.find(r => r.targetId === targetId && r.type === relType);
346
+ if (directRel)
347
+ return directRel.weight;
348
+ // Inferred relationship
349
+ const inferred = this.infer();
350
+ const inferredRel = inferred.inferred.find(i => i.sourceId === sourceId && i.targetId === targetId && i.type === relType);
351
+ if (inferredRel)
352
+ return inferredRel.confidence;
353
+ // Path-based confidence (decays with distance)
354
+ const path = this.queryEngine.findPath(sourceId, targetId);
355
+ if (path) {
356
+ return Math.pow(0.9, path.length);
357
+ }
358
+ return 0;
359
+ }
360
+ /**
361
+ * Find potential relationships based on structural similarity
362
+ * @see REQ-YL-REASON-002
363
+ */
364
+ suggestRelationships(entityId, options = {}) {
365
+ const maxSuggestions = options.maxSuggestions ?? 10;
366
+ const minConfidence = options.minConfidence ?? 0.5;
367
+ const suggestions = [];
368
+ const entity = this.db.getEntity(entityId);
369
+ if (!entity)
370
+ return suggestions;
371
+ // Find similar entities by name pattern
372
+ const nameParts = entity.name.split(/(?=[A-Z])|_|-/);
373
+ for (const part of nameParts) {
374
+ if (part.length < 3)
375
+ continue;
376
+ const similar = this.db.searchEntities(part, 20);
377
+ for (const sim of similar) {
378
+ if (sim.id === entityId)
379
+ continue;
380
+ // Check if relationship already exists
381
+ const existingRels = this.db.getRelationships(entityId);
382
+ const hasRelationship = existingRels.some(r => r.sourceId === sim.id || r.targetId === sim.id);
383
+ if (!hasRelationship) {
384
+ const confidence = this.computeNameSimilarity(entity.name, sim.name);
385
+ if (confidence >= minConfidence) {
386
+ suggestions.push({
387
+ targetId: sim.id,
388
+ type: 'related-to',
389
+ confidence,
390
+ reason: `Similar name pattern: "${part}"`,
391
+ });
392
+ }
393
+ }
394
+ }
395
+ }
396
+ // Find related by same file
397
+ if (entity.filePath) {
398
+ const { entities: sameFile } = this.db.queryEntities({}, 1000);
399
+ for (const other of sameFile.filter(e => e.filePath === entity.filePath && e.id !== entityId)) {
400
+ const existingRels = this.db.getRelationships(entityId);
401
+ const hasRelationship = existingRels.some(r => r.sourceId === other.id || r.targetId === other.id);
402
+ if (!hasRelationship) {
403
+ suggestions.push({
404
+ targetId: other.id,
405
+ type: 'defined-in-same-file',
406
+ confidence: 0.7,
407
+ reason: 'Same source file',
408
+ });
409
+ }
410
+ }
411
+ }
412
+ // Sort by confidence and limit
413
+ return suggestions
414
+ .sort((a, b) => b.confidence - a.confidence)
415
+ .slice(0, maxSuggestions);
416
+ }
417
+ /**
418
+ * Compute name similarity using Levenshtein distance
419
+ */
420
+ computeNameSimilarity(name1, name2) {
421
+ const n1 = name1.toLowerCase();
422
+ const n2 = name2.toLowerCase();
423
+ const maxLen = Math.max(n1.length, n2.length);
424
+ if (maxLen === 0)
425
+ return 1;
426
+ const distance = this.levenshteinDistance(n1, n2);
427
+ return 1 - distance / maxLen;
428
+ }
429
+ /**
430
+ * Levenshtein distance calculation
431
+ */
432
+ levenshteinDistance(s1, s2) {
433
+ const m = s1.length;
434
+ const n = s2.length;
435
+ const dp = Array(m + 1)
436
+ .fill(null)
437
+ .map(() => Array(n + 1).fill(0));
438
+ for (let i = 0; i <= m; i++)
439
+ dp[i][0] = i;
440
+ for (let j = 0; j <= n; j++)
441
+ dp[0][j] = j;
442
+ for (let i = 1; i <= m; i++) {
443
+ for (let j = 1; j <= n; j++) {
444
+ if (s1[i - 1] === s2[j - 1]) {
445
+ dp[i][j] = dp[i - 1][j - 1];
446
+ }
447
+ else {
448
+ dp[i][j] = 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);
449
+ }
450
+ }
451
+ }
452
+ return dp[m][n];
453
+ }
454
+ }
455
+ //# sourceMappingURL=reasoning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoning.js","sourceRoot":"","sources":["../src/reasoning.ts"],"names":[],"mappings":"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"}