opencode-rag-plugin 1.2.0 → 1.2.2

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 (112) hide show
  1. package/ReadMe.md +463 -463
  2. package/dist/cli.d.ts +7 -0
  3. package/dist/cli.js +20 -5
  4. package/dist/cli.js.map +1 -1
  5. package/dist/plugin.js +1 -1
  6. package/dist/plugin.js.map +1 -1
  7. package/package.json +89 -89
  8. package/dist/__tests__/chunker/c.test.d.ts +0 -1
  9. package/dist/__tests__/chunker/c.test.js +0 -82
  10. package/dist/__tests__/chunker/c.test.js.map +0 -1
  11. package/dist/__tests__/chunker/cpp.test.d.ts +0 -1
  12. package/dist/__tests__/chunker/cpp.test.js +0 -96
  13. package/dist/__tests__/chunker/cpp.test.js.map +0 -1
  14. package/dist/__tests__/chunker/csharp.test.d.ts +0 -1
  15. package/dist/__tests__/chunker/csharp.test.js +0 -85
  16. package/dist/__tests__/chunker/csharp.test.js.map +0 -1
  17. package/dist/__tests__/chunker/css.test.d.ts +0 -1
  18. package/dist/__tests__/chunker/css.test.js +0 -64
  19. package/dist/__tests__/chunker/css.test.js.map +0 -1
  20. package/dist/__tests__/chunker/factory.test.d.ts +0 -1
  21. package/dist/__tests__/chunker/factory.test.js +0 -202
  22. package/dist/__tests__/chunker/factory.test.js.map +0 -1
  23. package/dist/__tests__/chunker/fallback.test.d.ts +0 -1
  24. package/dist/__tests__/chunker/fallback.test.js +0 -67
  25. package/dist/__tests__/chunker/fallback.test.js.map +0 -1
  26. package/dist/__tests__/chunker/go.test.d.ts +0 -1
  27. package/dist/__tests__/chunker/go.test.js +0 -90
  28. package/dist/__tests__/chunker/go.test.js.map +0 -1
  29. package/dist/__tests__/chunker/grammar.test.d.ts +0 -1
  30. package/dist/__tests__/chunker/grammar.test.js +0 -108
  31. package/dist/__tests__/chunker/grammar.test.js.map +0 -1
  32. package/dist/__tests__/chunker/html.test.d.ts +0 -1
  33. package/dist/__tests__/chunker/html.test.js +0 -64
  34. package/dist/__tests__/chunker/html.test.js.map +0 -1
  35. package/dist/__tests__/chunker/java.test.d.ts +0 -1
  36. package/dist/__tests__/chunker/java.test.js +0 -83
  37. package/dist/__tests__/chunker/java.test.js.map +0 -1
  38. package/dist/__tests__/chunker/javascript.test.d.ts +0 -1
  39. package/dist/__tests__/chunker/javascript.test.js +0 -88
  40. package/dist/__tests__/chunker/javascript.test.js.map +0 -1
  41. package/dist/__tests__/chunker/json.test.d.ts +0 -1
  42. package/dist/__tests__/chunker/json.test.js +0 -54
  43. package/dist/__tests__/chunker/json.test.js.map +0 -1
  44. package/dist/__tests__/chunker/kotlin.test.d.ts +0 -1
  45. package/dist/__tests__/chunker/kotlin.test.js +0 -42
  46. package/dist/__tests__/chunker/kotlin.test.js.map +0 -1
  47. package/dist/__tests__/chunker/markdown.test.d.ts +0 -1
  48. package/dist/__tests__/chunker/markdown.test.js +0 -76
  49. package/dist/__tests__/chunker/markdown.test.js.map +0 -1
  50. package/dist/__tests__/chunker/python.test.d.ts +0 -1
  51. package/dist/__tests__/chunker/python.test.js +0 -81
  52. package/dist/__tests__/chunker/python.test.js.map +0 -1
  53. package/dist/__tests__/chunker/razor.test.d.ts +0 -1
  54. package/dist/__tests__/chunker/razor.test.js +0 -73
  55. package/dist/__tests__/chunker/razor.test.js.map +0 -1
  56. package/dist/__tests__/chunker/register.test.d.ts +0 -1
  57. package/dist/__tests__/chunker/register.test.js +0 -93
  58. package/dist/__tests__/chunker/register.test.js.map +0 -1
  59. package/dist/__tests__/chunker/ruby.test.d.ts +0 -1
  60. package/dist/__tests__/chunker/ruby.test.js +0 -40
  61. package/dist/__tests__/chunker/ruby.test.js.map +0 -1
  62. package/dist/__tests__/chunker/rust.test.d.ts +0 -1
  63. package/dist/__tests__/chunker/rust.test.js +0 -42
  64. package/dist/__tests__/chunker/rust.test.js.map +0 -1
  65. package/dist/__tests__/chunker/sln.test.d.ts +0 -1
  66. package/dist/__tests__/chunker/sln.test.js +0 -45
  67. package/dist/__tests__/chunker/sln.test.js.map +0 -1
  68. package/dist/__tests__/chunker/swift.test.d.ts +0 -1
  69. package/dist/__tests__/chunker/swift.test.js +0 -49
  70. package/dist/__tests__/chunker/swift.test.js.map +0 -1
  71. package/dist/__tests__/chunker/typescript.test.d.ts +0 -1
  72. package/dist/__tests__/chunker/typescript.test.js +0 -92
  73. package/dist/__tests__/chunker/typescript.test.js.map +0 -1
  74. package/dist/__tests__/chunker/uuid.test.d.ts +0 -1
  75. package/dist/__tests__/chunker/uuid.test.js +0 -19
  76. package/dist/__tests__/chunker/uuid.test.js.map +0 -1
  77. package/dist/__tests__/chunker/xml.test.d.ts +0 -1
  78. package/dist/__tests__/chunker/xml.test.js +0 -50
  79. package/dist/__tests__/chunker/xml.test.js.map +0 -1
  80. package/dist/__tests__/core/config.test.d.ts +0 -1
  81. package/dist/__tests__/core/config.test.js +0 -75
  82. package/dist/__tests__/core/config.test.js.map +0 -1
  83. package/dist/__tests__/core/fileLogger.test.d.ts +0 -1
  84. package/dist/__tests__/core/fileLogger.test.js +0 -34
  85. package/dist/__tests__/core/fileLogger.test.js.map +0 -1
  86. package/dist/__tests__/core/manifest.test.d.ts +0 -1
  87. package/dist/__tests__/core/manifest.test.js +0 -56
  88. package/dist/__tests__/core/manifest.test.js.map +0 -1
  89. package/dist/__tests__/embedder/embedBatch.test.d.ts +0 -1
  90. package/dist/__tests__/embedder/embedBatch.test.js +0 -88
  91. package/dist/__tests__/embedder/embedBatch.test.js.map +0 -1
  92. package/dist/__tests__/embedder/factory.test.d.ts +0 -1
  93. package/dist/__tests__/embedder/factory.test.js +0 -71
  94. package/dist/__tests__/embedder/factory.test.js.map +0 -1
  95. package/dist/__tests__/embedder/ollama.test.d.ts +0 -1
  96. package/dist/__tests__/embedder/ollama.test.js +0 -106
  97. package/dist/__tests__/embedder/ollama.test.js.map +0 -1
  98. package/dist/__tests__/embedder/openai.test.d.ts +0 -1
  99. package/dist/__tests__/embedder/openai.test.js +0 -94
  100. package/dist/__tests__/embedder/openai.test.js.map +0 -1
  101. package/dist/__tests__/indexer/indexer.test.d.ts +0 -1
  102. package/dist/__tests__/indexer/indexer.test.js +0 -176
  103. package/dist/__tests__/indexer/indexer.test.js.map +0 -1
  104. package/dist/__tests__/plugin.test.d.ts +0 -1
  105. package/dist/__tests__/plugin.test.js +0 -77
  106. package/dist/__tests__/plugin.test.js.map +0 -1
  107. package/dist/__tests__/retriever/retriever.test.d.ts +0 -1
  108. package/dist/__tests__/retriever/retriever.test.js +0 -97
  109. package/dist/__tests__/retriever/retriever.test.js.map +0 -1
  110. package/dist/__tests__/vectorstore/lancedb.test.d.ts +0 -1
  111. package/dist/__tests__/vectorstore/lancedb.test.js +0 -159
  112. package/dist/__tests__/vectorstore/lancedb.test.js.map +0 -1
