opencode-rag-plugin 1.12.5 → 1.12.9

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 (70) hide show
  1. package/dist/cli.js +59 -1
  2. package/dist/cli.js.map +1 -1
  3. package/dist/content/doc.d.ts +3 -0
  4. package/dist/content/doc.js +12 -0
  5. package/dist/content/doc.js.map +1 -0
  6. package/dist/content/docx.d.ts +3 -0
  7. package/dist/content/docx.js +12 -0
  8. package/dist/content/docx.js.map +1 -0
  9. package/dist/content/excel.d.ts +3 -0
  10. package/dist/content/excel.js +12 -0
  11. package/dist/content/excel.js.map +1 -0
  12. package/dist/content/image.d.ts +5 -0
  13. package/dist/content/image.js +24 -0
  14. package/dist/content/image.js.map +1 -0
  15. package/dist/content/pdf.d.ts +3 -0
  16. package/dist/content/pdf.js +12 -0
  17. package/dist/content/pdf.js.map +1 -0
  18. package/dist/content/reader.d.ts +18 -0
  19. package/dist/content/reader.js +104 -0
  20. package/dist/content/reader.js.map +1 -0
  21. package/dist/content/types.d.ts +5 -0
  22. package/dist/content/types.js +2 -0
  23. package/dist/content/types.js.map +1 -0
  24. package/dist/core/bootstrap.js +2 -2
  25. package/dist/core/bootstrap.js.map +1 -1
  26. package/dist/core/config.d.ts +5 -0
  27. package/dist/core/config.js +9 -1
  28. package/dist/core/config.js.map +1 -1
  29. package/dist/eval/run-token-test.js +2 -2
  30. package/dist/eval/run-token-test.js.map +1 -1
  31. package/dist/index.d.ts +2 -0
  32. package/dist/index.js +2 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/indexer/description-stage.d.ts +14 -0
  35. package/dist/indexer/description-stage.js +46 -0
  36. package/dist/indexer/description-stage.js.map +1 -0
  37. package/dist/indexer/embed-stage.d.ts +8 -0
  38. package/dist/indexer/embed-stage.js +34 -0
  39. package/dist/indexer/embed-stage.js.map +1 -0
  40. package/dist/indexer/metadata.d.ts +1 -0
  41. package/dist/indexer/metadata.js +99 -0
  42. package/dist/indexer/metadata.js.map +1 -0
  43. package/dist/indexer/pipeline.d.ts +22 -0
  44. package/dist/indexer/pipeline.js +179 -0
  45. package/dist/indexer/pipeline.js.map +1 -0
  46. package/dist/indexer/stats.d.ts +29 -0
  47. package/dist/indexer/stats.js +20 -0
  48. package/dist/indexer/stats.js.map +1 -0
  49. package/dist/indexer/watch.d.ts +8 -0
  50. package/dist/indexer/watch.js +95 -0
  51. package/dist/indexer/watch.js.map +1 -0
  52. package/dist/indexer/worker.d.ts +36 -0
  53. package/dist/indexer/worker.js +151 -0
  54. package/dist/indexer/worker.js.map +1 -0
  55. package/dist/indexer.d.ts +7 -54
  56. package/dist/indexer.js +5 -626
  57. package/dist/indexer.js.map +1 -1
  58. package/dist/plugin.d.ts +1 -1
  59. package/dist/plugin.js +37 -5
  60. package/dist/plugin.js.map +1 -1
  61. package/dist/updater.d.ts +19 -0
  62. package/dist/updater.js +132 -0
  63. package/dist/updater.js.map +1 -0
  64. package/dist/vectorstore/factory.d.ts +3 -0
  65. package/dist/vectorstore/factory.js +13 -0
  66. package/dist/vectorstore/factory.js.map +1 -0
  67. package/dist/vectorstore/memory.d.ts +9 -0
  68. package/dist/vectorstore/memory.js +41 -0
  69. package/dist/vectorstore/memory.js.map +1 -0
  70. package/package.json +4 -4
