@zilliz/claude-context-core 0.1.10 → 0.1.12
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/README.md +2 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/context.d.ts +28 -4
- package/dist/context.d.ts.map +1 -1
- package/dist/context.ignore-patterns.test.d.ts +2 -0
- package/dist/context.ignore-patterns.test.d.ts.map +1 -0
- package/dist/context.ignore-patterns.test.js +228 -0
- package/dist/context.ignore-patterns.test.js.map +1 -0
- package/dist/context.js +157 -59
- package/dist/context.js.map +1 -1
- package/dist/context.splitter.test.d.ts +2 -0
- package/dist/context.splitter.test.d.ts.map +1 -0
- package/dist/context.splitter.test.js +202 -0
- package/dist/context.splitter.test.js.map +1 -0
- package/dist/sync/synchronizer.d.ts +1 -0
- package/dist/sync/synchronizer.d.ts.map +1 -1
- package/dist/sync/synchronizer.js +32 -33
- package/dist/sync/synchronizer.js.map +1 -1
- package/dist/vectordb/__tests__/milvus-query-filter.test.d.ts +9 -0
- package/dist/vectordb/__tests__/milvus-query-filter.test.d.ts.map +1 -0
- package/dist/vectordb/__tests__/milvus-query-filter.test.js +90 -0
- package/dist/vectordb/__tests__/milvus-query-filter.test.js.map +1 -0
- package/package.json +3 -2
package/dist/context.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export declare class Context {
|
|
|
19
19
|
private vectorDatabase;
|
|
20
20
|
private codeSplitter;
|
|
21
21
|
private supportedExtensions;
|
|
22
|
+
private baseIgnorePatterns;
|
|
22
23
|
private ignorePatterns;
|
|
23
24
|
private collectionNameOverride?;
|
|
24
25
|
private warnedOverrideSanitization;
|
|
@@ -40,6 +41,11 @@ export declare class Context {
|
|
|
40
41
|
* Get supported extensions
|
|
41
42
|
*/
|
|
42
43
|
getSupportedExtensions(): string[];
|
|
44
|
+
/**
|
|
45
|
+
* Get supported extensions for the current operation without mutating
|
|
46
|
+
* the Context's persistent extension list.
|
|
47
|
+
*/
|
|
48
|
+
getEffectiveSupportedExtensions(additionalExtensions?: string[]): string[];
|
|
43
49
|
/**
|
|
44
50
|
* Get ignore patterns
|
|
45
51
|
*/
|
|
@@ -56,6 +62,11 @@ export declare class Context {
|
|
|
56
62
|
* Public wrapper for loadIgnorePatterns private method
|
|
57
63
|
*/
|
|
58
64
|
getLoadedIgnorePatterns(codebasePath: string): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Get the effective ignore patterns for a codebase without relying on
|
|
67
|
+
* codebase-specific patterns already stored on this Context instance.
|
|
68
|
+
*/
|
|
69
|
+
getEffectiveIgnorePatterns(codebasePath: string, additionalIgnorePatterns?: string[]): Promise<string[]>;
|
|
59
70
|
/**
|
|
60
71
|
* Public wrapper for prepareCollection private method
|
|
61
72
|
*/
|
|
@@ -75,6 +86,9 @@ export declare class Context {
|
|
|
75
86
|
* @param codebasePath Codebase root path
|
|
76
87
|
* @param progressCallback Optional progress callback function
|
|
77
88
|
* @param forceReindex Whether to recreate the collection even if it exists
|
|
89
|
+
* @param additionalIgnorePatterns Request-scoped ignore patterns
|
|
90
|
+
* @param additionalSupportedExtensions Request-scoped file extensions
|
|
91
|
+
* @param requestSplitter Request-scoped splitter for this indexing run
|
|
78
92
|
* @returns Indexing statistics
|
|
79
93
|
*/
|
|
80
94
|
indexCodebase(codebasePath: string, progressCallback?: (progress: {
|
|
@@ -82,7 +96,7 @@ export declare class Context {
|
|
|
82
96
|
current: number;
|
|
83
97
|
total: number;
|
|
84
98
|
percentage: number;
|
|
85
|
-
}) => void, forceReindex?: boolean): Promise<{
|
|
99
|
+
}) => void, forceReindex?: boolean, additionalIgnorePatterns?: string[], additionalSupportedExtensions?: string[], requestSplitter?: Splitter): Promise<{
|
|
86
100
|
indexedFiles: number;
|
|
87
101
|
totalChunks: number;
|
|
88
102
|
status: 'completed' | 'limit_reached';
|
|
@@ -92,7 +106,7 @@ export declare class Context {
|
|
|
92
106
|
current: number;
|
|
93
107
|
total: number;
|
|
94
108
|
percentage: number;
|
|
95
|
-
}) => void): Promise<{
|
|
109
|
+
}) => void, additionalIgnorePatterns?: string[], additionalSupportedExtensions?: string[], requestSplitter?: Splitter): Promise<{
|
|
96
110
|
added: number;
|
|
97
111
|
removed: number;
|
|
98
112
|
modified: number;
|
|
@@ -106,6 +120,11 @@ export declare class Context {
|
|
|
106
120
|
* @param threshold Similarity threshold
|
|
107
121
|
*/
|
|
108
122
|
semanticSearch(codebasePath: string, query: string, topK?: number, threshold?: number, filterExpr?: string): Promise<SemanticSearchResult[]>;
|
|
123
|
+
/**
|
|
124
|
+
* Deduplicate search results by file + line range overlap.
|
|
125
|
+
* Keeps higher-scored result when two results from the same file overlap >50%.
|
|
126
|
+
*/
|
|
127
|
+
private deduplicateResults;
|
|
109
128
|
/**
|
|
110
129
|
* Check if index exists for codebase
|
|
111
130
|
* @param codebasePath Codebase path to check
|
|
@@ -196,9 +215,11 @@ export declare class Context {
|
|
|
196
215
|
*/
|
|
197
216
|
static getIgnorePatternsFromFile(filePath: string): Promise<string[]>;
|
|
198
217
|
/**
|
|
199
|
-
* Load ignore patterns from various ignore files in the codebase
|
|
200
|
-
*
|
|
218
|
+
* Load ignore patterns from various ignore files in the codebase.
|
|
219
|
+
* Returns the effective patterns for the current codebase/request without
|
|
220
|
+
* allowing file-based patterns from previous codebases to leak forward.
|
|
201
221
|
* @param codebasePath Path to the codebase
|
|
222
|
+
* @param additionalIgnorePatterns Ignore patterns for the current request
|
|
202
223
|
*/
|
|
203
224
|
private loadIgnorePatterns;
|
|
204
225
|
/**
|
|
@@ -233,6 +254,7 @@ export declare class Context {
|
|
|
233
254
|
* @returns True if pattern matches
|
|
234
255
|
*/
|
|
235
256
|
private isPatternMatch;
|
|
257
|
+
private matchesDirectoryPattern;
|
|
236
258
|
/**
|
|
237
259
|
* Simple glob matching supporting * wildcard
|
|
238
260
|
* @param text Text to test
|
|
@@ -240,6 +262,7 @@ export declare class Context {
|
|
|
240
262
|
* @returns True if pattern matches
|
|
241
263
|
*/
|
|
242
264
|
private simpleGlobMatch;
|
|
265
|
+
private dedupePatterns;
|
|
243
266
|
/**
|
|
244
267
|
* Get custom extensions from environment variables
|
|
245
268
|
* Supports CUSTOM_EXTENSIONS as comma-separated list
|
|
@@ -252,6 +275,7 @@ export declare class Context {
|
|
|
252
275
|
* @returns Array of custom ignore patterns
|
|
253
276
|
*/
|
|
254
277
|
private getCustomIgnorePatternsFromEnv;
|
|
278
|
+
private normalizeExtensions;
|
|
255
279
|
/**
|
|
256
280
|
* Add custom extensions (from MCP or other sources) without replacing existing ones
|
|
257
281
|
* @param customExtensions Array of custom extensions to add
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,QAAQ,EAGX,MAAM,YAAY,CAAC;AACpB,OAAO,EACH,SAAS,EAGZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACH,cAAc,EAMjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAK/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAkEvD,MAAM,WAAW,aAAa;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,YAAY,CAAC,EAAE,QAAQ,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,qBAAa,OAAO;IAChB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAO;IAEzD,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,mBAAmB,CAAW;IACtC,OAAO,CAAC,cAAc,CAAW;IACjC,OAAO,CAAC,sBAAsB,CAAC,CAAS;IACxC,OAAO,CAAC,0BAA0B,CAAqB;IACvD,OAAO,CAAC,aAAa,CAAuC;gBAEhD,MAAM,GAAE,aAAkB;IAmDtC;;OAEG;IACH,YAAY,IAAI,SAAS;IAIzB;;OAEG;IACH,iBAAiB,IAAI,cAAc;IAInC;;OAEG;IACH,eAAe,IAAI,QAAQ;IAI3B;;OAEG;IACH,sBAAsB,IAAI,MAAM,EAAE;IAIlC;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAI7B;;OAEG;IACH,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAIjD;;OAEG;IACH,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,GAAG,IAAI;IAI7E;;OAEG;IACG,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlE;;OAEG;IACG,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACI,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAuBtD,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,4BAA4B;IAyBpC
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.ignore-patterns.test.d.ts","sourceRoot":"","sources":["../src/context.ignore-patterns.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const fs = __importStar(require("fs/promises"));
|
|
37
|
+
const os = __importStar(require("os"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const context_1 = require("./context");
|
|
40
|
+
const embedding_1 = require("./embedding");
|
|
41
|
+
const synchronizer_1 = require("./sync/synchronizer");
|
|
42
|
+
class TestEmbedding extends embedding_1.Embedding {
|
|
43
|
+
constructor() {
|
|
44
|
+
super(...arguments);
|
|
45
|
+
this.maxTokens = 8192;
|
|
46
|
+
}
|
|
47
|
+
async detectDimension() {
|
|
48
|
+
return 3;
|
|
49
|
+
}
|
|
50
|
+
async embed(text) {
|
|
51
|
+
return { vector: [1, 0, 0], dimension: 3 };
|
|
52
|
+
}
|
|
53
|
+
async embedBatch(texts) {
|
|
54
|
+
return texts.map(() => ({ vector: [1, 0, 0], dimension: 3 }));
|
|
55
|
+
}
|
|
56
|
+
getDimension() {
|
|
57
|
+
return 3;
|
|
58
|
+
}
|
|
59
|
+
getProvider() {
|
|
60
|
+
return 'test';
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
class TestSplitter {
|
|
64
|
+
async split(code, language, filePath) {
|
|
65
|
+
return [{
|
|
66
|
+
content: code,
|
|
67
|
+
metadata: {
|
|
68
|
+
startLine: 1,
|
|
69
|
+
endLine: 1,
|
|
70
|
+
language,
|
|
71
|
+
filePath,
|
|
72
|
+
},
|
|
73
|
+
}];
|
|
74
|
+
}
|
|
75
|
+
setChunkSize() { }
|
|
76
|
+
setChunkOverlap() { }
|
|
77
|
+
}
|
|
78
|
+
const createVectorDatabase = () => ({
|
|
79
|
+
createCollection: jest.fn().mockResolvedValue(undefined),
|
|
80
|
+
createHybridCollection: jest.fn().mockResolvedValue(undefined),
|
|
81
|
+
dropCollection: jest.fn().mockResolvedValue(undefined),
|
|
82
|
+
hasCollection: jest.fn().mockResolvedValue(false),
|
|
83
|
+
listCollections: jest.fn().mockResolvedValue([]),
|
|
84
|
+
insert: jest.fn().mockResolvedValue(undefined),
|
|
85
|
+
insertHybrid: jest.fn().mockResolvedValue(undefined),
|
|
86
|
+
search: jest.fn().mockResolvedValue([]),
|
|
87
|
+
hybridSearch: jest.fn().mockResolvedValue([]),
|
|
88
|
+
delete: jest.fn().mockResolvedValue(undefined),
|
|
89
|
+
query: jest.fn().mockResolvedValue([]),
|
|
90
|
+
getCollectionDescription: jest.fn().mockResolvedValue(''),
|
|
91
|
+
checkCollectionLimit: jest.fn().mockResolvedValue(true),
|
|
92
|
+
getCollectionRowCount: jest.fn().mockResolvedValue(0),
|
|
93
|
+
});
|
|
94
|
+
describe('Context ignore pattern isolation', () => {
|
|
95
|
+
let tempRoot;
|
|
96
|
+
let originalHome;
|
|
97
|
+
let originalHybridMode;
|
|
98
|
+
beforeEach(async () => {
|
|
99
|
+
tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'claude-context-ignore-'));
|
|
100
|
+
const homeDir = path.join(tempRoot, 'home');
|
|
101
|
+
await fs.mkdir(homeDir, { recursive: true });
|
|
102
|
+
originalHome = process.env.HOME;
|
|
103
|
+
originalHybridMode = process.env.HYBRID_MODE;
|
|
104
|
+
process.env.HOME = homeDir;
|
|
105
|
+
process.env.HYBRID_MODE = 'false';
|
|
106
|
+
});
|
|
107
|
+
afterEach(async () => {
|
|
108
|
+
if (originalHome === undefined) {
|
|
109
|
+
delete process.env.HOME;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
process.env.HOME = originalHome;
|
|
113
|
+
}
|
|
114
|
+
if (originalHybridMode === undefined) {
|
|
115
|
+
delete process.env.HYBRID_MODE;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
process.env.HYBRID_MODE = originalHybridMode;
|
|
119
|
+
}
|
|
120
|
+
await fs.rm(tempRoot, { recursive: true, force: true });
|
|
121
|
+
});
|
|
122
|
+
it('does not leak file-based ignore patterns between codebases', async () => {
|
|
123
|
+
const projectA = path.join(tempRoot, 'project-a');
|
|
124
|
+
const projectB = path.join(tempRoot, 'project-b');
|
|
125
|
+
await fs.mkdir(projectA);
|
|
126
|
+
await fs.mkdir(projectB);
|
|
127
|
+
await fs.writeFile(path.join(projectA, '.contextignore'), '*.md\n');
|
|
128
|
+
const context = new context_1.Context({ vectorDatabase: createVectorDatabase() });
|
|
129
|
+
const projectAIgnores = await context.getEffectiveIgnorePatterns(projectA);
|
|
130
|
+
expect(projectAIgnores).toContain('*.md');
|
|
131
|
+
const projectBIgnores = await context.getEffectiveIgnorePatterns(projectB);
|
|
132
|
+
expect(projectBIgnores).not.toContain('*.md');
|
|
133
|
+
});
|
|
134
|
+
it('does not leak request ignore patterns between calls', async () => {
|
|
135
|
+
const project = path.join(tempRoot, 'project');
|
|
136
|
+
await fs.mkdir(project);
|
|
137
|
+
const context = new context_1.Context({ vectorDatabase: createVectorDatabase() });
|
|
138
|
+
const withRequestIgnores = await context.getEffectiveIgnorePatterns(project, ['*.txt']);
|
|
139
|
+
expect(withRequestIgnores).toContain('*.txt');
|
|
140
|
+
const withoutRequestIgnores = await context.getEffectiveIgnorePatterns(project);
|
|
141
|
+
expect(withoutRequestIgnores).not.toContain('*.txt');
|
|
142
|
+
});
|
|
143
|
+
it('does not leak request custom extensions into persistent supported extensions', () => {
|
|
144
|
+
const context = new context_1.Context({ vectorDatabase: createVectorDatabase() });
|
|
145
|
+
const withRequestExtensions = context.getEffectiveSupportedExtensions(['foo']);
|
|
146
|
+
expect(withRequestExtensions).toContain('.foo');
|
|
147
|
+
const withoutRequestExtensions = context.getSupportedExtensions();
|
|
148
|
+
expect(withoutRequestExtensions).not.toContain('.foo');
|
|
149
|
+
});
|
|
150
|
+
it('does not leak request custom extensions between codebase indexes', async () => {
|
|
151
|
+
const projectA = path.join(tempRoot, 'project-a');
|
|
152
|
+
const projectB = path.join(tempRoot, 'project-b');
|
|
153
|
+
await fs.mkdir(projectA);
|
|
154
|
+
await fs.mkdir(projectB);
|
|
155
|
+
await fs.writeFile(path.join(projectA, 'a.foo'), 'project a custom file');
|
|
156
|
+
await fs.writeFile(path.join(projectB, 'b.foo'), 'project b custom file');
|
|
157
|
+
const vectorDatabase = createVectorDatabase();
|
|
158
|
+
const context = new context_1.Context({
|
|
159
|
+
embedding: new TestEmbedding(),
|
|
160
|
+
vectorDatabase,
|
|
161
|
+
codeSplitter: new TestSplitter(),
|
|
162
|
+
});
|
|
163
|
+
await context.indexCodebase(projectA, undefined, false, [], ['foo']);
|
|
164
|
+
expect(vectorDatabase.insert).toHaveBeenCalledTimes(1);
|
|
165
|
+
expect(vectorDatabase.insert.mock.calls[0][1][0].relativePath).toBe('a.foo');
|
|
166
|
+
vectorDatabase.insert.mockClear();
|
|
167
|
+
await context.indexCodebase(projectB);
|
|
168
|
+
expect(vectorDatabase.insert).not.toHaveBeenCalled();
|
|
169
|
+
});
|
|
170
|
+
it('uses request options when recreating a synchronizer for change indexing', async () => {
|
|
171
|
+
const project = path.join(tempRoot, 'project-with-options');
|
|
172
|
+
await fs.mkdir(project);
|
|
173
|
+
await fs.writeFile(path.join(project, 'custom.foo'), 'custom extension file');
|
|
174
|
+
await fs.writeFile(path.join(project, 'ignored.ts'), 'ignored by request pattern');
|
|
175
|
+
const context = new context_1.Context({ vectorDatabase: createVectorDatabase() });
|
|
176
|
+
try {
|
|
177
|
+
await context.reindexByChange(project, undefined, ['*.ts'], ['foo']);
|
|
178
|
+
const collectionName = context.getCollectionName(project);
|
|
179
|
+
const synchronizer = context.getSynchronizers().get(collectionName);
|
|
180
|
+
expect(synchronizer).toBeDefined();
|
|
181
|
+
expect(synchronizer?.getFileHash('custom.foo')).toBeDefined();
|
|
182
|
+
expect(synchronizer?.getFileHash('ignored.ts')).toBeUndefined();
|
|
183
|
+
expect(context.getSupportedExtensions()).not.toContain('.foo');
|
|
184
|
+
}
|
|
185
|
+
finally {
|
|
186
|
+
await synchronizer_1.FileSynchronizer.deleteSnapshot(project);
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
it('treats leading-slash directory ignore patterns as root-anchored and recursive during indexing', async () => {
|
|
190
|
+
const project = path.join(tempRoot, 'project');
|
|
191
|
+
await fs.mkdir(path.join(project, 'Library'), { recursive: true });
|
|
192
|
+
await fs.mkdir(path.join(project, 'src', 'Library'), { recursive: true });
|
|
193
|
+
await fs.writeFile(path.join(project, '.gitignore'), '/Library/\n');
|
|
194
|
+
await fs.writeFile(path.join(project, 'Library', 'generated.md'), 'root library should be ignored');
|
|
195
|
+
await fs.writeFile(path.join(project, 'src', 'Library', 'nested.md'), 'nested library should stay');
|
|
196
|
+
await fs.writeFile(path.join(project, 'src', 'keep.md'), 'regular file should stay');
|
|
197
|
+
const vectorDatabase = createVectorDatabase();
|
|
198
|
+
const context = new context_1.Context({
|
|
199
|
+
embedding: new TestEmbedding(),
|
|
200
|
+
vectorDatabase,
|
|
201
|
+
codeSplitter: new TestSplitter(),
|
|
202
|
+
});
|
|
203
|
+
await context.indexCodebase(project);
|
|
204
|
+
const insertedDocuments = vectorDatabase.insert.mock.calls
|
|
205
|
+
.flatMap(([, documents]) => documents);
|
|
206
|
+
const indexedPaths = insertedDocuments
|
|
207
|
+
.map(document => document.relativePath.replace(/\\/g, '/'))
|
|
208
|
+
.sort();
|
|
209
|
+
expect(indexedPaths).toEqual([
|
|
210
|
+
'src/Library/nested.md',
|
|
211
|
+
'src/keep.md',
|
|
212
|
+
]);
|
|
213
|
+
});
|
|
214
|
+
it('treats leading-slash directory ignore patterns as root-anchored and recursive during sync', async () => {
|
|
215
|
+
const project = path.join(tempRoot, 'project');
|
|
216
|
+
await fs.mkdir(path.join(project, 'Library'), { recursive: true });
|
|
217
|
+
await fs.mkdir(path.join(project, 'src', 'Library'), { recursive: true });
|
|
218
|
+
await fs.writeFile(path.join(project, 'Library', 'generated.md'), 'root library should be ignored');
|
|
219
|
+
await fs.writeFile(path.join(project, 'src', 'Library', 'nested.md'), 'nested library should stay');
|
|
220
|
+
await fs.writeFile(path.join(project, 'src', 'keep.md'), 'regular file should stay');
|
|
221
|
+
const synchronizer = new synchronizer_1.FileSynchronizer(project, ['/Library/'], ['.md']);
|
|
222
|
+
const fileHashes = await synchronizer.generateFileHashes(project);
|
|
223
|
+
expect(fileHashes.has(path.join('Library', 'generated.md'))).toBe(false);
|
|
224
|
+
expect(fileHashes.has(path.join('src', 'Library', 'nested.md'))).toBe(true);
|
|
225
|
+
expect(fileHashes.has(path.join('src', 'keep.md'))).toBe(true);
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
//# sourceMappingURL=context.ignore-patterns.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.ignore-patterns.test.js","sourceRoot":"","sources":["../src/context.ignore-patterns.test.ts"],"names":[],"mappings":"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"}
|