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.
- package/LICENSE +21 -21
- package/README.md +292 -87
- package/dist/analyzers/angular/index.d.ts +1 -1
- package/dist/analyzers/angular/index.d.ts.map +1 -1
- package/dist/analyzers/angular/index.js +298 -309
- package/dist/analyzers/angular/index.js.map +1 -1
- package/dist/analyzers/generic/index.d.ts +1 -2
- package/dist/analyzers/generic/index.d.ts.map +1 -1
- package/dist/analyzers/generic/index.js +93 -60
- package/dist/analyzers/generic/index.js.map +1 -1
- package/dist/constants/codebase-context.d.ts +8 -0
- package/dist/constants/codebase-context.d.ts.map +1 -0
- package/dist/constants/codebase-context.js +10 -0
- package/dist/constants/codebase-context.js.map +1 -0
- package/dist/constants/git-patterns.d.ts +12 -0
- package/dist/constants/git-patterns.d.ts.map +1 -0
- package/dist/constants/git-patterns.js +11 -0
- package/dist/constants/git-patterns.js.map +1 -0
- package/dist/core/analyzer-registry.d.ts.map +1 -1
- package/dist/core/analyzer-registry.js +8 -8
- package/dist/core/analyzer-registry.js.map +1 -1
- package/dist/core/indexer.d.ts +11 -1
- package/dist/core/indexer.d.ts.map +1 -1
- package/dist/core/indexer.js +359 -157
- package/dist/core/indexer.js.map +1 -1
- package/dist/core/manifest.d.ts +39 -0
- package/dist/core/manifest.d.ts.map +1 -0
- package/dist/core/manifest.js +86 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/search-quality.d.ts +10 -0
- package/dist/core/search-quality.d.ts.map +1 -0
- package/dist/core/search-quality.js +64 -0
- package/dist/core/search-quality.js.map +1 -0
- package/dist/core/search.d.ts +17 -1
- package/dist/core/search.d.ts.map +1 -1
- package/dist/core/search.js +303 -104
- package/dist/core/search.js.map +1 -1
- package/dist/embeddings/openai.d.ts.map +1 -1
- package/dist/embeddings/openai.js +2 -2
- package/dist/embeddings/openai.js.map +1 -1
- package/dist/embeddings/transformers.d.ts +1 -1
- package/dist/embeddings/transformers.d.ts.map +1 -1
- package/dist/embeddings/transformers.js +19 -15
- package/dist/embeddings/transformers.js.map +1 -1
- package/dist/embeddings/types.d.ts +1 -1
- package/dist/embeddings/types.d.ts.map +1 -1
- package/dist/embeddings/types.js +3 -3
- package/dist/embeddings/types.js.map +1 -1
- package/dist/errors/index.d.ts +8 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +11 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +7 -29
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1125 -362
- package/dist/index.js.map +1 -1
- package/dist/lib.d.ts +18 -18
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +23 -23
- package/dist/lib.js.map +1 -1
- package/dist/memory/git-memory.d.ts +9 -0
- package/dist/memory/git-memory.d.ts.map +1 -0
- package/dist/memory/git-memory.js +51 -0
- package/dist/memory/git-memory.js.map +1 -0
- package/dist/memory/store.d.ts +38 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +136 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/patterns/semantics.d.ts +4 -0
- package/dist/patterns/semantics.d.ts.map +1 -0
- package/dist/patterns/semantics.js +24 -0
- package/dist/patterns/semantics.js.map +1 -0
- package/dist/preflight/evidence-lock.d.ts +50 -0
- package/dist/preflight/evidence-lock.d.ts.map +1 -0
- package/dist/preflight/evidence-lock.js +130 -0
- package/dist/preflight/evidence-lock.js.map +1 -0
- package/dist/preflight/query-scope.d.ts +3 -0
- package/dist/preflight/query-scope.d.ts.map +1 -0
- package/dist/preflight/query-scope.js +40 -0
- package/dist/preflight/query-scope.js.map +1 -0
- package/dist/resources/uri.d.ts +5 -0
- package/dist/resources/uri.d.ts.map +1 -0
- package/dist/resources/uri.js +15 -0
- package/dist/resources/uri.js.map +1 -0
- package/dist/storage/lancedb.d.ts +1 -0
- package/dist/storage/lancedb.d.ts.map +1 -1
- package/dist/storage/lancedb.js +51 -34
- package/dist/storage/lancedb.js.map +1 -1
- package/dist/storage/types.d.ts +5 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/types.js +2 -1
- package/dist/storage/types.js.map +1 -1
- package/dist/types/index.d.ts +47 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/utils/chunking.d.ts.map +1 -1
- package/dist/utils/chunking.js +10 -9
- package/dist/utils/chunking.js.map +1 -1
- package/dist/utils/dependency-detection.d.ts +18 -0
- package/dist/utils/dependency-detection.d.ts.map +1 -0
- package/dist/utils/dependency-detection.js +102 -0
- package/dist/utils/dependency-detection.js.map +1 -0
- package/dist/utils/git-dates.d.ts +1 -0
- package/dist/utils/git-dates.d.ts.map +1 -1
- package/dist/utils/git-dates.js +23 -3
- package/dist/utils/git-dates.js.map +1 -1
- package/dist/utils/language-detection.d.ts.map +1 -1
- package/dist/utils/language-detection.js +69 -17
- package/dist/utils/language-detection.js.map +1 -1
- package/dist/utils/usage-tracker.d.ts +2 -2
- package/dist/utils/usage-tracker.d.ts.map +1 -1
- package/dist/utils/usage-tracker.js +67 -38
- package/dist/utils/usage-tracker.js.map +1 -1
- package/dist/utils/workspace-detection.d.ts +32 -0
- package/dist/utils/workspace-detection.d.ts.map +1 -0
- package/dist/utils/workspace-detection.js +107 -0
- package/dist/utils/workspace-detection.js.map +1 -0
- package/package.json +122 -97
- package/dist/core/file-watcher.d.ts +0 -63
- package/dist/core/file-watcher.d.ts.map +0 -1
- package/dist/core/file-watcher.js +0 -210
- package/dist/core/file-watcher.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -36
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -111
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/pattern-detector.d.ts +0 -41
- package/dist/utils/pattern-detector.d.ts.map +0 -1
- package/dist/utils/pattern-detector.js +0 -101
- 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 @@
|
|
|
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 @@
|
|
|
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":"
|
|
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"}
|
package/dist/storage/lancedb.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
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), //
|
|
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
|
-
|
|
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
|
-
|
|
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":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"lancedb.js","sourceRoot":"","sources":["../../src/storage/lancedb.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/types.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/storage/types.js
CHANGED
|
@@ -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:
|
|
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;
|
|
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"}
|