opencode-rag-plugin 1.2.5 → 1.2.11

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 (117) hide show
  1. package/ReadMe.md +491 -463
  2. package/dist/cli.js +58 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/core/config.d.ts +1 -0
  5. package/dist/core/config.js +1 -0
  6. package/dist/core/config.js.map +1 -1
  7. package/dist/plugin.js +6 -4
  8. package/dist/plugin.js.map +1 -1
  9. package/dist/retriever/retriever.d.ts +1 -0
  10. package/dist/retriever/retriever.js +3 -1
  11. package/dist/retriever/retriever.js.map +1 -1
  12. package/package.json +90 -90
  13. package/dist/__tests__/chunker/c.test.d.ts +0 -1
  14. package/dist/__tests__/chunker/c.test.js +0 -82
  15. package/dist/__tests__/chunker/c.test.js.map +0 -1
  16. package/dist/__tests__/chunker/cpp.test.d.ts +0 -1
  17. package/dist/__tests__/chunker/cpp.test.js +0 -96
  18. package/dist/__tests__/chunker/cpp.test.js.map +0 -1
  19. package/dist/__tests__/chunker/csharp.test.d.ts +0 -1
  20. package/dist/__tests__/chunker/csharp.test.js +0 -85
  21. package/dist/__tests__/chunker/csharp.test.js.map +0 -1
  22. package/dist/__tests__/chunker/css.test.d.ts +0 -1
  23. package/dist/__tests__/chunker/css.test.js +0 -64
  24. package/dist/__tests__/chunker/css.test.js.map +0 -1
  25. package/dist/__tests__/chunker/factory.test.d.ts +0 -1
  26. package/dist/__tests__/chunker/factory.test.js +0 -202
  27. package/dist/__tests__/chunker/factory.test.js.map +0 -1
  28. package/dist/__tests__/chunker/fallback.test.d.ts +0 -1
  29. package/dist/__tests__/chunker/fallback.test.js +0 -67
  30. package/dist/__tests__/chunker/fallback.test.js.map +0 -1
  31. package/dist/__tests__/chunker/go.test.d.ts +0 -1
  32. package/dist/__tests__/chunker/go.test.js +0 -90
  33. package/dist/__tests__/chunker/go.test.js.map +0 -1
  34. package/dist/__tests__/chunker/grammar.test.d.ts +0 -1
  35. package/dist/__tests__/chunker/grammar.test.js +0 -108
  36. package/dist/__tests__/chunker/grammar.test.js.map +0 -1
  37. package/dist/__tests__/chunker/html.test.d.ts +0 -1
  38. package/dist/__tests__/chunker/html.test.js +0 -64
  39. package/dist/__tests__/chunker/html.test.js.map +0 -1
  40. package/dist/__tests__/chunker/java.test.d.ts +0 -1
  41. package/dist/__tests__/chunker/java.test.js +0 -83
  42. package/dist/__tests__/chunker/java.test.js.map +0 -1
  43. package/dist/__tests__/chunker/javascript.test.d.ts +0 -1
  44. package/dist/__tests__/chunker/javascript.test.js +0 -88
  45. package/dist/__tests__/chunker/javascript.test.js.map +0 -1
  46. package/dist/__tests__/chunker/json.test.d.ts +0 -1
  47. package/dist/__tests__/chunker/json.test.js +0 -54
  48. package/dist/__tests__/chunker/json.test.js.map +0 -1
  49. package/dist/__tests__/chunker/kotlin.test.d.ts +0 -1
  50. package/dist/__tests__/chunker/kotlin.test.js +0 -42
  51. package/dist/__tests__/chunker/kotlin.test.js.map +0 -1
  52. package/dist/__tests__/chunker/markdown.test.d.ts +0 -1
  53. package/dist/__tests__/chunker/markdown.test.js +0 -76
  54. package/dist/__tests__/chunker/markdown.test.js.map +0 -1
  55. package/dist/__tests__/chunker/python.test.d.ts +0 -1
  56. package/dist/__tests__/chunker/python.test.js +0 -81
  57. package/dist/__tests__/chunker/python.test.js.map +0 -1
  58. package/dist/__tests__/chunker/razor.test.d.ts +0 -1
  59. package/dist/__tests__/chunker/razor.test.js +0 -73
  60. package/dist/__tests__/chunker/razor.test.js.map +0 -1
  61. package/dist/__tests__/chunker/register.test.d.ts +0 -1
  62. package/dist/__tests__/chunker/register.test.js +0 -93
  63. package/dist/__tests__/chunker/register.test.js.map +0 -1
  64. package/dist/__tests__/chunker/ruby.test.d.ts +0 -1
  65. package/dist/__tests__/chunker/ruby.test.js +0 -40
  66. package/dist/__tests__/chunker/ruby.test.js.map +0 -1
  67. package/dist/__tests__/chunker/rust.test.d.ts +0 -1
  68. package/dist/__tests__/chunker/rust.test.js +0 -42
  69. package/dist/__tests__/chunker/rust.test.js.map +0 -1
  70. package/dist/__tests__/chunker/sln.test.d.ts +0 -1
  71. package/dist/__tests__/chunker/sln.test.js +0 -45
  72. package/dist/__tests__/chunker/sln.test.js.map +0 -1
  73. package/dist/__tests__/chunker/swift.test.d.ts +0 -1
  74. package/dist/__tests__/chunker/swift.test.js +0 -49
  75. package/dist/__tests__/chunker/swift.test.js.map +0 -1
  76. package/dist/__tests__/chunker/typescript.test.d.ts +0 -1
  77. package/dist/__tests__/chunker/typescript.test.js +0 -92
  78. package/dist/__tests__/chunker/typescript.test.js.map +0 -1
  79. package/dist/__tests__/chunker/uuid.test.d.ts +0 -1
  80. package/dist/__tests__/chunker/uuid.test.js +0 -19
  81. package/dist/__tests__/chunker/uuid.test.js.map +0 -1
  82. package/dist/__tests__/chunker/xml.test.d.ts +0 -1
  83. package/dist/__tests__/chunker/xml.test.js +0 -50
  84. package/dist/__tests__/chunker/xml.test.js.map +0 -1
  85. package/dist/__tests__/core/config.test.d.ts +0 -1
  86. package/dist/__tests__/core/config.test.js +0 -75
  87. package/dist/__tests__/core/config.test.js.map +0 -1
  88. package/dist/__tests__/core/fileLogger.test.d.ts +0 -1
  89. package/dist/__tests__/core/fileLogger.test.js +0 -34
  90. package/dist/__tests__/core/fileLogger.test.js.map +0 -1
  91. package/dist/__tests__/core/manifest.test.d.ts +0 -1
  92. package/dist/__tests__/core/manifest.test.js +0 -56
  93. package/dist/__tests__/core/manifest.test.js.map +0 -1
  94. package/dist/__tests__/embedder/embedBatch.test.d.ts +0 -1
  95. package/dist/__tests__/embedder/embedBatch.test.js +0 -88
  96. package/dist/__tests__/embedder/embedBatch.test.js.map +0 -1
  97. package/dist/__tests__/embedder/factory.test.d.ts +0 -1
  98. package/dist/__tests__/embedder/factory.test.js +0 -71
  99. package/dist/__tests__/embedder/factory.test.js.map +0 -1
  100. package/dist/__tests__/embedder/ollama.test.d.ts +0 -1
  101. package/dist/__tests__/embedder/ollama.test.js +0 -106
  102. package/dist/__tests__/embedder/ollama.test.js.map +0 -1
  103. package/dist/__tests__/embedder/openai.test.d.ts +0 -1
  104. package/dist/__tests__/embedder/openai.test.js +0 -94
  105. package/dist/__tests__/embedder/openai.test.js.map +0 -1
  106. package/dist/__tests__/indexer/indexer.test.d.ts +0 -1
  107. package/dist/__tests__/indexer/indexer.test.js +0 -176
  108. package/dist/__tests__/indexer/indexer.test.js.map +0 -1
  109. package/dist/__tests__/plugin.test.d.ts +0 -1
  110. package/dist/__tests__/plugin.test.js +0 -77
  111. package/dist/__tests__/plugin.test.js.map +0 -1
  112. package/dist/__tests__/retriever/retriever.test.d.ts +0 -1
  113. package/dist/__tests__/retriever/retriever.test.js +0 -97
  114. package/dist/__tests__/retriever/retriever.test.js.map +0 -1
  115. package/dist/__tests__/vectorstore/lancedb.test.d.ts +0 -1
  116. package/dist/__tests__/vectorstore/lancedb.test.js +0 -159
  117. package/dist/__tests__/vectorstore/lancedb.test.js.map +0 -1
