opencode-rag-plugin 1.0.0

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 (133) hide show
  1. package/LICENSE +21 -0
  2. package/ReadMe.md +423 -0
  3. package/dist/chunker/base.d.ts +10 -0
  4. package/dist/chunker/base.js +34 -0
  5. package/dist/chunker/base.js.map +1 -0
  6. package/dist/chunker/c.d.ts +8 -0
  7. package/dist/chunker/c.js +16 -0
  8. package/dist/chunker/c.js.map +1 -0
  9. package/dist/chunker/cpp.d.ts +8 -0
  10. package/dist/chunker/cpp.js +17 -0
  11. package/dist/chunker/cpp.js.map +1 -0
  12. package/dist/chunker/csharp.d.ts +8 -0
  13. package/dist/chunker/csharp.js +17 -0
  14. package/dist/chunker/csharp.js.map +1 -0
  15. package/dist/chunker/css.d.ts +8 -0
  16. package/dist/chunker/css.js +14 -0
  17. package/dist/chunker/css.js.map +1 -0
  18. package/dist/chunker/factory.d.ts +27 -0
  19. package/dist/chunker/factory.js +138 -0
  20. package/dist/chunker/factory.js.map +1 -0
  21. package/dist/chunker/fallback.d.ts +8 -0
  22. package/dist/chunker/fallback.js +34 -0
  23. package/dist/chunker/fallback.js.map +1 -0
  24. package/dist/chunker/go.d.ts +8 -0
  25. package/dist/chunker/go.js +13 -0
  26. package/dist/chunker/go.js.map +1 -0
  27. package/dist/chunker/grammar.d.ts +12 -0
  28. package/dist/chunker/grammar.js +43 -0
  29. package/dist/chunker/grammar.js.map +1 -0
  30. package/dist/chunker/html.d.ts +8 -0
  31. package/dist/chunker/html.js +12 -0
  32. package/dist/chunker/html.js.map +1 -0
  33. package/dist/chunker/java.d.ts +8 -0
  34. package/dist/chunker/java.js +14 -0
  35. package/dist/chunker/java.js.map +1 -0
  36. package/dist/chunker/javascript.d.ts +8 -0
  37. package/dist/chunker/javascript.js +15 -0
  38. package/dist/chunker/javascript.js.map +1 -0
  39. package/dist/chunker/json.d.ts +8 -0
  40. package/dist/chunker/json.js +11 -0
  41. package/dist/chunker/json.js.map +1 -0
  42. package/dist/chunker/kotlin.d.ts +8 -0
  43. package/dist/chunker/kotlin.js +15 -0
  44. package/dist/chunker/kotlin.js.map +1 -0
  45. package/dist/chunker/loader.d.ts +2 -0
  46. package/dist/chunker/loader.js +27 -0
  47. package/dist/chunker/loader.js.map +1 -0
  48. package/dist/chunker/markdown.d.ts +7 -0
  49. package/dist/chunker/markdown.js +96 -0
  50. package/dist/chunker/markdown.js.map +1 -0
  51. package/dist/chunker/pdf.d.ts +8 -0
  52. package/dist/chunker/pdf.js +93 -0
  53. package/dist/chunker/pdf.js.map +1 -0
  54. package/dist/chunker/python.d.ts +8 -0
  55. package/dist/chunker/python.js +13 -0
  56. package/dist/chunker/python.js.map +1 -0
  57. package/dist/chunker/razor.d.ts +7 -0
  58. package/dist/chunker/razor.js +85 -0
  59. package/dist/chunker/razor.js.map +1 -0
  60. package/dist/chunker/ruby.d.ts +8 -0
  61. package/dist/chunker/ruby.js +14 -0
  62. package/dist/chunker/ruby.js.map +1 -0
  63. package/dist/chunker/rust.d.ts +8 -0
  64. package/dist/chunker/rust.js +17 -0
  65. package/dist/chunker/rust.js.map +1 -0
  66. package/dist/chunker/sln.d.ts +9 -0
  67. package/dist/chunker/sln.js +65 -0
  68. package/dist/chunker/sln.js.map +1 -0
  69. package/dist/chunker/swift.d.ts +8 -0
  70. package/dist/chunker/swift.js +17 -0
  71. package/dist/chunker/swift.js.map +1 -0
  72. package/dist/chunker/tex.d.ts +7 -0
  73. package/dist/chunker/tex.js +93 -0
  74. package/dist/chunker/tex.js.map +1 -0
  75. package/dist/chunker/typescript.d.ts +8 -0
  76. package/dist/chunker/typescript.js +17 -0
  77. package/dist/chunker/typescript.js.map +1 -0
  78. package/dist/chunker/uuid.d.ts +1 -0
  79. package/dist/chunker/uuid.js +8 -0
  80. package/dist/chunker/uuid.js.map +1 -0
  81. package/dist/chunker/xml.d.ts +8 -0
  82. package/dist/chunker/xml.js +11 -0
  83. package/dist/chunker/xml.js.map +1 -0
  84. package/dist/cli.d.ts +1 -0
  85. package/dist/cli.js +291 -0
  86. package/dist/cli.js.map +1 -0
  87. package/dist/core/config.d.ts +59 -0
  88. package/dist/core/config.js +127 -0
  89. package/dist/core/config.js.map +1 -0
  90. package/dist/core/fileLogger.d.ts +6 -0
  91. package/dist/core/fileLogger.js +32 -0
  92. package/dist/core/fileLogger.js.map +1 -0
  93. package/dist/core/interfaces.d.ts +31 -0
  94. package/dist/core/interfaces.js +2 -0
  95. package/dist/core/interfaces.js.map +1 -0
  96. package/dist/core/manifest.d.ts +21 -0
  97. package/dist/core/manifest.js +48 -0
  98. package/dist/core/manifest.js.map +1 -0
  99. package/dist/embedder/factory.d.ts +4 -0
  100. package/dist/embedder/factory.js +27 -0
  101. package/dist/embedder/factory.js.map +1 -0
  102. package/dist/embedder/http.d.ts +11 -0
  103. package/dist/embedder/http.js +309 -0
  104. package/dist/embedder/http.js.map +1 -0
  105. package/dist/embedder/ollama.d.ts +14 -0
  106. package/dist/embedder/ollama.js +60 -0
  107. package/dist/embedder/ollama.js.map +1 -0
  108. package/dist/embedder/openai.d.ts +12 -0
  109. package/dist/embedder/openai.js +33 -0
  110. package/dist/embedder/openai.js.map +1 -0
  111. package/dist/index.d.ts +10 -0
  112. package/dist/index.js +10 -0
  113. package/dist/index.js.map +1 -0
  114. package/dist/indexer.d.ts +49 -0
  115. package/dist/indexer.js +336 -0
  116. package/dist/indexer.js.map +1 -0
  117. package/dist/plugin-entry.d.ts +4 -0
  118. package/dist/plugin-entry.js +5 -0
  119. package/dist/plugin-entry.js.map +1 -0
  120. package/dist/plugin.d.ts +22 -0
  121. package/dist/plugin.js +477 -0
  122. package/dist/plugin.js.map +1 -0
  123. package/dist/retriever/retriever.d.ts +5 -0
  124. package/dist/retriever/retriever.js +14 -0
  125. package/dist/retriever/retriever.js.map +1 -0
  126. package/dist/types/opencode-plugin.d.ts +51 -0
  127. package/dist/vectorstore/lancedb.d.ts +18 -0
  128. package/dist/vectorstore/lancedb.js +196 -0
  129. package/dist/vectorstore/lancedb.js.map +1 -0
  130. package/dist/watcher.d.ts +14 -0
  131. package/dist/watcher.js +88 -0
  132. package/dist/watcher.js.map +1 -0
  133. package/package.json +82 -0
