codebase-context 1.2.2 → 1.5.1

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 (131) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +292 -87
  3. package/dist/analyzers/angular/index.d.ts +1 -1
  4. package/dist/analyzers/angular/index.d.ts.map +1 -1
  5. package/dist/analyzers/angular/index.js +298 -309
  6. package/dist/analyzers/angular/index.js.map +1 -1
  7. package/dist/analyzers/generic/index.d.ts +1 -2
  8. package/dist/analyzers/generic/index.d.ts.map +1 -1
  9. package/dist/analyzers/generic/index.js +93 -60
  10. package/dist/analyzers/generic/index.js.map +1 -1
  11. package/dist/constants/codebase-context.d.ts +8 -0
  12. package/dist/constants/codebase-context.d.ts.map +1 -0
  13. package/dist/constants/codebase-context.js +10 -0
  14. package/dist/constants/codebase-context.js.map +1 -0
  15. package/dist/constants/git-patterns.d.ts +12 -0
  16. package/dist/constants/git-patterns.d.ts.map +1 -0
  17. package/dist/constants/git-patterns.js +11 -0
  18. package/dist/constants/git-patterns.js.map +1 -0
  19. package/dist/core/analyzer-registry.d.ts.map +1 -1
  20. package/dist/core/analyzer-registry.js +8 -8
  21. package/dist/core/analyzer-registry.js.map +1 -1
  22. package/dist/core/indexer.d.ts +11 -1
  23. package/dist/core/indexer.d.ts.map +1 -1
  24. package/dist/core/indexer.js +359 -157
  25. package/dist/core/indexer.js.map +1 -1
  26. package/dist/core/manifest.d.ts +39 -0
  27. package/dist/core/manifest.d.ts.map +1 -0
  28. package/dist/core/manifest.js +86 -0
  29. package/dist/core/manifest.js.map +1 -0
  30. package/dist/core/search-quality.d.ts +10 -0
  31. package/dist/core/search-quality.d.ts.map +1 -0
  32. package/dist/core/search-quality.js +64 -0
  33. package/dist/core/search-quality.js.map +1 -0
  34. package/dist/core/search.d.ts +17 -1
  35. package/dist/core/search.d.ts.map +1 -1
  36. package/dist/core/search.js +303 -104
  37. package/dist/core/search.js.map +1 -1
  38. package/dist/embeddings/openai.d.ts.map +1 -1
  39. package/dist/embeddings/openai.js +2 -2
  40. package/dist/embeddings/openai.js.map +1 -1
  41. package/dist/embeddings/transformers.d.ts +1 -1
  42. package/dist/embeddings/transformers.d.ts.map +1 -1
  43. package/dist/embeddings/transformers.js +19 -15
  44. package/dist/embeddings/transformers.js.map +1 -1
  45. package/dist/embeddings/types.d.ts +1 -1
  46. package/dist/embeddings/types.d.ts.map +1 -1
  47. package/dist/embeddings/types.js +3 -3
  48. package/dist/embeddings/types.js.map +1 -1
  49. package/dist/errors/index.d.ts +8 -0
  50. package/dist/errors/index.d.ts.map +1 -0
  51. package/dist/errors/index.js +11 -0
  52. package/dist/errors/index.js.map +1 -0
  53. package/dist/index.d.ts +7 -29
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +1125 -362
  56. package/dist/index.js.map +1 -1
  57. package/dist/lib.d.ts +18 -18
  58. package/dist/lib.d.ts.map +1 -1
  59. package/dist/lib.js +23 -23
  60. package/dist/lib.js.map +1 -1
  61. package/dist/memory/git-memory.d.ts +9 -0
  62. package/dist/memory/git-memory.d.ts.map +1 -0
  63. package/dist/memory/git-memory.js +51 -0
  64. package/dist/memory/git-memory.js.map +1 -0
  65. package/dist/memory/store.d.ts +38 -0
  66. package/dist/memory/store.d.ts.map +1 -0
  67. package/dist/memory/store.js +136 -0
  68. package/dist/memory/store.js.map +1 -0
  69. package/dist/patterns/semantics.d.ts +4 -0
  70. package/dist/patterns/semantics.d.ts.map +1 -0
  71. package/dist/patterns/semantics.js +24 -0
  72. package/dist/patterns/semantics.js.map +1 -0
  73. package/dist/preflight/evidence-lock.d.ts +50 -0
  74. package/dist/preflight/evidence-lock.d.ts.map +1 -0
  75. package/dist/preflight/evidence-lock.js +130 -0
  76. package/dist/preflight/evidence-lock.js.map +1 -0
  77. package/dist/preflight/query-scope.d.ts +3 -0
  78. package/dist/preflight/query-scope.d.ts.map +1 -0
  79. package/dist/preflight/query-scope.js +40 -0
  80. package/dist/preflight/query-scope.js.map +1 -0
  81. package/dist/resources/uri.d.ts +5 -0
  82. package/dist/resources/uri.d.ts.map +1 -0
  83. package/dist/resources/uri.js +15 -0
  84. package/dist/resources/uri.js.map +1 -0
  85. package/dist/storage/lancedb.d.ts +1 -0
  86. package/dist/storage/lancedb.d.ts.map +1 -1
  87. package/dist/storage/lancedb.js +51 -34
  88. package/dist/storage/lancedb.js.map +1 -1
  89. package/dist/storage/types.d.ts +5 -0
  90. package/dist/storage/types.d.ts.map +1 -1
  91. package/dist/storage/types.js +2 -1
  92. package/dist/storage/types.js.map +1 -1
  93. package/dist/types/index.d.ts +47 -0
  94. package/dist/types/index.d.ts.map +1 -1
  95. package/dist/types/index.js +1 -0
  96. package/dist/types/index.js.map +1 -1
  97. package/dist/utils/chunking.d.ts.map +1 -1
  98. package/dist/utils/chunking.js +10 -9
  99. package/dist/utils/chunking.js.map +1 -1
  100. package/dist/utils/dependency-detection.d.ts +18 -0
  101. package/dist/utils/dependency-detection.d.ts.map +1 -0
  102. package/dist/utils/dependency-detection.js +102 -0
  103. package/dist/utils/dependency-detection.js.map +1 -0
  104. package/dist/utils/git-dates.d.ts +1 -0
  105. package/dist/utils/git-dates.d.ts.map +1 -1
  106. package/dist/utils/git-dates.js +23 -3
  107. package/dist/utils/git-dates.js.map +1 -1
  108. package/dist/utils/language-detection.d.ts.map +1 -1
  109. package/dist/utils/language-detection.js +69 -17
  110. package/dist/utils/language-detection.js.map +1 -1
  111. package/dist/utils/usage-tracker.d.ts +2 -2
  112. package/dist/utils/usage-tracker.d.ts.map +1 -1
  113. package/dist/utils/usage-tracker.js +67 -38
  114. package/dist/utils/usage-tracker.js.map +1 -1
  115. package/dist/utils/workspace-detection.d.ts +32 -0
  116. package/dist/utils/workspace-detection.d.ts.map +1 -0
  117. package/dist/utils/workspace-detection.js +107 -0
  118. package/dist/utils/workspace-detection.js.map +1 -0
  119. package/package.json +122 -97
  120. package/dist/core/file-watcher.d.ts +0 -63
  121. package/dist/core/file-watcher.d.ts.map +0 -1
  122. package/dist/core/file-watcher.js +0 -210
  123. package/dist/core/file-watcher.js.map +0 -1
  124. package/dist/utils/logger.d.ts +0 -36
  125. package/dist/utils/logger.d.ts.map +0 -1
  126. package/dist/utils/logger.js +0 -111
  127. package/dist/utils/logger.js.map +0 -1
  128. package/dist/utils/pattern-detector.d.ts +0 -41
  129. package/dist/utils/pattern-detector.d.ts.map +0 -1
  130. package/dist/utils/pattern-detector.js +0 -101
  131. package/dist/utils/pattern-detector.js.map +0 -1