@@ -0,0 +1,179 @@
1
+ import pLimit from "p-limit";
2
+ import { scanWorkspaceFiles } from "../content/reader.js";
3
+ import { loadManifest, saveManifest } from "../core/manifest.js";
4
+ import { createIndexStats } from "./stats.js";
5
+ import { processFile } from "./worker.js";
6
+ export { createWatchPassScheduler, createWatchIgnore } from "./watch.js";
7
+ function createLogger(logger) {
8
+ return {
9
+ info: logger?.info ?? (() => { }),
10
+ warn: logger?.warn ?? (() => { }),
11
+ };
12
+ }
13
+ export async function runIndexPass(options) {
14
+ const logger = createLogger(options.logger);
15
+ const workspaceFiles = await scanWorkspaceFiles(options.cwd, options.config, logger);
16
+ const loadResult = await loadManifest(options.storePath);
17
+ const manifest = loadResult.manifest;
18
+ let manifestStatus = loadResult.status;
19
+ let rebuildPerformed = false;
20
+ const existingCount = await options.store.count();
21
+ if (options.force || (manifestStatus !== "ok" && existingCount > 0)) {
22
+ await options.store.clear();
23
+ options.keywordIndex?.clear();
24
+ for (const key of Object.keys(manifest.files)) {
25
+ delete manifest.files[key];
26
+ }
27
+ manifest.lastIndexedAt = undefined;
28
+ rebuildPerformed = existingCount > 0 || Boolean(options.force);
29
+ if (manifestStatus !== "ok" && existingCount > 0) {
30
+ logger.warn("Manifest missing or corrupt; rebuilding full index.");
31
+ }
32
+ manifestStatus = options.force ? "missing" : manifestStatus;
33
+ }
34
+ const stats = createIndexStats(workspaceFiles.length, manifestStatus);
35
+ stats.rebuildPerformed = rebuildPerformed;
36
+ for (const file of workspaceFiles) {
37
+ if (file.extractionStatus === "failed" && file.extractionError) {
38
+ stats.extractionFailures++;
39
+ stats.extractionErrors.push({
40
+ filePath: file.filePath,
41
+ error: file.extractionError,
42
+ });
43
+ }
44
+ }
45
+ const currentPaths = new Set(workspaceFiles.map((file) => file.normalizedPath));
46
+ for (const indexedPath of Object.keys(manifest.files)) {
47
+ if (!currentPaths.has(indexedPath)) {
48
+ await options.store.deleteByFilePath(indexedPath);
49
+ options.keywordIndex?.removeByFilePath(indexedPath);
50
+ delete manifest.files[indexedPath];
51
+ stats.deletedFiles++;
52
+ }
53
+ }
54
+ let newCount = 0;
55
+ let modifiedCount = 0;
56
+ let unchangedCount = 0;
57
+ for (const file of workspaceFiles) {
58
+ const previous = manifest.files[file.normalizedPath];
59
+ if (file.isEmpty || file.isTooSmall)
60
+ continue;
61
+ if (previous && previous.hash === file.hash) {
62
+ unchangedCount++;
63
+ }
64
+ else if (previous) {
65
+ modifiedCount++;
66
+ }
67
+ else {
68
+ newCount++;
69
+ }
70
+ }
71
+ logger.info(`Processing ${workspaceFiles.length} files (${newCount} new, ${modifiedCount} modified, ${unchangedCount} unchanged)...`);
72
+ const limit = pLimit(options.config.indexing.concurrency);
73
+ let completed = 0;
74
+ const total = workspaceFiles.length;
75
+ const workerResults = await Promise.all(workspaceFiles.map((file) => limit(async () => {
76
+ const result = await processFile(file, options.cwd, manifest.files[file.normalizedPath], options.config, options.store, options.keywordIndex, options.embedder, options.descriptionProvider, logger);
77
+ completed++;
78
+ if (total > 20 && completed % 50 === 0) {
79
+ logger.info(` Processing file ${completed}/${total}...`);
80
+ }
81
+ return result;
82
+ })));
83
+ aggregateStats(stats, workerResults, manifest);
84
+ manifest.lastIndexedAt = Date.now();
85
+ await saveManifest(options.storePath, manifest);
86
+ await options.keywordIndex?.save(options.storePath);
87
+ stats.finalCount = await options.store.count();
88
+ return stats;
89
+ }
90
+ function aggregateStats(stats, results, manifest) {
91
+ for (const result of results) {
92
+ if (result.isEmpty) {
93
+ stats.skippedEmptyFiles++;
94
+ if (result.isRemoved) {
95
+ delete manifest.files[result.normalizedPath];
96
+ stats.removedFiles++;
97
+ }
98
+ continue;
99
+ }
100
+ if (result.isTooSmall) {
101
+ stats.skippedSmallFiles++;
102
+ if (result.isRemoved) {
103
+ delete manifest.files[result.normalizedPath];
104
+ stats.removedFiles++;
105
+ }
106
+ continue;
107
+ }
108
+ if (result.isUnchanged) {
109
+ stats.unchangedFiles++;
110
+ continue;
111
+ }
112
+ if (result.isRemoved) {
113
+ delete manifest.files[result.normalizedPath];
114
+ stats.removedFiles++;
115
+ continue;
116
+ }
117
+ if (result.isModified) {
118
+ stats.modifiedFiles++;
119
+ }
120
+ else if (result.isNew) {
121
+ stats.newFiles++;
122
+ }
123
+ if (result.chunkCount > 0) {
124
+ manifest.files[result.normalizedPath] = {
125
+ hash: result.hash,
126
+ chunkCount: result.chunkCount,
127
+ indexedAt: Date.now(),
128
+ };
129
+ stats.totalChunks += result.chunkCount;
130
+ stats.batchesFlushed++;
131
+ }
132
+ }
133
+ }
134
+ export async function getIndexStatusSummary(cwd, storePath, config, store) {
135
+ const workspaceFiles = await scanWorkspaceFiles(cwd, config);
136
+ const loadResult = await loadManifest(storePath);
137
+ const storeCount = await store.count();
138
+ if (loadResult.status !== "ok") {
139
+ return {
140
+ manifestStatus: loadResult.status,
141
+ manifestEntries: 0,
142
+ upToDateFiles: 0,
143
+ pendingFiles: workspaceFiles.length,
144
+ rebuildRequired: storeCount > 0,
145
+ };
146
+ }
147
+ const manifest = loadResult.manifest;
148
+ const currentPaths = new Set(workspaceFiles.map((file) => file.normalizedPath));
149
+ let upToDateFiles = 0;
150
+ let pendingFiles = 0;
151
+ for (const file of workspaceFiles) {
152
+ const previous = manifest.files[file.normalizedPath];
153
+ if (file.isEmpty || file.isTooSmall) {
154
+ if (previous)
155
+ pendingFiles++;
156
+ continue;
157
+ }
158
+ if (previous && previous.hash === file.hash) {
159
+ upToDateFiles++;
160
+ }
161
+ else {
162
+ pendingFiles++;
163
+ }
164
+ }
165
+ for (const indexedPath of Object.keys(manifest.files)) {
166
+ if (!currentPaths.has(indexedPath)) {
167
+ pendingFiles++;
168
+ }
169
+ }
170
+ return {
171
+ manifestStatus: loadResult.status,
172
+ manifestEntries: Object.keys(manifest.files).length,
173
+ upToDateFiles,
174
+ pendingFiles,
175
+ lastIndexedAt: manifest.lastIndexedAt,
176
+ rebuildRequired: false,
177
+ };
178
+ }
179
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/indexer/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export interface IndexRunStats {
2
+ totalFiles: number;
3
+ newFiles: number;
4
+ modifiedFiles: number;
5
+ unchangedFiles: number;
6
+ deletedFiles: number;
7
+ removedFiles: number;
8
+ skippedEmptyFiles: number;
9
+ skippedSmallFiles: number;
10
+ totalChunks: number;
11
+ finalCount: number;
12
+ manifestStatus: "ok" | "missing" | "corrupt";
13
+ rebuildPerformed: boolean;
14
+ batchesFlushed: number;
15
+ extractionFailures: number;
16
+ extractionErrors: Array<{
17
+ filePath: string;
18
+ error: string;
19
+ }>;
20
+ }
21
+ export interface IndexStatusSummary {
22
+ manifestStatus: "ok" | "missing" | "corrupt";
23
+ manifestEntries: number;
24
+ upToDateFiles: number;
25
+ pendingFiles: number;
26
+ lastIndexedAt?: number;
27
+ rebuildRequired: boolean;
28
+ }
29
+ export declare function createIndexStats(totalFiles: number, manifestStatus: IndexRunStats["manifestStatus"]): IndexRunStats;
@@ -0,0 +1,20 @@
1
+ export function createIndexStats(totalFiles, manifestStatus) {
2
+ return {
3
+ totalFiles,
4
+ newFiles: 0,
5
+ modifiedFiles: 0,
6
+ unchangedFiles: 0,
7
+ deletedFiles: 0,
8
+ removedFiles: 0,
9
+ skippedEmptyFiles: 0,
10
+ skippedSmallFiles: 0,
11
+ totalChunks: 0,
12
+ finalCount: 0,
13
+ manifestStatus,
14
+ rebuildPerformed: false,
15
+ batchesFlushed: 0,
16
+ extractionFailures: 0,
17
+ extractionErrors: [],
18
+ };
19
+ }
20
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/indexer/stats.ts"],"names":[],"mappings":"AA2BA,MAAM,UAAU,gBAAgB,CAC9B,UAAkB,EAClB,cAA+C;IAE/C,OAAO;QACL,UAAU;QACV,QAAQ,EAAE,CAAC;QACX,aAAa,EAAE,CAAC;QAChB,cAAc,EAAE,CAAC;QACjB,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,CAAC;QACf,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,CAAC;QACpB,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,CAAC;QACb,cAAc;QACd,gBAAgB,EAAE,KAAK;QACvB,cAAc,EAAE,CAAC;QACjB,kBAAkB,EAAE,CAAC;QACrB,gBAAgB,EAAE,EAAE;KACrB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { RagConfig } from "../core/config.js";
2
+ export interface WatchPassScheduler {
3
+ notifyChange(): void;
4
+ waitForIdle(): Promise<void>;
5
+ close(): void;
6
+ }
7
+ export declare function createWatchPassScheduler(runPass: () => Promise<void>, onError: (error: unknown) => void, debounceMs?: number): WatchPassScheduler;
8
+ export declare function createWatchIgnore(cwd: string, config: RagConfig, storePath: string): (watchedPath: string) => boolean;
@@ -0,0 +1,95 @@
1
+ import path from "node:path";
2
+ import { manifestPathFor } from "../core/manifest.js";
3
+ export function createWatchPassScheduler(runPass, onError, debounceMs = 300) {
4
+ let timer = null;
5
+ let running = false;
6
+ let rerunRequested = false;
7
+ let closed = false;
8
+ const waiters = [];
9
+ function resolveWaiters() {
10
+ if (running || timer || rerunRequested)
11
+ return;
12
+ while (waiters.length > 0) {
13
+ waiters.shift()?.();
14
+ }
15
+ }
16
+ function schedule() {
17
+ if (closed)
18
+ return;
19
+ if (timer)
20
+ clearTimeout(timer);
21
+ timer = setTimeout(() => {
22
+ timer = null;
23
+ void execute();
24
+ }, debounceMs);
25
+ }
26
+ async function execute() {
27
+ if (closed)
28
+ return;
29
+ if (running) {
30
+ rerunRequested = true;
31
+ return;
32
+ }
33
+ running = true;
34
+ try {
35
+ await runPass();
36
+ }
37
+ catch (error) {
38
+ onError(error);
39
+ }
40
+ finally {
41
+ running = false;
42
+ if (rerunRequested) {
43
+ rerunRequested = false;
44
+ schedule();
45
+ }
46
+ else {
47
+ resolveWaiters();
48
+ }
49
+ }
50
+ }
51
+ return {
52
+ notifyChange() {
53
+ if (closed)
54
+ return;
55
+ if (running) {
56
+ rerunRequested = true;
57
+ return;
58
+ }
59
+ schedule();
60
+ },
61
+ waitForIdle() {
62
+ if (!running && !timer && !rerunRequested) {
63
+ return Promise.resolve();
64
+ }
65
+ return new Promise((resolve) => {
66
+ waiters.push(resolve);
67
+ });
68
+ },
69
+ close() {
70
+ closed = true;
71
+ if (timer) {
72
+ clearTimeout(timer);
73
+ timer = null;
74
+ }
75
+ resolveWaiters();
76
+ },
77
+ };
78
+ }
79
+ export function createWatchIgnore(cwd, config, storePath) {
80
+ const manifestPath = manifestPathFor(storePath);
81
+ const excludeDirs = new Set(config.indexing.excludeDirs);
82
+ return (watchedPath) => {
83
+ const resolved = path.resolve(watchedPath);
84
+ if (resolved.startsWith(storePath))
85
+ return true;
86
+ if (resolved === manifestPath)
87
+ return true;
88
+ const relative = path.relative(cwd, resolved);
89
+ if (!relative || relative.startsWith(".."))
90
+ return false;
91
+ const segments = relative.split(path.sep);
92
+ return segments.some((segment) => excludeDirs.has(segment));
93
+ };
94
+ }
95
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/indexer/watch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { WorkspaceFile } from "../content/reader.js";
2
+ import type { DescriptionProvider, EmbeddingProvider, KeywordIndex, VectorStore } from "../core/interfaces.js";
3
+ export interface WorkerResult {
4
+ normalizedPath: string;
5
+ hash: string;
6
+ chunkCount: number;
7
+ fileLabel: string;
8
+ isNew: boolean;
9
+ isModified: boolean;
10
+ isUnchanged: boolean;
11
+ isEmpty: boolean;
12
+ isTooSmall: boolean;
13
+ isRemoved: boolean;
14
+ hadChunks: boolean;
15
+ }
16
+ interface Logger {
17
+ info(message: string): void;
18
+ warn(message: string): void;
19
+ }
20
+ interface ManifestFile {
21
+ hash: string;
22
+ chunkCount: number;
23
+ indexedAt?: number;
24
+ }
25
+ export declare function processFile(file: WorkspaceFile, cwd: string, previous: ManifestFile | undefined, config: {
26
+ embedding: {
27
+ documentPrefix?: string;
28
+ };
29
+ indexing: {
30
+ embedBatchSize: number;
31
+ };
32
+ chunking?: {
33
+ nodeTypes?: Record<string, string[]>;
34
+ };
35
+ }, store: VectorStore, keywordIndex: KeywordIndex | undefined, embedder: EmbeddingProvider, descriptionProvider: DescriptionProvider | undefined, logger: Logger): Promise<WorkerResult>;
36
+ export {};
@@ -0,0 +1,151 @@
1
+ import path from "node:path";
2
+ import { chunkFile } from "../chunker/factory.js";
3
+ import { uuid } from "../chunker/uuid.js";
4
+ import { isImageFile } from "../content/image.js";
5
+ import { buildFileMetadataHeader } from "./metadata.js";
6
+ import { generateDescriptions, buildFallbackDescription } from "./description-stage.js";
7
+ export async function processFile(file, cwd, previous, config, store, keywordIndex, embedder, descriptionProvider, logger) {
8
+ const fileLabel = path.relative(cwd, file.filePath);
9
+ if (file.isEmpty) {
10
+ if (previous) {
11
+ await store.deleteByFilePath(file.normalizedPath);
12
+ keywordIndex?.removeByFilePath(file.normalizedPath);
13
+ logger.info(` ${fileLabel} (empty, removed from index)`);
14
+ return { normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel, isNew: false, isModified: false, isUnchanged: false, isEmpty: true, isTooSmall: false, isRemoved: true, hadChunks: false };
15
+ }
16
+ logger.info(` ${fileLabel} (empty, skipped)`);
17
+ return { normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel, isNew: false, isModified: false, isUnchanged: false, isEmpty: true, isTooSmall: false, isRemoved: false, hadChunks: false };
18
+ }
19
+ if (file.isTooSmall) {
20
+ if (previous) {
21
+ await store.deleteByFilePath(file.normalizedPath);
22
+ keywordIndex?.removeByFilePath(file.normalizedPath);
23
+ logger.info(` ${fileLabel} (too small, removed from index)`);
24
+ return { normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel, isNew: false, isModified: false, isUnchanged: false, isEmpty: false, isTooSmall: true, isRemoved: true, hadChunks: false };
25
+ }
26
+ logger.info(` ${fileLabel} (too small, skipped)`);
27
+ return { normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel, isNew: false, isModified: false, isUnchanged: false, isEmpty: false, isTooSmall: true, isRemoved: false, hadChunks: false };
28
+ }
29
+ if (previous && previous.hash === file.hash) {
30
+ logger.info(` ${fileLabel} (unchanged)`);
31
+ return { normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel, isNew: false, isModified: false, isUnchanged: true, isEmpty: false, isTooSmall: false, isRemoved: false, hadChunks: false };
32
+ }
33
+ let isModified = false;
34
+ if (previous) {
35
+ await store.deleteByFilePath(file.normalizedPath);
36
+ keywordIndex?.removeByFilePath(file.normalizedPath);
37
+ isModified = true;
38
+ }
39
+ let chunks;
40
+ if (isImageFile(file.filePath) && file.content.trim().length > 0) {
41
+ const imgExt = path.extname(file.filePath).toLowerCase();
42
+ const imgRelPath = path.relative(cwd, file.filePath).replace(/\\/g, "/");
43
+ const metaHeader = `[image] [${imgExt.slice(1)}] [${imgRelPath}]`;
44
+ chunks = [{
45
+ id: uuid(),
46
+ content: metaHeader + " " + file.content,
47
+ metadata: {
48
+ filePath: file.filePath,
49
+ startLine: 1,
50
+ endLine: 1,
51
+ language: "image",
52
+ contentType: "image",
53
+ },
54
+ }];
55
+ }
56
+ else {
57
+ chunks = await chunkFile(file.filePath, file.content, config.chunking?.nodeTypes).catch((err) => {
58
+ logger.warn(` ${fileLabel} (chunking failed: ${err.message})`);
59
+ return null;
60
+ });
61
+ }
62
+ if (chunks === null || chunks.length === 0) {
63
+ if (chunks === null) {
64
+ if (previous) {
65
+ return { normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: previous.chunkCount, fileLabel, isNew: false, isModified: false, isUnchanged: true, isEmpty: false, isTooSmall: false, isRemoved: false, hadChunks: true };
66
+ }
67
+ return { normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel, isNew: false, isModified: false, isUnchanged: false, isEmpty: false, isTooSmall: false, isRemoved: true, hadChunks: false };
68
+ }
69
+ logger.info(` ${fileLabel} (0 chunks, removed from index)`);
70
+ return { normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel, isNew: false, isModified: false, isUnchanged: false, isEmpty: false, isTooSmall: false, isRemoved: true, hadChunks: false };
71
+ }
72
+ keywordIndex?.addChunks(chunks);
73
+ try {
74
+ const docPrefix = config.embedding.documentPrefix ?? "";
75
+ const relPath = path.relative(cwd, file.filePath).replace(/\\/g, "/");
76
+ const isImage = isImageFile(file.filePath);
77
+ const metaHeader = isImage
78
+ ? ""
79
+ : buildFileMetadataHeader(file.filePath, cwd, file.content);
80
+ const textToEmbed = [];
81
+ if (descriptionProvider) {
82
+ const { descriptionMap } = await generateDescriptions(chunks, descriptionProvider, logger);
83
+ for (const chunk of chunks) {
84
+ if (isImage) {
85
+ textToEmbed.push(docPrefix + relPath + "\n\n" + chunk.description);
86
+ }
87
+ else {
88
+ const batchDesc = descriptionMap.get(chunk.id);
89
+ if (batchDesc && batchDesc.trim().length > 0) {
90
+ textToEmbed.push(docPrefix + relPath + "\n\n" + metaHeader + "\n\n" + batchDesc + "\n\n" + chunk.content);
91
+ }
92
+ else if (chunk.description) {
93
+ textToEmbed.push(docPrefix + relPath + "\n\n" + metaHeader + "\n\n" + chunk.description + "\n\n" + chunk.content);
94
+ }
95
+ else {
96
+ textToEmbed.push(docPrefix + relPath + "\n\n" + metaHeader + "\n\n" + chunk.content);
97
+ }
98
+ }
99
+ }
100
+ }
101
+ else {
102
+ for (const chunk of chunks) {
103
+ if (isImage) {
104
+ chunk.description = chunk.content;
105
+ textToEmbed.push(docPrefix + relPath + "\n\n" + chunk.description);
106
+ }
107
+ else {
108
+ chunk.description = buildFallbackDescription(chunk);
109
+ textToEmbed.push(docPrefix + relPath + "\n\n" + metaHeader + "\n\n" + chunk.description + "\n\n" + chunk.content);
110
+ }
111
+ }
112
+ }
113
+ const { embedBatch } = await import("../embedder/factory.js");
114
+ const embeddings = await embedBatch(embedder, textToEmbed, config.indexing.embedBatchSize, "document");
115
+ for (let i = 0; i < chunks.length; i++) {
116
+ const emb = embeddings[i];
117
+ if (Array.isArray(emb) && emb.length > 0 && typeof emb[0] === "number") {
118
+ chunks[i].embedding = emb;
119
+ }
120
+ else {
121
+ chunks[i].embedding = undefined;
122
+ }
123
+ }
124
+ const validChunks = chunks.filter((c) => c.embedding && c.embedding.length > 0);
125
+ if (validChunks.length > 0) {
126
+ await store.addChunks(validChunks);
127
+ }
128
+ logger.info(` ${fileLabel} (${chunks.length} chunks${isModified ? ", modified" : ", new"})`);
129
+ return {
130
+ normalizedPath: file.normalizedPath,
131
+ hash: file.hash,
132
+ chunkCount: chunks.length,
133
+ fileLabel,
134
+ isNew: !isModified && !previous,
135
+ isModified,
136
+ isUnchanged: false,
137
+ isEmpty: false,
138
+ isTooSmall: false,
139
+ isRemoved: false,
140
+ hadChunks: chunks.length > 0,
141
+ };
142
+ }
143
+ catch (err) {
144
+ logger.warn(` ${fileLabel} (embed/store failed: ${err.message})`);
145
+ if (previous) {
146
+ return { normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: previous.chunkCount, fileLabel, isNew: false, isModified: false, isUnchanged: true, isEmpty: false, isTooSmall: false, isRemoved: false, hadChunks: true };
147
+ }
148
+ return { normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel, isNew: false, isModified: false, isUnchanged: false, isEmpty: false, isTooSmall: false, isRemoved: true, hadChunks: false };
149
+ }
150
+ }
151
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/indexer/worker.ts"],"names":[],"mappings":"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"}
package/dist/indexer.d.ts CHANGED
@@ -1,60 +1,13 @@
1
+ export type { IndexRunStats, IndexStatusSummary } from "./indexer/stats.js";
2
+ export { createIndexStats } from "./indexer/stats.js";
3
+ export type { WorkspaceFile } from "./content/reader.js";
4
+ export { scanWorkspaceFiles, walkFiles } from "./content/reader.js";
5
+ export type { RunIndexPassOptions, WatchPassScheduler } from "./indexer/pipeline.js";
6
+ export { runIndexPass, getIndexStatusSummary, createWatchPassScheduler, createWatchIgnore, } from "./indexer/pipeline.js";
1
7
  import type { RagConfig } from "./core/config.js";
