opencode-rag-plugin 1.12.17 → 1.14.6

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 (335) hide show
  1. package/ReadMe.md +15 -13
  2. package/dist/api.d.ts +54 -2
  3. package/dist/api.js +41 -1
  4. package/dist/api.js.map +1 -1
  5. package/dist/chunker/base.js +2 -0
  6. package/dist/chunker/base.js.map +1 -1
  7. package/dist/chunker/bash.d.ts +5 -0
  8. package/dist/chunker/bash.js +5 -0
  9. package/dist/chunker/bash.js.map +1 -1
  10. package/dist/chunker/c.d.ts +6 -0
  11. package/dist/chunker/c.js +6 -0
  12. package/dist/chunker/c.js.map +1 -1
  13. package/dist/chunker/cpp.d.ts +6 -0
  14. package/dist/chunker/cpp.js +6 -0
  15. package/dist/chunker/cpp.js.map +1 -1
  16. package/dist/chunker/csharp.d.ts +6 -0
  17. package/dist/chunker/csharp.js +6 -0
  18. package/dist/chunker/csharp.js.map +1 -1
  19. package/dist/chunker/css.d.ts +6 -0
  20. package/dist/chunker/css.js +6 -0
  21. package/dist/chunker/css.js.map +1 -1
  22. package/dist/chunker/doc.d.ts +18 -0
  23. package/dist/chunker/doc.js +18 -0
  24. package/dist/chunker/doc.js.map +1 -1
  25. package/dist/chunker/dockerfile.d.ts +6 -0
  26. package/dist/chunker/dockerfile.js +6 -0
  27. package/dist/chunker/dockerfile.js.map +1 -1
  28. package/dist/chunker/docx.d.ts +18 -0
  29. package/dist/chunker/docx.js +18 -0
  30. package/dist/chunker/docx.js.map +1 -1
  31. package/dist/chunker/excel.d.ts +19 -0
  32. package/dist/chunker/excel.js +19 -0
  33. package/dist/chunker/excel.js.map +1 -1
  34. package/dist/chunker/go.d.ts +5 -0
  35. package/dist/chunker/go.js +5 -0
  36. package/dist/chunker/go.js.map +1 -1
  37. package/dist/chunker/grammar.d.ts +62 -0
  38. package/dist/chunker/grammar.js +133 -0
  39. package/dist/chunker/grammar.js.map +1 -1
  40. package/dist/chunker/html.d.ts +5 -0
  41. package/dist/chunker/html.js +5 -0
  42. package/dist/chunker/html.js.map +1 -1
  43. package/dist/chunker/image.d.ts +31 -0
  44. package/dist/chunker/image.js +50 -4
  45. package/dist/chunker/image.js.map +1 -1
  46. package/dist/chunker/ini.d.ts +5 -0
  47. package/dist/chunker/ini.js +5 -0
  48. package/dist/chunker/ini.js.map +1 -1
  49. package/dist/chunker/java.d.ts +5 -0
  50. package/dist/chunker/java.js +5 -0
  51. package/dist/chunker/java.js.map +1 -1
  52. package/dist/chunker/javascript.d.ts +6 -0
  53. package/dist/chunker/javascript.js +6 -0
  54. package/dist/chunker/javascript.js.map +1 -1
  55. package/dist/chunker/json.d.ts +5 -0
  56. package/dist/chunker/json.js +5 -0
  57. package/dist/chunker/json.js.map +1 -1
  58. package/dist/chunker/kotlin.d.ts +6 -0
  59. package/dist/chunker/kotlin.js +6 -0
  60. package/dist/chunker/kotlin.js.map +1 -1
  61. package/dist/chunker/loader.d.ts +11 -0
  62. package/dist/chunker/loader.js +20 -0
  63. package/dist/chunker/loader.js.map +1 -1
  64. package/dist/chunker/markdown.d.ts +5 -0
  65. package/dist/chunker/markdown.js +5 -0
  66. package/dist/chunker/markdown.js.map +1 -1
  67. package/dist/chunker/pdf.d.ts +19 -0
  68. package/dist/chunker/pdf.js +30 -0
  69. package/dist/chunker/pdf.js.map +1 -1
  70. package/dist/chunker/php.d.ts +5 -0
  71. package/dist/chunker/php.js +5 -0
  72. package/dist/chunker/php.js.map +1 -1
  73. package/dist/chunker/powershell.d.ts +5 -0
  74. package/dist/chunker/powershell.js +5 -0
  75. package/dist/chunker/powershell.js.map +1 -1
  76. package/dist/chunker/python.d.ts +5 -0
  77. package/dist/chunker/python.js +5 -0
  78. package/dist/chunker/python.js.map +1 -1
  79. package/dist/chunker/razor.d.ts +12 -0
  80. package/dist/chunker/razor.js +25 -0
  81. package/dist/chunker/razor.js.map +1 -1
  82. package/dist/chunker/ruby.d.ts +5 -0
  83. package/dist/chunker/ruby.js +5 -0
  84. package/dist/chunker/ruby.js.map +1 -1
  85. package/dist/chunker/rust.d.ts +6 -0
  86. package/dist/chunker/rust.js +6 -0
  87. package/dist/chunker/rust.js.map +1 -1
  88. package/dist/chunker/sln.d.ts +11 -0
  89. package/dist/chunker/sln.js +11 -0
  90. package/dist/chunker/sln.js.map +1 -1
  91. package/dist/chunker/sql.d.ts +5 -0
  92. package/dist/chunker/sql.js +5 -0
  93. package/dist/chunker/sql.js.map +1 -1
  94. package/dist/chunker/ssl.d.ts +12 -0
  95. package/dist/chunker/ssl.js +21 -2
  96. package/dist/chunker/ssl.js.map +1 -1
  97. package/dist/chunker/swift.d.ts +5 -0
  98. package/dist/chunker/swift.js +5 -0
  99. package/dist/chunker/swift.js.map +1 -1
  100. package/dist/chunker/tex.d.ts +12 -0
  101. package/dist/chunker/tex.js +12 -0
  102. package/dist/chunker/tex.js.map +1 -1
  103. package/dist/chunker/toml.d.ts +5 -0
  104. package/dist/chunker/toml.js +5 -0
  105. package/dist/chunker/toml.js.map +1 -1
  106. package/dist/chunker/typescript.d.ts +6 -0
  107. package/dist/chunker/typescript.js +6 -0
  108. package/dist/chunker/typescript.js.map +1 -1
  109. package/dist/chunker/xml.d.ts +5 -0
  110. package/dist/chunker/xml.js +5 -0
  111. package/dist/chunker/xml.js.map +1 -1
  112. package/dist/chunker/yaml.d.ts +5 -0
  113. package/dist/chunker/yaml.js +5 -0
  114. package/dist/chunker/yaml.js.map +1 -1
  115. package/dist/cli/commands/clear.d.ts +12 -0
  116. package/dist/cli/commands/clear.js +81 -0
  117. package/dist/cli/commands/clear.js.map +1 -0
  118. package/dist/cli/commands/describe-image.d.ts +14 -0
  119. package/dist/cli/commands/describe-image.js +68 -0
  120. package/dist/cli/commands/describe-image.js.map +1 -0
  121. package/dist/cli/commands/dump.d.ts +13 -0
  122. package/dist/cli/commands/dump.js +55 -0
  123. package/dist/cli/commands/dump.js.map +1 -0
  124. package/dist/cli/commands/eval.d.ts +32 -0
  125. package/dist/cli/commands/eval.js +158 -0
  126. package/dist/cli/commands/eval.js.map +1 -0
  127. package/dist/cli/commands/index-command.d.ts +17 -0
  128. package/dist/cli/commands/index-command.js +167 -0
  129. package/dist/cli/commands/index-command.js.map +1 -0
  130. package/dist/cli/commands/index.d.ts +16 -0
  131. package/dist/cli/commands/index.js +17 -0
  132. package/dist/cli/commands/index.js.map +1 -0
  133. package/dist/cli/commands/init-helpers.d.ts +101 -0
  134. package/dist/cli/commands/init-helpers.js +397 -0
  135. package/dist/cli/commands/init-helpers.js.map +1 -0
  136. package/dist/cli/commands/init.d.ts +19 -0
  137. package/dist/cli/commands/init.js +251 -0
  138. package/dist/cli/commands/init.js.map +1 -0
  139. package/dist/cli/commands/list.d.ts +13 -0
  140. package/dist/cli/commands/list.js +46 -0
  141. package/dist/cli/commands/list.js.map +1 -0
  142. package/dist/cli/commands/mcp.d.ts +14 -0
  143. package/dist/cli/commands/mcp.js +35 -0
  144. package/dist/cli/commands/mcp.js.map +1 -0
  145. package/dist/cli/commands/query.d.ts +14 -0
  146. package/dist/cli/commands/query.js +86 -0
  147. package/dist/cli/commands/query.js.map +1 -0
  148. package/dist/cli/commands/show.d.ts +13 -0
  149. package/dist/cli/commands/show.js +51 -0
  150. package/dist/cli/commands/show.js.map +1 -0
  151. package/dist/cli/commands/status.d.ts +14 -0
  152. package/dist/cli/commands/status.js +104 -0
  153. package/dist/cli/commands/status.js.map +1 -0
  154. package/dist/cli/commands/ui.d.ts +14 -0
  155. package/dist/cli/commands/ui.js +69 -0
  156. package/dist/cli/commands/ui.js.map +1 -0
  157. package/dist/cli/commands/update.d.ts +14 -0
  158. package/dist/cli/commands/update.js +76 -0
  159. package/dist/cli/commands/update.js.map +1 -0
  160. package/dist/cli/format.d.ts +112 -0
  161. package/dist/cli/format.js +184 -0
  162. package/dist/cli/format.js.map +1 -0
  163. package/dist/cli/helpers.d.ts +51 -0
  164. package/dist/cli/helpers.js +86 -0
  165. package/dist/cli/helpers.js.map +1 -0
  166. package/dist/cli/index.d.ts +28 -0
  167. package/dist/cli/index.js +104 -0
  168. package/dist/cli/index.js.map +1 -0
  169. package/dist/cli/progress.d.ts +39 -0
  170. package/dist/cli/progress.js +137 -0
  171. package/dist/cli/progress.js.map +1 -0
  172. package/dist/cli/types.d.ts +40 -0
  173. package/dist/cli/types.js +3 -0
  174. package/dist/cli/types.js.map +1 -0
  175. package/dist/cli.d.ts +11 -4
  176. package/dist/cli.js +9 -1253
  177. package/dist/cli.js.map +1 -1
  178. package/dist/content/doc.d.ts +1 -1
  179. package/dist/content/doc.js +1 -1
  180. package/dist/content/doc.js.map +1 -1
  181. package/dist/content/docx.d.ts +1 -1
  182. package/dist/content/docx.js +1 -1
  183. package/dist/content/docx.js.map +1 -1
  184. package/dist/content/excel.d.ts +1 -1
  185. package/dist/content/excel.js +1 -1
  186. package/dist/content/excel.js.map +1 -1
  187. package/dist/content/pdf.d.ts +1 -1
  188. package/dist/content/pdf.js +1 -1
  189. package/dist/content/pdf.js.map +1 -1
  190. package/dist/content/reader.d.ts +3 -1
  191. package/dist/content/reader.js +42 -10
  192. package/dist/content/reader.js.map +1 -1
  193. package/dist/core/bootstrap.d.ts +18 -0
  194. package/dist/core/bootstrap.js +9 -15
  195. package/dist/core/bootstrap.js.map +1 -1
  196. package/dist/core/config.d.ts +144 -0
  197. package/dist/core/config.js +65 -14
  198. package/dist/core/config.js.map +1 -1
  199. package/dist/core/doc-progress.d.ts +15 -0
  200. package/dist/core/doc-progress.js +61 -0
  201. package/dist/core/doc-progress.js.map +1 -0
  202. package/dist/core/fileLogger.d.ts +7 -0
  203. package/dist/core/fileLogger.js +2 -0
  204. package/dist/core/fileLogger.js.map +1 -1
  205. package/dist/core/interfaces.d.ts +52 -1
  206. package/dist/core/manifest.d.ts +25 -0
  207. package/dist/core/manifest.js +15 -1
  208. package/dist/core/manifest.js.map +1 -1
  209. package/dist/core/provider-defaults.d.ts +8 -0
  210. package/dist/core/provider-defaults.js +3 -0
  211. package/dist/core/provider-defaults.js.map +1 -1
  212. package/dist/core/rag-injection-flag.d.ts +3 -0
  213. package/dist/core/rag-injection-flag.js +2 -0
  214. package/dist/core/rag-injection-flag.js.map +1 -1
  215. package/dist/core/resolve-api-key.d.ts +1 -0
  216. package/dist/core/resolve-api-key.js +1 -0
  217. package/dist/core/resolve-api-key.js.map +1 -1
  218. package/dist/core/runtime-overrides.d.ts +4 -0
  219. package/dist/core/runtime-overrides.js +4 -1
  220. package/dist/core/runtime-overrides.js.map +1 -1
  221. package/dist/describer/anthropic.d.ts +22 -2
  222. package/dist/describer/anthropic.js +42 -110
  223. package/dist/describer/anthropic.js.map +1 -1
  224. package/dist/describer/describer.d.ts +21 -4
  225. package/dist/describer/describer.js +52 -111
  226. package/dist/describer/describer.js.map +1 -1
  227. package/dist/describer/gemini.d.ts +1 -2
  228. package/dist/describer/gemini.js +20 -113
  229. package/dist/describer/gemini.js.map +1 -1
  230. package/dist/describer/shared.d.ts +3 -0
  231. package/dist/describer/shared.js +19 -0
  232. package/dist/describer/shared.js.map +1 -0
  233. package/dist/embedder/factory.d.ts +25 -0
  234. package/dist/embedder/factory.js +25 -0
  235. package/dist/embedder/factory.js.map +1 -1
  236. package/dist/embedder/health.d.ts +10 -0
  237. package/dist/embedder/health.js +26 -14
  238. package/dist/embedder/health.js.map +1 -1
  239. package/dist/embedder/http.d.ts +47 -0
  240. package/dist/embedder/http.js +61 -3
  241. package/dist/embedder/http.js.map +1 -1
  242. package/dist/eval/index.d.ts +6 -0
  243. package/dist/eval/index.js.map +1 -1
  244. package/dist/eval/run-token-test.js +1 -5
  245. package/dist/eval/run-token-test.js.map +1 -1
  246. package/dist/eval/session-logger.d.ts +5 -0
  247. package/dist/eval/session-logger.js +4 -0
  248. package/dist/eval/session-logger.js.map +1 -1
  249. package/dist/eval/storage.d.ts +9 -0
  250. package/dist/eval/storage.js +9 -5
  251. package/dist/eval/storage.js.map +1 -1
  252. package/dist/eval/token-analysis.d.ts +8 -0
  253. package/dist/eval/token-analysis.js +6 -2
  254. package/dist/eval/token-analysis.js.map +1 -1
  255. package/dist/eval/token-counter.d.ts +1 -3
  256. package/dist/eval/token-counter.js +4 -5
  257. package/dist/eval/token-counter.js.map +1 -1
  258. package/dist/eval/types.d.ts +6 -0
  259. package/dist/eval/types.js +2 -0
  260. package/dist/eval/types.js.map +1 -1
  261. package/dist/index.d.ts +11 -0
  262. package/dist/index.js +12 -3
  263. package/dist/index.js.map +1 -1
  264. package/dist/indexer/description-stage.js +11 -2
  265. package/dist/indexer/description-stage.js.map +1 -1
  266. package/dist/indexer/embed-stage.js +0 -8
  267. package/dist/indexer/embed-stage.js.map +1 -1
  268. package/dist/indexer/pipeline.d.ts +27 -3
  269. package/dist/indexer/pipeline.js +314 -143
  270. package/dist/indexer/pipeline.js.map +1 -1
  271. package/dist/indexer/stats.d.ts +35 -0
  272. package/dist/indexer/stats.js +9 -0
  273. package/dist/indexer/stats.js.map +1 -1
  274. package/dist/indexer/watch.d.ts +25 -0
  275. package/dist/indexer/watch.js +21 -0
  276. package/dist/indexer/watch.js.map +1 -1
  277. package/dist/indexer/worker.d.ts +90 -2
  278. package/dist/indexer/worker.js +109 -24
  279. package/dist/indexer/worker.js.map +1 -1
  280. package/dist/indexer.d.ts +11 -1
  281. package/dist/indexer.js +9 -0
  282. package/dist/indexer.js.map +1 -1
  283. package/dist/mcp/cli.d.ts +3 -0
  284. package/dist/mcp/cli.js +1 -0
  285. package/dist/mcp/cli.js.map +1 -1
  286. package/dist/mcp/handlers.d.ts +41 -0
  287. package/dist/mcp/handlers.js +40 -1
  288. package/dist/mcp/handlers.js.map +1 -1
  289. package/dist/mcp/server.d.ts +8 -0
  290. package/dist/mcp/server.js +18 -1
  291. package/dist/mcp/server.js.map +1 -1
  292. package/dist/opencode/create-read-tool.js +1 -0
  293. package/dist/opencode/create-read-tool.js.map +1 -1
  294. package/dist/opencode/tools.d.ts +8 -17
  295. package/dist/opencode/tools.js +74 -109
  296. package/dist/opencode/tools.js.map +1 -1
  297. package/dist/plugin-entry.d.ts +6 -0
  298. package/dist/plugin-entry.js +6 -0
  299. package/dist/plugin-entry.js.map +1 -1
  300. package/dist/plugin.d.ts +37 -0
  301. package/dist/plugin.js +265 -40
  302. package/dist/plugin.js.map +1 -1
  303. package/dist/retriever/keyword-index.js +9 -9
  304. package/dist/retriever/keyword-index.js.map +1 -1
  305. package/dist/retriever/retriever.js +14 -4
  306. package/dist/retriever/retriever.js.map +1 -1
  307. package/dist/tui.d.ts +5 -0
  308. package/dist/tui.js +100 -12
  309. package/dist/tui.js.map +1 -1
  310. package/dist/types/opencode-plugin.d.ts +4 -1
  311. package/dist/updater.d.ts +23 -1
  312. package/dist/updater.js +55 -16
  313. package/dist/updater.js.map +1 -1
  314. package/dist/vectorstore/factory.d.ts +13 -0
  315. package/dist/vectorstore/factory.js +13 -0
  316. package/dist/vectorstore/factory.js.map +1 -1
  317. package/dist/vectorstore/lancedb.d.ts +78 -1
  318. package/dist/vectorstore/lancedb.js +195 -21
  319. package/dist/vectorstore/lancedb.js.map +1 -1
  320. package/dist/vectorstore/memory.d.ts +5 -0
  321. package/dist/vectorstore/memory.js +11 -0
  322. package/dist/vectorstore/memory.js.map +1 -1
  323. package/dist/watcher.d.ts +24 -0
  324. package/dist/watcher.js +17 -35
  325. package/dist/watcher.js.map +1 -1
  326. package/dist/web/api.d.ts +37 -0
  327. package/dist/web/api.js +54 -0
  328. package/dist/web/api.js.map +1 -1
  329. package/dist/web/server.d.ts +15 -0
  330. package/dist/web/server.js +14 -0
  331. package/dist/web/server.js.map +1 -1
  332. package/dist/web/static.d.ts +8 -0
  333. package/dist/web/static.js +8 -0
  334. package/dist/web/static.js.map +1 -1
  335. package/package.json +11 -15