@@ -0,0 +1,4 @@
1
+ export declare function isComplementaryPatternConflict(category: string, primaryName: string, alternativeName: string): boolean;
2
+ export declare function isComplementaryPatternCategory(category: string, patternNames: string[]): boolean;
3
+ export declare function shouldSkipLegacyTestingFrameworkCategory(category: string, patterns: Record<string, any>): boolean;
4
+ //# sourceMappingURL=semantics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantics.d.ts","sourceRoot":"","sources":["../../src/patterns/semantics.ts"],"names":[],"mappings":"AAMA,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,GACtB,OAAO,CAUT;AAED,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAKhG;AAED,wBAAgB,wCAAwC,CACtD,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B,OAAO,CAET"}
@@ -0,0 +1,24 @@
1
+ const COMPLEMENTARY_REACTIVITY_PATTERNS = new Set(['computed', 'effect']);
2
+ function normalizePatternName(name) {
3
+ return name.trim().toLowerCase();
4
+ }
5
+ export function isComplementaryPatternConflict(category, primaryName, alternativeName) {
6
+ if (category !== 'reactivity')
7
+ return false;
8
+ const primary = normalizePatternName(primaryName);
9
+ const alternative = normalizePatternName(alternativeName);
10
+ if (!COMPLEMENTARY_REACTIVITY_PATTERNS.has(primary))
11
+ return false;
12
+ if (!COMPLEMENTARY_REACTIVITY_PATTERNS.has(alternative))
13
+ return false;
14
+ return primary !== alternative;
15
+ }
16
+ export function isComplementaryPatternCategory(category, patternNames) {
17
+ if (category !== 'reactivity' || patternNames.length < 2)
18
+ return false;
19
+ return patternNames.every((name) => COMPLEMENTARY_REACTIVITY_PATTERNS.has(normalizePatternName(name)));
20
+ }
21
+ export function shouldSkipLegacyTestingFrameworkCategory(category, patterns) {
22
+ return category === 'testingFramework' && Boolean(patterns.unitTestFramework?.primary);
23
+ }
24
+ //# sourceMappingURL=semantics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantics.js","sourceRoot":"","sources":["../../src/patterns/semantics.ts"],"names":[],"mappings":"AAAA,MAAM,iCAAiC,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE1E,SAAS,oBAAoB,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,QAAgB,EAChB,WAAmB,EACnB,eAAuB;IAEvB,IAAI,QAAQ,KAAK,YAAY;QAAE,OAAO,KAAK,CAAC;IAE5C,MAAM,OAAO,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAE1D,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAClE,IAAI,CAAC,iCAAiC,CAAC,GAAG,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IAEtE,OAAO,OAAO,KAAK,WAAW,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,QAAgB,EAAE,YAAsB;IACrF,IAAI,QAAQ,KAAK,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACvE,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CACjC,iCAAiC,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAClE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wCAAwC,CACtD,QAAgB,EAChB,QAA6B;IAE7B,OAAO,QAAQ,KAAK,kBAAkB,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;AACzF,CAAC"}
@@ -0,0 +1,50 @@
1
+ import type { MemoryWithConfidence } from '../memory/store.js';
2
+ import type { SearchResult } from '../types/index.js';
3
+ type EvidenceStrength = 'strong' | 'weak' | 'missing';
4
+ interface EvidenceSource {
5
+ source: 'code' | 'patterns' | 'memories';
6
+ strength: EvidenceStrength;
7
+ count: number;
8
+ examples: string[];
9
+ }
10
+ export interface EpistemicStress {
11
+ level: 'low' | 'moderate' | 'high';
12
+ triggers: string[];
13
+ abstain: boolean;
14
+ }
15
+ export interface EvidenceLock {
16
+ mode: 'triangulated';
17
+ status: 'pass' | 'warn' | 'block';
18
+ readyToEdit: boolean;
19
+ score: number;
20
+ sources: EvidenceSource[];
21
+ gaps?: string[];
22
+ nextAction?: string;
23
+ epistemicStress?: EpistemicStress;
24
+ }
25
+ interface PatternConflict {
26
+ category: string;
27
+ primary: {
28
+ name: string;
29
+ adoption: string;
30
+ };
31
+ alternative: {
32
+ name: string;
33
+ adoption: string;
34
+ };
35
+ }
36
+ interface BuildEvidenceLockInput {
37
+ results: SearchResult[];
38
+ preferredPatterns: Array<{
39
+ pattern: string;
40
+ example?: string;
41
+ }>;
42
+ relatedMemories: MemoryWithConfidence[];
43
+ failureWarnings: Array<{
44
+ memory: string;
45
+ }>;
46
+ patternConflicts?: PatternConflict[];
47
+ }
48
+ export declare function buildEvidenceLock(input: BuildEvidenceLockInput): EvidenceLock;
49
+ export {};
50
+ //# sourceMappingURL=evidence-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-lock.d.ts","sourceRoot":"","sources":["../../src/preflight/evidence-lock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,KAAK,gBAAgB,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAEtD,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;IACzC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC;IACnC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CACjD;AAED,UAAU,sBAAsB;IAC9B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,iBAAiB,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,eAAe,EAAE,oBAAoB,EAAE,CAAC;IACxC,eAAe,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3C,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;CACtC;AAaD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,YAAY,CAuI7E"}
@@ -0,0 +1,130 @@
1
+ function strengthFactor(strength) {
2
+ if (strength === 'strong')
3
+ return 1;
4
+ if (strength === 'weak')
5
+ return 0.5;
6
+ return 0;
7
+ }
8
+ function truncate(text, max = 80) {
9
+ if (text.length <= max)
10
+ return text;
11
+ return `${text.slice(0, max - 1)}...`;
12
+ }
13
+ export function buildEvidenceLock(input) {
14
+ const codeExamples = input.results
15
+ .slice(0, 3)
16
+ .map((r) => `${r.filePath}:${r.startLine}-${r.endLine}`);
17
+ const codeStrength = input.results.length >= 3 ? 'strong' : input.results.length > 0 ? 'weak' : 'missing';
18
+ const patternExamples = input.preferredPatterns
19
+ .slice(0, 3)
20
+ .map((p) => (p.example ? `${p.pattern} (${p.example})` : p.pattern));
21
+ const patternsStrength = input.preferredPatterns.length >= 2
22
+ ? 'strong'
23
+ : input.preferredPatterns.length === 1
24
+ ? 'weak'
25
+ : 'missing';
26
+ const activeMemories = input.relatedMemories.filter((m) => !m.stale);
27
+ const memoryExamplesFromFailures = input.failureWarnings
28
+ .slice(0, 2)
29
+ .map((w) => truncate(w.memory));
30
+ const memoryExamplesFromMemories = activeMemories.slice(0, 2).map((m) => truncate(m.memory));
31
+ const memoryExamples = [...memoryExamplesFromFailures, ...memoryExamplesFromMemories].slice(0, 3);
32
+ const memoryCount = activeMemories.length;
33
+ const memoriesStrength = memoryCount >= 2 || input.failureWarnings.length > 0
34
+ ? 'strong'
35
+ : memoryCount === 1
36
+ ? 'weak'
37
+ : 'missing';
38
+ const sources = [
39
+ {
40
+ source: 'code',
41
+ strength: codeStrength,
42
+ count: input.results.length,
43
+ examples: codeExamples
44
+ },
45
+ {
46
+ source: 'patterns',
47
+ strength: patternsStrength,
48
+ count: input.preferredPatterns.length,
49
+ examples: patternExamples
50
+ },
51
+ {
52
+ source: 'memories',
53
+ strength: memoriesStrength,
54
+ count: memoryCount,
55
+ examples: memoryExamples
56
+ }
57
+ ];
58
+ const strongSources = sources.filter((s) => s.strength === 'strong').length;
59
+ const weakSources = sources.filter((s) => s.strength === 'weak').length;
60
+ const baseScore = 45 * strengthFactor(codeStrength) +
61
+ 30 * strengthFactor(patternsStrength) +
62
+ 25 * strengthFactor(memoriesStrength);
63
+ const score = Math.min(100, Math.round(baseScore));
64
+ let status = 'block';
65
+ if (codeStrength === 'strong' && strongSources >= 2) {
66
+ status = 'pass';
67
+ }
68
+ else if (codeStrength !== 'missing' && (strongSources >= 1 || weakSources >= 2)) {
69
+ status = 'warn';
70
+ }
71
+ const gaps = [];
72
+ if (codeStrength === 'missing')
73
+ gaps.push('No matching code hits for this intent');
74
+ if (patternsStrength === 'missing')
75
+ gaps.push('No preferred team pattern evidence found');
76
+ if (memoriesStrength === 'missing')
77
+ gaps.push('No active team memory evidence found');
78
+ let nextAction;
79
+ if (status === 'block') {
80
+ nextAction =
81
+ 'Broaden the query or run refresh_index, then retry with intent="edit" to collect stronger evidence.';
82
+ }
83
+ else if (status === 'warn') {
84
+ nextAction = 'Proceed cautiously and confirm at least one golden file before editing.';
85
+ }
86
+ // --- Epistemic stress: detect when evidence is contradictory, stale, or too thin ---
87
+ const stressTriggers = [];
88
+ // Trigger: pattern conflicts (team hasn't converged)
89
+ if (input.patternConflicts && input.patternConflicts.length > 0) {
90
+ for (const c of input.patternConflicts.slice(0, 3)) {
91
+ stressTriggers.push(`Conflicting patterns in ${c.category}: ${c.primary.name} (${c.primary.adoption}) vs ${c.alternative.name} (${c.alternative.adoption})`);
92
+ }
93
+ }
94
+ // Trigger: high stale memory ratio (most knowledge is outdated)
95
+ const totalMemories = input.relatedMemories.length;
96
+ const staleMemories = input.relatedMemories.filter((m) => m.stale).length;
97
+ if (totalMemories > 0 && staleMemories / totalMemories > 0.5) {
98
+ stressTriggers.push(`${staleMemories}/${totalMemories} related memories are stale — team knowledge may be outdated`);
99
+ }
100
+ // Trigger: thin evidence (majority of sources missing or weak)
101
+ const missingSources = sources.filter((s) => s.strength === 'missing').length;
102
+ if (missingSources >= 2) {
103
+ stressTriggers.push('Insufficient evidence: most evidence sources are empty');
104
+ }
105
+ let epistemicStress;
106
+ if (stressTriggers.length > 0) {
107
+ const level = stressTriggers.length >= 3 ? 'high' : stressTriggers.length >= 2 ? 'moderate' : 'low';
108
+ const abstain = level === 'high' || (level === 'moderate' && status !== 'pass');
109
+ epistemicStress = { level, triggers: stressTriggers, abstain };
110
+ // High stress overrides status: don't claim readiness when evidence is contradictory
111
+ if (abstain && status === 'pass') {
112
+ status = 'warn';
113
+ }
114
+ if (abstain && !nextAction) {
115
+ nextAction =
116
+ 'Evidence is contradictory or insufficient. Resolve pattern conflicts or gather more context before editing.';
117
+ }
118
+ }
119
+ return {
120
+ mode: 'triangulated',
121
+ status,
122
+ readyToEdit: status === 'pass' && (!epistemicStress || !epistemicStress.abstain),
123
+ score,
124
+ sources,
125
+ ...(gaps.length > 0 && { gaps }),
126
+ ...(nextAction && { nextAction }),
127
+ ...(epistemicStress && { epistemicStress })
128
+ };
129
+ }
130
+ //# sourceMappingURL=evidence-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-lock.js","sourceRoot":"","sources":["../../src/preflight/evidence-lock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function isTestingRelatedQuery(query: string): boolean;
2
+ export declare function shouldIncludePatternConflictCategory(category: string, query: string): boolean;
3
+ //# sourceMappingURL=query-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-scope.d.ts","sourceRoot":"","sources":["../../src/preflight/query-scope.ts"],"names":[],"mappings":"AAgCA,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED,wBAAgB,oCAAoC,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAG7F"}
@@ -0,0 +1,40 @@
1
+ const TESTING_QUERY_TERMS = [
2
+ 'test',
3
+ 'tests',
4
+ 'testing',
5
+ 'unit',
6
+ 'integration',
7
+ 'spec',
8
+ 'jest',
9
+ 'testbed',
10
+ 'mock',
11
+ 'mocks',
12
+ 'mocking',
13
+ 'spy',
14
+ 'spyon',
15
+ 'coverage',
16
+ 'e2e',
17
+ 'playwright',
18
+ 'cypress',
19
+ 'vitest',
20
+ 'jasmine'
21
+ ];
22
+ const TESTING_PATTERN_CATEGORIES = new Set([
23
+ 'unitTestFramework',
24
+ 'testingFramework',
25
+ 'testMocking',
26
+ 'testUtility',
27
+ 'e2eFramework'
28
+ ]);
29
+ const TESTING_QUERY_REGEX = new RegExp(`\\b(${TESTING_QUERY_TERMS.join('|')})\\b`, 'i');
30
+ export function isTestingRelatedQuery(query) {
31
+ if (!query || !query.trim())
32
+ return false;
33
+ return TESTING_QUERY_REGEX.test(query);
34
+ }
35
+ export function shouldIncludePatternConflictCategory(category, query) {
36
+ if (!TESTING_PATTERN_CATEGORIES.has(category))
37
+ return true;
38
+ return isTestingRelatedQuery(query);
39
+ }
40
+ //# sourceMappingURL=query-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-scope.js","sourceRoot":"","sources":["../../src/preflight/query-scope.ts"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,GAAG;IAC1B,MAAM;IACN,OAAO;IACP,SAAS;IACT,MAAM;IACN,aAAa;IACb,MAAM;IACN,MAAM;IACN,SAAS;IACT,MAAM;IACN,OAAO;IACP,SAAS;IACT,KAAK;IACL,OAAO;IACP,UAAU;IACV,KAAK;IACL,YAAY;IACZ,SAAS;IACT,QAAQ;IACR,SAAS;CACD,CAAC;AAEX,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC;IACzC,mBAAmB;IACnB,kBAAkB;IAClB,aAAa;IACb,aAAa;IACb,cAAc;CACf,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,IAAI,MAAM,CAAC,OAAO,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAExF,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,oCAAoC,CAAC,QAAgB,EAAE,KAAa;IAClF,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,5 @@
1
+ declare const CONTEXT_RESOURCE_URI = "codebase://context";
2
+ export declare function normalizeResourceUri(uri: string): string;
3
+ export declare function isContextResourceUri(uri: string): boolean;
4
+ export { CONTEXT_RESOURCE_URI };
5
+ //# sourceMappingURL=uri.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uri.d.ts","sourceRoot":"","sources":["../../src/resources/uri.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,oBAAoB,uBAAuB,CAAC;AAElD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,15 @@
1
+ const CONTEXT_RESOURCE_URI = 'codebase://context';
2
+ export function normalizeResourceUri(uri) {
3
+ if (!uri)
4
+ return uri;
5
+ if (uri === CONTEXT_RESOURCE_URI)
6
+ return uri;
7
+ if (uri.endsWith(`/${CONTEXT_RESOURCE_URI}`))
8
+ return CONTEXT_RESOURCE_URI;
9
+ return uri;
10
+ }
11
+ export function isContextResourceUri(uri) {
12
+ return normalizeResourceUri(uri) === CONTEXT_RESOURCE_URI;
13
+ }
14
+ export { CONTEXT_RESOURCE_URI };
15
+ //# sourceMappingURL=uri.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uri.js","sourceRoot":"","sources":["../../src/resources/uri.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAElD,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAC;IACrB,IAAI,GAAG,KAAK,oBAAoB;QAAE,OAAO,GAAG,CAAC;IAC7C,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,oBAAoB,EAAE,CAAC;QAAE,OAAO,oBAAoB,CAAC;IAC1E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,OAAO,oBAAoB,CAAC,GAAG,CAAC,KAAK,oBAAoB,CAAC;AAC5D,CAAC;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -13,6 +13,7 @@ export declare class LanceDBStorageProvider implements VectorStorageProvider {
13
13
  initialize(storagePath: string): Promise<void>;
