opencode-rag-plugin 1.12.1 → 1.12.5

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 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, smaller models can still run performant on modern CPUs.
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
  [![npm version](https://img.shields.io/npm/v/opencode-rag-plugin.svg)](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. Search
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 with installed embedding model (e.g. embeddinggemma).
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 with Ollama |
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 (`llama3.2-vision`, `minicpm-v`, etc.), OpenAI (`gpt-4o-mini`), Anthropic (`claude-3-haiku`), Google Gemini.
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.** 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 a third-party API.
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 path from "node:path";
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 cfg = await resolveConfig(options.cwd, options.configPath);
76
- const storePath = path.resolve(options.cwd ?? process.cwd(), cfg.vectorStore.path);
77
- const embedder = createEmbedder(cfg);
78
- const dimension = await probeDimension(embedder);
79
- const store = new LanceDBStore(storePath, dimension);
80
- const keywordIndex = await loadKeywordIndex(storePath);
81
- return retrieve(query, embedder, store, {
82
- topK: options.topK ?? cfg.retrieval.topK,
83
- minScore: options.minScore ?? cfg.retrieval.minScore,
84
- keywordIndex,
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 cfg = await resolveConfig(workDir, options.configPath);
93
- const storePath = path.resolve(workDir, cfg.vectorStore.path);
94
- const embedder = createEmbedder(cfg);
95
- const dimension = await probeDimension(embedder);
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: cfg,
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,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,cAAc,EAA+C,MAAM,kBAAkB,CAAC;AAC3G,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAgF,MAAM,cAAc,CAAC;AAyB1H,KAAK,UAAU,aAAa,CAAC,GAAY,EAAE,UAAmB;IAC5D,MAAM,OAAO,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAErC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACjC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5B,MAAM,sBAAsB,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1D,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,SAAS,GAAG;QAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,mBAAmB,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC;KAC5C,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAC5B,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC5B,MAAM,sBAAsB,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACrD,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,QAA2B;IACvD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC;QACjE,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YAChF,OAAQ,KAAK,CAAC,CAAC,CAAc,CAAC,MAAM,CAAC;QACvC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,kBAAkB;IACpB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IAC/C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAuB;IACnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,2BAA2B,CAAC;IAE7D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,QAAQ,QAAQ,IAAI,SAAS,IAAI,OAAO,YAAY,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtF,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,KAAa,EACb,UAAyB,EAAE;IAE3B,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAEnF,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAErD,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAEvD,OAAO,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;QACtC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI;QACxC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC,QAAQ;QACpD,YAAY;QACZ,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,aAAa,IAAI,GAAG;QACxF,WAAW,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW;QACtC,OAAO,EAAE,OAAO,CAAC,OAAO;KACC,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAY,EACZ,UAAwB,EAAE;IAE1B,MAAM,OAAO,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAE9D,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAErD,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAEvD,MAAM,iBAAiB,GAAG,GAAG,CAAC,WAAW,CAAC;IAC1C,MAAM,mBAAmB,GAAG,iBAAiB,EAAE,OAAO;QACpD,CAAC,CAAC,yBAAyB,CAAC,iBAAiB,CAAC;QAC9C,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO,CAAC,UAAU,CAAC,YAAY,OAAO,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC;QAC/B,GAAG,EAAE,OAAO;QACZ,SAAS;QACT,MAAM,EAAE,GAAG;QACX,KAAK;QACL,QAAQ;QACR,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;QAC7B,YAAY;QACZ,mBAAmB;KACpB,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAAa,EACb,UAAyB,EAAE;IAE3B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,OAAO;QACL,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,oBAAoB,CAAC,OAAO,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -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", ".svg",
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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"}
@@ -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",
@@ -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;IACrC,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"}
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, resolveLogConfig } from "./core/config.js";
11
- import { resolveApiKey } from "./core/resolve-api-key.js";
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 resolveConfig(opt, logFilePath) {
47
- const worktree = process.cwd();
48
- if (opt.config) {
49
- try {
50
- const configPath = path.resolve(opt.config);
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 config = await resolveConfig(options, logFilePath);
374
- logFilePath = path.resolve(cwd, resolveLogConfig(config).logFilePath);
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
- const embedder = createEmbedder(config);
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: path.resolve(cwd, config.vectorStore.path),
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, path.resolve(cwd, config.vectorStore.path)),
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 config = await resolveConfig(options, logFilePath);
482
- logFilePath = path.resolve(cwd, resolveLogConfig(config).logFilePath);
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 config = await resolveConfig(options, logFilePath);
545
- logFilePath = path.resolve(cwd, resolveLogConfig(config).logFilePath);
546
- const { LanceDBStore } = await import("./vectorstore/lancedb.js");
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.dropDatabase();
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 config = await resolveConfig(options, logFilePath);
574
- logFilePath = path.resolve(cwd, resolveLogConfig(config).logFilePath);
575
- const { LanceDBStore } = await import("./vectorstore/lancedb.js");
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, path.resolve(cwd, config.vectorStore.path), config, store);
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(path.resolve(cwd, config.vectorStore.path))}`);
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
- ? (await loadCliKeywordIndex(path.resolve(cwd, config.vectorStore.path), logFilePath))?.count() ?? 0
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 config = await resolveConfig(options, logFilePath);
617
- logFilePath = path.resolve(cwd, resolveLogConfig(config).logFilePath);
618
- const { LanceDBStore } = await import("./vectorstore/lancedb.js");
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 config = await resolveConfig(options, logFilePath);
646
- logFilePath = path.resolve(cwd, resolveLogConfig(config).logFilePath);
647
- const { LanceDBStore } = await import("./vectorstore/lancedb.js");
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 config = await resolveConfig(options, logFilePath);
681
- logFilePath = path.resolve(cwd, resolveLogConfig(config).logFilePath);
682
- const { LanceDBStore } = await import("./vectorstore/lancedb.js");
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 config = await resolveConfig(options, logFilePath);
719
- logFilePath = path.resolve(cwd, resolveLogConfig(config).logFilePath);
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(path.resolve(cwd, config.vectorStore.path), port);
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 config = await resolveConfig(options, logFilePath);
788
- const storePath = path.resolve(cwd, config.vectorStore.path);
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 config = await resolveConfig(options, logFilePath);
823
- const storePath = path.resolve(cwd, config.vectorStore.path);
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 config = await resolveConfig(options, logFilePath);
882
- const storePath = path.resolve(cwd, config.vectorStore.path);
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 modelNames = missingOllama.map((r) => r.model);
1126
- console.log(`\n ${c.warn("Models not found:")} ${modelNames.join(", ")}`);
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 ${modelNames.length === 1 ? "this model" : "these models"} now? (y/n) `, resolve);
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(modelNames, (model, line) => {
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.")}`);