2
- import type { DescriptionProvider, EmbeddingProvider, KeywordIndex, VectorStore } from "./core/interfaces.js";
3
- export interface IndexRunStats {
4
- totalFiles: number;
5
- newFiles: number;
6
- modifiedFiles: number;
7
- unchangedFiles: number;
8
- deletedFiles: number;
9
- removedFiles: number;
10
- skippedEmptyFiles: number;
11
- skippedSmallFiles: number;
12
- totalChunks: number;
13
- finalCount: number;
14
- manifestStatus: "ok" | "missing" | "corrupt";
15
- rebuildPerformed: boolean;
16
- batchesFlushed: number;
17
- }
18
- export interface IndexStatusSummary {
19
- manifestStatus: "ok" | "missing" | "corrupt";
20
- manifestEntries: number;
21
- upToDateFiles: number;
22
- pendingFiles: number;
23
- lastIndexedAt?: number;
24
- rebuildRequired: boolean;
25
- }
26
- export interface WorkspaceFile {
27
- filePath: string;
28
- normalizedPath: string;
29
- content: string;
30
- hash: string;
31
- isEmpty: boolean;
32
- isTooSmall: boolean;
33
- }
8
+ import type { WorkspaceFile } from "./content/reader.js";
34
9
  interface Logger {
35
10
  info(message: string): void;
36
11
  warn(message: string): void;
37
12
  }
