opencode-rag-plugin 1.12.10 → 1.12.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.
@@ -0,0 +1,52 @@
1
+ import { execSync } from "node:child_process";
2
+ export function getRepoRoot(cwd) {
3
+ try {
4
+ return execSync("git rev-parse --show-toplevel", {
5
+ cwd,
6
+ encoding: "utf-8",
7
+ timeout: 5000,
8
+ stdio: ["ignore", "pipe", "ignore"],
9
+ }).trim();
10
+ }
11
+ catch {
12
+ return null;
13
+ }
14
+ }
15
+ export function getCurrentCommit(cwd) {
16
+ try {
17
+ return execSync("git rev-parse HEAD", {
18
+ cwd,
19
+ encoding: "utf-8",
20
+ timeout: 5000,
21
+ stdio: ["ignore", "pipe", "ignore"],
22
+ }).trim();
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ }
28
+ export function getChangedFilesSince(cwd, fromCommit) {
29
+ try {
30
+ const changedRaw = execSync(`git diff --name-only --diff-filter=ACMRT "${fromCommit}" HEAD`, { cwd, encoding: "utf-8", timeout: 10000, stdio: ["ignore", "pipe", "ignore"] }).trim();
31
+ const deletedRaw = execSync(`git diff --name-only --diff-filter=D "${fromCommit}" HEAD`, { cwd, encoding: "utf-8", timeout: 10000, stdio: ["ignore", "pipe", "ignore"] }).trim();
32
+ const changedFiles = changedRaw.length > 0 ? changedRaw.split("\n") : [];
33
+ const deletedFiles = deletedRaw.length > 0 ? deletedRaw.split("\n") : [];
34
+ const currentCommit = getCurrentCommit(cwd);
35
+ if (!currentCommit)
36
+ return null;
37
+ return { changedFiles, deletedFiles, currentCommit };
38
+ }
39
+ catch {
40
+ return null;
41
+ }
42
+ }
43
+ export function getUntrackedFiles(cwd) {
44
+ try {
45
+ const raw = execSync("git ls-files --others --exclude-standard", { cwd, encoding: "utf-8", timeout: 5000, stdio: ["ignore", "pipe", "ignore"] }).trim();
46
+ return raw.length > 0 ? raw.split("\n") : [];
47
+ }
48
+ catch {
49
+ return [];
50
+ }
51
+ }
52
+ //# sourceMappingURL=git-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-diff.js","sourceRoot":"","sources":["../../src/indexer/git-diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAQ9C,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,+BAA+B,EAAE;YAC/C,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,oBAAoB,EAAE;YACpC,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,GAAW,EACX,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,QAAQ,CACzB,6CAA6C,UAAU,QAAQ,EAC/D,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAChF,CAAC,IAAI,EAAE,CAAC;QAET,MAAM,UAAU,GAAG,QAAQ,CACzB,yCAAyC,UAAU,QAAQ,EAC3D,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAChF,CAAC,IAAI,EAAE,CAAC;QAET,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEzE,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QAEhC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAClB,0CAA0C,EAC1C,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAC/E,CAAC,IAAI,EAAE,CAAC;QACT,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -1,8 +1,10 @@
1
1
  import pLimit from "p-limit";
2
2
  import { scanWorkspaceFiles } from "../content/reader.js";
3
3
  import { loadManifest, saveManifest } from "../core/manifest.js";
4
+ import { embedBatch } from "../embedder/factory.js";
4
5
  import { createIndexStats } from "./stats.js";
5
- import { processFile } from "./worker.js";
6
+ import { prepareFile, storeFileChunks } from "./worker.js";
7
+ import { getCurrentCommit, getRepoRoot } from "./git-diff.js";
6
8
  export { createWatchPassScheduler, createWatchIgnore } from "./watch.js";
7
9
  function createLogger(logger) {
8
10
  return {
@@ -11,13 +13,31 @@ function createLogger(logger) {
11
13
  debug: logger?.debug ?? (() => { }),
12
14
  };
13
15
  }
16
+ function tryUpdateLastGitCommit(cwd, manifest) {
17
+ try {
18
+ const repoRoot = getRepoRoot(cwd);
19
+ if (!repoRoot)
20
+ return false;
21
+ const commit = getCurrentCommit(repoRoot);
22
+ if (!commit)
23
+ return false;
24
+ manifest.lastGitCommit = commit;
25
+ return true;
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ }
14
31
  export async function runIndexPass(options) {
15
32
  const logger = createLogger(options.logger);
16
- const workspaceFiles = await scanWorkspaceFiles(options.cwd, options.config, logger);
17
33
  const loadResult = await loadManifest(options.storePath);
18
34
  const manifest = loadResult.manifest;
19
35
  let manifestStatus = loadResult.status;
20
36
  let rebuildPerformed = false;
37
+ if (options.force) {
38
+ manifestStatus = "missing";
39
+ }
40
+ const workspaceFiles = await scanWorkspaceFiles(options.cwd, options.config, logger, options.force ? undefined : manifest);
21
41
  const existingCount = await options.store.count();
22
42
  if (options.force || (manifestStatus !== "ok" && existingCount > 0)) {
23
43
  await options.store.clear();
@@ -44,13 +64,15 @@ export async function runIndexPass(options) {
44
64
  }
45
65
  }
46
66
  const currentPaths = new Set(workspaceFiles.map((file) => file.normalizedPath));
47
- for (const indexedPath of Object.keys(manifest.files)) {
48
- if (!currentPaths.has(indexedPath)) {
49
- await options.store.deleteByFilePath(indexedPath);
50
- options.keywordIndex?.removeByFilePath(indexedPath);
51
- delete manifest.files[indexedPath];
67
+ const stalePaths = Object.keys(manifest.files).filter((p) => !currentPaths.has(p));
68
+ if (stalePaths.length > 0) {
69
+ const deleteLimit = pLimit(options.config.indexing.concurrency);
70
+ await Promise.all(stalePaths.map((p) => deleteLimit(async () => {
71
+ await options.store.deleteByFilePath(p);
72
+ options.keywordIndex?.removeByFilePath(p);
73
+ delete manifest.files[p];
52
74
  stats.deletedFiles++;
53
- }
75
+ })));
54
76
  }
55
77
  let newCount = 0;
56
78
  let modifiedCount = 0;
@@ -69,26 +91,81 @@ export async function runIndexPass(options) {
69
91
  newCount++;
70
92
  }
71
93
  }
94
+ if (stats.deletedFiles > 0) {
95
+ logger.info(`Removed ${stats.deletedFiles} deleted files from index.`);
96
+ }
72
97
  logger.info(`Processing ${workspaceFiles.length} files (${newCount} new, ${modifiedCount} modified, ${unchangedCount} unchanged)...`);
98
+ // ── Phase 1: prepare all files (chunk + description + keyword + textToEmbed) ──
73
99
  const limit = pLimit(options.config.indexing.concurrency);
74
100
  let completed = 0;
75
101
  const total = workspaceFiles.length;
76
- const workerResults = await Promise.all(workspaceFiles.map((file) => limit(async () => {
77
- const result = await processFile(file, options.cwd, manifest.files[file.normalizedPath], options.config, options.store, options.keywordIndex, options.embedder, options.descriptionProvider, logger);
102
+ const prepared = await Promise.all(workspaceFiles.map((file) => limit(async () => {
103
+ const prep = await prepareFile(file, options.cwd, manifest.files[file.normalizedPath], options.config, options.keywordIndex, options.descriptionProvider, logger);
78
104
  completed++;
79
105
  if (total > 20 && completed % 50 === 0) {
80
- logger.info(` Processing file ${completed}/${total}...`);
106
+ logger.info(` Preparing file ${completed}/${total}...`);
107
+ }
108
+ return prep;
109
+ })));
110
+ // ── Handle deletions from store for files being re-processed ──
111
+ const deletionLimit = pLimit(options.config.indexing.concurrency);
112
+ await Promise.all(prepared.map((prep) => deletionLimit(async () => {
113
+ if (prep.earlyResult?.isRemoved) {
114
+ await options.store.deleteByFilePath(prep.normalizedPath);
115
+ options.keywordIndex?.removeByFilePath(prep.normalizedPath);
116
+ return;
117
+ }
118
+ if (prep.isModified && prep.chunks && prep.chunks.length > 0) {
119
+ await options.store.deleteByFilePath(prep.normalizedPath);
120
+ options.keywordIndex?.removeByFilePath(prep.normalizedPath);
81
121
  }
82
- return result;
83
122
  })));
84
- aggregateStats(stats, workerResults, manifest);
123
+ // ── Phase 2: global embedding batch ──
124
+ const allTextToEmbed = [];
125
+ const textPrepIndex = [];
126
+ for (let i = 0; i < prepared.length; i++) {
127
+ const prep = prepared[i];
128
+ if (prep.chunks && prep.textToEmbed && prep.textToEmbed.length > 0) {
129
+ for (const text of prep.textToEmbed) {
130
+ allTextToEmbed.push(text);
131
+ textPrepIndex.push(i);
132
+ }
133
+ }
134
+ }
135
+ let allEmbeddings = [];
136
+ if (allTextToEmbed.length > 0) {
137
+ logger.info(` Embedding ${allTextToEmbed.length} chunks in global batch...`);
138
+ allEmbeddings = await embedBatch(options.embedder, allTextToEmbed, options.config.indexing.embedBatchSize, "document");
139
+ }
140
+ // ── Distribute embeddings back to prepared files ──
141
+ const embedByPrep = new Map();
142
+ for (let i = 0; i < textPrepIndex.length; i++) {
143
+ const prepIdx = textPrepIndex[i];
144
+ const emb = allEmbeddings[i];
145
+ if (!embedByPrep.has(prepIdx)) {
146
+ embedByPrep.set(prepIdx, []);
147
+ }
148
+ if (emb) {
149
+ embedByPrep.get(prepIdx).push(emb);
150
+ }
151
+ }
152
+ // ── Phase 3: store all files with their embeddings ──
153
+ const storeLimit = pLimit(options.config.indexing.concurrency);
154
+ const workerResults = await Promise.all(prepared.map((prep, idx) => storeLimit(async () => {
155
+ const embeddings = embedByPrep.get(idx) ?? [];
156
+ return storeFileChunks(prep, embeddings, options.store, logger);
157
+ })));
158
+ // ── Aggregate stats and update manifest ──
159
+ aggregateStats(stats, workerResults, manifest, workspaceFiles);
85
160
  manifest.lastIndexedAt = Date.now();
161
+ tryUpdateLastGitCommit(options.cwd, manifest);
86
162
  await saveManifest(options.storePath, manifest);
87
163
  await options.keywordIndex?.save(options.storePath);
88
164
  stats.finalCount = await options.store.count();
89
165
  return stats;
90
166
  }
91
- function aggregateStats(stats, results, manifest) {
167
+ function aggregateStats(stats, results, manifest, workspaceFiles) {
168
+ const fileMeta = new Map(workspaceFiles.map((f) => [f.normalizedPath, { mtime: f.mtime, size: f.size }]));
92
169
  for (const result of results) {
93
170
  if (result.isEmpty) {
94
171
  stats.skippedEmptyFiles++;
@@ -122,19 +199,30 @@ function aggregateStats(stats, results, manifest) {
122
199
  stats.newFiles++;
123
200
  }
124
201
  if (result.chunkCount > 0) {
202
+ const meta = fileMeta.get(result.normalizedPath);
125
203
  manifest.files[result.normalizedPath] = {
126
204
  hash: result.hash,
127
205
  chunkCount: result.chunkCount,
128
206
  indexedAt: Date.now(),
207
+ mtime: meta?.mtime,
208
+ size: meta?.size,
129
209
  };
130
210
  stats.totalChunks += result.chunkCount;
131
211
  stats.batchesFlushed++;
132
212
  }
133
213
  }
214
+ for (const { normalizedPath, mtime, size } of workspaceFiles) {
215
+ const entry = manifest.files[normalizedPath];
216
+ if (entry && (mtime !== undefined || size !== undefined)) {
217
+ entry.mtime = mtime;
218
+ entry.size = size;
219
+ }
220
+ }
134
221
  }
135
222
  export async function getIndexStatusSummary(cwd, storePath, config, store) {
136
- const workspaceFiles = await scanWorkspaceFiles(cwd, config);
137
223
  const loadResult = await loadManifest(storePath);
224
+ const manifest = loadResult.manifest;
225
+ const workspaceFiles = await scanWorkspaceFiles(cwd, config, undefined, manifest);
138
226
  const storeCount = await store.count();
139
227
  if (loadResult.status !== "ok") {
140
228
  return {
@@ -145,7 +233,6 @@ export async function getIndexStatusSummary(cwd, storePath, config, store) {
145
233
  rebuildRequired: storeCount > 0,
146
234
  };
147
235
  }
148
- const manifest = loadResult.manifest;
149
236
  const currentPaths = new Set(workspaceFiles.map((file) => file.normalizedPath));
150
237
  let upToDateFiles = 0;
151
238
  let pendingFiles = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/indexer/pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/indexer/pipeline.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { WorkspaceFile } from "../content/reader.js";
2
- import type { DescriptionProvider, EmbeddingProvider, KeywordIndex, VectorStore } from "../core/interfaces.js";
2
+ import type { Chunk, DescriptionProvider, EmbeddingProvider, KeywordIndex, VectorStore } from "../core/interfaces.js";
3
3
  export interface WorkerResult {
4
4
  normalizedPath: string;
5
5
  hash: string;
@@ -13,6 +13,15 @@ export interface WorkerResult {
13
13
  isRemoved: boolean;
14
14
  hadChunks: boolean;
15
15
  }
16
+ export interface PreparedFile {
17
+ normalizedPath: string;
18
+ hash: string;
19
+ fileLabel: string;
20
+ isModified: boolean;
21
+ earlyResult?: WorkerResult;
22
+ chunks?: Chunk[];
23
+ textToEmbed?: string[];
24
+ }
16
25
  interface Logger {
17
26
  info(message: string): void;
18
27
  warn(message: string): void;
@@ -23,6 +32,15 @@ interface ManifestFile {
23
32
  chunkCount: number;
24
33
  indexedAt?: number;
25
34
  }
35
+ export declare function prepareFile(file: WorkspaceFile, cwd: string, previous: ManifestFile | undefined, config: {
36
+ embedding: {
37
+ documentPrefix?: string;
38
+ };
39
+ chunking?: {
40
+ nodeTypes?: Record<string, string[]>;
41
+ };
42
+ }, keywordIndex: KeywordIndex | undefined, descriptionProvider: DescriptionProvider | undefined, logger: Logger): Promise<PreparedFile>;
43
+ export declare function storeFileChunks(prep: PreparedFile, embeddings: number[][], store: VectorStore, logger?: Logger): Promise<WorkerResult>;
26
44
  export declare function processFile(file: WorkspaceFile, cwd: string, previous: ManifestFile | undefined, config: {
27
45
  embedding: {
28
46
  documentPrefix?: string;
@@ -4,39 +4,39 @@ import { uuid } from "../chunker/uuid.js";
4
4
  import { isImageFile } from "../content/image.js";
5
5
  import { buildFileMetadataHeader } from "./metadata.js";
6
6
  import { generateDescriptions, buildFallbackDescription } from "./description-stage.js";
7
- export async function processFile(file, cwd, previous, config, store, keywordIndex, embedder, descriptionProvider, logger) {
7
+ export async function prepareFile(file, cwd, previous, config, keywordIndex, descriptionProvider, logger) {
8
8
  const fileLabel = path.relative(cwd, file.filePath);
9
- logger.debug(` processFile: ${fileLabel}`);
10
9
  if (file.isEmpty) {
11
- if (previous) {
12
- await store.deleteByFilePath(file.normalizedPath);
13
- keywordIndex?.removeByFilePath(file.normalizedPath);
14
- logger.info(` ${fileLabel} (empty, removed from index)`);
15
- return { normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel, isNew: false, isModified: false, isUnchanged: false, isEmpty: true, isTooSmall: false, isRemoved: true, hadChunks: false };
16
- }
17
- logger.info(` ${fileLabel} (empty, skipped)`);
18
- return { normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel, isNew: false, isModified: false, isUnchanged: false, isEmpty: true, isTooSmall: false, isRemoved: false, hadChunks: false };
10
+ return {
11
+ normalizedPath: file.normalizedPath, hash: file.hash, fileLabel,
12
+ isModified: false,
13
+ earlyResult: {
14
+ normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel,
15
+ isNew: false, isModified: false, isUnchanged: false, isEmpty: true, isTooSmall: false, isRemoved: !!previous, hadChunks: false,
16
+ },
17
+ };
19
18
  }
20
19
  if (file.isTooSmall) {
21
- if (previous) {
22
- await store.deleteByFilePath(file.normalizedPath);
23
- keywordIndex?.removeByFilePath(file.normalizedPath);
24
- logger.info(` ${fileLabel} (too small, removed from index)`);
25
- return { normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel, isNew: false, isModified: false, isUnchanged: false, isEmpty: false, isTooSmall: true, isRemoved: true, hadChunks: false };
26
- }
27
- logger.info(` ${fileLabel} (too small, skipped)`);
28
- return { normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel, isNew: false, isModified: false, isUnchanged: false, isEmpty: false, isTooSmall: true, isRemoved: false, hadChunks: false };
20
+ return {
21
+ normalizedPath: file.normalizedPath, hash: file.hash, fileLabel,
22
+ isModified: false,
23
+ earlyResult: {
24
+ normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel,
25
+ isNew: false, isModified: false, isUnchanged: false, isEmpty: false, isTooSmall: true, isRemoved: !!previous, hadChunks: false,
26
+ },
27
+ };
29
28
  }
30
29
  if (previous && previous.hash === file.hash) {
31
- logger.info(` ${fileLabel} (unchanged)`);
32
- return { normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel, isNew: false, isModified: false, isUnchanged: true, isEmpty: false, isTooSmall: false, isRemoved: false, hadChunks: false };
33
- }
34
- let isModified = false;
35
- if (previous) {
36
- await store.deleteByFilePath(file.normalizedPath);
37
- keywordIndex?.removeByFilePath(file.normalizedPath);
38
- isModified = true;
30
+ return {
31
+ normalizedPath: file.normalizedPath, hash: file.hash, fileLabel,
32
+ isModified: false,
33
+ earlyResult: {
34
+ normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel,
35
+ isNew: false, isModified: false, isUnchanged: true, isEmpty: false, isTooSmall: false, isRemoved: false, hadChunks: false,
36
+ },
37
+ };
39
38
  }
39
+ const isModified = !!previous;
40
40
  let chunks;
41
41
  if (isImageFile(file.filePath) && file.content.trim().length > 0) {
42
42
  const imgExt = path.extname(file.filePath).toLowerCase();
@@ -46,11 +46,8 @@ export async function processFile(file, cwd, previous, config, store, keywordInd
46
46
  id: uuid(),
47
47
  content: metaHeader + " " + file.content,
48
48
  metadata: {
49
- filePath: file.filePath,
50
- startLine: 1,
51
- endLine: 1,
52
- language: "image",
53
- contentType: "image",
49
+ filePath: file.filePath, startLine: 1, endLine: 1,
50
+ language: "image", contentType: "image",
54
51
  },
55
52
  }];
56
53
  }
@@ -61,92 +58,140 @@ export async function processFile(file, cwd, previous, config, store, keywordInd
61
58
  });
62
59
  }
63
60
  if (chunks === null || chunks.length === 0) {
64
- if (chunks === null) {
65
- if (previous) {
66
- 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 };
67
- }
68
- return { normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel, isNew: false, isModified: false, isUnchanged: false, isEmpty: false, isTooSmall: false, isRemoved: true, hadChunks: false };
61
+ if (chunks === null && previous) {
62
+ return {
63
+ normalizedPath: file.normalizedPath, hash: file.hash, fileLabel,
64
+ isModified: false,
65
+ earlyResult: {
66
+ normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: previous.chunkCount, fileLabel,
67
+ isNew: false, isModified: false, isUnchanged: true, isEmpty: false, isTooSmall: false, isRemoved: false, hadChunks: true,
68
+ },
69
+ };
69
70
  }
70
- logger.info(` ${fileLabel} (0 chunks, removed from index)`);
71
- 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
+ return {
72
+ normalizedPath: file.normalizedPath, hash: file.hash, fileLabel,
73
+ isModified: false,
74
+ earlyResult: {
75
+ normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel,
76
+ isNew: false, isModified: false, isUnchanged: false, isEmpty: false, isTooSmall: false, isRemoved: true, hadChunks: false,
77
+ },
78
+ };
72
79
  }
73
80
  keywordIndex?.addChunks(chunks);
74
- try {
75
- const docPrefix = config.embedding.documentPrefix ?? "";
76
- const relPath = path.relative(cwd, file.filePath).replace(/\\/g, "/");
77
- const isImage = isImageFile(file.filePath);
78
- const metaHeader = isImage
79
- ? ""
80
- : buildFileMetadataHeader(file.filePath, cwd, file.content);
81
- const textToEmbed = [];
82
- if (descriptionProvider) {
83
- const { descriptionMap } = await generateDescriptions(chunks, descriptionProvider, logger);
84
- for (const chunk of chunks) {
85
- if (isImage) {
86
- textToEmbed.push(docPrefix + relPath + "\n\n" + chunk.description);
87
- }
88
- else {
89
- const batchDesc = descriptionMap.get(chunk.id);
90
- if (batchDesc && batchDesc.trim().length > 0) {
91
- textToEmbed.push(docPrefix + relPath + "\n\n" + metaHeader + "\n\n" + batchDesc + "\n\n" + chunk.content);
92
- }
93
- else if (chunk.description) {
94
- textToEmbed.push(docPrefix + relPath + "\n\n" + metaHeader + "\n\n" + chunk.description + "\n\n" + chunk.content);
95
- }
96
- else {
97
- textToEmbed.push(docPrefix + relPath + "\n\n" + metaHeader + "\n\n" + chunk.content);
98
- }
99
- }
81
+ const docPrefix = config.embedding.documentPrefix ?? "";
82
+ const relPath = path.relative(cwd, file.filePath).replace(/\\/g, "/");
83
+ const isImage = isImageFile(file.filePath);
84
+ const metaHeader = isImage ? "" : buildFileMetadataHeader(file.filePath, cwd, file.content);
85
+ const textToEmbed = [];
86
+ if (descriptionProvider) {
87
+ const { descriptionMap } = await generateDescriptions(chunks, descriptionProvider, logger);
88
+ for (const chunk of chunks) {
89
+ if (isImage) {
90
+ textToEmbed.push(docPrefix + relPath + "\n\n" + chunk.description);
100
91
  }
101
- }
102
- else {
103
- for (const chunk of chunks) {
104
- if (isImage) {
105
- chunk.description = chunk.content;
106
- textToEmbed.push(docPrefix + relPath + "\n\n" + chunk.description);
92
+ else {
93
+ const batchDesc = descriptionMap.get(chunk.id);
94
+ if (batchDesc && batchDesc.trim().length > 0) {
95
+ textToEmbed.push(docPrefix + relPath + "\n\n" + metaHeader + "\n\n" + batchDesc + "\n\n" + chunk.content);
107
96
  }
108
- else {
109
- chunk.description = buildFallbackDescription(chunk);
97
+ else if (chunk.description) {
110
98
  textToEmbed.push(docPrefix + relPath + "\n\n" + metaHeader + "\n\n" + chunk.description + "\n\n" + chunk.content);
111
99
  }
100
+ else {
101
+ textToEmbed.push(docPrefix + relPath + "\n\n" + metaHeader + "\n\n" + chunk.content);
102
+ }
112
103
  }
113
104
  }
114
- const { embedBatch } = await import("../embedder/factory.js");
115
- const embeddings = await embedBatch(embedder, textToEmbed, config.indexing.embedBatchSize, "document");
116
- for (let i = 0; i < chunks.length; i++) {
117
- const emb = embeddings[i];
118
- if (Array.isArray(emb) && emb.length > 0 && typeof emb[0] === "number") {
119
- chunks[i].embedding = emb;
105
+ }
106
+ else {
107
+ for (const chunk of chunks) {
108
+ if (isImage) {
109
+ chunk.description = chunk.content;
110
+ textToEmbed.push(docPrefix + relPath + "\n\n" + chunk.description);
120
111
  }
121
112
  else {
122
- chunks[i].embedding = undefined;
113
+ chunk.description = buildFallbackDescription(chunk);
114
+ textToEmbed.push(docPrefix + relPath + "\n\n" + metaHeader + "\n\n" + chunk.description + "\n\n" + chunk.content);
123
115
  }
124
116
  }
125
- const validChunks = chunks.filter((c) => c.embedding && c.embedding.length > 0);
126
- if (validChunks.length > 0) {
127
- await store.addChunks(validChunks);
117
+ }
118
+ return {
119
+ normalizedPath: file.normalizedPath,
120
+ hash: file.hash,
121
+ fileLabel,
122
+ isModified,
123
+ chunks,
124
+ textToEmbed,
125
+ };
126
+ }
127
+ export async function storeFileChunks(prep, embeddings, store, logger) {
128
+ if (prep.earlyResult)
129
+ return prep.earlyResult;
130
+ if (!prep.chunks || !prep.textToEmbed) {
131
+ return {
132
+ normalizedPath: prep.normalizedPath, hash: prep.hash, chunkCount: 0, fileLabel: prep.fileLabel,
133
+ isNew: false, isModified: false, isUnchanged: false, isEmpty: false, isTooSmall: false, isRemoved: true, hadChunks: false,
134
+ };
135
+ }
136
+ for (let i = 0; i < prep.chunks.length; i++) {
137
+ const emb = embeddings[i];
138
+ if (Array.isArray(emb) && emb.length > 0 && typeof emb[0] === "number") {
139
+ prep.chunks[i].embedding = emb;
140
+ }
141
+ else {
142
+ prep.chunks[i].embedding = undefined;
128
143
  }
129
- logger.info(` ${fileLabel} (${chunks.length} chunks${isModified ? ", modified" : ", new"})`);
144
+ }
145
+ const validChunks = prep.chunks.filter((c) => c.embedding && c.embedding.length > 0);
146
+ if (validChunks.length > 0) {
147
+ await store.addChunks(validChunks);
148
+ }
149
+ logger?.info(` ${prep.fileLabel} (${prep.chunks.length} chunks${prep.isModified ? ", modified" : ", new"})`);
150
+ return {
151
+ normalizedPath: prep.normalizedPath,
152
+ hash: prep.hash,
153
+ chunkCount: prep.chunks.length,
154
+ fileLabel: prep.fileLabel,
155
+ isNew: !prep.isModified,
156
+ isModified: prep.isModified,
157
+ isUnchanged: false,
158
+ isEmpty: false,
159
+ isTooSmall: false,
160
+ isRemoved: false,
161
+ hadChunks: prep.chunks.length > 0,
162
+ };
163
+ }
164
+ export async function processFile(file, cwd, previous, config, store, keywordIndex, embedder, descriptionProvider, logger) {
165
+ const prep = await prepareFile(file, cwd, previous, config, keywordIndex, descriptionProvider, logger);
166
+ if (prep.earlyResult) {
167
+ if ((prep.earlyResult.isEmpty || prep.earlyResult.isTooSmall) && prep.earlyResult.isRemoved) {
168
+ await store.deleteByFilePath(prep.normalizedPath);
169
+ keywordIndex?.removeByFilePath(prep.normalizedPath);
170
+ }
171
+ return prep.earlyResult;
172
+ }
173
+ if (prep.isModified) {
174
+ await store.deleteByFilePath(prep.normalizedPath);
175
+ keywordIndex?.removeByFilePath(prep.normalizedPath);
176
+ }
177
+ if (!prep.textToEmbed || prep.textToEmbed.length === 0) {
130
178
  return {
131
- normalizedPath: file.normalizedPath,
132
- hash: file.hash,
133
- chunkCount: chunks.length,
134
- fileLabel,
135
- isNew: !isModified && !previous,
136
- isModified,
137
- isUnchanged: false,
138
- isEmpty: false,
139
- isTooSmall: false,
140
- isRemoved: false,
141
- hadChunks: chunks.length > 0,
179
+ normalizedPath: prep.normalizedPath, hash: prep.hash, chunkCount: 0, fileLabel: prep.fileLabel,
180
+ isNew: false, isModified: false, isUnchanged: true, isEmpty: false, isTooSmall: false, isRemoved: false, hadChunks: false,
142
181
  };
143
182
  }
183
+ try {
184
+ const { embedBatch } = await import("../embedder/factory.js");
185
+ const embeddings = await embedBatch(embedder, prep.textToEmbed, config.indexing.embedBatchSize, "document");
186
+ const result = await storeFileChunks(prep, embeddings, store);
187
+ return result;
188
+ }
144
189
  catch (err) {
145
- logger.warn(` ${fileLabel} (embed/store failed: ${err.message})`);
146
- if (previous) {
147
- 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 };
148
- }
149
- return { normalizedPath: file.normalizedPath, hash: file.hash, chunkCount: 0, fileLabel, isNew: false, isModified: false, isUnchanged: false, isEmpty: false, isTooSmall: false, isRemoved: true, hadChunks: false };
190
+ logger.warn(` ${prep.fileLabel} (embed/store failed: ${err.message})`);
191
+ return {
192
+ normalizedPath: prep.normalizedPath, hash: prep.hash, chunkCount: 0, fileLabel: prep.fileLabel,
193
+ isNew: false, isModified: false, isUnchanged: false, isEmpty: false, isTooSmall: false, isRemoved: true, hadChunks: false,
194
+ };
150
195
  }
151
196
  }
152
197
  //# sourceMappingURL=worker.js.map