lance-context 0.1.0 → 1.1.0

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 (237) hide show
  1. package/README.md +232 -23
  2. package/dist/__tests__/ast-chunker.test.d.ts +2 -0
  3. package/dist/__tests__/ast-chunker.test.d.ts.map +1 -0
  4. package/dist/__tests__/ast-chunker.test.js +307 -0
  5. package/dist/__tests__/ast-chunker.test.js.map +1 -0
  6. package/dist/__tests__/config.test.d.ts +2 -0
  7. package/dist/__tests__/config.test.d.ts.map +1 -0
  8. package/dist/__tests__/config.test.js +242 -0
  9. package/dist/__tests__/config.test.js.map +1 -0
  10. package/dist/__tests__/dashboard/beads.test.d.ts +2 -0
  11. package/dist/__tests__/dashboard/beads.test.d.ts.map +1 -0
  12. package/dist/__tests__/dashboard/beads.test.js +151 -0
  13. package/dist/__tests__/dashboard/beads.test.js.map +1 -0
  14. package/dist/__tests__/dashboard/index.test.d.ts +2 -0
  15. package/dist/__tests__/dashboard/index.test.d.ts.map +1 -0
  16. package/dist/__tests__/dashboard/index.test.js +116 -0
  17. package/dist/__tests__/dashboard/index.test.js.map +1 -0
  18. package/dist/__tests__/dashboard/routes.test.d.ts +2 -0
  19. package/dist/__tests__/dashboard/routes.test.d.ts.map +1 -0
  20. package/dist/__tests__/dashboard/routes.test.js +125 -0
  21. package/dist/__tests__/dashboard/routes.test.js.map +1 -0
  22. package/dist/__tests__/dashboard/server.test.d.ts +2 -0
  23. package/dist/__tests__/dashboard/server.test.d.ts.map +1 -0
  24. package/dist/__tests__/dashboard/server.test.js +75 -0
  25. package/dist/__tests__/dashboard/server.test.js.map +1 -0
  26. package/dist/__tests__/dashboard/state.test.d.ts +2 -0
  27. package/dist/__tests__/dashboard/state.test.d.ts.map +1 -0
  28. package/dist/__tests__/dashboard/state.test.js +124 -0
  29. package/dist/__tests__/dashboard/state.test.js.map +1 -0
  30. package/dist/__tests__/embeddings/factory.test.d.ts +2 -0
  31. package/dist/__tests__/embeddings/factory.test.d.ts.map +1 -0
  32. package/dist/__tests__/embeddings/factory.test.js +100 -0
  33. package/dist/__tests__/embeddings/factory.test.js.map +1 -0
  34. package/dist/__tests__/embeddings/jina.test.d.ts +2 -0
  35. package/dist/__tests__/embeddings/jina.test.d.ts.map +1 -0
  36. package/dist/__tests__/embeddings/jina.test.js +156 -0
  37. package/dist/__tests__/embeddings/jina.test.js.map +1 -0
  38. package/dist/__tests__/embeddings/ollama.test.d.ts +2 -0
  39. package/dist/__tests__/embeddings/ollama.test.d.ts.map +1 -0
  40. package/dist/__tests__/embeddings/ollama.test.js +172 -0
  41. package/dist/__tests__/embeddings/ollama.test.js.map +1 -0
  42. package/dist/__tests__/embeddings/rate-limiter.test.d.ts +2 -0
  43. package/dist/__tests__/embeddings/rate-limiter.test.d.ts.map +1 -0
  44. package/dist/__tests__/embeddings/rate-limiter.test.js +163 -0
  45. package/dist/__tests__/embeddings/rate-limiter.test.js.map +1 -0
  46. package/dist/__tests__/embeddings/retry.test.d.ts +2 -0
  47. package/dist/__tests__/embeddings/retry.test.d.ts.map +1 -0
  48. package/dist/__tests__/embeddings/retry.test.js +260 -0
  49. package/dist/__tests__/embeddings/retry.test.js.map +1 -0
  50. package/dist/__tests__/embeddings/types.test.d.ts +2 -0
  51. package/dist/__tests__/embeddings/types.test.d.ts.map +1 -0
  52. package/dist/__tests__/embeddings/types.test.js +31 -0
  53. package/dist/__tests__/embeddings/types.test.js.map +1 -0
  54. package/dist/__tests__/mocks/embedding-backend.mock.d.ts +10 -0
  55. package/dist/__tests__/mocks/embedding-backend.mock.d.ts.map +1 -0
  56. package/dist/__tests__/mocks/embedding-backend.mock.js +39 -0
  57. package/dist/__tests__/mocks/embedding-backend.mock.js.map +1 -0
  58. package/dist/__tests__/mocks/fetch.mock.d.ts +38 -0
  59. package/dist/__tests__/mocks/fetch.mock.d.ts.map +1 -0
  60. package/dist/__tests__/mocks/fetch.mock.js +74 -0
  61. package/dist/__tests__/mocks/fetch.mock.js.map +1 -0
  62. package/dist/__tests__/mocks/lancedb.mock.d.ts +38 -0
  63. package/dist/__tests__/mocks/lancedb.mock.d.ts.map +1 -0
  64. package/dist/__tests__/mocks/lancedb.mock.js +63 -0
  65. package/dist/__tests__/mocks/lancedb.mock.js.map +1 -0
  66. package/dist/__tests__/search/clustering.test.d.ts +2 -0
  67. package/dist/__tests__/search/clustering.test.d.ts.map +1 -0
  68. package/dist/__tests__/search/clustering.test.js +230 -0
  69. package/dist/__tests__/search/clustering.test.js.map +1 -0
  70. package/dist/__tests__/search/hybrid-search.test.d.ts +2 -0
  71. package/dist/__tests__/search/hybrid-search.test.d.ts.map +1 -0
  72. package/dist/__tests__/search/hybrid-search.test.js +186 -0
  73. package/dist/__tests__/search/hybrid-search.test.js.map +1 -0
  74. package/dist/__tests__/search/indexer.test.d.ts +2 -0
  75. package/dist/__tests__/search/indexer.test.d.ts.map +1 -0
  76. package/dist/__tests__/search/indexer.test.js +878 -0
  77. package/dist/__tests__/search/indexer.test.js.map +1 -0
  78. package/dist/__tests__/search/tree-sitter-chunker.test.d.ts +2 -0
  79. package/dist/__tests__/search/tree-sitter-chunker.test.d.ts.map +1 -0
  80. package/dist/__tests__/search/tree-sitter-chunker.test.js +228 -0
  81. package/dist/__tests__/search/tree-sitter-chunker.test.js.map +1 -0
  82. package/dist/__tests__/setup.d.ts +2 -0
  83. package/dist/__tests__/setup.d.ts.map +1 -0
  84. package/dist/__tests__/setup.js +11 -0
  85. package/dist/__tests__/setup.js.map +1 -0
  86. package/dist/__tests__/utils/concurrency.test.d.ts +2 -0
  87. package/dist/__tests__/utils/concurrency.test.d.ts.map +1 -0
  88. package/dist/__tests__/utils/concurrency.test.js +83 -0
  89. package/dist/__tests__/utils/concurrency.test.js.map +1 -0
  90. package/dist/__tests__/utils/errors.test.d.ts +2 -0
  91. package/dist/__tests__/utils/errors.test.d.ts.map +1 -0
  92. package/dist/__tests__/utils/errors.test.js +136 -0
  93. package/dist/__tests__/utils/errors.test.js.map +1 -0
  94. package/dist/__tests__/utils/type-guards.test.d.ts +2 -0
  95. package/dist/__tests__/utils/type-guards.test.d.ts.map +1 -0
  96. package/dist/__tests__/utils/type-guards.test.js +80 -0
  97. package/dist/__tests__/utils/type-guards.test.js.map +1 -0
  98. package/dist/__tests__/worktree/worktree-manager.test.d.ts +2 -0
  99. package/dist/__tests__/worktree/worktree-manager.test.d.ts.map +1 -0
  100. package/dist/__tests__/worktree/worktree-manager.test.js +403 -0
  101. package/dist/__tests__/worktree/worktree-manager.test.js.map +1 -0
  102. package/dist/config.d.ts +122 -0
  103. package/dist/config.d.ts.map +1 -0
  104. package/dist/config.js +508 -0
  105. package/dist/config.js.map +1 -0
  106. package/dist/dashboard/beads.d.ts +35 -0
  107. package/dist/dashboard/beads.d.ts.map +1 -0
  108. package/dist/dashboard/beads.js +102 -0
  109. package/dist/dashboard/beads.js.map +1 -0
  110. package/dist/dashboard/events.d.ts +46 -0
  111. package/dist/dashboard/events.d.ts.map +1 -0
  112. package/dist/dashboard/events.js +141 -0
  113. package/dist/dashboard/events.js.map +1 -0
  114. package/dist/dashboard/index.d.ts +69 -0
  115. package/dist/dashboard/index.d.ts.map +1 -0
  116. package/dist/dashboard/index.js +93 -0
  117. package/dist/dashboard/index.js.map +1 -0
  118. package/dist/dashboard/routes.d.ts +6 -0
  119. package/dist/dashboard/routes.d.ts.map +1 -0
  120. package/dist/dashboard/routes.js +245 -0
  121. package/dist/dashboard/routes.js.map +1 -0
  122. package/dist/dashboard/server.d.ts +27 -0
  123. package/dist/dashboard/server.d.ts.map +1 -0
  124. package/dist/dashboard/server.js +72 -0
  125. package/dist/dashboard/server.js.map +1 -0
  126. package/dist/dashboard/state.d.ts +125 -0
  127. package/dist/dashboard/state.d.ts.map +1 -0
  128. package/dist/dashboard/state.js +264 -0
  129. package/dist/dashboard/state.js.map +1 -0
  130. package/dist/dashboard/ui.d.ts +6 -0
  131. package/dist/dashboard/ui.d.ts.map +1 -0
  132. package/dist/dashboard/ui.js +1421 -0
  133. package/dist/dashboard/ui.js.map +1 -0
  134. package/dist/embeddings/index.d.ts +20 -2
  135. package/dist/embeddings/index.d.ts.map +1 -1
  136. package/dist/embeddings/index.js +49 -6
  137. package/dist/embeddings/index.js.map +1 -1
  138. package/dist/embeddings/jina.d.ts +9 -0
  139. package/dist/embeddings/jina.d.ts.map +1 -1
  140. package/dist/embeddings/jina.js +42 -2
  141. package/dist/embeddings/jina.js.map +1 -1
  142. package/dist/embeddings/ollama.d.ts +2 -0
  143. package/dist/embeddings/ollama.d.ts.map +1 -1
  144. package/dist/embeddings/ollama.js +21 -5
  145. package/dist/embeddings/ollama.js.map +1 -1
  146. package/dist/embeddings/rate-limiter.d.ts +75 -0
  147. package/dist/embeddings/rate-limiter.d.ts.map +1 -0
  148. package/dist/embeddings/rate-limiter.js +145 -0
  149. package/dist/embeddings/rate-limiter.js.map +1 -0
  150. package/dist/embeddings/retry.d.ts +14 -0
  151. package/dist/embeddings/retry.d.ts.map +1 -0
  152. package/dist/embeddings/retry.js +89 -0
  153. package/dist/embeddings/retry.js.map +1 -0
  154. package/dist/embeddings/types.d.ts +56 -2
  155. package/dist/embeddings/types.d.ts.map +1 -1
  156. package/dist/embeddings/types.js +16 -0
  157. package/dist/embeddings/types.js.map +1 -1
  158. package/dist/index.js +1871 -44
  159. package/dist/index.js.map +1 -1
  160. package/dist/memory/index.d.ts +63 -0
  161. package/dist/memory/index.d.ts.map +1 -0
  162. package/dist/memory/index.js +168 -0
  163. package/dist/memory/index.js.map +1 -0
  164. package/dist/search/ast-chunker.d.ts +34 -0
  165. package/dist/search/ast-chunker.d.ts.map +1 -0
  166. package/dist/search/ast-chunker.js +261 -0
  167. package/dist/search/ast-chunker.js.map +1 -0
  168. package/dist/search/clustering.d.ts +77 -0
  169. package/dist/search/clustering.d.ts.map +1 -0
  170. package/dist/search/clustering.js +455 -0
  171. package/dist/search/clustering.js.map +1 -0
  172. package/dist/search/indexer.d.ts +239 -3
  173. package/dist/search/indexer.d.ts.map +1 -1
  174. package/dist/search/indexer.js +941 -45
  175. package/dist/search/indexer.js.map +1 -1
  176. package/dist/search/tree-sitter-chunker.d.ts +69 -0
  177. package/dist/search/tree-sitter-chunker.d.ts.map +1 -0
  178. package/dist/search/tree-sitter-chunker.js +436 -0
  179. package/dist/search/tree-sitter-chunker.js.map +1 -0
  180. package/dist/symbols/index.d.ts +14 -0
  181. package/dist/symbols/index.d.ts.map +1 -0
  182. package/dist/symbols/index.js +19 -0
  183. package/dist/symbols/index.js.map +1 -0
  184. package/dist/symbols/name-path.d.ts +113 -0
  185. package/dist/symbols/name-path.d.ts.map +1 -0
  186. package/dist/symbols/name-path.js +194 -0
  187. package/dist/symbols/name-path.js.map +1 -0
  188. package/dist/symbols/pattern-search.d.ts +14 -0
  189. package/dist/symbols/pattern-search.d.ts.map +1 -0
  190. package/dist/symbols/pattern-search.js +224 -0
  191. package/dist/symbols/pattern-search.js.map +1 -0
  192. package/dist/symbols/reference-finder.d.ts +38 -0
  193. package/dist/symbols/reference-finder.d.ts.map +1 -0
  194. package/dist/symbols/reference-finder.js +376 -0
  195. package/dist/symbols/reference-finder.js.map +1 -0
  196. package/dist/symbols/symbol-editor.d.ts +81 -0
  197. package/dist/symbols/symbol-editor.d.ts.map +1 -0
  198. package/dist/symbols/symbol-editor.js +257 -0
  199. package/dist/symbols/symbol-editor.js.map +1 -0
  200. package/dist/symbols/symbol-extractor.d.ts +49 -0
  201. package/dist/symbols/symbol-extractor.d.ts.map +1 -0
  202. package/dist/symbols/symbol-extractor.js +593 -0
  203. package/dist/symbols/symbol-extractor.js.map +1 -0
  204. package/dist/symbols/symbol-renamer.d.ts +81 -0
  205. package/dist/symbols/symbol-renamer.d.ts.map +1 -0
  206. package/dist/symbols/symbol-renamer.js +204 -0
  207. package/dist/symbols/symbol-renamer.js.map +1 -0
  208. package/dist/symbols/types.d.ts +234 -0
  209. package/dist/symbols/types.d.ts.map +1 -0
  210. package/dist/symbols/types.js +106 -0
  211. package/dist/symbols/types.js.map +1 -0
  212. package/dist/utils/concurrency.d.ts +32 -0
  213. package/dist/utils/concurrency.d.ts.map +1 -0
  214. package/dist/utils/concurrency.js +57 -0
  215. package/dist/utils/concurrency.js.map +1 -0
  216. package/dist/utils/errors.d.ts +36 -0
  217. package/dist/utils/errors.d.ts.map +1 -0
  218. package/dist/utils/errors.js +91 -0
  219. package/dist/utils/errors.js.map +1 -0
  220. package/dist/utils/type-guards.d.ts +17 -0
  221. package/dist/utils/type-guards.d.ts.map +1 -0
  222. package/dist/utils/type-guards.js +25 -0
  223. package/dist/utils/type-guards.js.map +1 -0
  224. package/dist/worktree/index.d.ts +6 -0
  225. package/dist/worktree/index.d.ts.map +1 -0
  226. package/dist/worktree/index.js +6 -0
  227. package/dist/worktree/index.js.map +1 -0
  228. package/dist/worktree/types.d.ts +101 -0
  229. package/dist/worktree/types.d.ts.map +1 -0
  230. package/dist/worktree/types.js +6 -0
  231. package/dist/worktree/types.js.map +1 -0
  232. package/dist/worktree/worktree-manager.d.ts +80 -0
  233. package/dist/worktree/worktree-manager.d.ts.map +1 -0
  234. package/dist/worktree/worktree-manager.js +407 -0
  235. package/dist/worktree/worktree-manager.js.map +1 -0
  236. package/package.json +39 -5
  237. package/scripts/postinstall.js +48 -0