package/dist/cli.js ADDED
@@ -0,0 +1,291 @@
1
+ import { Command } from "commander";
2
+ import path from "node:path";
3
+ import chokidar from "chokidar";
4
+ import { loadConfig, DEFAULT_CONFIG, resolveLogConfig } from "./core/config.js";
5
+ import { loadChunkersFromConfig } from "./chunker/loader.js";
6
+ import { createEmbedder } from "./embedder/factory.js";
7
+ import { LanceDBStore } from "./vectorstore/lancedb.js";
8
+ import { retrieve } from "./retriever/retriever.js";
9
+ import { createWatchPassScheduler, createWatchIgnore, getIndexStatusSummary, runIndexPass, } from "./indexer.js";
10
+ function logCliError(logFilePath, scope, message, error) {
11
+ console.error(message);
12
+ //appendDebugLog(logFilePath, { scope, message, error });
13
+ }
14
+ function logCliInfo(logFilePath, scope, message) {
15
+ console.log(message);
16
+ //appendDebugLog(logFilePath, { scope, message });
17
+ }
18
+ async function resolveConfig(opt, logFilePath) {
19
+ if (opt.config) {
20
+ try {
21
+ const configPath = path.resolve(opt.config);
22
+ const cfg = loadConfig(configPath);
23
+ await loadChunkersFromConfig(cfg, path.dirname(configPath));
24
+ logCliInfo(logFilePath, "config", `Config: ${configPath}`);
25
+ return logConfigDetails(logFilePath, cfg);
26
+ }
27
+ catch (err) {
28
+ logCliError(logFilePath, "config", `Could not load config from ${opt.config}, using defaults`, err);
29
+ console.error(`Could not load config from ${opt.config}, using defaults`);
30
+ }
31
+ }
32
+ for (const loc of ["opencode-rag.json", ".opencode/opencode-rag.json", ".opencode/rag.json"]) {
33
+ const configPath = path.resolve(loc);
34
+ try {
35
+ const cfg = loadConfig(configPath);
36
+ await loadChunkersFromConfig(cfg, path.dirname(configPath));
37
+ logCliInfo(logFilePath, "config", `Config: ${configPath}`);
38
+ return logConfigDetails(logFilePath, cfg);
39
+ }
40
+ catch (err) {
41
+ logCliError(logFilePath, "config", `Failed to load config from ${configPath}`, err);
42
+ }
43
+ }
44
+ logCliInfo(logFilePath, "config", `Config: using defaults (no opencode-rag.json found)`);
45
+ return logConfigDetails(logFilePath, DEFAULT_CONFIG);
46
+ }
47
+ function logConfigDetails(logFilePath, config) {
48
+ logCliInfo(logFilePath, "config", ` Embedding provider: ${config.embedding.provider}`);
49
+ logCliInfo(logFilePath, "config", ` Embedding model: ${config.embedding.model}`);
50
+ logCliInfo(logFilePath, "config", ` Vector store: ${config.vectorStore.path}`);
51
+ return config;
52
+ }
53
+ function formatTimestamp(timestamp) {
54
+ if (!timestamp)
55
+ return "never";
56
+ return new Date(timestamp).toLocaleString();
57
+ }
58
+ function logIndexSummary(logFilePath, stats) {
59
+ logCliInfo(logFilePath, "index", ` New: ${stats.newFiles}`);
60
+ logCliInfo(logFilePath, "index", ` Modified: ${stats.modifiedFiles}`);
61
+ logCliInfo(logFilePath, "index", ` Unchanged: ${stats.unchangedFiles}`);
62
+ logCliInfo(logFilePath, "index", ` Deleted: ${stats.deletedFiles}`);
63
+ logCliInfo(logFilePath, "index", ` Removed: ${stats.removedFiles}`);
64
+ logCliInfo(logFilePath, "index", ` Empty skipped: ${stats.skippedEmptyFiles}`);
65
+ logCliInfo(logFilePath, "index", ` Small skipped: ${stats.skippedSmallFiles}`);
66
+ logCliInfo(logFilePath, "index", ` Chunks written: ${stats.totalChunks}`);
67
+ }
68
+ function formatDuration(ms) {
69
+ const seconds = (ms / 1000).toFixed(1);
70
+ if (ms < 60000)
71
+ return `${seconds}s`;
72
+ const minutes = Math.floor(ms / 60000);
73
+ const secs = ((ms % 60000) / 1000).toFixed(0);
74
+ return `${minutes}m ${secs}s`;
75
+ }
76
+ const program = new Command();
77
+ program
78
+ .name("opencode-rag")
79
+ .description("Local-first RAG semantic code search")
80
+ .version("0.1.0");
81
+ program
82
+ .command("index")
83
+ .description("Index workspace files")
84
+ .option("-c, --config <path>", "path to config file")
85
+ .option("-f, --force", "force full re-index")
86
+ .option("-w, --watch", "watch workspace and incrementally re-index on changes")
87
+ .action(async (options) => {
88
+ const started = Date.now();
89
+ try {
90
+ const cwd = process.cwd();
91
+ let logFilePath = path.resolve(cwd, ".opencode", "opencode-rag.log");
92
+ const config = await resolveConfig(options, logFilePath);
93
+ logFilePath = path.resolve(cwd, resolveLogConfig(config).logFilePath);
94
+ logCliInfo(logFilePath, "index", "\nIndexing workspace...");
95
+ const embedder = createEmbedder(config);
96
+ // Detect actual vector dimension from the model
97
+ const probe = await embedder.embed(["dimension-probe"]);
98
+ let vectorDimension = 384;
99
+ if (probe && probe[0] && probe[0].length > 0 && typeof probe[0][0] === "number") {
100
+ vectorDimension = probe[0].length;
101
+ }
102
+ logCliInfo(logFilePath, "index", ` Vector dimension: ${vectorDimension}`);
103
+ const store = new LanceDBStore(path.resolve(cwd, config.vectorStore.path), vectorDimension);
104
+ logCliInfo(logFilePath, "index", `Scanning: ${cwd}`);
105
+ const runPass = async (watchTriggered = false) => {
106
+ const passStarted = Date.now();
107
+ const stats = await runIndexPass({
108
+ cwd,
109
+ storePath: path.resolve(cwd, config.vectorStore.path),
110
+ config,
111
+ store,
112
+ embedder,
113
+ force: Boolean(options.force && !watchTriggered),
114
+ logger: {
115
+ info: (message) => logCliInfo(logFilePath, "index", message),
116
+ warn: (message) => console.warn(message),
117
+ },
118
+ });
119
+ logIndexSummary(logFilePath, stats);
120
+ logCliInfo(logFilePath, "index", `\nIndexing complete. ${stats.finalCount} chunks stored (${formatDuration(Date.now() - passStarted)}).`);
121
+ };
122
+ await runPass(false);
123
+ if (!options.watch) {
124
+ return;
125
+ }
126
+ logCliInfo(logFilePath, "index", "\nWatching for changes...");
127
+ const scheduler = createWatchPassScheduler(() => runPass(true), (error) => {
128
+ const message = error.message || String(error);
129
+ logCliError(logFilePath, "watch", `Watch reindex failed: ${message}`, error);
130
+ console.error(`\nWatch reindex failed: ${message}`);
131
+ }, 300);
132
+ const watcher = chokidar.watch(cwd, {
133
+ ignored: createWatchIgnore(cwd, config, path.resolve(cwd, config.vectorStore.path)),
134
+ ignoreInitial: true,
135
+ persistent: true,
136
+ });
137
+ const handleChange = () => scheduler.notifyChange();
138
+ watcher.on("add", handleChange);
139
+ watcher.on("change", handleChange);
140
+ watcher.on("unlink", handleChange);
141
+ watcher.on("unlinkDir", handleChange);
142
+ watcher.on("addDir", handleChange);
143
+ watcher.on("error", (error) => {
144
+ logCliError(logFilePath, "watch", `Watcher error: ${error.message}`, error);
145
+ console.error(`\nWatcher error: ${error.message}`);
146
+ });
147
+ const shutdown = async () => {
148
+ scheduler.close();
149
+ await watcher.close();
150
+ process.exit(0);
151
+ };
152
+ process.once("SIGINT", () => void shutdown());
153
+ process.once("SIGTERM", () => void shutdown());
154
+ const duration = formatDuration(Date.now() - started);
155
+ logCliInfo(logFilePath, "index", `Watcher ready (${duration} startup). Press Ctrl+C to stop.`);
156
+ }
157
+ catch (err) {
158
+ const message = err.message || String(err);
159
+ const logFilePath = path.resolve(process.cwd(), ".opencode", "opencode-rag.log");
160
+ logCliError(logFilePath, "index", `Indexing failed: ${message}`, err);
161
+ console.error(`\nIndexing failed: ${message}`);
162
+ if (message.toLowerCase().includes("fetch") || message.toLowerCase().includes("econnrefused")) {
163
+ console.error("Hint: Is your embedding provider running?");
164
+ }
165
+ process.exit(1);
166
+ }
167
+ });
168
+ program
169
+ .command("query")
170
+ .description("Search the indexed codebase")
171
+ .argument("<query>", "natural language query")
172
+ .option("-c, --config <path>", "path to config file")
173
+ .option("-n, --top-k <number>", "number of results", "10")
174
+ .action(async (query, options) => {
175
+ const started = Date.now();
176
+ try {
177
+ const cwd = process.cwd();
178
+ let logFilePath = path.resolve(cwd, ".opencode", "opencode-rag.log");
179
+ const config = await resolveConfig(options, logFilePath);
180
+ logFilePath = path.resolve(cwd, resolveLogConfig(config).logFilePath);
181
+ logCliInfo(logFilePath, "query", `\nQuerying: "${query}"`);
182
+ logCliInfo(logFilePath, "query", `Top-K: ${parseInt(options.topK ?? "10", 10)}`);
183
+ const embedder = createEmbedder(config);
184
+ const store = new LanceDBStore(path.resolve(cwd, config.vectorStore.path));
185
+ const indexedCount = await store.count();
186
+ if (indexedCount === 0) {
187
+ logCliInfo(logFilePath, "query", "No indexed chunks found. Run 'opencode-rag index' first.");
188
+ return;
189
+ }
190
+ logCliInfo(logFilePath, "query", `Searching ${indexedCount} indexed chunks...`);
191
+ const topK = parseInt(options.topK ?? "10", 10);
192
+ const results = await retrieve(query, embedder, store, { topK });
193
+ if (results.length === 0) {
194
+ logCliInfo(logFilePath, "query", "No results found.");
195
+ return;
196
+ }
197
+ const duration = formatDuration(Date.now() - started);
198
+ logCliInfo(logFilePath, "query", `\n${results.length} result(s) in ${duration}:\n`);
199
+ for (const r of results) {
200
+ logCliInfo(logFilePath, "query", ` ${r.chunk.metadata.filePath}:${r.chunk.metadata.startLine}-${r.chunk.metadata.endLine}`);
201
+ logCliInfo(logFilePath, "query", ` Score: ${r.score.toFixed(4)}`);
202
+ logCliInfo(logFilePath, "query", ` ${r.chunk.content.slice(0, 200).replace(/\n/g, "\n ")}`);
203
+ }
204
+ }
205
+ catch (err) {
206
+ const message = err.message || String(err);
207
+ const logFilePath = path.resolve(process.cwd(), ".opencode", "opencode-rag.log");
208
+ logCliError(logFilePath, "query", `Query failed: ${message}`, err);
209
+ console.error(`\nQuery failed: ${message}`);
210
+ if (message.toLowerCase().includes("fetch") || message.toLowerCase().includes("econnrefused")) {
211
+ console.error("Hint: Is your embedding provider running?");
212
+ }
213
+ process.exit(1);
214
+ }
215
+ });
216
+ program
217
+ .command("clear")
218
+ .description("Clear all indexed data")
219
+ .option("-c, --config <path>", "path to config file")
220
+ .action(async (options) => {
221
+ try {
222
+ const cwd = process.cwd();
223
+ let logFilePath = path.resolve(cwd, ".opencode", "opencode-rag.log");
224
+ const config = await resolveConfig(options, logFilePath);
225
+ logFilePath = path.resolve(cwd, resolveLogConfig(config).logFilePath);
226
+ const store = new LanceDBStore(path.resolve(cwd, config.vectorStore.path));
227
+ const prevCount = await store.count();
228
+ if (prevCount === 0) {
229
+ logCliInfo(logFilePath, "clear", "No indexed data to clear.");
230
+ return;
231
+ }
232
+ logCliInfo(logFilePath, "clear", `Clearing ${prevCount} indexed chunks...`);
233
+ await store.clear();
234
+ logCliInfo(logFilePath, "clear", `Done. ${prevCount} chunks removed.`);
235
+ }
236
+ catch (err) {
237
+ const message = err.message || String(err);
238
+ const logFilePath = path.resolve(process.cwd(), ".opencode", "opencode-rag.log");
239
+ logCliError(logFilePath, "clear", `Clear failed: ${message}`, err);
240
+ console.error(`\nClear failed: ${message}`);
241
+ process.exit(1);
242
+ }
243
+ });
244
+ program
245
+ .command("status")
246
+ .description("Show indexing status")
247
+ .option("-c, --config <path>", "path to config file")
248
+ .action(async (options) => {
249
+ try {
250
+ const cwd = process.cwd();
251
+ let logFilePath = path.resolve(cwd, ".opencode", "opencode-rag.log");
252
+ const config = await resolveConfig(options, logFilePath);
253
+ logFilePath = path.resolve(cwd, resolveLogConfig(config).logFilePath);
254
+ const store = new LanceDBStore(path.resolve(cwd, config.vectorStore.path));
255
+ const count = await store.count();
256
+ const summary = await getIndexStatusSummary(cwd, path.resolve(cwd, config.vectorStore.path), config, store);
257
+ logCliInfo(logFilePath, "status", `\nIndexed chunks: ${count}`);
258
+ logCliInfo(logFilePath, "status", `Store path: ${path.resolve(cwd, config.vectorStore.path)}`);
259
+ logCliInfo(logFilePath, "status", `Embedding provider: ${config.embedding.provider}`);
260
+ logCliInfo(logFilePath, "status", `Embedding model: ${config.embedding.model}`);
261
+ logCliInfo(logFilePath, "status", `File extensions: ${config.indexing.includeExtensions.join(", ")}`);
262
+ logCliInfo(logFilePath, "status", `Excluded dirs: ${config.indexing.excludeDirs.join(", ")}`);
263
+ logCliInfo(logFilePath, "status", `Default top-K: ${config.retrieval.topK}`);
264
+ logCliInfo(logFilePath, "status", `Plugin enabled: ${config.openCode.enabled}`);
265
+ logCliInfo(logFilePath, "status", `Manifest status: ${summary.manifestStatus}`);
266
+ logCliInfo(logFilePath, "status", `Manifest entries: ${summary.manifestEntries}`);
267
+ logCliInfo(logFilePath, "status", `Last indexed: ${formatTimestamp(summary.lastIndexedAt)}`);
268
+ logCliInfo(logFilePath, "status", `Up-to-date files: ${summary.upToDateFiles}`);
269
+ logCliInfo(logFilePath, "status", `Pending files: ${summary.pendingFiles}`);
270
+ logCliInfo(logFilePath, "status", `Watch mode: off`);
271
+ if (summary.rebuildRequired) {
272
+ logCliInfo(logFilePath, "status", `Rebuild required: yes (manifest missing/corrupt)`);
273
+ }
274
+ }
275
+ catch (err) {
276
+ const message = err.message || String(err);
277
+ const logFilePath = path.resolve(process.cwd(), ".opencode", "opencode-rag.log");
278
+ logCliError(logFilePath, "status", `Status check failed: ${message}`, err);
279
+ console.error(`\nStatus check failed: ${message}`);
280
+ process.exit(1);
281
+ }
282
+ });
283
+ if (import.meta.url === `file://${process.argv[1]?.replace(/\\/g, "/")}` ||
284
+ process.argv[1]?.endsWith("cli.ts") ||
285
+ process.argv[1]?.endsWith("cli.js")) {
286
+ program.parseAsync(process.argv);
287
+ }
288
+ export async function runCli(argv = process.argv) {
289
+ await program.parseAsync(argv);
290
+ }
291
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { EmbeddingProvider, Chunker, VectorStore } from "./interfaces.js";
2
+ export interface ChunkerConfig {
3
+ module: string;
4
+ extensions: string[];
5
+ }
6
+ export interface ProxyConfig {
7
+ url?: string;
8
+ username?: string;
9
+ password?: string;
10
+ noProxy?: string;
11
+ }
12
+ export interface AutoIndexConfig {
13
+ enabled: boolean;
14
+ debounceMs: number;
15
+ intervalMs: number;
16
+ }
17
+ export interface RagConfig {
18
+ embedding: {
19
+ provider: "ollama" | "openai";
20
+ baseUrl: string;
21
+ apiKey?: string;
22
+ model: string;
23
+ timeoutMs?: number;
24
+ proxy?: ProxyConfig;
25
+ };
26
+ indexing: {
27
+ includeExtensions: string[];
28
+ excludeDirs: string[];
29
+ chunkOverlap: number;
30
+ minFileSizeBytes?: number;
31
+ };
32
+ vectorStore: {
33
+ path: string;
34
+ };
35
+ retrieval: {
36
+ topK: number;
37
+ };
38
+ openCode: {
39
+ enabled: boolean;
40
+ maxContextChunks: number;
41
+ autoIndex?: AutoIndexConfig;
42
+ overrideRead?: boolean;
43
+ };
44
+ chunkers?: ChunkerConfig[];
45
+ logging: LoggingConfig;
46
+ }
47
+ export interface LoggingConfig {
48
+ level: "debug" | "info" | "error";
49
+ logFilePath: string;
50
+ }
51
+ export declare const DEFAULT_CONFIG: RagConfig;
52
+ export declare function resolveLogConfig(config: RagConfig): LoggingConfig;
53
+ export interface RagContext {
54
+ config: RagConfig;
55
+ embedder: EmbeddingProvider;
56
+ chunker: Chunker;
57
+ vectorStore: VectorStore;
58
+ }
59
+ export declare function loadConfig(filePath: string): RagConfig;
@@ -0,0 +1,127 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { env } from "node:process";
3
+ export const DEFAULT_CONFIG = {
4
+ embedding: {
5
+ provider: "ollama",
6
+ baseUrl: "http://localhost:11434/api",
7
+ model: "embeddinggemma",
8
+ timeoutMs: 30000,
9
+ },
10
+ indexing: {
11
+ includeExtensions: [
12
+ ".ts",
13
+ ".tsx",
14
+ ".js",
15
+ ".jsx",
16
+ ".mjs",
17
+ ".cjs",
18
+ ".py",
19
+ ".java",
20
+ ".go",
21
+ ".md",
22
+ ".c",
23
+ ".h",
24
+ ".cpp",
25
+ ".cc",
26
+ ".cxx",
27
+ ".hpp",
28
+ ".hxx",
29
+ ".cs",
30
+ ".aspx",
31
+ ".razor",
32
+ ".cshtml",
33
+ ".json",
34
+ ".html",
35
+ ".htm",
36
+ ".css",
37
+ ".xml",
38
+ ".csproj",
39
+ ".sln",
40
+ ".rs",
41
+ ".rb",
42
+ ".kt",
43
+ ".kts",
44
+ ".swift",
45
+ ".tex",
46
+ ".pdf",
47
+ ],
48
+ excludeDirs: [
49
+ "node_modules",
50
+ ".git",
51
+ ".opencode",
52
+ "dist",
53
+ "build",
54
+ "__pycache__",
55
+ ".venv",
56
+ ],
57
+ chunkOverlap: 0,
58
+ minFileSizeBytes: 1024,
59
+ },
60
+ vectorStore: {
61
+ path: "./.opencode/rag_db",
62
+ },
63
+ retrieval: {
64
+ topK: 10,
65
+ },
66
+ openCode: {
67
+ enabled: true,
68
+ maxContextChunks: 5,
69
+ overrideRead: false,
70
+ autoIndex: {
71
+ enabled: true,
72
+ debounceMs: 5000,
73
+ intervalMs: 300000,
74
+ },
75
+ },
76
+ logging: {
77
+ level: "info",
78
+ logFilePath: "./.opencode/opencode-rag.log",
79
+ },
80
+ };
81
+ export function resolveLogConfig(config) {
82
+ return {
83
+ level: config.logging?.level ?? DEFAULT_CONFIG.logging.level,
84
+ logFilePath: config.logging?.logFilePath ?? env.LOG_FILE_PATH ?? DEFAULT_CONFIG.logging.logFilePath,
85
+ };
86
+ }
87
+ export function loadConfig(filePath) {
88
+ const raw = readFileSync(filePath, "utf-8");
89
+ const parsed = JSON.parse(raw);
90
+ return {
91
+ embedding: {
92
+ ...DEFAULT_CONFIG.embedding,
93
+ ...parsed.embedding,
94
+ },
95
+ indexing: {
96
+ ...DEFAULT_CONFIG.indexing,
97
+ ...parsed.indexing,
98
+ },
99
+ vectorStore: {
100
+ ...DEFAULT_CONFIG.vectorStore,
101
+ ...parsed.vectorStore,
102
+ },
103
+ retrieval: {
104
+ ...DEFAULT_CONFIG.retrieval,
105
+ ...parsed.retrieval,
106
+ },
107
+ openCode: (() => {
108
+ const base = DEFAULT_CONFIG.openCode;
109
+ const user = parsed.openCode ?? {};
110
+ const merged = {
111
+ ...base,
112
+ ...user,
113
+ autoIndex: {
114
+ ...base.autoIndex,
115
+ ...(user.autoIndex ?? {}),
116
+ },
117
+ };
118
+ return merged;
119
+ })(),
120
+ chunkers: parsed.chunkers ?? DEFAULT_CONFIG.chunkers,
121
+ logging: {
122
+ ...DEFAULT_CONFIG.logging,
123
+ ...(parsed.logging ?? {}),
124
+ },
125
+ };
126
+ }
127
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface DebugLogEntry {
2
+ scope: string;
3
+ message: string;
4
+ error?: unknown;
5
+ }
6
+ export declare function appendDebugLog(logFilePath: string, entry: DebugLogEntry): void;
@@ -0,0 +1,32 @@
1
+ import { appendFileSync, mkdirSync } from "node:fs";
2
+ import path from "node:path";
3
+ function formatError(error) {
4
+ if (error instanceof Error) {
5
+ return error.stack ?? `${error.name}: ${error.message}`;
6
+ }
7
+ if (typeof error === "string") {
8
+ return error;
9
+ }
10
+ try {
11
+ return JSON.stringify(error);
12
+ }
13
+ catch {
14
+ return String(error);
15
+ }
16
+ }
17
+ export function appendDebugLog(logFilePath, entry) {
18
+ try {
19
+ mkdirSync(path.dirname(logFilePath), { recursive: true });
20
+ const lines = [
21
+ `[${new Date().toISOString()}] [${entry.scope}] ${entry.message}`,
22
+ ];
23
+ if (typeof entry.error !== "undefined") {
24
+ lines.push(formatError(entry.error));
25
+ }
26
+ appendFileSync(logFilePath, `${lines.join("\n")}\n\n`, "utf8");
27
+ }
28
+ catch {
29
+ // Logging must never break the plugin.
30
+ }
31
+ }
32
+ //# sourceMappingURL=fileLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileLogger.js","sourceRoot":"","sources":["../../src/core/fileLogger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;IAC1D,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,WAAmB,EAAE,KAAoB;IACtE,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1D,MAAM,KAAK,GAAG;YACZ,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,EAAE;SAClE,CAAC;QAEF,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,cAAc,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ export interface Chunk {
2
+ id: string;
3
+ content: string;
4
+ embedding?: number[];
5
+ metadata: {
6
+ filePath: string;
7
+ startLine: number;
8
+ endLine: number;
9
+ language: string;
10
+ };
11
+ }
12
+ export interface SearchResult {
13
+ chunk: Chunk;
14
+ score: number;
15
+ }
16
+ export interface Chunker {
17
+ readonly language: string;
18
+ readonly fileExtensions?: string[];
19
+ chunk(filePath: string, content: string): Promise<Chunk[]>;
20
+ }
21
+ export interface EmbeddingProvider {
22
+ readonly name: string;
23
+ embed(texts: string[]): Promise<number[][]>;
24
+ }
25
+ export interface VectorStore {
26
+ addChunks(chunks: Chunk[]): Promise<void>;
27
+ search(embedding: number[], topK: number): Promise<SearchResult[]>;
28
+ count(): Promise<number>;
29
+ clear(): Promise<void>;
30
+ deleteByFilePath(filePath: string): Promise<void>;
31
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/core/interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ export interface ManifestEntry {
2
+ hash: string;
3
+ chunkCount: number;
4
+ indexedAt: number;
5
+ }
6
+ export interface FileManifest {
7
+ lastIndexedAt?: number;
8
+ files: Record<string, ManifestEntry>;
9
+ }
10
+ export type ManifestStatus = "ok" | "missing" | "corrupt";
11
+ export interface LoadedManifest {
12
+ manifest: FileManifest;
13
+ path: string;
14
+ status: ManifestStatus;
15
+ }
16
+ export declare function createEmptyManifest(): FileManifest;
17
+ export declare function manifestPathFor(dbPath: string): string;
18
+ export declare function normalizeFilePath(filePath: string): string;
19
+ export declare function computeFileHash(content: string): string;
20
+ export declare function loadManifest(dbPath: string): Promise<LoadedManifest>;
21
+ export declare function saveManifest(dbPath: string, manifest: FileManifest): Promise<void>;