@@ -0,0 +1,167 @@
1
+ /**
2
+ * `index` command — indexes workspace files into the vector database.
3
+ *
4
+ * Supports incremental indexing (only changed files), full rebuilds (`--force`),
5
+ * and watch mode (`--watch`) with chokidar-based file monitoring.
6
+ */
7
+ import path from "node:path";
8
+ import readline from "node:readline";
9
+ import chokidar from "chokidar";
10
+ import { appendDebugLog } from "../../core/fileLogger.js";
11
+ import { createWatchPassScheduler, createWatchIgnore, runIndexPass, } from "../../indexer.js";
12
+ import { c, resolveCliContext, cleanupContext, logCliError, logCliInfo, logIndexSummary, formatDuration, } from "../format.js";
13
+ import { TerminalProgressTable } from "../progress.js";
14
+ /**
15
+ * Register the `index` command on the given Commander program.
16
+ *
17
+ * Scans the workspace, chunks changed/new files, generates embeddings,
18
+ * and stores vectors in LanceDB. In watch mode, monitors file changes
19
+ * via chokidar and triggers debounced re-indexing.
20
+ *
21
+ * @param program - The Commander `Command` instance to register on.
22
+ */
23
+ export function registerIndexCommand(program) {
24
+ program
25
+ .command("index")
26
+ .description("Index workspace files")
27
+ .option("-c, --config <path>", "path to config file")
28
+ .option("-f, --force", "force full re-index")
29
+ .option("-y, --yes", "skip confirmation prompt for full rebuild")
30
+ .option("-w, --watch", "watch workspace and incrementally re-index on changes")
31
+ .action(async (options) => {
32
+ const started = Date.now();
33
+ try {
34
+ const cwd = process.cwd();
35
+ let logFilePath = path.resolve(cwd, ".opencode", "opencode-rag.log");
36
+ const ctx = await resolveCliContext(options, logFilePath);
37
+ const { config, embedder, store, storePath, keywordIndex, descriptionProvider, dimension } = ctx;
38
+ logFilePath = ctx.logFilePath;
39
+ // ── Abort controller for graceful Ctrl+C during the initial pass ──
40
+ const abortController = new AbortController();
41
+ let sigReceived = false;
42
+ const handleSigint = () => {
43
+ if (sigReceived) {
44
+ console.error("\nForce exiting...");
45
+ cleanupContext(ctx).finally(() => process.exit(130));
46
+ return;
47
+ }
48
+ sigReceived = true;
49
+ abortController.abort();
50
+ };
51
+ process.on("SIGINT", handleSigint);
52
+ process.on("SIGTERM", handleSigint);
53
+ logCliInfo(logFilePath, "index", `\n${c.heading("Indexing workspace...")}`);
54
+ logCliInfo(logFilePath, "index", ` ${c.label("Vector dimension:")} ${c.num(dimension)}`);
55
+ if (descriptionProvider) {
56
+ const descriptionConfig = config.description ?? { provider: "ollama", model: "qwen2.5:3b" };
57
+ logCliInfo(logFilePath, "index", ` ${c.label("Description LLM:")} ${c.value(descriptionConfig.model)} (${descriptionConfig.provider})`);
58
+ }
59
+ // ── Prompt for confirmation when --force would destroy existing data ──
60
+ if (options.force && !options.yes) {
61
+ const prevCount = await store.count();
62
+ if (prevCount > 0) {
63
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
64
+ const answer = await new Promise((resolve) => {
65
+ rl.question(`Delete ${c.num(prevCount)} existing chunks and re-index everything? [y/N] `, resolve);
66
+ });
67
+ rl.close();
68
+ const trimmed = answer.trim().toLowerCase();
69
+ if (trimmed !== "y" && trimmed !== "yes") {
70
+ logCliInfo(logFilePath, "index", c.warn("Force rebuild cancelled."));
71
+ await cleanupContext(ctx);
72
+ process.exit(0);
73
+ }
74
+ }
75
+ }
76
+ logCliInfo(logFilePath, "index", `${c.label("Scanning:")} ${c.file(cwd)}`);
77
+ const progress = new TerminalProgressTable(process.stdout);
78
+ const runPass = async (watchTriggered = false, abortSignal) => {
79
+ const passStarted = Date.now();
80
+ const stats = await runIndexPass({
81
+ cwd,
82
+ storePath,
83
+ config,
84
+ store,
85
+ embedder,
86
+ keywordIndex,
87
+ descriptionProvider,
88
+ progress,
89
+ force: Boolean(options.force && !watchTriggered),
90
+ abortSignal,
91
+ dimension,
92
+ logger: {
93
+ info: (message) => {
94
+ console.log(message);
95
+ appendDebugLog(logFilePath, { scope: "index", message });
96
+ },
97
+ warn: (message) => {
98
+ console.warn(message);
99
+ appendDebugLog(logFilePath, { scope: "index", message: `WARN: ${message}` });
100
+ },
101
+ debug: (message) => {
102
+ appendDebugLog(logFilePath, { scope: "index", message: `DEBUG: ${message}`, severity: "debug" });
103
+ },
104
+ },
105
+ });
106
+ progress.done();
107
+ logIndexSummary(logFilePath, stats);
108
+ logCliInfo(logFilePath, "index", `\n${c.success("Indexing complete.")} ${c.num(stats.finalCount)} chunks stored (${formatDuration(Date.now() - passStarted)}).`);
109
+ if (sigReceived) {
110
+ logCliInfo(logFilePath, "index", `\n${c.warn("Indexing was interrupted.")} ${c.num(stats.finalCount)} chunks saved. Run again to index remaining files.`);
111
+ }
112
+ return stats;
113
+ };
114
+ await runPass(false, abortController.signal);
115
+ process.removeListener("SIGINT", handleSigint);
116
+ process.removeListener("SIGTERM", handleSigint);
117
+ if (!options.watch) {
118
+ await cleanupContext(ctx);
119
+ process.exit(sigReceived ? 130 : 0);
120
+ }
121
+ logCliInfo(logFilePath, "index", `\n${c.heading("Watching for changes...")}`);
122
+ const scheduler = createWatchPassScheduler(async () => { await runPass(true); }, (error) => {
123
+ const message = error.message || String(error);
124
+ logCliError(logFilePath, "watch", `\nWatch reindex failed: ${message}`, error);
125
+ }, 300);
126
+ const watcher = chokidar.watch(cwd, {
127
+ ignored: createWatchIgnore(cwd, config, storePath),
128
+ ignoreInitial: true,
129
+ persistent: true,
130
+ });
131
+ const handleChange = () => scheduler.notifyChange();
132
+ watcher.on("add", handleChange);
133
+ watcher.on("change", handleChange);
134
+ watcher.on("unlink", handleChange);
135
+ watcher.on("unlinkDir", handleChange);
136
+ watcher.on("addDir", handleChange);
137
+ watcher.on("error", (error) => {
138
+ logCliError(logFilePath, "watch", `Watcher error: ${error.message}`, error);
139
+ console.error(c.error(`\nWatcher error: ${error.message}`));
140
+ });
141
+ const shutdown = async () => {
142
+ scheduler.close();
143
+ await scheduler.waitForIdle();
144
+ await Promise.race([
145
+ watcher.close(),
146
+ new Promise((r) => setTimeout(r, 5000)),
147
+ ]);
148
+ await cleanupContext(ctx);
149
+ process.exit(0);
150
+ };
151
+ process.once("SIGINT", () => void shutdown());
152
+ process.once("SIGTERM", () => void shutdown());
153
+ const duration = formatDuration(Date.now() - started);
154
+ logCliInfo(logFilePath, "index", `${c.success("Watcher ready")} (${duration} startup). Press Ctrl+C to stop.`);
155
+ }
156
+ catch (err) {
157
+ const message = err.message || String(err);
158
+ const logFilePath = path.resolve(process.cwd(), ".opencode", "opencode-rag.log");
159
+ logCliError(logFilePath, "index", `\nIndexing failed: ${message}`, err);
160
+ if (message.toLowerCase().includes("fetch") || message.toLowerCase().includes("econnrefused")) {
161
+ console.error(c.warn("Hint: Is your embedding provider running?"));
162
+ }
163
+ process.exit(1);
164
+ }
165
+ });
166
+ }
167
+ //# sourceMappingURL=index-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-command.js","sourceRoot":"","sources":["../../../src/cli/commands/index-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Barrel re-export for all CLI command registration functions.
3
+ */
4
+ export { registerIndexCommand } from "./index-command.js";
5
+ export { registerQueryCommand } from "./query.js";
6
+ export { registerClearCommand } from "./clear.js";
7
+ export { registerStatusCommand } from "./status.js";
8
+ export { registerListCommand } from "./list.js";
9
+ export { registerShowCommand } from "./show.js";
10
+ export { registerDumpCommand } from "./dump.js";
11
+ export { registerInitCommand } from "./init.js";
12
+ export { registerUiCommand } from "./ui.js";
13
+ export { registerMcpCommand } from "./mcp.js";
14
+ export { registerUpdateCommand } from "./update.js";
15
+ export { registerEvalSessionsCommand, registerEvalAnalyzeCommand, registerEvalCompareCommand } from "./eval.js";
16
+ export { registerDescribeImageCommand } from "./describe-image.js";
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Barrel re-export for all CLI command registration functions.
3
+ */
4
+ export { registerIndexCommand } from "./index-command.js";
5
+ export { registerQueryCommand } from "./query.js";
6
+ export { registerClearCommand } from "./clear.js";
7
+ export { registerStatusCommand } from "./status.js";
8
+ export { registerListCommand } from "./list.js";
9
+ export { registerShowCommand } from "./show.js";
10
+ export { registerDumpCommand } from "./dump.js";
11
+ export { registerInitCommand } from "./init.js";
12
+ export { registerUiCommand } from "./ui.js";
13
+ export { registerMcpCommand } from "./mcp.js";
14
+ export { registerUpdateCommand } from "./update.js";
15
+ export { registerEvalSessionsCommand, registerEvalAnalyzeCommand, registerEvalCompareCommand } from "./eval.js";
16
+ export { registerDescribeImageCommand } from "./describe-image.js";
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAChH,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Helper functions for the `init` command — file generation, config building,
3
+ * dependency installation, and gitignore merging.
4
+ */
5
+ import type { PackageMetadata } from "../types.js";
6
+ /**
7
+ * Build the workspace-local `.opencode/package.json` content.
8
+ *
9
+ * Only declares `@opencode-ai/plugin` as a dependency — the RAG plugin
10
+ * itself is extracted directly into `node_modules/` by `installPluginFromGlobal`.
11
+ *
12
+ * @param existing - The existing package.json content (if any).
13
+ * @param packageMetadata - The CLI package's metadata for version resolution.
14
+ * @returns The merged package.json object.
15
+ */
16
+ export declare function buildWorkspacePackageJson(existing: Record<string, unknown> | undefined, packageMetadata: PackageMetadata): Record<string, unknown>;
17
+ /**
18
+ * Build the `.opencode/opencode.json` config object.
19
+ *
20
+ * Ensures the `$schema` key is present and removes any stale `plugin`
21
+ * entries that would trigger erroneous npm installs.
22
+ *
23
+ * @param existing - The existing opencode.json content (if any).
24
+ * @returns The normalized config object.
25
+ */
26
+ export declare function buildOpencodeConfig(existing: Record<string, unknown> | undefined): Record<string, unknown>;
27
+ /**
28
+ * Remove stale global OpenCode plugin registrations from config files.
29
+ *
30
+ * Scans `~/.config/opencode/opencode.jsonc` and `opencode.json` for
31
+ * plugin entries matching `pluginName` and removes them.
32
+ *
33
+ * @param homeDir - The user's home directory (typically `os.homedir()`).
34
+ * @param pluginName - The plugin package name to remove.
35
+ * @returns Array of config file paths that were modified.
36
+ */
37
+ export declare function removeStaleGlobalPluginRegistrations(homeDir: string, pluginName: string): string[];
38
+ /**
39
+ * Generate the content for `.opencode/plugins/rag-plugin.js`.
40
+ *
41
+ * This file re-exports the plugin from the workspace-local node_modules.
42
+ *
43
+ * @param packageName - The npm package name of the RAG plugin.
44
+ * @returns The JavaScript source code for the plugin entry file.
45
+ */
46
+ export declare function generateWorkspacePluginFile(packageName: string): string;
47
+ /**
48
+ * Generate the content for `.opencode/plugins/rag-tui.js`.
49
+ *
50
+ * This file re-exports the TUI plugin from the workspace-local node_modules.
51
+ *
52
+ * @param packageName - The npm package name of the RAG plugin.
53
+ * @returns The JavaScript source code for the TUI plugin entry file.
54
+ */
55
+ export declare function generateWorkspaceTuiPluginFile(packageName: string): string;
56
+ /**
57
+ * Generate the content for `.opencode/skills/opencode-rag/SKILL.md`.
58
+ *
59
+ * This file provides tool usage guidance for AI assistants working in the workspace.
60
+ *
61
+ * @returns The full Markdown content of the skill file.
62
+ */
63
+ export declare function generateSkillFile(): string;
64
+ /**
65
+ * Merge required entries into an existing `.gitignore` content string.
66
+ *
67
+ * Ensures `node_modules/`, `package-lock.json`, `rag_db/`, and `opencode-rag.log`
68
+ * are present. If no existing content is provided, generates a complete file.
69
+ *
70
+ * @param existingContent - The current `.gitignore` content, or `undefined` if absent.
71
+ * @returns The merged `.gitignore` content with a trailing newline.
72
+ */
73
+ export declare function mergeGitignoreContent(existingContent?: string): string;
74
+ /**
75
+ * Get the runtime directory path (`~/.opencode`).
76
+ *
77
+ * @returns The absolute path to the user's OpenCode runtime directory.
78
+ */
79
+ export declare function getRuntimeDir(): string;
80
+ /**
81
+ * Link the precompiled plugin from the global runtime directory
82
+ * (`~/.opencode/node_modules/...`) into the workspace via a junction/symlink,
83
+ * then verify that both the plugin entry and `@opencode-ai/plugin` are
84
+ * resolvable through the junction.
85
+ *
86
+ * No npm install is required — the global runtime (created by the `compile`
87
+ * step) has all dependencies pre-installed, and Node.js resolves module
88
+ * imports through the junction's real path.
89
+ *
90
+ * @param opencodeDir - Absolute path to the workspace `.opencode/` directory.
91
+ * @param packageName - The npm package name of the RAG plugin.
92
+ * @param skipInstall - If true, skip the junction creation.
93
+ * @throws If the global runtime is missing or the junction cannot be created.
94
+ */
95
+ export declare function installPluginFromGlobal(opencodeDir: string, packageName: string, skipInstall: boolean): Promise<void>;
96
+ /**
97
+ * Generate the default `opencode-rag.json` configuration content.
98
+ *
99
+ * @returns A pretty-printed JSON string with all default configuration values.
100
+ */
101
+ export declare function generateDefaultConfigJson(): string;