opencode-rag-plugin 1.12.1 → 1.12.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ReadMe.md +7 -21
- package/dist/api.js +21 -82
- package/dist/api.js.map +1 -1
- package/dist/chunker/image.js +1 -1
- package/dist/chunker/image.js.map +1 -1
- package/dist/chunker/xml.js +1 -1
- package/dist/chunker/xml.js.map +1 -1
- package/dist/cli.js +61 -112
- package/dist/cli.js.map +1 -1
- package/dist/core/bootstrap.d.ts +18 -0
- package/dist/core/bootstrap.js +80 -0
- package/dist/core/bootstrap.js.map +1 -0
- package/dist/core/config.js +13 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/interfaces.d.ts +1 -0
- package/dist/embedder/health.d.ts +10 -3
- package/dist/embedder/health.js +69 -14
- package/dist/embedder/health.js.map +1 -1
- package/dist/indexer.js +133 -15
- package/dist/indexer.js.map +1 -1
- package/dist/mcp/server.js +7 -61
- package/dist/mcp/server.js.map +1 -1
- package/dist/retriever/keyword-index.js +38 -5
- package/dist/retriever/keyword-index.js.map +1 -1
- package/package.json +3 -2
package/ReadMe.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# OpenCodeRAG
|
|
2
2
|
|
|
3
|
-
OpenCodeRAG is a **local-first RAG plugin** for semantic code search. It converts your codebase into vector indices and retrieves relevant code chunks on natural language queries. The primary aim is to save tokens by replacing full-file reads with targeted chunk retrieval and to speed-up tool calls for large codebases. Integrates seamlessly with [OpenCode](https://opencode.ai) and works as standalone MCP server or CLI tool.
|
|
3
|
+
OpenCodeRAG is a **local-first RAG plugin** for semantic code search. It converts your codebase into vector indices and retrieves relevant code chunks on natural language queries. The primary aim is to save tokens by replacing full-file reads with targeted chunk retrieval and to speed-up tool calls for large codebases. Integrates seamlessly with [OpenCode](https://opencode.ai) and works as standalone MCP server or CLI tool.
|
|
4
4
|
|
|
5
|
-
You don't need a dedicated GPU to run embedding LLMs,
|
|
5
|
+
You don't need a dedicated GPU to run smaller embedding LLMs, as these models can still run performant on modern CPUs.
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/opencode-rag-plugin)
|
|
8
8
|
|
|
@@ -25,11 +25,11 @@ opencode-rag init
|
|
|
25
25
|
# 3. Index your workspace
|
|
26
26
|
opencode-rag index
|
|
27
27
|
|
|
28
|
-
# 4.
|
|
28
|
+
# 4. CLI search test
|
|
29
29
|
opencode-rag query "authentication middleware"
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
**Prerequisites:** Node.js v22+, [Ollama](https://ollama.ai) (default) or other LLM-hosters
|
|
32
|
+
**Prerequisites:** Node.js v22+, [Ollama](https://ollama.ai) (default) or other LLM-hosters (OpenAI-, Google- or Anthropic-compatible).
|
|
33
33
|
|
|
34
34
|
## Key Features
|
|
35
35
|
|
|
@@ -42,7 +42,7 @@ opencode-rag query "authentication middleware"
|
|
|
42
42
|
| **Hybrid search** | Vector similarity + TF×IDF keyword fusion |
|
|
43
43
|
| **OpenCode plugin** | Auto-inject context, read-tool override, TUI settings, Ctrl+Enter to add RAG context, MCP registration on `init` |
|
|
44
44
|
| **Incremental indexing** | File-hash manifest, background watcher, auto-rebuild on corruption |
|
|
45
|
-
| **Privacy-first** | All processing stays local
|
|
45
|
+
| **Privacy-first** | All processing stays local (when using Ollama) |
|
|
46
46
|
| **CLI** | `index`, `query`, `status`, `list`, `show`, `dump`, `clear`, `init`, `ui`, `mcp` |
|
|
47
47
|
| **Programmatic API** | TypeScript `search()`, `indexWorkspace()`, `getContext()`, `validateConfig()`, `scanWorkspace()`, `createBackgroundIndexer()`, `getIndexStatusSummary()` |
|
|
48
48
|
| **Proxy-aware** | Corporate proxy support with raw-socket localhost bypass |
|
|
@@ -79,21 +79,7 @@ Launch with `opencode-rag ui`. See [Web UI documentation](doc/webui.md) for deta
|
|
|
79
79
|
|
|
80
80
|
OpenCodeRAG can index image files (PNG, JPEG, WebP, etc.) by sending them to a vision-capable LLM and storing the generated text descriptions as searchable vector chunks. This makes visual assets discoverable via natural language queries (e.g., "login screen screenshot", "architecture diagram").
|
|
81
81
|
|
|
82
|
-
**Supported providers:** Ollama
|
|
83
|
-
|
|
84
|
-
```json
|
|
85
|
-
{
|
|
86
|
-
"imageDescription": {
|
|
87
|
-
"enabled": true,
|
|
88
|
-
"provider": "ollama",
|
|
89
|
-
"model": "llama3.2-vision",
|
|
90
|
-
"baseUrl": "http://localhost:11434/api",
|
|
91
|
-
"timeoutMs": 60000,
|
|
92
|
-
"prompt": "Describe this image in detail. Include what it shows, any text content, layout, colors, objects, and the overall purpose or context."
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
```
|
|
96
|
-
|
|
82
|
+
**Supported providers:** Ollama, OpenAI, Anthropic, Google Gemini compatible providers.
|
|
97
83
|
**Disabled by default** — enable in `opencode-rag.json` to opt in.
|
|
98
84
|
|
|
99
85
|
## MCP Server
|
|
@@ -169,7 +155,7 @@ Token counting uses tiktoken BPE (cl100k_base) for accurate code tokenization. S
|
|
|
169
155
|
|
|
170
156
|
## Privacy & Security
|
|
171
157
|
|
|
172
|
-
**100% local by default.**
|
|
158
|
+
**100% local by default.** By default, embeddings are generated locally via Ollama. The vector database stays in your project directory. **No source code or embeddings leave your machine** unless you explicitly configure to use a third-party API.
|
|
173
159
|
|
|
174
160
|
## License
|
|
175
161
|
|
package/dist/api.js
CHANGED
|
@@ -1,59 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { existsSync } from "node:fs";
|
|
3
|
-
import { loadConfig, DEFAULT_CONFIG } from "./core/config.js";
|
|
4
|
-
import { resolveApiKey } from "./core/resolve-api-key.js";
|
|
5
|
-
import { loadChunkersFromConfig } from "./chunker/loader.js";
|
|
6
|
-
import { createEmbedder } from "./embedder/factory.js";
|
|
7
|
-
import { createDescriptionProvider } from "./describer/factory.js";
|
|
8
|
-
import { LanceDBStore } from "./vectorstore/lancedb.js";
|
|
1
|
+
import { resolveRagContext } from "./core/bootstrap.js";
|
|
9
2
|
import { retrieve } from "./retriever/retriever.js";
|
|
10
|
-
import { KeywordIndex } from "./retriever/keyword-index.js";
|
|
11
3
|
import { runIndexPass } from "./indexer.js";
|
|
12
|
-
async function resolveConfig(cwd, configPath) {
|
|
13
|
-
const workDir = cwd ?? process.cwd();
|
|
14
|
-
if (configPath) {
|
|
15
|
-
const resolved = path.resolve(configPath);
|
|
16
|
-
const cfg = loadConfig(resolved);
|
|
17
|
-
resolveApiKey(cfg, workDir);
|
|
18
|
-
await loadChunkersFromConfig(cfg, path.dirname(resolved));
|
|
19
|
-
return cfg;
|
|
20
|
-
}
|
|
21
|
-
const locations = [
|
|
22
|
-
path.join(workDir, "opencode-rag.json"),
|
|
23
|
-
path.join(workDir, ".opencode", "opencode-rag.json"),
|
|
24
|
-
path.join(workDir, ".opencode", "rag.json"),
|
|
25
|
-
];
|
|
26
|
-
for (const loc of locations) {
|
|
27
|
-
if (existsSync(loc)) {
|
|
28
|
-
const cfg = loadConfig(loc);
|
|
29
|
-
resolveApiKey(cfg, workDir);
|
|
30
|
-
await loadChunkersFromConfig(cfg, path.dirname(loc));
|
|
31
|
-
return cfg;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return { ...DEFAULT_CONFIG };
|
|
35
|
-
}
|
|
36
|
-
async function probeDimension(embedder) {
|
|
37
|
-
try {
|
|
38
|
-
const probe = await embedder.embed(["dimension-probe"], "query");
|
|
39
|
-
if (probe && probe[0] && probe[0].length > 0 && typeof probe[0][0] === "number") {
|
|
40
|
-
return probe[0].length;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
// fallback to 384
|
|
45
|
-
}
|
|
46
|
-
return 384;
|
|
47
|
-
}
|
|
48
|
-
async function loadKeywordIndex(storePath) {
|
|
49
|
-
try {
|
|
50
|
-
const idx = await KeywordIndex.load(storePath);
|
|
51
|
-
return idx;
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
return new KeywordIndex(storePath);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
4
|
function formatContextResults(results) {
|
|
58
5
|
if (results.length === 0)
|
|
59
6
|
return "No matching chunks found.";
|
|
@@ -72,45 +19,37 @@ function formatContextResults(results) {
|
|
|
72
19
|
return lines.join("\n");
|
|
73
20
|
}
|
|
74
21
|
export async function search(query, options = {}) {
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
keywordWeight: options.keywordWeight ?? cfg.retrieval.hybridSearch?.keywordWeight ?? 0.4,
|
|
86
|
-
queryPrefix: cfg.embedding.queryPrefix,
|
|
22
|
+
const ctx = await resolveRagContext({
|
|
23
|
+
cwd: options.cwd,
|
|
24
|
+
configPath: options.configPath,
|
|
25
|
+
});
|
|
26
|
+
return retrieve(query, ctx.embedder, ctx.store, {
|
|
27
|
+
topK: options.topK ?? ctx.config.retrieval.topK,
|
|
28
|
+
minScore: options.minScore ?? ctx.config.retrieval.minScore,
|
|
29
|
+
keywordIndex: ctx.keywordIndex,
|
|
30
|
+
keywordWeight: options.keywordWeight ?? ctx.config.retrieval.hybridSearch?.keywordWeight ?? 0.4,
|
|
31
|
+
queryPrefix: ctx.config.embedding.queryPrefix,
|
|
87
32
|
explain: options.explain,
|
|
88
33
|
});
|
|
89
34
|
}
|
|
90
35
|
export async function indexWorkspace(cwd, options = {}) {
|
|
91
36
|
const workDir = cwd ?? process.cwd();
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const store = new LanceDBStore(storePath, dimension);
|
|
97
|
-
const keywordIndex = await loadKeywordIndex(storePath);
|
|
98
|
-
const descriptionConfig = cfg.description;
|
|
99
|
-
const descriptionProvider = descriptionConfig?.enabled
|
|
100
|
-
? createDescriptionProvider(descriptionConfig)
|
|
101
|
-
: undefined;
|
|
37
|
+
const ctx = await resolveRagContext({
|
|
38
|
+
cwd: workDir,
|
|
39
|
+
configPath: options.configPath,
|
|
40
|
+
});
|
|
102
41
|
if (options.onProgress) {
|
|
103
42
|
options.onProgress(`Indexing ${workDir}...`);
|
|
104
43
|
}
|
|
105
44
|
const stats = await runIndexPass({
|
|
106
45
|
cwd: workDir,
|
|
107
|
-
storePath,
|
|
108
|
-
config:
|
|
109
|
-
store,
|
|
110
|
-
embedder,
|
|
46
|
+
storePath: ctx.storePath,
|
|
47
|
+
config: ctx.config,
|
|
48
|
+
store: ctx.store,
|
|
49
|
+
embedder: ctx.embedder,
|
|
111
50
|
force: options.force ?? false,
|
|
112
|
-
keywordIndex,
|
|
113
|
-
descriptionProvider,
|
|
51
|
+
keywordIndex: ctx.keywordIndex,
|
|
52
|
+
descriptionProvider: ctx.descriptionProvider,
|
|
114
53
|
});
|
|
115
54
|
return stats;
|
|
116
55
|
}
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/chunker/image.js
CHANGED
|
@@ -10,7 +10,7 @@ function visionSleep(ms) {
|
|
|
10
10
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
11
11
|
}
|
|
12
12
|
export const SUPPORTED_IMAGE_EXTENSIONS = new Set([
|
|
13
|
-
".png", ".jpg", ".jpeg", ".gif", ".webp", ".bmp",
|
|
13
|
+
".png", ".jpg", ".jpeg", ".gif", ".webp", ".bmp",
|
|
14
14
|
]);
|
|
15
15
|
const MIME_TYPES = {
|
|
16
16
|
png: "image/png",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/chunker/image.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/chunker/image.ts"],"names":[],"mappings":"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"}
|
package/dist/chunker/xml.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TreeSitterChunker } from "./base.js";
|
|
2
2
|
export class XmlChunker extends TreeSitterChunker {
|
|
3
3
|
language = "xml";
|
|
4
|
-
fileExtensions = [".xml", ".csproj"];
|
|
4
|
+
fileExtensions = [".xml", ".csproj", ".svg"];
|
|
5
5
|
grammarName = "xml";
|
|
6
6
|
nodeTypes = new Set([
|
|
7
7
|
"element",
|
package/dist/chunker/xml.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xml.js","sourceRoot":"","sources":["../../src/chunker/xml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,OAAO,UAAW,SAAQ,iBAAiB;IACtC,QAAQ,GAAG,KAAK,CAAC;IACjB,cAAc,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"xml.js","sourceRoot":"","sources":["../../src/chunker/xml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,OAAO,UAAW,SAAQ,iBAAiB;IACtC,QAAQ,GAAG,KAAK,CAAC;IACjB,cAAc,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC7C,WAAW,GAAG,KAAK,CAAC;IACpB,SAAS,GAAG,IAAI,GAAG,CAAC;QAC3B,SAAS;KACV,CAAC,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -7,12 +7,9 @@ import { spawnSync } from "node:child_process";
|
|
|
7
7
|
import { fileURLToPath } from "node:url";
|
|
8
8
|
import chokidar from "chokidar";
|
|
9
9
|
import pc from "picocolors";
|
|
10
|
-
import { loadConfig, DEFAULT_CONFIG
|
|
11
|
-
import {
|
|
10
|
+
import { loadConfig, DEFAULT_CONFIG } from "./core/config.js";
|
|
11
|
+
import { resolveRagContext } from "./core/bootstrap.js";
|
|
12
12
|
import { appendDebugLog } from "./core/fileLogger.js";
|
|
13
|
-
import { loadChunkersFromConfig } from "./chunker/loader.js";
|
|
14
|
-
import { createEmbedder } from "./embedder/factory.js";
|
|
15
|
-
import { createDescriptionProvider } from "./describer/factory.js";
|
|
16
13
|
import { checkProviderHealth, pullOllamaModels } from "./embedder/health.js";
|
|
17
14
|
import { retrieve } from "./retriever/retriever.js";
|
|
18
15
|
import { createWatchPassScheduler, createWatchIgnore, getIndexStatusSummary, runIndexPass, } from "./indexer.js";
|
|
@@ -43,55 +40,16 @@ function logCliInfo(logFilePath, scope, message) {
|
|
|
43
40
|
console.log(message);
|
|
44
41
|
//appendDebugLog(logFilePath, { scope, message });
|
|
45
42
|
}
|
|
46
|
-
async function
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const cfg = loadConfig(configPath);
|
|
52
|
-
resolveApiKey(cfg, worktree);
|
|
53
|
-
await loadChunkersFromConfig(cfg, path.dirname(configPath));
|
|
54
|
-
logCliInfo(logFilePath, "config", `${c.label("Config:")} ${c.file(configPath)}`);
|
|
55
|
-
return logConfigDetails(logFilePath, cfg);
|
|
56
|
-
}
|
|
57
|
-
catch (err) {
|
|
58
|
-
logCliError(logFilePath, "config", `Could not load config from ${opt.config}, using defaults`, err);
|
|
59
|
-
console.error(c.warn(`Could not load config from ${opt.config}, using defaults`));
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
for (const loc of ["opencode-rag.json", ".opencode/opencode-rag.json", ".opencode/rag.json"]) {
|
|
63
|
-
const configPath = path.resolve(loc);
|
|
64
|
-
try {
|
|
65
|
-
const cfg = loadConfig(configPath);
|
|
66
|
-
resolveApiKey(cfg, worktree);
|
|
67
|
-
await loadChunkersFromConfig(cfg, path.dirname(configPath));
|
|
68
|
-
logCliInfo(logFilePath, "config", `${c.label("Config:")} ${c.file(configPath)}`);
|
|
69
|
-
return logConfigDetails(logFilePath, cfg);
|
|
70
|
-
}
|
|
71
|
-
catch (err) {
|
|
72
|
-
logCliError(logFilePath, "config", `Failed to load config from ${configPath}`, err);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
logCliInfo(logFilePath, "config", `${c.label("Config:")} ${c.dim("using defaults (no opencode-rag.json found)")}`);
|
|
76
|
-
return logConfigDetails(logFilePath, DEFAULT_CONFIG);
|
|
77
|
-
}
|
|
78
|
-
async function loadCliKeywordIndex(storePath, logFilePath) {
|
|
79
|
-
const { KeywordIndex } = await import("./retriever/keyword-index.js");
|
|
80
|
-
try {
|
|
81
|
-
const index = await KeywordIndex.load(storePath);
|
|
82
|
-
logCliInfo(logFilePath, "keyword-index", `${c.label("Keyword index loaded")} (${c.num(index.count())} chunks)`);
|
|
83
|
-
return index;
|
|
84
|
-
}
|
|
85
|
-
catch {
|
|
86
|
-
logCliInfo(logFilePath, "keyword-index", c.warn("Creating keyword index"));
|
|
87
|
-
return new KeywordIndex(storePath);
|
|
88
|
-
}
|
|
43
|
+
async function resolveCliContext(opt, logFilePath) {
|
|
44
|
+
const ctx = await resolveRagContext({ configPath: opt.config });
|
|
45
|
+
logCliInfo(logFilePath, "config", `${c.label("Config:")} ${c.file(ctx.logFilePath)}`);
|
|
46
|
+
logConfigDetails(logFilePath, ctx.config);
|
|
47
|
+
return ctx;
|
|
89
48
|
}
|
|
90
49
|
function logConfigDetails(logFilePath, config) {
|
|
91
50
|
logCliInfo(logFilePath, "config", ` ${c.label("Embedding provider:")} ${c.value(config.embedding.provider)}`);
|
|
92
51
|
logCliInfo(logFilePath, "config", ` ${c.label("Embedding model:")} ${c.value(config.embedding.model)}`);
|
|
93
52
|
logCliInfo(logFilePath, "config", ` ${c.label("Vector store:")} ${c.file(config.vectorStore.path)}`);
|
|
94
|
-
return config;
|
|
95
53
|
}
|
|
96
54
|
function formatTimestamp(timestamp) {
|
|
97
55
|
if (!timestamp)
|
|
@@ -370,26 +328,13 @@ program
|
|
|
370
328
|
try {
|
|
371
329
|
const cwd = process.cwd();
|
|
372
330
|
let logFilePath = path.resolve(cwd, ".opencode", "opencode-rag.log");
|
|
373
|
-
const
|
|
374
|
-
|
|
331
|
+
const ctx = await resolveCliContext(options, logFilePath);
|
|
332
|
+
const { config, embedder, store, storePath, keywordIndex, descriptionProvider, dimension } = ctx;
|
|
333
|
+
logFilePath = ctx.logFilePath;
|
|
375
334
|
logCliInfo(logFilePath, "index", `\n${c.heading("Indexing workspace...")}`);
|
|
376
|
-
|
|
377
|
-
// Detect actual vector dimension from the model
|
|
378
|
-
const probe = await embedder.embed(["dimension-probe"], "query");
|
|
379
|
-
let vectorDimension = 384;
|
|
380
|
-
if (probe && probe[0] && probe[0].length > 0 && typeof probe[0][0] === "number") {
|
|
381
|
-
vectorDimension = probe[0].length;
|
|
382
|
-
}
|
|
383
|
-
logCliInfo(logFilePath, "index", ` ${c.label("Vector dimension:")} ${c.num(vectorDimension)}`);
|
|
384
|
-
const { LanceDBStore } = await import("./vectorstore/lancedb.js");
|
|
385
|
-
const store = new LanceDBStore(path.resolve(cwd, config.vectorStore.path), vectorDimension);
|
|
386
|
-
const keywordIndex = await loadCliKeywordIndex(path.resolve(cwd, config.vectorStore.path), logFilePath);
|
|
387
|
-
// Create description provider (enabled by default)
|
|
388
|
-
const descriptionConfig = config.description ?? { enabled: true, provider: "ollama", baseUrl: "http://127.0.0.1:11434/api", model: "qwen2.5:3b", systemPrompt: "" };
|
|
389
|
-
const descriptionProvider = descriptionConfig.enabled
|
|
390
|
-
? createDescriptionProvider(descriptionConfig)
|
|
391
|
-
: undefined;
|
|
335
|
+
logCliInfo(logFilePath, "index", ` ${c.label("Vector dimension:")} ${c.num(dimension)}`);
|
|
392
336
|
if (descriptionProvider) {
|
|
337
|
+
const descriptionConfig = config.description ?? { provider: "ollama", model: "qwen2.5:3b" };
|
|
393
338
|
logCliInfo(logFilePath, "index", ` ${c.label("Description LLM:")} ${c.value(descriptionConfig.model)} (${descriptionConfig.provider})`);
|
|
394
339
|
}
|
|
395
340
|
logCliInfo(logFilePath, "index", `${c.label("Scanning:")} ${c.file(cwd)}`);
|
|
@@ -397,7 +342,7 @@ program
|
|
|
397
342
|
const passStarted = Date.now();
|
|
398
343
|
const stats = await runIndexPass({
|
|
399
344
|
cwd,
|
|
400
|
-
storePath
|
|
345
|
+
storePath,
|
|
401
346
|
config,
|
|
402
347
|
store,
|
|
403
348
|
embedder,
|
|
@@ -428,7 +373,7 @@ program
|
|
|
428
373
|
logCliError(logFilePath, "watch", `\nWatch reindex failed: ${message}`, error);
|
|
429
374
|
}, 300);
|
|
430
375
|
const watcher = chokidar.watch(cwd, {
|
|
431
|
-
ignored: createWatchIgnore(cwd, config,
|
|
376
|
+
ignored: createWatchIgnore(cwd, config, storePath),
|
|
432
377
|
ignoreInitial: true,
|
|
433
378
|
persistent: true,
|
|
434
379
|
});
|
|
@@ -478,13 +423,11 @@ program
|
|
|
478
423
|
try {
|
|
479
424
|
const cwd = process.cwd();
|
|
480
425
|
let logFilePath = path.resolve(cwd, ".opencode", "opencode-rag.log");
|
|
481
|
-
const
|
|
482
|
-
|
|
426
|
+
const ctx = await resolveCliContext(options, logFilePath);
|
|
427
|
+
const { config, embedder, store, storePath, keywordIndex } = ctx;
|
|
428
|
+
logFilePath = ctx.logFilePath;
|
|
483
429
|
logCliInfo(logFilePath, "query", `\n${c.heading("Querying:")} "${query}"`);
|
|
484
430
|
logCliInfo(logFilePath, "query", `${c.label("Top-K:")} ${c.num(parseInt(options.topK ?? "10", 10))}`);
|
|
485
|
-
const embedder = createEmbedder(config);
|
|
486
|
-
const { LanceDBStore } = await import("./vectorstore/lancedb.js");
|
|
487
|
-
const store = new LanceDBStore(path.resolve(cwd, config.vectorStore.path));
|
|
488
431
|
const indexedCount = await store.count();
|
|
489
432
|
if (indexedCount === 0) {
|
|
490
433
|
logCliInfo(logFilePath, "query", `${c.warn("No indexed chunks found.")} Run 'opencode-rag index' first.`);
|
|
@@ -493,7 +436,6 @@ program
|
|
|
493
436
|
logCliInfo(logFilePath, "query", `${c.label("Searching")} ${c.num(indexedCount)} indexed chunks...`);
|
|
494
437
|
const topK = parseInt(options.topK ?? "10", 10);
|
|
495
438
|
const minScore = config.retrieval.minScore;
|
|
496
|
-
const keywordIndex = await loadCliKeywordIndex(path.resolve(cwd, config.vectorStore.path), logFilePath);
|
|
497
439
|
const hybridCfg = config.retrieval.hybridSearch;
|
|
498
440
|
const rawResults = await retrieve(query, embedder, store, {
|
|
499
441
|
topK,
|
|
@@ -541,10 +483,9 @@ program
|
|
|
541
483
|
try {
|
|
542
484
|
const cwd = process.cwd();
|
|
543
485
|
let logFilePath = path.resolve(cwd, ".opencode", "opencode-rag.log");
|
|
544
|
-
const
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
const store = new LanceDBStore(path.resolve(cwd, config.vectorStore.path));
|
|
486
|
+
const ctx = await resolveCliContext(options, logFilePath);
|
|
487
|
+
const { store } = ctx;
|
|
488
|
+
logFilePath = ctx.logFilePath;
|
|
548
489
|
const prevCount = await store.count();
|
|
549
490
|
if (prevCount === 0) {
|
|
550
491
|
logCliInfo(logFilePath, "clear", c.warn("No indexed data to clear."));
|
|
@@ -552,7 +493,7 @@ program
|
|
|
552
493
|
else {
|
|
553
494
|
logCliInfo(logFilePath, "clear", `${c.label("Clearing")} ${c.num(prevCount)} indexed chunks...`);
|
|
554
495
|
}
|
|
555
|
-
await store.
|
|
496
|
+
await store.clear();
|
|
556
497
|
logCliInfo(logFilePath, "clear", `${c.success("Done.")} vector database directory removed.`);
|
|
557
498
|
}
|
|
558
499
|
catch (err) {
|
|
@@ -570,14 +511,13 @@ program
|
|
|
570
511
|
try {
|
|
571
512
|
const cwd = process.cwd();
|
|
572
513
|
let logFilePath = path.resolve(cwd, ".opencode", "opencode-rag.log");
|
|
573
|
-
const
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
const store = new LanceDBStore(path.resolve(cwd, config.vectorStore.path));
|
|
514
|
+
const ctx = await resolveCliContext(options, logFilePath);
|
|
515
|
+
const { config, store, storePath, keywordIndex } = ctx;
|
|
516
|
+
logFilePath = ctx.logFilePath;
|
|
577
517
|
const count = await store.count();
|
|
578
|
-
const summary = await getIndexStatusSummary(cwd,
|
|
518
|
+
const summary = await getIndexStatusSummary(cwd, storePath, config, store);
|
|
579
519
|
logCliInfo(logFilePath, "status", `\n${c.heading("Indexed chunks:")} ${c.num(count)}`);
|
|
580
|
-
logCliInfo(logFilePath, "status", `${c.label("Store path:")} ${c.file(
|
|
520
|
+
logCliInfo(logFilePath, "status", `${c.label("Store path:")} ${c.file(storePath)}`);
|
|
581
521
|
logCliInfo(logFilePath, "status", `${c.label("Embedding provider:")} ${c.value(config.embedding.provider)}`);
|
|
582
522
|
logCliInfo(logFilePath, "status", `${c.label("Embedding model:")} ${c.value(config.embedding.model)}`);
|
|
583
523
|
logCliInfo(logFilePath, "status", `${c.label("File extensions:")} ${config.indexing.includeExtensions.join(", ")}`);
|
|
@@ -591,7 +531,7 @@ program
|
|
|
591
531
|
logCliInfo(logFilePath, "status", `${c.label("Pending files:")} ${c.num(summary.pendingFiles)}`);
|
|
592
532
|
logCliInfo(logFilePath, "status", `${c.label("Watch mode:")} ${c.dim("off")}`);
|
|
593
533
|
const kiCount = config.retrieval.hybridSearch?.enabled
|
|
594
|
-
?
|
|
534
|
+
? keywordIndex?.count() ?? 0
|
|
595
535
|
: 0;
|
|
596
536
|
logCliInfo(logFilePath, "status", `${c.label("Keyword index:")} ${config.retrieval.hybridSearch?.enabled ? c.enabled("enabled") : c.disabled("disabled")} (${c.num(kiCount)} chunks)`);
|
|
597
537
|
if (summary.rebuildRequired) {
|
|
@@ -613,10 +553,9 @@ program
|
|
|
613
553
|
try {
|
|
614
554
|
const cwd = process.cwd();
|
|
615
555
|
let logFilePath = path.resolve(cwd, ".opencode", "opencode-rag.log");
|
|
616
|
-
const
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
const store = new LanceDBStore(path.resolve(cwd, config.vectorStore.path));
|
|
556
|
+
const ctx = await resolveCliContext(options, logFilePath);
|
|
557
|
+
const { store } = ctx;
|
|
558
|
+
logFilePath = ctx.logFilePath;
|
|
620
559
|
const files = await store.listFiles();
|
|
621
560
|
if (files.length === 0) {
|
|
622
561
|
logCliInfo(logFilePath, "list", `${c.warn("No indexed files found.")} Run 'opencode-rag index' first.`);
|
|
@@ -642,10 +581,9 @@ program
|
|
|
642
581
|
try {
|
|
643
582
|
const cwd = process.cwd();
|
|
644
583
|
let logFilePath = path.resolve(cwd, ".opencode", "opencode-rag.log");
|
|
645
|
-
const
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
const store = new LanceDBStore(path.resolve(cwd, config.vectorStore.path));
|
|
584
|
+
const ctx = await resolveCliContext(options, logFilePath);
|
|
585
|
+
const { store } = ctx;
|
|
586
|
+
logFilePath = ctx.logFilePath;
|
|
649
587
|
const chunks = await store.getChunksByFilePath(file);
|
|
650
588
|
if (chunks.length === 0) {
|
|
651
589
|
logCliInfo(logFilePath, "show", `${c.warn(`No chunks found for '${file}'.`)}`);
|
|
@@ -677,10 +615,9 @@ program
|
|
|
677
615
|
try {
|
|
678
616
|
const cwd = process.cwd();
|
|
679
617
|
let logFilePath = path.resolve(cwd, ".opencode", "opencode-rag.log");
|
|
680
|
-
const
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
const store = new LanceDBStore(path.resolve(cwd, config.vectorStore.path));
|
|
618
|
+
const ctx = await resolveCliContext(options, logFilePath);
|
|
619
|
+
const { store, storePath } = ctx;
|
|
620
|
+
logFilePath = ctx.logFilePath;
|
|
684
621
|
const total = await store.count();
|
|
685
622
|
if (total === 0) {
|
|
686
623
|
logCliInfo(logFilePath, "dump", `${c.warn("No indexed chunks found.")} Run 'opencode-rag index' first.`);
|
|
@@ -715,12 +652,13 @@ program
|
|
|
715
652
|
try {
|
|
716
653
|
const cwd = process.cwd();
|
|
717
654
|
let logFilePath = path.resolve(cwd, ".opencode", "opencode-rag.log");
|
|
718
|
-
const
|
|
719
|
-
|
|
655
|
+
const ctx = await resolveCliContext(options, logFilePath);
|
|
656
|
+
const { config, storePath } = ctx;
|
|
657
|
+
logFilePath = ctx.logFilePath;
|
|
720
658
|
const port = parseInt(options.port ?? String(config.ui?.port ?? 3210), 10);
|
|
721
659
|
const openBrowser = options.open !== false && (config.ui?.openBrowser ?? true);
|
|
722
660
|
const { startWebUi } = await import("./web/server.js");
|
|
723
|
-
const server = await startWebUi(
|
|
661
|
+
const server = await startWebUi(storePath, port);
|
|
724
662
|
const url = `http://127.0.0.1:${server.port}`;
|
|
725
663
|
logCliInfo(logFilePath, "ui", `\n${c.heading("OpenCodeRAG Web UI")}`);
|
|
726
664
|
logCliInfo(logFilePath, "ui", ` ${c.label("URL:")} ${c.value(url)}`);
|
|
@@ -784,8 +722,8 @@ program
|
|
|
784
722
|
try {
|
|
785
723
|
const cwd = process.cwd();
|
|
786
724
|
const logFilePath = path.resolve(cwd, ".opencode", "opencode-rag.log");
|
|
787
|
-
const
|
|
788
|
-
const storePath =
|
|
725
|
+
const ctx = await resolveCliContext(options, logFilePath);
|
|
726
|
+
const { storePath } = ctx;
|
|
789
727
|
const { listSessions } = await import("./eval/storage.js");
|
|
790
728
|
const sessions = listSessions(storePath);
|
|
791
729
|
if (sessions.length === 0) {
|
|
@@ -819,8 +757,8 @@ program
|
|
|
819
757
|
try {
|
|
820
758
|
const cwd = process.cwd();
|
|
821
759
|
const logFilePath = path.resolve(cwd, ".opencode", "opencode-rag.log");
|
|
822
|
-
const
|
|
823
|
-
const storePath =
|
|
760
|
+
const ctx = await resolveCliContext(options, logFilePath);
|
|
761
|
+
const { storePath } = ctx;
|
|
824
762
|
const { analyzeTokenUsage } = await import("./eval/token-analysis.js");
|
|
825
763
|
const analysis = analyzeTokenUsage(storePath, sessionID);
|
|
826
764
|
if (analysis.queryCount === 0) {
|
|
@@ -878,8 +816,8 @@ program
|
|
|
878
816
|
try {
|
|
879
817
|
const cwd = process.cwd();
|
|
880
818
|
const logFilePath = path.resolve(cwd, ".opencode", "opencode-rag.log");
|
|
881
|
-
const
|
|
882
|
-
const storePath =
|
|
819
|
+
const ctx = await resolveCliContext(options, logFilePath);
|
|
820
|
+
const { storePath } = ctx;
|
|
883
821
|
const { analyzeTokenUsage, compareTokenAnalyses, formatTokenReport } = await import("./eval/token-analysis.js");
|
|
884
822
|
const a = analyzeTokenUsage(storePath, sessionA);
|
|
885
823
|
const b = analyzeTokenUsage(storePath, sessionB);
|
|
@@ -1122,18 +1060,29 @@ program
|
|
|
1122
1060
|
}
|
|
1123
1061
|
const missingOllama = results.filter((r) => r.status === "missing" && r.provider === "ollama");
|
|
1124
1062
|
if (missingOllama.length > 0) {
|
|
1125
|
-
const
|
|
1126
|
-
|
|
1063
|
+
const pullEntries = missingOllama.map((r) => {
|
|
1064
|
+
if (r.type === "embedding") {
|
|
1065
|
+
return { model: r.model, baseUrl: ragConfig.embedding.baseUrl, proxy: ragConfig.embedding.proxy };
|
|
1066
|
+
}
|
|
1067
|
+
if (r.type === "description" && ragConfig.description) {
|
|
1068
|
+
return { model: r.model, baseUrl: ragConfig.description.baseUrl, proxy: ragConfig.description.proxy };
|
|
1069
|
+
}
|
|
1070
|
+
if (r.type === "image_description" && ragConfig.imageDescription) {
|
|
1071
|
+
return { model: r.model, baseUrl: ragConfig.imageDescription.baseUrl, proxy: ragConfig.imageDescription.proxy };
|
|
1072
|
+
}
|
|
1073
|
+
return { model: r.model, baseUrl: ragConfig.embedding.baseUrl, proxy: ragConfig.embedding.proxy };
|
|
1074
|
+
});
|
|
1075
|
+
console.log(`\n ${c.warn("Models not found:")} ${pullEntries.map((e) => e.model).join(", ")}`);
|
|
1127
1076
|
const readline = await import("node:readline");
|
|
1128
1077
|
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
1129
1078
|
const answer = await new Promise((resolve) => {
|
|
1130
|
-
rl.question(` Pull ${
|
|
1079
|
+
rl.question(` Pull ${pullEntries.length === 1 ? "this model" : "these models"} now? (y/n) `, resolve);
|
|
1131
1080
|
});
|
|
1132
1081
|
rl.close();
|
|
1133
1082
|
if (answer.toLowerCase() === "y" || answer.toLowerCase() === "yes") {
|
|
1134
1083
|
console.log();
|
|
1135
1084
|
try {
|
|
1136
|
-
await pullOllamaModels(
|
|
1085
|
+
await pullOllamaModels(pullEntries, (model, line) => {
|
|
1137
1086
|
console.log(` ${c.value(model)}: ${line}`);
|
|
1138
1087
|
});
|
|
1139
1088
|
console.log(`\n ${c.success("Models pulled successfully.")}`);
|