38
- export interface RunIndexPassOptions {
39
- cwd: string;
40
- storePath: string;
41
- config: RagConfig;
42
- store: VectorStore;
43
- embedder: EmbeddingProvider;
44
- force?: boolean;
45
- logger?: Partial<Logger>;
46
- keywordIndex?: KeywordIndex;
47
- descriptionProvider?: DescriptionProvider;
48
- }
49
- export interface WatchPassScheduler {
50
- notifyChange(): void;
51
- waitForIdle(): Promise<void>;
52
- close(): void;
53
- }
54
- export declare function walkFiles(dir: string, extensions: Set<string>, excludeDirs: Set<string>): Promise<string[]>;
55
13
  export declare function scanWorkspace(cwd: string, config: RagConfig, logger?: Logger): Promise<WorkspaceFile[]>;
56
- export declare function runIndexPass(options: RunIndexPassOptions): Promise<IndexRunStats>;
57
- export declare function getIndexStatusSummary(cwd: string, storePath: string, config: RagConfig, store: VectorStore): Promise<IndexStatusSummary>;
58
- export declare function createWatchPassScheduler(runPass: () => Promise<void>, onError: (error: unknown) => void, debounceMs?: number): WatchPassScheduler;
59
- export declare function createWatchIgnore(cwd: string, config: RagConfig, storePath: string): (watchedPath: string) => boolean;
60
- export {};