14
14
  store(chunks: CodeChunkWithEmbedding[]): Promise<void>;
15
15
  search(queryVector: number[], limit: number, filters?: SearchFilters): Promise<VectorSearchResult[]>;
16
+ deleteByFilePaths(filePaths: string[]): Promise<number>;
16
17
  clear(): Promise<void>;
17
18
  count(): Promise<number>;
18
19
  isInitialized(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"lancedb.d.ts","sourceRoot":"","sources":["../../src/storage/lancedb.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAa,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE7D,qBAAa,sBAAuB,YAAW,qBAAqB;IAClE,QAAQ,CAAC,IAAI,aAAa;IAE1B,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAS;IAEtB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgD9C,KAAK,CAAC,MAAM,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CtD,MAAM,CACV,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA8D1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBtB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAc9B,aAAa,IAAI,OAAO;CAGzB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,CAAC,CAIhC"}
1
+ {"version":3,"file":"lancedb.d.ts","sourceRoot":"","sources":["../../src/storage/lancedb.ts"],"names":[],"mappings":"AACA;;;GAGG;AAGH,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAa,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG7D,qBAAa,sBAAuB,YAAW,qBAAqB;IAClE,QAAQ,CAAC,IAAI,aAAa;IAE1B,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAS;IAEtB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC9C,KAAK,CAAC,MAAM,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA8CtD,MAAM,CACV,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAoE1B,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBvD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBtB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAa9B,aAAa,IAAI,OAAO;CAGzB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAI9F"}
@@ -1,8 +1,10 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  /**
2
3
  * LanceDB Storage Provider
3
4
  * Embedded vector database for storing and searching code embeddings
4
5
  */
5
6
  import { promises as fs } from 'fs';
7
+ import { IndexCorruptedError } from '../errors/index.js';
6
8
  export class LanceDBStorageProvider {
7
9
  name = 'lancedb';
8
10
  db = null;
@@ -14,40 +16,30 @@ export class LanceDBStorageProvider {
14
16
  return;
15
17
  try {
16
18
  this.storagePath = storagePath;
17
- // Ensure directory exists
18
19
  await fs.mkdir(storagePath, { recursive: true });
19
- // Dynamic import to avoid issues at require time
20
20
  const lancedb = await import('@lancedb/lancedb');
21
- // Connect to database
22
21
  this.db = await lancedb.connect(storagePath);
23
- // Check if table exists and has valid schema
22
+ // Check if table exists and validate schema
24
23
  const tableNames = await this.db.tableNames();
25
24
  if (tableNames.includes('code_chunks')) {
26
25
  this.table = await this.db.openTable('code_chunks');
27
- // Validate schema has vector column (required for semantic search)
28
- try {
29
- const schema = await this.table.schema();
30
- const hasVectorColumn = schema.fields.some((f) => f.name === 'vector');
31
- if (!hasVectorColumn) {
32
- console.error('Stale index detected (missing vector column). Rebuilding...');
33
- await this.db.dropTable('code_chunks');
34
- this.table = null;
35
- }
36
- else {
37
- console.error('Opened existing LanceDB table');
38
- }
39
- }
40
- catch (schemaError) {
41
- // If schema check fails, table is likely corrupted - drop and rebuild
42
- console.error('Failed to validate table schema, rebuilding index...');
43
- await this.db.dropTable('code_chunks');
44
- this.table = null;
26
+ const schema = await this.table.schema();
27
+ const hasVectorColumn = schema.fields.some((f) => f.name === 'vector');
28
+ if (!hasVectorColumn) {
29
+ throw new IndexCorruptedError('LanceDB index corrupted: missing vector column');
45
30
  }
31
+ console.error('Opened existing LanceDB table');
32
+ }
33
+ else {
34
+ this.table = null;
46
35
  }
47
36
  this.initialized = true;
48
37
  console.error(`LanceDB initialized at: ${storagePath}`);
49
38
  }
50
39
  catch (error) {
40
+ if (error instanceof IndexCorruptedError) {
41
+ throw error;
42
+ }
51
43
  console.error('Failed to initialize LanceDB:', error);
52
44
  throw error;
53
45
  }
@@ -60,7 +52,7 @@ export class LanceDBStorageProvider {
60
52
  return;
61
53
  try {
62
54
  // Convert chunks to LanceDB format
63
- const records = chunks.map(chunk => ({
55
+ const records = chunks.map((chunk) => ({
64
56
  id: chunk.id,
65
57
  vector: chunk.embedding,
66
58
  content: chunk.content,
@@ -76,7 +68,7 @@ export class LanceDBStorageProvider {
76
68
  imports: JSON.stringify(chunk.imports),
77
69
  exports: JSON.stringify(chunk.exports),
78
70
  tags: JSON.stringify(chunk.tags),
79
- metadata: JSON.stringify(chunk.metadata),
71
+ metadata: JSON.stringify(chunk.metadata)
80
72
  }));
81
73
  // Create or overwrite table
82
74
  if (this.table) {
@@ -86,7 +78,7 @@ export class LanceDBStorageProvider {
86
78
  else {
87
79
  // Create new table
88
80
  this.table = await this.db.createTable('code_chunks', records, {
89
- mode: 'overwrite',
81
+ mode: 'overwrite'
90
82
  });
91
83
  }
92
84
  console.error(`Stored ${chunks.length} chunks in LanceDB`);
@@ -98,11 +90,11 @@ export class LanceDBStorageProvider {
98
90
  }
99
91
  async search(queryVector, limit, filters) {
100
92
  if (!this.initialized || !this.table) {
101
- return [];
93
+ throw new IndexCorruptedError('LanceDB index corrupted: no table available for search');
102
94
  }
103
95
  try {
104
96
  // Build query
105
- let query = this.table.vectorSearch(queryVector).limit(limit);
97
+ let query = this.table.vectorSearch(queryVector).distanceType('cosine').limit(limit);
106
98
  // Apply filters if provided
107
99
  if (filters) {
108
100
  const whereConditions = [];
@@ -110,7 +102,7 @@ export class LanceDBStorageProvider {
110
102
  whereConditions.push(`framework = '${filters.framework}'`);
111
103
  }
112
104
  if (filters.componentType) {
113
- whereConditions.push(`componentType = '${filters.componentType}'`);
105
+ whereConditions.push(`"componentType" = '${filters.componentType}'`);
114
106
  }
115
107
  if (filters.layer) {
116
108
  whereConditions.push(`layer = '${filters.layer}'`);
@@ -141,17 +133,43 @@ export class LanceDBStorageProvider {
141
133
  imports: JSON.parse(result.imports || '[]'),
142
134
  exports: JSON.parse(result.exports || '[]'),
143
135
  tags: JSON.parse(result.tags || '[]'),
144
- metadata: JSON.parse(result.metadata || '{}'),
136
+ metadata: JSON.parse(result.metadata || '{}')
145
137
  },
146
- score: 1 - (result._distance || 0), // Convert distance to similarity
147
- distance: result._distance || 0,
138
+ score: Math.max(0, 1 - (result._distance || 0)), // Cosine distance → similarity, clamped to [0, 1]
139
+ distance: result._distance || 0
148
140
  }));
149
141
  }
150
142
  catch (error) {
151
- console.error('Failed to search:', error);
143
+ // Only trigger auto-heal for verified corruption patterns
144
+ if (error instanceof Error && error.message.toLowerCase().includes('no vector column')) {
145
+ throw new IndexCorruptedError(`LanceDB index corrupted: ${error.message}`);
146
+ }
147
+ // Transient errors - log and gracefully degrade
148
+ console.error('[LanceDB] Search error:', error instanceof Error ? error.message : error);
152
149
  return [];
153
150
  }
154
151
  }
152
+ async deleteByFilePaths(filePaths) {
153
+ if (!this.initialized || !this.table || filePaths.length === 0) {
154
+ return 0;
155
+ }
156
+ try {
157
+ const countBefore = await this.table.countRows();
158
+ // LanceDB supports SQL-style filter for delete
159
+ // Escape single quotes in file paths to prevent SQL injection
160
+ const escaped = filePaths.map((p) => p.replace(/'/g, "''"));
161
+ const inClause = escaped.map((p) => `'${p}'`).join(', ');
162
+ await this.table.delete(`"filePath" IN (${inClause})`);
163
+ const countAfter = await this.table.countRows();
164
+ const deleted = countBefore - countAfter;
165
+ console.error(`Deleted ${deleted} chunks for ${filePaths.length} files from LanceDB`);
166
+ return deleted;
167
+ }
168
+ catch (error) {
169
+ console.error('Failed to delete chunks by file paths:', error);
170
+ throw error;
171
+ }
172
+ }
155
173
  async clear() {
156
174
  if (!this.initialized)
157
175
  return;
@@ -174,8 +192,7 @@ export class LanceDBStorageProvider {
174
192
  return 0;
175
193
  }
176
194
  try {
177
- const result = await this.table.countRows();
178
- return result;
195
+ return await this.table.countRows();
179
196
  }
180
197
  catch (error) {
181
198
  console.error('Failed to count rows:', error);
@@ -1 +1 @@
1
- {"version":3,"file":"lancedb.js","sourceRoot":"","sources":["../../src/storage/lancedb.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lancedb.js","sourceRoot":"","sources":["../../src/storage/lancedb.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,11 @@ export interface VectorStorageProvider {
16
16
  * Search for similar chunks
17
17
  */
18
18
  search(queryVector: number[], limit: number, filters?: SearchFilters): Promise<VectorSearchResult[]>;
19
+ /**
20
+ * Delete chunks matching the given file paths.
21
+ * Returns the number of deleted rows.
22
+ */
23
+ deleteByFilePaths(filePaths: string[]): Promise<number>;
19
24
  /**
20
25
  * Clear all stored data
21
26
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE7D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;OAEG;IACH,MAAM,CACJ,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAEjC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzB;;OAEG;IACH,aAAa,IAAI,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAuB,SAAQ,SAAS;IACvD,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,sBAAsB,EAAE,aAGpC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG7D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;OAEG;IACH,MAAM,CACJ,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAEjC;;;OAGG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAExD;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzB;;OAEG;IACH,aAAa,IAAI,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAuB,SAAQ,SAAS;IACvD,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,sBAAsB,EAAE,aAGpC,CAAC"}
@@ -1,8 +1,9 @@
1
1
  /**
2
2
  * Types for vector storage providers
3
3
  */
4
+ import { CODEBASE_CONTEXT_DIRNAME, VECTOR_DB_DIRNAME } from '../constants/codebase-context.js';
4
5
  export const DEFAULT_STORAGE_CONFIG = {
5
6
  provider: 'lancedb',
6
- path: '.codebase-index',
7
+ path: `${CODEBASE_CONTEXT_DIRNAME}/${VECTOR_DB_DIRNAME}`
7
8
  };
8
9
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyDH,MAAM,CAAC,MAAM,sBAAsB,GAAkB;IACnD,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,iBAAiB;CACxB,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/storage/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AA6D/F,MAAM,CAAC,MAAM,sBAAsB,GAAkB;IACnD,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,GAAG,wBAAwB,IAAI,iBAAiB,EAAE;CACzD,CAAC"}