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/plugin.js ADDED
@@ -0,0 +1,477 @@
1
+ import { tool } from "@opencode-ai/plugin/tool";
2
+ import { loadConfig, DEFAULT_CONFIG, resolveLogConfig } from "./core/config.js";
3
+ import { createEmbedder } from "./embedder/factory.js";
4
+ import { LanceDBStore } from "./vectorstore/lancedb.js";
5
+ import { retrieve } from "./retriever/retriever.js";
6
+ import { loadChunkersFromConfig } from "./chunker/loader.js";
7
+ import { appendDebugLog } from "./core/fileLogger.js";
8
+ import { createBackgroundIndexer } from "./watcher.js";
9
+ import { existsSync } from "node:fs";
10
+ import path from "node:path";
11
+ const configCache = new Map();
12
+ const backgroundIndexers = new Map();
13
+ const CONTEXT_TOOL_NAME = "opencode-rag-context";
14
+ const CONTEXT_MARKER = "opencode-rag retrieved context";
15
+ function appendVerboseLog(logFilePath, scope, message, payload) {
16
+ appendDebugLog(logFilePath, {
17
+ scope,
18
+ message: payload
19
+ ? `${message}\n${formatLogPayload(payload)}`
20
+ : message,
21
+ });
22
+ }
23
+ function formatLogPayload(value, indent = 0) {
24
+ const prefix = " ".repeat(indent);
25
+ if (value === null) {
26
+ return `${prefix}null`;
27
+ }
28
+ if (typeof value === "string") {
29
+ return indentMultiline(value, indent);
30
+ }
31
+ if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") {
32
+ return `${prefix}${String(value)}`;
33
+ }
34
+ if (typeof value === "undefined") {
35
+ return `${prefix}undefined`;
36
+ }
37
+ if (Array.isArray(value)) {
38
+ if (value.length === 0) {
39
+ return `${prefix}[]`;
40
+ }
41
+ return value
42
+ .map((item) => {
43
+ if (item === null || typeof item === "number" || typeof item === "boolean" || typeof item === "bigint") {
44
+ return `${prefix}- ${String(item)}`;
45
+ }
46
+ if (typeof item === "undefined") {
47
+ return `${prefix}- undefined`;
48
+ }
49
+ if (typeof item === "string") {
50
+ return `${prefix}- ${item.includes("\n") ? `\n${indentMultiline(item, indent + 1)}` : item}`;
51
+ }
52
+ return `${prefix}-\n${formatLogPayload(item, indent + 1)}`;
53
+ })
54
+ .join("\n");
55
+ }
56
+ if (typeof value === "object") {
57
+ const entries = Object.entries(value);
58
+ if (entries.length === 0) {
59
+ return `${prefix}{}`;
60
+ }
61
+ return entries
62
+ .map(([key, nested]) => {
63
+ if (nested === null || typeof nested === "number" || typeof nested === "boolean" || typeof nested === "bigint") {
64
+ return `${prefix}${key}: ${String(nested)}`;
65
+ }
66
+ if (typeof nested === "undefined") {
67
+ return `${prefix}${key}: undefined`;
68
+ }
69
+ if (typeof nested === "string") {
70
+ return `${prefix}${key}:\n${indentMultiline(nested, indent + 1)}`;
71
+ }
72
+ return `${prefix}${key}:\n${formatLogPayload(nested, indent + 1)}`;
73
+ })
74
+ .join("\n");
75
+ }
76
+ return `${prefix}${String(value)}`;
77
+ }
78
+ function indentMultiline(text, indent) {
79
+ const prefix = " ".repeat(indent);
80
+ return text
81
+ .split("\n")
82
+ .map((line) => `${prefix}${line}`)
83
+ .join("\n");
84
+ }
85
+ async function getConfig(directory) {
86
+ const cached = configCache.get(directory);
87
+ if (cached)
88
+ return cached;
89
+ for (const loc of ["opencode-rag.json", ".opencode/opencode-rag.json", ".opencode/rag.json"]) {
90
+ const configPath = path.join(directory, loc);
91
+ if (!existsSync(configPath)) {
92
+ continue;
93
+ }
94
+ try {
95
+ const cfg = loadConfig(configPath);
96
+ await loadChunkersFromConfig(cfg, path.dirname(configPath));
97
+ configCache.set(directory, cfg);
98
+ return cfg;
99
+ }
100
+ catch (err) {
101
+ appendDebugLog(path.resolve(directory, ".opencode", "opencode-rag.log"), {
102
+ scope: "config",
103
+ message: `Failed to load config from ${configPath}`,
104
+ error: err,
105
+ });
106
+ }
107
+ }
108
+ configCache.set(directory, DEFAULT_CONFIG);
109
+ return DEFAULT_CONFIG;
110
+ }
111
+ function formatContext(results) {
112
+ if (results.length === 0)
113
+ return "";
114
+ const avgScore = results.reduce((sum, r) => sum + r.score, 0) / results.length;
115
+ const parts = [];
116
+ parts.push(`\n**${CONTEXT_MARKER}** _(context: ${results.length} chunks, avg relevance: ${avgScore.toFixed(2)})_\n`);
117
+ parts.push("---\n");
118
+ for (const r of results) {
119
+ const m = r.chunk.metadata;
120
+ parts.push(`[${m.filePath}:${m.startLine}-${m.endLine}] (${m.language}, score: ${r.score.toFixed(2)})`);
121
+ parts.push("```" + m.language);
122
+ parts.push(r.chunk.content);
123
+ parts.push("```\n");
124
+ }
125
+ parts.push("---\n");
126
+ return parts.join("\n");
127
+ }
128
+ function buildRetrievalQuery(hints) {
129
+ const parts = [hints.query.trim()];
130
+ const pathHints = hints.pathHints?.map((hint) => hint.trim()).filter((hint) => hint.length > 0) ?? [];
131
+ if (pathHints.length > 0) {
132
+ parts.push(`Path hints: ${pathHints.join(", ")}`);
133
+ }
134
+ const languageHints = hints.languageHints?.map((hint) => hint.trim()).filter((hint) => hint.length > 0) ?? [];
135
+ if (languageHints.length > 0) {
136
+ parts.push(`Language hints: ${languageHints.join(", ")}`);
137
+ }
138
+ return parts.join("\n").trim();
139
+ }
140
+ function dedupeResults(results) {
141
+ const seen = new Set();
142
+ const deduped = [];
143
+ for (const result of results) {
144
+ const chunk = result.chunk;
145
+ const key = [
146
+ chunk.metadata.filePath,
147
+ chunk.metadata.startLine,
148
+ chunk.metadata.endLine,
149
+ chunk.content,
150
+ ].join(":");
151
+ if (seen.has(key))
152
+ continue;
153
+ seen.add(key);
154
+ deduped.push(result);
155
+ }
156
+ return deduped;
157
+ }
158
+ async function retrieveContext(query, embedder, store, topK, retrieveFn = retrieve) {
159
+ if (query.trim().length === 0)
160
+ return [];
161
+ return retrieveFn(query, embedder, store, { topK });
162
+ }
163
+ async function loadRetrievedResults(query, embedder, store, cfg, retrieveFn = retrieve, topK = cfg.retrieval.topK, extraQuery) {
164
+ const primaryResults = await retrieveContext(query, embedder, store, topK, retrieveFn);
165
+ const extraResults = extraQuery
166
+ ? await retrieveContext(extraQuery, embedder, store, topK, retrieveFn)
167
+ : [];
168
+ return dedupeResults([...primaryResults, ...extraResults])
169
+ .sort((a, b) => b.score - a.score)
170
+ .slice(0, cfg.openCode.maxContextChunks);
171
+ }
172
+ const defaultDependencies = {
173
+ createEmbedder,
174
+ createStore: (storePath) => new LanceDBStore(storePath),
175
+ retrieve,
176
+ };
177
+ function formatFileList(results, worktree) {
178
+ const fileMap = new Map();
179
+ for (const r of results) {
180
+ const m = r.chunk.metadata;
181
+ const existing = fileMap.get(m.filePath);
182
+ if (existing) {
183
+ existing.lines.push(m.startLine, m.endLine);
184
+ existing.scores.push(r.score);
185
+ }
186
+ else {
187
+ fileMap.set(m.filePath, {
188
+ lines: [m.startLine, m.endLine],
189
+ scores: [r.score],
190
+ });
191
+ }
192
+ }
193
+ const sorted = [...fileMap.entries()]
194
+ .sort((a, b) => Math.max(...b[1].scores) - Math.max(...a[1].scores))
195
+ .slice(0, 10);
196
+ if (sorted.length === 0)
197
+ return "";
198
+ const lines = [];
199
+ for (const [filePath, info] of sorted) {
200
+ const relPath = path.relative(worktree, filePath);
201
+ const minLine = Math.min(...info.lines);
202
+ const maxLine = Math.max(...info.lines);
203
+ const relevance = Math.max(...info.scores).toFixed(2);
204
+ const lang = results.find((r) => r.chunk.metadata.filePath === filePath)?.chunk.metadata.language ?? "";
205
+ lines.push(`${relPath} (${lang}, lines ${minLine}-${maxLine}, relevance ${relevance})`);
206
+ }
207
+ lines.push(`\n(Showing top ${sorted.length} relevant files. Run "${CONTEXT_TOOL_NAME}" tool with path hints for more targeted context.)`);
208
+ let linesReturn = lines.join("\n");
209
+ return linesReturn;
210
+ }
211
+ /**
212
+ * Extract the user message text from chat.message hook input/output.
213
+ *
214
+ * Attempts to find the user's message content from output.message first
215
+ * (via parts/text), then falls back to input fields.
216
+ */
217
+ function extractUserMessageText(input, output) {
218
+ // Try to extract from output.parts first (most common path)
219
+ if (output?.message) {
220
+ const msg = output.message;
221
+ // Check for parts array in message
222
+ const parts = (Array.isArray(msg.parts) ? msg.parts : undefined) ?? output.parts;
223
+ if (parts) {
224
+ const textParts = parts
225
+ .filter((p) => typeof p === "object" && p !== null)
226
+ .map((p) => (typeof p.text === "string" ? p.text : ""))
227
+ .filter((t) => t.length > 0);
228
+ if (textParts.length > 0) {
229
+ return textParts.join(" ");
230
+ }
231
+ }
232
+ // Check for content string in message
233
+ if (typeof msg.content === "string" && msg.content.length > 0) {
234
+ return msg.content;
235
+ }
236
+ }
237
+ return "";
238
+ }
239
+ export function createRagHooks(options) {
240
+ const dependencies = {
241
+ ...defaultDependencies,
242
+ ...options.dependencies,
243
+ };
244
+ const embedder = options.embedder ?? dependencies.createEmbedder(options.cfg);
245
+ const store = options.store ?? dependencies.createStore(options.storePath);
246
+ // Session-level caches for lazy retrieval
247
+ const sessionLastMessage = new Map();
248
+ const sessionRetrievalCache = new Map();
249
+ appendDebugLog(options.logFilePath, {
250
+ scope: "plugin",
251
+ message: "OpenCode plugin initialized",
252
+ });
253
+ const retrievalTool = tool({
254
+ description: "Retrieve the most relevant indexed code chunks before planning, answering, or editing. Use it to get file-level evidence, line ranges, and surrounding implementation details.",
255
+ args: {
256
+ query: tool.schema.string().min(1, "A retrieval query is required."),
257
+ pathHints: tool.schema.array(tool.schema.string().min(1)).max(10).optional(),
258
+ languageHints: tool.schema.array(tool.schema.string().min(1)).max(10).optional(),
259
+ topK: tool.schema.number().int().min(1).max(25).optional(),
260
+ },
261
+ async execute(args) {
262
+ try {
263
+ const count = await store.count();
264
+ if (count === 0) {
265
+ appendVerboseLog(options.logFilePath, CONTEXT_TOOL_NAME, "retrieval requested but no chunks are indexed", {
266
+ query: args.query,
267
+ pathHints: args.pathHints ?? [],
268
+ languageHints: args.languageHints ?? [],
269
+ topK: args.topK ?? options.cfg.retrieval.topK,
270
+ });
271
+ return {
272
+ title: "OpenCodeRAG context",
273
+ output: "No indexed chunks are available yet. Run indexing first, then ask again for code context.",
274
+ metadata: {
275
+ query: args.query,
276
+ chunks: 0,
277
+ indexed: false,
278
+ },
279
+ };
280
+ }
281
+ const query = buildRetrievalQuery({
282
+ query: args.query,
283
+ pathHints: args.pathHints,
284
+ languageHints: args.languageHints,
285
+ });
286
+ const topK = args.topK ?? options.cfg.retrieval.topK;
287
+ const results = await loadRetrievedResults(query, embedder, store, options.cfg, dependencies.retrieve, topK);
288
+ if (results.length === 0) {
289
+ appendVerboseLog(options.logFilePath, CONTEXT_TOOL_NAME, "retrieval completed with no matching chunks", {
290
+ query,
291
+ pathHints: args.pathHints ?? [],
292
+ languageHints: args.languageHints ?? [],
293
+ topK,
294
+ });
295
+ return {
296
+ title: "OpenCodeRAG context",
297
+ output: `${CONTEXT_MARKER}\n\nNo indexed chunks matched the query.`,
298
+ metadata: {
299
+ query: args.query,
300
+ chunks: 0,
301
+ indexed: true,
302
+ },
303
+ };
304
+ }
305
+ const output = formatContext(results);
306
+ appendVerboseLog(options.logFilePath, CONTEXT_TOOL_NAME, "retrieval completed successfully", {
307
+ query,
308
+ pathHints: args.pathHints ?? [],
309
+ languageHints: args.languageHints ?? [],
310
+ topK,
311
+ results: results.map((result) => ({
312
+ filePath: result.chunk.metadata.filePath,
313
+ startLine: result.chunk.metadata.startLine,
314
+ endLine: result.chunk.metadata.endLine,
315
+ language: result.chunk.metadata.language,
316
+ score: result.score,
317
+ })),
318
+ output,
319
+ });
320
+ return {
321
+ title: `OpenCodeRAG context (${results.length} chunk${results.length === 1 ? "" : "s"})`,
322
+ output,
323
+ metadata: {
324
+ query: args.query,
325
+ topK,
326
+ chunks: results.length,
327
+ indexed: true,
328
+ pathHints: args.pathHints ?? [],
329
+ languageHints: args.languageHints ?? [],
330
+ },
331
+ };
332
+ }
333
+ catch (err) {
334
+ appendDebugLog(options.logFilePath, {
335
+ scope: CONTEXT_TOOL_NAME,
336
+ message: "chunk retrieval tool error",
337
+ error: err,
338
+ });
339
+ return {
340
+ title: "OpenCodeRAG context",
341
+ output: "OpenCodeRAG could not retrieve context right now. Try again after indexing or reduce the query scope.",
342
+ metadata: {
343
+ query: args.query,
344
+ chunks: 0,
345
+ indexed: false,
346
+ },
347
+ };
348
+ }
349
+ },
350
+ });
351
+ const tools = {
352
+ [CONTEXT_TOOL_NAME]: retrievalTool,
353
+ };
354
+ return {
355
+ async event({ event }) {
356
+ //appendVerboseLog(options.logFilePath, "event", "opencode event received", event);
357
+ },
358
+ tool: tools,
359
+ async "experimental.chat.system.transform"(_input, output) {
360
+ appendDebugLog(options.logFilePath, {
361
+ scope: "experimental.chat.system.transform",
362
+ message: "system guidance injected",
363
+ });
364
+ const guidance = [
365
+ "OpenCodeRAG is available through the `opencode-rag-context` tool.",
366
+ "Use it before planning, editing, or answering when you need code provenance, surrounding implementation, or file-level evidence.",
367
+ "Prefer narrow queries and add path or language hints when they are known.",
368
+ ];
369
+ output.system.unshift(guidance.join(" "));
370
+ },
371
+ async "chat.message"(input, output) {
372
+ try {
373
+ const text = extractUserMessageText(input, output);
374
+ if (text.length === 0)
375
+ return;
376
+ sessionLastMessage.set(input.sessionID, text);
377
+ const count = await store.count();
378
+ if (count === 0)
379
+ return;
380
+ const results = await dependencies.retrieve(text, embedder, store, {
381
+ topK: options.cfg.retrieval.topK,
382
+ });
383
+ if (results.length === 0)
384
+ return;
385
+ const suggestionList = formatFileList(results, options.worktree);
386
+ if (!suggestionList)
387
+ return;
388
+ const parts = output?.parts ?? output?.message?.parts;
389
+ if (Array.isArray(parts) && parts.length > 0) {
390
+ const first = parts[0];
391
+ if (typeof first.text === "string") {
392
+ first.text = `${first.text}\n\n${suggestionList}`;
393
+ }
394
+ }
395
+ }
396
+ catch (err) {
397
+ appendDebugLog(options.logFilePath, {
398
+ scope: "chat.message",
399
+ message: "failed to suggest related files",
400
+ error: err,
401
+ });
402
+ }
403
+ },
404
+ };
405
+ }
406
+ export const ragPlugin = async (input, _options) => {
407
+ const cfg = await getConfig(input.directory);
408
+ const logFilePath = path.resolve(input.directory, resolveLogConfig(cfg).logFilePath);
409
+ if (!cfg.openCode.enabled) {
410
+ return {};
411
+ }
412
+ const storePath = path.resolve(input.directory, cfg.vectorStore.path);
413
+ // Close existing indexer for this directory if one exists (e.g. on plugin reload)
414
+ const existingIndexer = backgroundIndexers.get(input.directory);
415
+ if (existingIndexer) {
416
+ try {
417
+ await existingIndexer.close();
418
+ }
419
+ catch (err) {
420
+ appendDebugLog(logFilePath, {
421
+ scope: "plugin",
422
+ message: "Failed to close existing background indexer",
423
+ error: err,
424
+ });
425
+ }
426
+ backgroundIndexers.delete(input.directory);
427
+ }
428
+ appendDebugLog(logFilePath, {
429
+ scope: "plugin",
430
+ message: `OpenCode plugin enabled for ${input.directory}`,
431
+ });
432
+ // Probe vector dimension and create store with correct dimension
433
+ const embedder = createEmbedder(cfg);
434
+ let vectorDimension = 384;
435
+ try {
436
+ const probe = await embedder.embed(["dimension-probe"]);
437
+ if (probe && probe[0] && probe[0].length > 0 && typeof probe[0][0] === "number") {
438
+ vectorDimension = probe[0].length;
439
+ }
440
+ appendDebugLog(logFilePath, {
441
+ scope: "plugin",
442
+ message: `Vector dimension: ${vectorDimension}`,
443
+ });
444
+ }
445
+ catch (err) {
446
+ appendDebugLog(logFilePath, {
447
+ scope: "plugin",
448
+ message: `Dimension probe failed, falling back to ${vectorDimension}`,
449
+ error: err,
450
+ });
451
+ }
452
+ const store = new LanceDBStore(storePath, vectorDimension);
453
+ const hooks = createRagHooks({
454
+ cfg,
455
+ storePath,
456
+ logFilePath,
457
+ worktree: input.directory,
458
+ embedder,
459
+ store,
460
+ });
461
+ // Start background auto-indexer if enabled
462
+ const autoIndexCfg = cfg.openCode.autoIndex ?? { enabled: true, debounceMs: 5000, intervalMs: 300000 };
463
+ if (autoIndexCfg.enabled) {
464
+ const indexer = createBackgroundIndexer({
465
+ cwd: input.directory,
466
+ storePath,
467
+ config: cfg,
468
+ store,
469
+ embedder,
470
+ logFilePath,
471
+ });
472
+ backgroundIndexers.set(input.directory, indexer);
473
+ }
474
+ return hooks;
475
+ };
476
+ export default ragPlugin;
477
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { EmbeddingProvider, VectorStore, SearchResult } from "../core/interfaces.js";
2
+ export interface RetrieveOptions {
3
+ topK?: number;
4
+ }
5
+ export declare function retrieve(query: string, embedder: EmbeddingProvider, store: VectorStore, options?: RetrieveOptions): Promise<SearchResult[]>;
@@ -0,0 +1,14 @@
1
+ export async function retrieve(query, embedder, store, options = {}) {
2
+ const topK = options.topK ?? 10;
3
+ const embeddings = await embedder.embed([query]);
4
+ const embedding = embeddings[0];
5
+ if (!embedding || embedding.length === 0) {
6
+ return [];
7
+ }
8
+ // Guard against malformed provider output before searching.
9
+ if (typeof embedding[0] !== "number") {
10
+ return [];
11
+ }
12
+ return store.search(embedding, topK);
13
+ }
14
+ //# sourceMappingURL=retriever.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retriever.js","sourceRoot":"","sources":["../../src/retriever/retriever.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,KAAa,EACb,QAA2B,EAC3B,KAAkB,EAClB,UAA2B,EAAE;IAE7B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;IAEhC,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,4DAA4D;IAC5D,IAAI,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,CAAC,SAAqB,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,51 @@
1
+ declare module "@opencode-ai/plugin" {
2
+ import type { Event, createOpencodeClient, Project, Model, Provider, Permission, UserMessage, Message, Part, Config as SDKConfig } from "@opencode-ai/sdk";
3
+ import type { Provider as ProviderV2, Model as ModelV2, Auth } from "@opencode-ai/sdk/v2";
4
+
5
+ export * from "@opencode-ai/plugin/tool";
6
+ export type { ToolDefinition } from "@opencode-ai/plugin/tool";
7
+
8
+ // Re-declare minimal needed types
9
+ export type PluginInput = {
10
+ client: ReturnType<typeof createOpencodeClient>;
11
+ project: Project;
12
+ directory: string;
13
+ worktree: string;
14
+ serverUrl: URL;
15
+ $: unknown;
16
+ };
17
+
18
+ export type PluginOptions = Record<string, unknown>;
19
+
20
+ export interface Hooks {
21
+ event?: (input: { event: Event }) => Promise<void>;
22
+ config?: (input: SDKConfig) => Promise<void>;
23
+ tool?: Record<string, unknown>;
24
+ "chat.message"?: (
25
+ input: { sessionID: string; agent?: string; model?: { providerID: string; modelID: string }; messageID?: string; variant?: string },
26
+ output: { message: UserMessage; parts: Part[] }
27
+ ) => Promise<void>;
28
+ "chat.params"?: (
29
+ input: { sessionID: string; agent: string; model: Model; provider: { source: string; info: Provider; options: Record<string, unknown> }; message: UserMessage },
30
+ output: { temperature: number; topP: number; topK: number; maxOutputTokens: number | undefined; options: Record<string, unknown> }
31
+ ) => Promise<void>;
32
+ "tool.execute.before"?: (
33
+ input: { tool: string; sessionID: string; callID: string },
34
+ output: { args: Record<string, unknown> }
35
+ ) => Promise<void>;
36
+ "tool.execute.after"?: (
37
+ input: { tool: string; sessionID: string; callID: string },
38
+ output: { title: string; output: string; metadata: unknown }
39
+ ) => Promise<void>;
40
+ "experimental.chat.messages.transform"?: (
41
+ input: Record<string, never>,
42
+ output: { messages: { info: Message; parts: Part[] }[] }
43
+ ) => Promise<void>;
44
+ "experimental.chat.system.transform"?: (
45
+ input: { sessionID?: string; model: Model },
46
+ output: { system: string[] }
47
+ ) => Promise<void>;
48
+ }
49
+
50
+ export type Plugin = (input: PluginInput, options?: PluginOptions) => Promise<Hooks>;
51
+ }
@@ -0,0 +1,18 @@
1
+ import type { VectorStore, Chunk, SearchResult } from "../core/interfaces.js";
2
+ export declare class LanceDBStore implements VectorStore {
3
+ private dbPath;
4
+ private vectorDimension;
5
+ private db;
6
+ private table;
7
+ constructor(dbPath: string, vectorDimension?: number);
8
+ private getDb;
9
+ private getTable;
10
+ addChunks(chunks: Chunk[]): Promise<void>;
11
+ search(embedding: number[], topK: number): Promise<SearchResult[]>;
12
+ private searchInternal;
13
+ count(): Promise<number>;
14
+ clear(): Promise<void>;
15
+ deleteByFilePath(filePath: string): Promise<void>;
16
+ private isCorruptionError;
17
+ private tryRepair;
18
+ }