@@ -1,45 +0,0 @@
1
- import { describe, it } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { slnChunker } from "../../chunker/sln.js";
4
- describe("SlnChunker", () => {
5
- it("language is 'sln'", () => {
6
- assert.equal(slnChunker.language, "sln");
7
- });
8
- it("fileExtensions includes .sln", () => {
9
- assert.ok(slnChunker.fileExtensions.includes(".sln"));
10
- assert.equal(slnChunker.fileExtensions.length, 1);
11
- });
12
- it("chunk returns empty array for empty content", async () => {
13
- const chunks = await slnChunker.chunk("test.sln", "");
14
- assert.deepStrictEqual(chunks, []);
15
- });
16
- it("chunk parses project sections in a solution file", async () => {
17
- const sln = `Microsoft Visual Studio Solution File
18
- Project("{FAE04EC0-301F}") = "MyApp", "src\\MyApp\\MyApp.csproj", "{A1B2}"
19
- EndProject
20
- Project("{FAE04EC0-301F}") = "MyLib", "src\\MyLib\\MyLib.csproj", "{C3D4}"
21
- EndProject
22
- Global
23
- \tGlobalSection(SolutionConfigurationPlatforms) = preSolution
24
- \t\tDebug|Any CPU = Debug|Any CPU
25
- \tEndGlobalSection
26
- EndGlobal`;
27
- const chunks = await slnChunker.chunk("test.sln", sln);
28
- assert.equal(chunks.length, 3);
29
- assert.ok(chunks[0].content.includes("MyApp"));
30
- assert.ok(chunks[1].content.includes("MyLib"));
31
- assert.ok(chunks[2].content.includes("GlobalSection"));
32
- });
33
- it("chunk generates unique IDs", async () => {
34
- const sln = `Project("A") = "A", "A.csproj", "{A}"\nEndProject\nProject("B") = "B", "B.csproj", "{B}"\nEndProject`;
35
- const chunks = await slnChunker.chunk("test.sln", sln);
36
- const ids = chunks.map((c) => c.id);
37
- assert.equal(new Set(ids).size, ids.length);
38
- });
39
- it("chunk sets correct startLine metadata", async () => {
40
- const sln = `\nProject("A") = "A", "A.csproj", "{A}"\nEndProject`;
41
- const chunks = await slnChunker.chunk("test.sln", sln);
42
- assert.equal(chunks[0].metadata.startLine, 2);
43
- });
44
- });
45
- //# sourceMappingURL=sln.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sln.test.js","sourceRoot":"","sources":["../../../src/__tests__/chunker/sln.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,GAAG,GAAG;;;;;;;;;UASN,CAAC;QACP,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,GAAG,GAAG,sGAAsG,CAAC;QACnH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,GAAG,GAAG,qDAAqD,CAAC;QAClE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,49 +0,0 @@
1
- import { describe, it } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { swiftChunker } from "../../chunker/swift.js";
4
- describe("SwiftChunker", () => {
5
- it("language is 'swift'", () => {
6
- assert.equal(swiftChunker.language, "swift");
7
- });
8
- it("fileExtensions includes .swift", () => {
9
- assert.ok(swiftChunker.fileExtensions.includes(".swift"));
10
- assert.equal(swiftChunker.fileExtensions.length, 1);
11
- });
12
- it("nodeTypes contains function_declaration, class_declaration, struct_declaration, enum_declaration, protocol_declaration, extension_declaration, variable_declaration", () => {
13
- assert.ok(swiftChunker.nodeTypes.has("function_declaration"));
14
- assert.ok(swiftChunker.nodeTypes.has("class_declaration"));
15
- assert.ok(swiftChunker.nodeTypes.has("struct_declaration"));
16
- assert.ok(swiftChunker.nodeTypes.has("enum_declaration"));
17
- assert.ok(swiftChunker.nodeTypes.has("protocol_declaration"));
18
- assert.ok(swiftChunker.nodeTypes.has("extension_declaration"));
19
- assert.ok(swiftChunker.nodeTypes.has("variable_declaration"));
20
- });
21
- it("chunk returns empty for empty content", async () => {
22
- const chunks = await swiftChunker.chunk("test.swift", "");
23
- assert.deepStrictEqual(chunks, []);
24
- });
25
- it("chunk parses a function definition", async () => {
26
- const code = "func greet(name: String) -> String {\n return \"Hello \\(name)\"\n}";
27
- const chunks = await swiftChunker.chunk("test.swift", code);
28
- assert.equal(chunks.length, 1);
29
- assert.ok(chunks[0].content.includes("func greet"));
30
- });
31
- it("chunk parses a class definition", async () => {
32
- const code = "class Point {\n var x: Double\n var y: Double\n}";
33
- const chunks = await swiftChunker.chunk("test.swift", code);
34
- assert.equal(chunks.length, 1);
35
- assert.ok(chunks[0].content.includes("class Point"));
36
- });
37
- it("chunk parses a struct definition", async () => {
38
- const code = "struct User {\n let id: Int\n}";
39
- const chunks = await swiftChunker.chunk("test.swift", code);
40
- assert.equal(chunks.length, 1);
41
- assert.ok(chunks[0].content.includes("struct User"));
42
- });
43
- it("chunk generates unique IDs", async () => {
44
- const code = "func a() {}\nfunc b() {}\nfunc c() {}";
45
- const chunks = await swiftChunker.chunk("test.swift", code);
46
- assert.equal(new Set(chunks.map((c) => c.id)).size, chunks.length);
47
- });
48
- });
49
- //# sourceMappingURL=swift.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"swift.test.js","sourceRoot":"","sources":["../../../src/__tests__/chunker/swift.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qKAAqK,EAAE,GAAG,EAAE;QAC7K,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC9D,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QAC1D,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,IAAI,GAAG,wEAAwE,CAAC;QACtF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC5D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,IAAI,GAAG,wDAAwD,CAAC;QACtE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC5D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,IAAI,GAAG,mCAAmC,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC5D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,IAAI,GAAG,uCAAuC,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC5D,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,92 +0,0 @@
1
- import { describe, it } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { typescriptChunker } from "../../chunker/typescript.js";
4
- describe("TypeScriptChunker", () => {
5
- it("language is 'typescript'", () => {
6
- assert.equal(typescriptChunker.language, "typescript");
7
- });
8
- it("fileExtensions includes .ts and .tsx", () => {
9
- assert.ok(typescriptChunker.fileExtensions.includes(".ts"));
10
- assert.ok(typescriptChunker.fileExtensions.includes(".tsx"));
11
- });
12
- it("grammarName is 'typescript'", () => {
13
- assert.equal(typescriptChunker.grammarName, "typescript");
14
- });
15
- it("nodeTypes contains expected types", () => {
16
- const types = typescriptChunker.nodeTypes;
17
- assert.ok(types.has("function_declaration"));
18
- assert.ok(types.has("method_definition"));
19
- assert.ok(types.has("class_declaration"));
20
- assert.ok(types.has("arrow_function"));
21
- assert.ok(types.has("interface_declaration"));
22
- assert.ok(types.has("type_alias_declaration"));
23
- assert.ok(types.has("export_statement"));
24
- });
25
- it("chunk returns empty array for empty content", async () => {
26
- const chunks = await typescriptChunker.chunk("test.ts", "");
27
- assert.deepStrictEqual(chunks, []);
28
- });
29
- it("chunk returns empty array for whitespace-only content", async () => {
30
- const chunks = await typescriptChunker.chunk("test.ts", " \n \n ");
31
- assert.deepStrictEqual(chunks, []);
32
- });
33
- it("chunk parses a function declaration", async () => {
34
- const code = "function hello() { return 'world'; }";
35
- const chunks = await typescriptChunker.chunk("test.ts", code);
36
- assert.ok(chunks.length > 0, "expected at least one chunk");
37
- assert.equal(chunks[0].metadata.language, "typescript");
38
- assert.equal(chunks[0].metadata.filePath, "test.ts");
39
- assert.ok(chunks[0].id.length > 0);
40
- assert.ok(chunks[0].content.includes("hello"));
41
- });
42
- it("chunk parses a class declaration", async () => {
43
- const code = "class Foo { bar(): string { return 'baz'; } }";
44
- const chunks = await typescriptChunker.chunk("/src/Foo.ts", code);
45
- assert.ok(chunks.length > 0, "expected at least one chunk");
46
- assert.equal(chunks[0].metadata.language, "typescript");
47
- assert.equal(chunks[0].metadata.filePath, "/src/Foo.ts");
48
- assert.ok(chunks[0].content.includes("class Foo"));
49
- });
50
- it("chunk parses an interface declaration", async () => {
51
- const code = "interface User { name: string; age: number; }";
52
- const chunks = await typescriptChunker.chunk("types.ts", code);
53
- assert.ok(chunks.length > 0, "expected at least one chunk");
54
- assert.ok(chunks[0].content.includes("interface User"));
55
- });
56
- it("chunk parses a type alias declaration", async () => {
57
- const code = "type Point = { x: number; y: number; };";
58
- const chunks = await typescriptChunker.chunk("types.ts", code);
59
- assert.ok(chunks.length > 0, "expected at least one chunk");
60
- assert.ok(chunks.some((c) => c.content.includes("Point")));
61
- });
62
- it("chunk generates unique IDs for multiple declarations", async () => {
63
- const code = [
64
- "function foo() { return 1; }",
65
- "function bar() { return 2; }",
66
- "function baz() { return 3; }",
67
- ].join("\n");
68
- const chunks = await typescriptChunker.chunk("multi.ts", code);
69
- const ids = new Set(chunks.map((c) => c.id));
70
- assert.equal(ids.size, chunks.length);
71
- });
72
- it("chunk sets correct startLine metadata", async () => {
73
- const code = [
74
- "// top comment",
75
- "",
76
- "function first() {",
77
- " return 1;",
78
- "}",
79
- "",
80
- "function second() {",
81
- " return 2;",
82
- "}",
83
- ].join("\n");
84
- const chunks = await typescriptChunker.chunk("lines.ts", code);
85
- assert.ok(chunks.length >= 2, "expected at least two chunks");
86
- // first() starts at line 3 (1-indexed)
87
- const firstFn = chunks.find((c) => c.content.includes("first"));
88
- assert.ok(firstFn, "should find first() chunk");
89
- assert.equal(firstFn.metadata.startLine, 3);
90
- });
91
- });
92
- //# sourceMappingURL=typescript.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"typescript.test.js","sourceRoot":"","sources":["../../../src/__tests__/chunker/typescript.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,19 +0,0 @@
1
- import { describe, it } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { uuid } from "../../chunker/uuid.js";
4
- describe("uuid", () => {
5
- it("generates a valid UUID v4 format", () => {
6
- const id = uuid();
7
- assert.match(id, /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/);
8
- });
9
- it("generates unique IDs", () => {
10
- const ids = new Set(Array.from({ length: 100 }, () => uuid()));
11
- assert.equal(ids.size, 100);
12
- });
13
- it("generates IDs as strings", () => {
14
- const id = uuid();
15
- assert.equal(typeof id, "string");
16
- assert.equal(id.length, 36);
17
- });
18
- });
19
- //# sourceMappingURL=uuid.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uuid.test.js","sourceRoot":"","sources":["../../../src/__tests__/chunker/uuid.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAE7C,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CACV,EAAE,EACF,uEAAuE,CACxE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,50 +0,0 @@
1
- import { describe, it } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { xmlChunker } from "../../chunker/xml.js";
4
- describe("XmlChunker (csproj)", () => {
5
- it("language is 'xml'", () => {
6
- assert.equal(xmlChunker.language, "xml");
7
- });
8
- it("fileExtensions includes .xml and .csproj", () => {
9
- assert.ok(xmlChunker.fileExtensions.includes(".xml"));
10
- assert.ok(xmlChunker.fileExtensions.includes(".csproj"));
11
- });
12
- it("grammarName is 'xml'", () => {
13
- assert.equal(xmlChunker.grammarName, "xml");
14
- });
15
- it("nodeTypes contains element", () => {
16
- assert.ok(xmlChunker.nodeTypes.has("element"));
17
- });
18
- it("chunk returns empty array for empty content", async () => {
19
- const chunks = await xmlChunker.chunk("test.csproj", "");
20
- assert.deepStrictEqual(chunks, []);
21
- });
22
- it("chunk parses the root element of a csproj file", async () => {
23
- const csproj = `<Project Sdk="Microsoft.NET.Sdk">
24
- <PropertyGroup>
25
- <TargetFramework>net8.0</TargetFramework>
26
- </PropertyGroup>
27
- <ItemGroup>
28
- <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
29
- </ItemGroup>
30
- </Project>`;
31
- const chunks = await xmlChunker.chunk("test.csproj", csproj);
32
- assert.equal(chunks.length, 1);
33
- assert.ok(chunks[0].content.includes("Project"));
34
- assert.ok(chunks[0].content.includes("PropertyGroup"));
35
- assert.ok(chunks[0].content.includes("ItemGroup"));
36
- });
37
- it("chunk generates unique IDs", async () => {
38
- const csproj = `<Project><PropertyGroup><A>1</A></PropertyGroup></Project>`;
39
- const chunks = await xmlChunker.chunk("test.csproj", csproj);
40
- const ids = chunks.map((c) => c.id);
41
- assert.equal(new Set(ids).size, ids.length);
42
- });
43
- it("chunk sets correct startLine metadata", async () => {
44
- const csproj = `\n<Project Sdk="X"><PropertyGroup><A>1</A></PropertyGroup></Project>`;
45
- const chunks = await xmlChunker.chunk("test.csproj", csproj);
46
- assert.equal(chunks.length, 1);
47
- assert.equal(chunks[0].metadata.startLine, 2);
48
- });
49
- });
50
- //# sourceMappingURL=xml.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xml.test.js","sourceRoot":"","sources":["../../../src/__tests__/chunker/xml.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,75 +0,0 @@
1
- import { describe, it, before, after } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { writeFileSync, unlinkSync } from "node:fs";
4
- import { tmpdir } from "node:os";
5
- import { join } from "node:path";
6
- import { loadConfig, DEFAULT_CONFIG } from "../../core/config.js";
7
- describe("loadConfig", () => {
8
- let tmpFile;
9
- before(() => {
10
- tmpFile = join(tmpdir(), `opencode-rag-test-${Date.now()}.json`);
11
- });
12
- after(() => {
13
- try {
14
- unlinkSync(tmpFile);
15
- }
16
- catch {
17
- // ignore
18
- }
19
- });
20
- it("returns default config for empty file", () => {
21
- writeFileSync(tmpFile, "{}", "utf-8");
22
- const config = loadConfig(tmpFile);
23
- assert.deepStrictEqual(config, { ...DEFAULT_CONFIG, chunkers: undefined });
24
- });
25
- it("allows partial override of embedding settings", () => {
26
- writeFileSync(tmpFile, JSON.stringify({ embedding: { provider: "openai", model: "custom-model" } }), "utf-8");
27
- const config = loadConfig(tmpFile);
28
- assert.equal(config.embedding.provider, "openai");
29
- assert.equal(config.embedding.model, "custom-model");
30
- assert.equal(config.embedding.baseUrl, DEFAULT_CONFIG.embedding.baseUrl);
31
- });
32
- it("allows partial override of indexing settings", () => {
33
- writeFileSync(tmpFile, JSON.stringify({ indexing: { chunkOverlap: 5 } }), "utf-8");
34
- const config = loadConfig(tmpFile);
35
- assert.equal(config.indexing.chunkOverlap, 5);
36
- assert.deepStrictEqual(config.indexing.includeExtensions, DEFAULT_CONFIG.indexing.includeExtensions);
37
- });
38
- it("allows partial override of retrieval settings", () => {
39
- writeFileSync(tmpFile, JSON.stringify({ retrieval: { topK: 20 } }), "utf-8");
40
- const config = loadConfig(tmpFile);
41
- assert.equal(config.retrieval.topK, 20);
42
- });
43
- it("allows partial override of openCode settings", () => {
44
- writeFileSync(tmpFile, JSON.stringify({ openCode: { maxContextChunks: 10 } }), "utf-8");
45
- const config = loadConfig(tmpFile);
46
- assert.equal(config.openCode.maxContextChunks, 10);
47
- assert.equal(config.openCode.enabled, DEFAULT_CONFIG.openCode.enabled);
48
- });
49
- it("allows partial override of vectorStore path", () => {
50
- writeFileSync(tmpFile, JSON.stringify({ vectorStore: { path: "/custom/path" } }), "utf-8");
51
- const config = loadConfig(tmpFile);
52
- assert.equal(config.vectorStore.path, "/custom/path");
53
- });
54
- });
55
- describe("DEFAULT_CONFIG", () => {
56
- it("has ollama as default embedding provider", () => {
57
- assert.equal(DEFAULT_CONFIG.embedding.provider, "ollama");
58
- });
59
- it("includes TypeScript extensions", () => {
60
- assert.ok(DEFAULT_CONFIG.indexing.includeExtensions.includes(".ts"));
61
- assert.ok(DEFAULT_CONFIG.indexing.includeExtensions.includes(".tsx"));
62
- });
63
- it("excludes node_modules, .git, and .opencode", () => {
64
- assert.ok(DEFAULT_CONFIG.indexing.excludeDirs.includes("node_modules"));
65
- assert.ok(DEFAULT_CONFIG.indexing.excludeDirs.includes(".git"));
66
- assert.ok(DEFAULT_CONFIG.indexing.excludeDirs.includes(".opencode"));
67
- });
68
- it("has openCode enabled by default", () => {
69
- assert.equal(DEFAULT_CONFIG.openCode.enabled, true);
70
- });
71
- it("has topK of 10", () => {
72
- assert.equal(DEFAULT_CONFIG.retrieval.topK, 10);
73
- });
74
- });
75
- //# sourceMappingURL=config.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../../src/__tests__/core/config.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,34 +0,0 @@
1
- import { describe, it } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { mkdtempSync, readFileSync, rmSync } from "node:fs";
4
- import { tmpdir } from "node:os";
5
- import path from "node:path";
6
- import { appendDebugLog } from "../../core/fileLogger.js";
7
- describe("appendDebugLog", () => {
8
- it("writes error entries to a file and appends subsequent entries", () => {
9
- const dir = mkdtempSync(path.join(tmpdir(), "opencode-rag-log-test-"));
10
- try {
11
- const logFilePath = path.join(dir, ".opencode", "opencode-rag.log");
12
- appendDebugLog(logFilePath, {
13
- scope: "chat.message",
14
- message: "first failure",
15
- error: new Error("boom"),
16
- });
17
- appendDebugLog(logFilePath, {
18
- scope: "tool.execute.after",
19
- message: "second failure",
20
- error: "plain string error",
21
- });
22
- const content = readFileSync(logFilePath, "utf8");
23
- assert.match(content, /\[chat\.message\] first failure/);
24
- assert.match(content, /Error: boom/);
25
- assert.match(content, /\[tool\.execute\.after\] second failure/);
26
- assert.match(content, /plain string error/);
27
- assert.ok(content.includes("\n\n"));
28
- }
29
- finally {
30
- rmSync(dir, { recursive: true, force: true });
31
- }
32
- });
33
- });
34
- //# sourceMappingURL=fileLogger.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fileLogger.test.js","sourceRoot":"","sources":["../../../src/__tests__/core/fileLogger.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC;QAEvE,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;YAEpE,cAAc,CAAC,WAAW,EAAE;gBAC1B,KAAK,EAAE,cAAc;gBACrB,OAAO,EAAE,eAAe;gBACxB,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC;aACzB,CAAC,CAAC;YAEH,cAAc,CAAC,WAAW,EAAE;gBAC1B,KAAK,EAAE,oBAAoB;gBAC3B,OAAO,EAAE,gBAAgB;gBACzB,KAAK,EAAE,oBAAoB;aAC5B,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAClD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,iCAAiC,CAAC,CAAC;YACzD,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,yCAAyC,CAAC,CAAC;YACjE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;YAC5C,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACtC,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,56 +0,0 @@
1
- import { describe, it } from "node:test";
2
- import assert from "node:assert/strict";
3
- import fs from "node:fs/promises";
4
- import os from "node:os";
5
- import path from "node:path";
6
- import { computeFileHash, createEmptyManifest, loadManifest, manifestPathFor, normalizeFilePath, saveManifest, } from "../../core/manifest.js";
7
- async function makeTempDir(name) {
8
- return fs.mkdtemp(path.join(os.tmpdir(), `${name}-`));
9
- }
10
- describe("manifest", () => {
11
- it("creates an empty manifest", () => {
12
- assert.deepStrictEqual(createEmptyManifest(), { files: {} });
13
- });
14
- it("normalizes file paths to absolute forward-slash paths", () => {
15
- const normalized = normalizeFilePath("src\\test.ts");
16
- assert.match(normalized, /^([A-Za-z]:)?\//);
17
- assert.ok(!normalized.includes("\\"));
18
- });
19
- it("computes stable hashes", () => {
20
- assert.equal(computeFileHash("abc"), computeFileHash("abc"));
21
- assert.notEqual(computeFileHash("abc"), computeFileHash("abcd"));
22
- });
23
- it("returns missing status when manifest file does not exist", async () => {
24
- const dir = await makeTempDir("manifest-missing");
25
- const result = await loadManifest(dir);
26
- assert.equal(result.status, "missing");
27
- assert.deepStrictEqual(result.manifest, { files: {} });
28
- assert.equal(result.path, manifestPathFor(dir));
29
- });
30
- it("saves and loads manifest data", async () => {
31
- const dir = await makeTempDir("manifest-save");
32
- const manifest = {
33
- lastIndexedAt: 123,
34
- files: {
35
- "/tmp/example.ts": {
36
- hash: "hash-1",
37
- chunkCount: 2,
38
- indexedAt: 123,
39
- },
40
- },
41
- };
42
- await saveManifest(dir, manifest);
43
- const result = await loadManifest(dir);
44
- assert.equal(result.status, "ok");
45
- assert.deepStrictEqual(result.manifest, manifest);
46
- });
47
- it("returns corrupt status for invalid JSON", async () => {
48
- const dir = await makeTempDir("manifest-corrupt");
49
- await fs.mkdir(dir, { recursive: true });
50
- await fs.writeFile(manifestPathFor(dir), "{not-json", "utf-8");
51
- const result = await loadManifest(dir);
52
- assert.equal(result.status, "corrupt");
53
- assert.deepStrictEqual(result.manifest, { files: {} });
54
- });
55
- });
56
- //# sourceMappingURL=manifest.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manifest.test.js","sourceRoot":"","sources":["../../../src/__tests__/core/manifest.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,88 +0,0 @@
1
- import { describe, it } from "node:test";
2
- import assert from "node:assert/strict";
3
- import { embedBatch } from "../../embedder/factory.js";
4
- function mockEmbedder() {
5
- const state = { calls: 0, lastBatchSizes: [] };
6
- return {
7
- name: "mock",
8
- get calls() { return state.calls; },
9
- get lastBatchSizes() { return [...state.lastBatchSizes]; },
10
- async embed(texts) {
11
- state.calls++;
12
- state.lastBatchSizes.push(texts.length);
13
- // Return embedding where first element encodes the call number and position
14
- return texts.map((_, i) => [state.calls * 100 + i]);
15
- },
16
- };
17
- }
18
- describe("embedBatch", () => {
19
- it("returns empty array for empty input", async () => {
20
- const m = mockEmbedder();
21
- const result = await embedBatch(m, []);
22
- assert.deepStrictEqual(result, []);
23
- assert.equal(m.calls, 0);
24
- });
25
- it("returns single embedding for single text", async () => {
26
- const m = mockEmbedder();
27
- const result = await embedBatch(m, ["hello"]);
28
- assert.equal(result.length, 1);
29
- assert.deepStrictEqual(result[0], [100]);
30
- assert.equal(m.calls, 1);
31
- });
32
- it("returns multiple embeddings for multiple texts (single batch)", async () => {
33
- const m = mockEmbedder();
34
- const result = await embedBatch(m, ["a", "b", "c"]);
35
- assert.equal(result.length, 3);
36
- assert.equal(m.calls, 1);
37
- assert.equal(m.lastBatchSizes[0], 3);
38
- });
39
- it("respects custom batchSize by calling embed multiple times", async () => {
40
- const m = mockEmbedder();
41
- const result = await embedBatch(m, ["a", "b", "c", "d", "e"], 2);
42
- assert.equal(result.length, 5);
43
- // 5 items / 2 = 3 batches (2, 2, 1)
44
- assert.equal(m.calls, 3);
45
- assert.deepStrictEqual(m.lastBatchSizes, [2, 2, 1]);
46
- });
47
- it("batch of exactly batchSize makes one call", async () => {
48
- const m = mockEmbedder();
49
- const result = await embedBatch(m, ["a", "b", "c"], 3);
50
- assert.equal(result.length, 3);
51
- assert.equal(m.calls, 1);
52
- assert.equal(m.lastBatchSizes[0], 3);
53
- });
54
- it("flattens results correctly across batches", async () => {
55
- const m = mockEmbedder();
56
- const result = await embedBatch(m, ["a", "b", "c", "d"], 2);
57
- assert.equal(result.length, 4);
58
- // Batch 1: [[100], [101]] Batch 2: [[200], [201]]
59
- assert.deepStrictEqual(result, [[100], [101], [200], [201]]);
60
- });
61
- it("default batchSize is 10", async () => {
62
- const m = mockEmbedder();
63
- const texts = Array.from({ length: 25 }, (_, i) => `text-${i}`);
64
- const result = await embedBatch(m, texts);
65
- assert.equal(result.length, 25);
66
- // 25 items with default batchSize 10: 3 batches (10, 10, 5)
67
- assert.equal(m.calls, 3);
68
- assert.deepStrictEqual(m.lastBatchSizes, [10, 10, 5]);
69
- });
70
- it("handles single item larger than batchSize", async () => {
71
- const m = mockEmbedder();
72
- const result = await embedBatch(m, ["single"], 5);
73
- assert.equal(result.length, 1);
74
- assert.equal(m.calls, 1);
75
- assert.equal(m.lastBatchSizes[0], 1);
76
- });
77
- it("passes all texts in last batch even when smaller than batchSize", async () => {
78
- const m = mockEmbedder();
79
- const result = await embedBatch(m, ["a", "b", "c", "d"], 3);
80
- // Batch 1: 3 items, Batch 2: 1 item
81
- assert.equal(result.length, 4);
82
- assert.equal(m.calls, 2);
83
- assert.deepStrictEqual(m.lastBatchSizes, [3, 1]);
84
- // Verify last batch content: last item gets call=2 embedding
85
- assert.deepStrictEqual(result[3], [200]);
86
- });
87
- });
88
- //# sourceMappingURL=embedBatch.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"embedBatch.test.js","sourceRoot":"","sources":["../../../src/__tests__/embedder/embedBatch.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};