@@ -1,159 +0,0 @@
1
- import { describe, it, before, after } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { LanceDBStore } from "../../vectorstore/lancedb.js";
4
- import { normalizeFilePath } from "../../core/manifest.js";
5
- describe("LanceDBStore (memory)", () => {
6
- let store;
7
- before(async () => {
8
- store = new LanceDBStore("memory://");
9
- });
10
- after(async () => {
11
- await store.clear();
12
- });
13
- it("starts with zero count", async () => {
14
- const count = await store.count();
15
- assert.equal(count, 0);
16
- });
17
- it("adds chunks and returns correct count", async () => {
18
- const chunks = [
19
- {
20
- id: "chunk-1",
21
- content: "function hello() { return 'world'; }",
22
- embedding: new Array(384).fill(0).map((_, i) => (i % 2 === 0 ? 0.1 : -0.1)),
23
- metadata: {
24
- filePath: "src/hello.ts",
25
- startLine: 1,
26
- endLine: 5,
27
- language: "typescript",
28
- },
29
- },
30
- {
31
- id: "chunk-2",
32
- content: "function goodbye() { return 'farewell'; }",
33
- embedding: new Array(384).fill(0).map((_, i) => (i % 2 === 0 ? -0.1 : 0.1)),
34
- metadata: {
35
- filePath: "src/goodbye.ts",
36
- startLine: 1,
37
- endLine: 5,
38
- language: "typescript",
39
- },
40
- },
41
- ];
42
- await store.addChunks(chunks);
43
- const count = await store.count();
44
- assert.equal(count, 2);
45
- });
46
- it("searches and returns results with scores", async () => {
47
- // Search with a vector similar to chunk-1
48
- const queryVector = new Array(384).fill(0).map((_, i) => i % 2 === 0 ? 0.1 : -0.1);
49
- const results = await store.search(queryVector, 2);
50
- assert.ok(results.length > 0, "Should return at least one result");
51
- assert.ok(results[0].score > 0, "Score should be positive");
52
- assert.ok(results[0].score <= 1, "Score should be <= 1");
53
- assert.equal(typeof results[0].chunk.id, "string");
54
- assert.equal(typeof results[0].chunk.content, "string");
55
- });
56
- it("respects topK parameter", async () => {
57
- const queryVector = new Array(384).fill(0.1);
58
- const results = await store.search(queryVector, 1);
59
- assert.equal(results.length, 1);
60
- });
61
- it("clears all chunks", async () => {
62
- await store.clear();
63
- const count = await store.count();
64
- assert.equal(count, 0);
65
- });
66
- it("can re-add chunks after clear", async () => {
67
- const chunks = [
68
- {
69
- id: "chunk-3",
70
- content: "new content",
71
- embedding: new Array(384).fill(0.05),
72
- metadata: {
73
- filePath: "src/new.ts",
74
- startLine: 1,
75
- endLine: 3,
76
- language: "typescript",
77
- },
78
- },
79
- ];
80
- await store.addChunks(chunks);
81
- const count = await store.count();
82
- assert.equal(count, 1);
83
- });
84
- it("filters out chunks without embeddings in addChunks", async () => {
85
- await store.clear();
86
- const chunks = [
87
- {
88
- id: "no-embed",
89
- content: "no embedding",
90
- embedding: undefined,
91
- metadata: {
92
- filePath: "test.ts",
93
- startLine: 1,
94
- endLine: 1,
95
- language: "typescript",
96
- },
97
- },
98
- {
99
- id: "empty-embed",
100
- content: "empty embedding",
101
- embedding: [],
102
- metadata: {
103
- filePath: "test.ts",
104
- startLine: 2,
105
- endLine: 2,
106
- language: "typescript",
107
- },
108
- },
109
- ];
110
- await store.addChunks(chunks);
111
- const count = await store.count();
112
- assert.equal(count, 0, "Chunks without embeddings should not be stored");
113
- });
114
- it("deletes all chunks for a specific file path", async () => {
115
- await store.clear();
116
- await store.addChunks([
117
- {
118
- id: "delete-1",
119
- content: "alpha",
120
- embedding: new Array(384).fill(0.1),
121
- metadata: {
122
- filePath: "src/delete-me.ts",
123
- startLine: 1,
124
- endLine: 1,
125
- language: "typescript",
126
- },
127
- },
128
- {
129
- id: "delete-2",
130
- content: "beta",
131
- embedding: new Array(384).fill(0.2),
132
- metadata: {
133
- filePath: "src/keep-me.ts",
134
- startLine: 1,
135
- endLine: 1,
136
- language: "typescript",
137
- },
138
- },
139
- {
140
- id: "delete-3",
141
- content: "gamma",
142
- embedding: new Array(384).fill(0.3),
143
- metadata: {
144
- filePath: "src/delete-me.ts",
145
- startLine: 2,
146
- endLine: 2,
147
- language: "typescript",
148
- },
149
- },
150
- ]);
151
- await store.deleteByFilePath("src/delete-me.ts");
152
- const count = await store.count();
153
- assert.equal(count, 1);
154
- const results = await store.search(new Array(384).fill(0.2), 5);
155
- assert.equal(results.length, 1);
156
- assert.equal(results[0].chunk.metadata.filePath, normalizeFilePath("src/keep-me.ts"));
157
- });
158
- });
159
- //# sourceMappingURL=lancedb.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lancedb.test.js","sourceRoot":"","sources":["../../../src/__tests__/vectorstore/lancedb.test.ts"],"names":[],"mappings":"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"}