@@ -0,0 +1,125 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import { startServer } from '../../dashboard/server.js';
3
+ import { dashboardState } from '../../dashboard/state.js';
4
+ describe('Dashboard Routes', () => {
5
+ let server;
6
+ beforeEach(async () => {
7
+ // Use port 0 to let the OS assign a random available port
8
+ // This avoids race conditions when tests run in parallel
9
+ server = await startServer(0);
10
+ });
11
+ afterEach(async () => {
12
+ await server.stop();
13
+ });
14
+ describe('GET /', () => {
15
+ it('should return HTML dashboard', async () => {
16
+ const response = await fetch(`${server.url}/`);
17
+ expect(response.ok).toBe(true);
18
+ expect(response.headers.get('content-type')).toContain('text/html');
19
+ const html = await response.text();
20
+ expect(html).toContain('lance-context');
21
+ expect(html).toContain('<!DOCTYPE html>');
22
+ });
23
+ });
24
+ describe('GET /api/status', () => {
25
+ it('should return 503 when indexer not initialized', async () => {
26
+ const response = await fetch(`${server.url}/api/status`);
27
+ expect(response.status).toBe(503);
28
+ });
29
+ it('should return status when indexer is set', async () => {
30
+ const mockIndexer = {
31
+ getStatus: vi.fn().mockResolvedValue({
32
+ indexed: true,
33
+ fileCount: 10,
34
+ chunkCount: 50,
35
+ lastUpdated: '2024-01-01T00:00:00.000Z',
36
+ indexPath: '/test/.lance-context',
37
+ embeddingBackend: 'jina',
38
+ }),
39
+ };
40
+ dashboardState.setIndexer(mockIndexer);
41
+ const response = await fetch(`${server.url}/api/status`);
42
+ expect(response.ok).toBe(true);
43
+ const data = (await response.json());
44
+ expect(data.indexed).toBe(true);
45
+ expect(data.fileCount).toBe(10);
46
+ expect(data.chunkCount).toBe(50);
47
+ expect(data.isIndexing).toBe(false);
48
+ });
49
+ });
50
+ describe('GET /api/config', () => {
51
+ it('should return 503 when config not loaded', async () => {
52
+ // Reset config to null by creating a fresh state manager effect
53
+ const originalConfig = dashboardState.getConfig();
54
+ // Make a request before setting config
55
+ const response = await fetch(`${server.url}/api/config`);
56
+ // Only check for 503 if config was actually null
57
+ if (!originalConfig) {
58
+ expect(response.status).toBe(503);
59
+ }
60
+ });
61
+ it('should return config when set', async () => {
62
+ const config = {
63
+ patterns: ['**/*.ts', '**/*.js'],
64
+ excludePatterns: ['**/node_modules/**'],
65
+ chunking: { maxLines: 100, overlap: 20 },
66
+ search: { semanticWeight: 0.7, keywordWeight: 0.3 },
67
+ };
68
+ dashboardState.setConfig(config);
69
+ dashboardState.setProjectPath('/test/project');
70
+ const response = await fetch(`${server.url}/api/config`);
71
+ expect(response.ok).toBe(true);
72
+ const data = (await response.json());
73
+ expect(data.projectPath).toBe('/test/project');
74
+ expect(data.patterns).toEqual(['**/*.ts', '**/*.js']);
75
+ expect(data.chunking.maxLines).toBe(100);
76
+ });
77
+ });
78
+ describe('GET /api/events', () => {
79
+ it('should return SSE stream', async () => {
80
+ const controller = new AbortController();
81
+ const timeoutId = setTimeout(() => controller.abort(), 1000);
82
+ try {
83
+ const response = await fetch(`${server.url}/api/events`, {
84
+ signal: controller.signal,
85
+ });
86
+ expect(response.ok).toBe(true);
87
+ expect(response.headers.get('content-type')).toBe('text/event-stream');
88
+ }
89
+ catch (error) {
90
+ // AbortError is expected
91
+ if (error.name !== 'AbortError') {
92
+ throw error;
93
+ }
94
+ }
95
+ finally {
96
+ clearTimeout(timeoutId);
97
+ }
98
+ });
99
+ });
100
+ describe('GET /api/heartbeat', () => {
101
+ it('should return health check', async () => {
102
+ const response = await fetch(`${server.url}/api/heartbeat`);
103
+ expect(response.ok).toBe(true);
104
+ const data = (await response.json());
105
+ expect(data.ok).toBe(true);
106
+ expect(data.timestamp).toBeDefined();
107
+ expect(typeof data.clients).toBe('number');
108
+ });
109
+ });
110
+ describe('404 handling', () => {
111
+ it('should return 404 for unknown routes', async () => {
112
+ const response = await fetch(`${server.url}/unknown`);
113
+ expect(response.status).toBe(404);
114
+ });
115
+ });
116
+ describe('method handling', () => {
117
+ it('should return 405 for non-GET methods', async () => {
118
+ const response = await fetch(`${server.url}/api/heartbeat`, {
119
+ method: 'POST',
120
+ });
121
+ expect(response.status).toBe(405);
122
+ });
123
+ });
124
+ });
125
+ //# sourceMappingURL=routes.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.test.js","sourceRoot":"","sources":["../../../src/__tests__/dashboard/routes.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=server.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/dashboard/server.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { describe, it, expect, afterEach } from 'vitest';
2
+ import { startServer, findAvailablePort } from '../../dashboard/server.js';
3
+ describe('Dashboard Server', () => {
4
+ let server = null;
5
+ afterEach(async () => {
6
+ if (server) {
7
+ await server.stop();
8
+ server = null;
9
+ }
10
+ });
11
+ describe('findAvailablePort', () => {
12
+ it('should find an available port starting from default', async () => {
13
+ const port = await findAvailablePort();
14
+ expect(port).toBeGreaterThanOrEqual(24300);
15
+ expect(port).toBeLessThan(24400);
16
+ });
17
+ it('should find an available port starting from custom port', async () => {
18
+ const port = await findAvailablePort(30000);
19
+ expect(port).toBeGreaterThanOrEqual(30000);
20
+ expect(port).toBeLessThan(30100);
21
+ });
22
+ });
23
+ describe('startServer', () => {
24
+ it('should start server on available port', async () => {
25
+ // Use a unique port range for this test to avoid conflicts with parallel tests
26
+ const port = await findAvailablePort(27000);
27
+ server = await startServer(port);
28
+ expect(server.port).toBeGreaterThanOrEqual(27000);
29
+ expect(server.url).toBe(`http://127.0.0.1:${server.port}`);
30
+ });
31
+ it('should start server on specified port', async () => {
32
+ const port = await findAvailablePort(28000);
33
+ server = await startServer(port);
34
+ expect(server.port).toBe(port);
35
+ expect(server.url).toBe(`http://127.0.0.1:${port}`);
36
+ });
37
+ it('should respond to requests', async () => {
38
+ const port = await findAvailablePort(29000);
39
+ server = await startServer(port);
40
+ const response = await fetch(`${server.url}/api/heartbeat`);
41
+ expect(response.ok).toBe(true);
42
+ const data = (await response.json());
43
+ expect(data.ok).toBe(true);
44
+ expect(data.timestamp).toBeDefined();
45
+ });
46
+ it('should stop cleanly', async () => {
47
+ // Use a unique port for this test
48
+ const port = await findAvailablePort(26000);
49
+ server = await startServer(port);
50
+ const url = server.url;
51
+ await server.stop();
52
+ server = null;
53
+ // Give the OS time to release the port
54
+ await new Promise((resolve) => setTimeout(resolve, 50));
55
+ // Server should no longer respond - use a short timeout
56
+ const controller = new AbortController();
57
+ const timeoutId = setTimeout(() => controller.abort(), 100);
58
+ try {
59
+ await fetch(`${url}/api/heartbeat`, { signal: controller.signal });
60
+ // If we get here, check if response is actually from our server
61
+ // (another test might have started a server on a different port)
62
+ }
63
+ catch (error) {
64
+ // Connection refused or abort is expected
65
+ expect(error.message.includes('ECONNREFUSED') ||
66
+ error.name === 'AbortError' ||
67
+ error.message.includes('fetch failed')).toBe(true);
68
+ }
69
+ finally {
70
+ clearTimeout(timeoutId);
71
+ }
72
+ });
73
+ });
74
+ });
75
+ //# sourceMappingURL=server.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.test.js","sourceRoot":"","sources":["../../../src/__tests__/dashboard/server.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=state.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/dashboard/state.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,124 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { DashboardStateManager } from '../../dashboard/state.js';
3
+ describe('DashboardStateManager', () => {
4
+ let stateManager;
5
+ beforeEach(() => {
6
+ stateManager = new DashboardStateManager();
7
+ });
8
+ describe('setIndexer', () => {
9
+ it('should set and use the indexer', async () => {
10
+ const mockIndexer = {
11
+ getStatus: vi.fn().mockResolvedValue({
12
+ indexed: true,
13
+ fileCount: 10,
14
+ chunkCount: 50,
15
+ lastUpdated: '2024-01-01T00:00:00.000Z',
16
+ indexPath: '/test/.lance-context',
17
+ }),
18
+ };
19
+ stateManager.setIndexer(mockIndexer);
20
+ const status = await stateManager.getStatus();
21
+ expect(status).toEqual({
22
+ indexed: true,
23
+ fileCount: 10,
24
+ chunkCount: 50,
25
+ lastUpdated: '2024-01-01T00:00:00.000Z',
26
+ indexPath: '/test/.lance-context',
27
+ });
28
+ expect(mockIndexer.getStatus).toHaveBeenCalled();
29
+ });
30
+ it('should return null if no indexer is set', async () => {
31
+ const status = await stateManager.getStatus();
32
+ expect(status).toBeNull();
33
+ });
34
+ });
35
+ describe('setConfig', () => {
36
+ it('should set and retrieve config', () => {
37
+ const config = {
38
+ patterns: ['**/*.ts'],
39
+ excludePatterns: ['**/node_modules/**'],
40
+ };
41
+ stateManager.setConfig(config);
42
+ expect(stateManager.getConfig()).toEqual(config);
43
+ });
44
+ });
45
+ describe('setProjectPath', () => {
46
+ it('should set and retrieve project path', () => {
47
+ stateManager.setProjectPath('/test/project');
48
+ expect(stateManager.getProjectPath()).toBe('/test/project');
49
+ });
50
+ });
51
+ describe('indexing state', () => {
52
+ it('should track indexing state', () => {
53
+ expect(stateManager.isIndexingInProgress()).toBe(false);
54
+ stateManager.onIndexingStart();
55
+ expect(stateManager.isIndexingInProgress()).toBe(true);
56
+ stateManager.onIndexingComplete({ filesIndexed: 5, chunksCreated: 20 });
57
+ expect(stateManager.isIndexingInProgress()).toBe(false);
58
+ });
59
+ it('should track last progress', () => {
60
+ expect(stateManager.getLastProgress()).toBeNull();
61
+ const progress = {
62
+ phase: 'embedding',
63
+ current: 5,
64
+ total: 10,
65
+ message: 'Embedding chunks...',
66
+ };
67
+ stateManager.onProgress(progress);
68
+ expect(stateManager.getLastProgress()).toEqual(progress);
69
+ });
70
+ it('should clear last progress on indexing complete', () => {
71
+ stateManager.onIndexingStart();
72
+ stateManager.onProgress({
73
+ phase: 'embedding',
74
+ current: 5,
75
+ total: 10,
76
+ message: 'Embedding chunks...',
77
+ });
78
+ expect(stateManager.getLastProgress()).not.toBeNull();
79
+ stateManager.onIndexingComplete({ filesIndexed: 5, chunksCreated: 20 });
80
+ expect(stateManager.getLastProgress()).toBeNull();
81
+ });
82
+ });
83
+ describe('events', () => {
84
+ it('should emit indexing:start event', () => {
85
+ const listener = vi.fn();
86
+ stateManager.on('indexing:start', listener);
87
+ stateManager.onIndexingStart();
88
+ expect(listener).toHaveBeenCalled();
89
+ });
90
+ it('should emit progress event', () => {
91
+ const listener = vi.fn();
92
+ stateManager.on('progress', listener);
93
+ const progress = {
94
+ phase: 'chunking',
95
+ current: 3,
96
+ total: 10,
97
+ message: 'Chunking files...',
98
+ };
99
+ stateManager.onProgress(progress);
100
+ expect(listener).toHaveBeenCalledWith(progress);
101
+ });
102
+ it('should emit indexing:complete event', () => {
103
+ const listener = vi.fn();
104
+ stateManager.on('indexing:complete', listener);
105
+ const result = { filesIndexed: 5, chunksCreated: 20 };
106
+ stateManager.onIndexingComplete(result);
107
+ expect(listener).toHaveBeenCalledWith(result);
108
+ });
109
+ it('should emit status:change event', () => {
110
+ const listener = vi.fn();
111
+ stateManager.on('status:change', listener);
112
+ const status = {
113
+ indexed: true,
114
+ fileCount: 10,
115
+ chunkCount: 50,
116
+ lastUpdated: '2024-01-01T00:00:00.000Z',
117
+ indexPath: '/test/.lance-context',
118
+ };
119
+ stateManager.onStatusChange(status);
120
+ expect(listener).toHaveBeenCalledWith(status);
121
+ });
122
+ });
123
+ });
124
+ //# sourceMappingURL=state.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.test.js","sourceRoot":"","sources":["../../../src/__tests__/dashboard/state.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=factory.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/embeddings/factory.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,100 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import { createSuccessFetch } from '../mocks/fetch.mock.js';
3
+ // We need to dynamically import createEmbeddingBackend after setting env vars
4
+ async function getCreateEmbeddingBackend() {
5
+ // Reset module cache to pick up new env vars
6
+ vi.resetModules();
7
+ const module = await import('../../embeddings/index.js');
8
+ return module.createEmbeddingBackend;
9
+ }
10
+ describe('createEmbeddingBackend', () => {
11
+ const originalEnv = { ...process.env };
12
+ beforeEach(() => {
13
+ // Clear relevant env vars
14
+ delete process.env.JINA_API_KEY;
15
+ delete process.env.OLLAMA_URL;
16
+ });
17
+ afterEach(() => {
18
+ // Restore original env
19
+ process.env = { ...originalEnv };
20
+ vi.unstubAllGlobals();
21
+ vi.resetModules();
22
+ });
23
+ describe('priority order', () => {
24
+ it('should prefer Jina when JINA_API_KEY is set', async () => {
25
+ process.env.JINA_API_KEY = 'test-jina-key';
26
+ const mockFetch = vi.fn().mockResolvedValue({
27
+ ok: true,
28
+ status: 200,
29
+ json: async () => ({ data: [{ embedding: [0.1] }] }),
30
+ });
31
+ vi.stubGlobal('fetch', mockFetch);
32
+ const createEmbeddingBackend = await getCreateEmbeddingBackend();
33
+ const backend = await createEmbeddingBackend();
34
+ expect(backend.name).toBe('jina');
35
+ });
36
+ it('should fallback to Ollama when Jina fails', async () => {
37
+ process.env.JINA_API_KEY = 'invalid-key';
38
+ const mockFetch = vi
39
+ .fn()
40
+ // Jina fails (called during initialize embed test)
41
+ .mockResolvedValueOnce({ ok: false, status: 401, text: async () => 'Unauthorized' })
42
+ // Ollama succeeds
43
+ .mockResolvedValue({ ok: true, status: 200, json: async () => ({ models: [] }) });
44
+ vi.stubGlobal('fetch', mockFetch);
45
+ const createEmbeddingBackend = await getCreateEmbeddingBackend();
46
+ const backend = await createEmbeddingBackend();
47
+ expect(backend.name).toBe('ollama');
48
+ });
49
+ it('should use Ollama when no API keys are set', async () => {
50
+ vi.stubGlobal('fetch', createSuccessFetch({ models: [] }));
51
+ const createEmbeddingBackend = await getCreateEmbeddingBackend();
52
+ const backend = await createEmbeddingBackend();
53
+ expect(backend.name).toBe('ollama');
54
+ });
55
+ });
56
+ describe('error when all backends fail', () => {
57
+ it('should throw when no backend is available', async () => {
58
+ const mockFetch = vi.fn().mockRejectedValue(new Error('Connection refused'));
59
+ vi.stubGlobal('fetch', mockFetch);
60
+ const createEmbeddingBackend = await getCreateEmbeddingBackend();
61
+ await expect(createEmbeddingBackend()).rejects.toThrow('No embedding backend available');
62
+ });
63
+ });
64
+ describe('config options', () => {
65
+ it('should pass apiKey to Jina backend from config', async () => {
66
+ const mockFetch = vi.fn().mockResolvedValue({
67
+ ok: true,
68
+ status: 200,
69
+ json: async () => ({ data: [{ embedding: [0.1] }] }),
70
+ });
71
+ vi.stubGlobal('fetch', mockFetch);
72
+ const createEmbeddingBackend = await getCreateEmbeddingBackend();
73
+ const backend = await createEmbeddingBackend({ apiKey: 'config-jina-key' });
74
+ expect(backend.name).toBe('jina');
75
+ });
76
+ it('should use OLLAMA_URL from environment', async () => {
77
+ process.env.OLLAMA_URL = 'http://remote-ollama:11434';
78
+ const mockFetch = vi.fn().mockImplementation(async (url) => {
79
+ expect(url).toContain('remote-ollama');
80
+ return { ok: true, status: 200, json: async () => ({ models: [] }) };
81
+ });
82
+ vi.stubGlobal('fetch', mockFetch);
83
+ const createEmbeddingBackend = await getCreateEmbeddingBackend();
84
+ const backend = await createEmbeddingBackend();
85
+ expect(backend.name).toBe('ollama');
86
+ });
87
+ it('should prefer baseUrl from config over environment', async () => {
88
+ process.env.OLLAMA_URL = 'http://env-ollama:11434';
89
+ const mockFetch = vi.fn().mockImplementation(async (url) => {
90
+ expect(url).toContain('config-ollama');
91
+ return { ok: true, status: 200, json: async () => ({ models: [] }) };
92
+ });
93
+ vi.stubGlobal('fetch', mockFetch);
94
+ const createEmbeddingBackend = await getCreateEmbeddingBackend();
95
+ const backend = await createEmbeddingBackend({ baseUrl: 'http://config-ollama:11434' });
96
+ expect(backend.name).toBe('ollama');
97
+ });
98
+ });
99
+ });
100
+ //# sourceMappingURL=factory.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.test.js","sourceRoot":"","sources":["../../../src/__tests__/embeddings/factory.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,8EAA8E;AAC9E,KAAK,UAAU,yBAAyB;IACtC,6CAA6C;IAC7C,EAAE,CAAC,YAAY,EAAE,CAAC;IAClB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IACzD,OAAO,MAAM,CAAC,sBAAsB,CAAC;AACvC,CAAC;AAED,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,MAAM,WAAW,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEvC,UAAU,CAAC,GAAG,EAAE;QACd,0BAA0B;QAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAChC,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,uBAAuB;QACvB,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;QACjC,EAAE,CAAC,gBAAgB,EAAE,CAAC;QACtB,EAAE,CAAC,YAAY,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,eAAe,CAAC;YAE3C,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBAC1C,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;aACrD,CAAC,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAElC,MAAM,sBAAsB,GAAG,MAAM,yBAAyB,EAAE,CAAC;YACjE,MAAM,OAAO,GAAG,MAAM,sBAAsB,EAAE,CAAC;YAE/C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,aAAa,CAAC;YAEzC,MAAM,SAAS,GAAG,EAAE;iBACjB,EAAE,EAAE;gBACL,mDAAmD;iBAClD,qBAAqB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,cAAc,EAAE,CAAC;gBACpF,kBAAkB;iBACjB,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YACpF,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAElC,MAAM,sBAAsB,GAAG,MAAM,yBAAyB,EAAE,CAAC;YACjE,MAAM,OAAO,GAAG,MAAM,sBAAsB,EAAE,CAAC;YAE/C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAE3D,MAAM,sBAAsB,GAAG,MAAM,yBAAyB,EAAE,CAAC;YACjE,MAAM,OAAO,GAAG,MAAM,sBAAsB,EAAE,CAAC;YAE/C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;QAC5C,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC7E,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAElC,MAAM,sBAAsB,GAAG,MAAM,yBAAyB,EAAE,CAAC;YACjE,MAAM,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBAC1C,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;aACrD,CAAC,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAElC,MAAM,sBAAsB,GAAG,MAAM,yBAAyB,EAAE,CAAC;YACjE,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;YAE5E,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,4BAA4B,CAAC;YAEtD,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE;gBACjE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;gBACvC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YACvE,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAElC,MAAM,sBAAsB,GAAG,MAAM,yBAAyB,EAAE,CAAC;YACjE,MAAM,OAAO,GAAG,MAAM,sBAAsB,EAAE,CAAC;YAE/C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,yBAAyB,CAAC;YAEnD,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE;gBACjE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;gBACvC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YACvE,CAAC,CAAC,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAElC,MAAM,sBAAsB,GAAG,MAAM,yBAAyB,EAAE,CAAC;YACjE,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;YAExF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=jina.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jina.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/embeddings/jina.test.ts"],"names":[],"mappings":""}