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,72 @@
1
+ import * as http from 'http';
2
+ import * as net from 'net';
3
+ import { handleRequest } from './routes.js';
4
+ import { sseManager } from './events.js';
5
+ const DEFAULT_PORT = 24300;
6
+ const PORT_RANGE = 100;
7
+ /**
8
+ * Check if a port is available
9
+ */
10
+ export async function isPortAvailable(port) {
11
+ return new Promise((resolve) => {
12
+ const server = net.createServer();
13
+ server.once('error', () => {
14
+ resolve(false);
15
+ });
16
+ server.once('listening', () => {
17
+ server.close();
18
+ resolve(true);
19
+ });
20
+ server.listen(port, '127.0.0.1');
21
+ });
22
+ }
23
+ /**
24
+ * Find an available port starting from the given port
25
+ */
26
+ export async function findAvailablePort(startPort = DEFAULT_PORT) {
27
+ for (let port = startPort; port < startPort + PORT_RANGE; port++) {
28
+ if (await isPortAvailable(port)) {
29
+ return port;
30
+ }
31
+ }
32
+ throw new Error(`No available port found in range ${startPort}-${startPort + PORT_RANGE - 1}`);
33
+ }
34
+ /**
35
+ * Start the dashboard HTTP server
36
+ */
37
+ export async function startServer(port) {
38
+ const actualPort = port ?? (await findAvailablePort());
39
+ const server = http.createServer((req, res) => {
40
+ handleRequest(req, res);
41
+ });
42
+ // Start the SSE heartbeat
43
+ sseManager.startHeartbeat();
44
+ return new Promise((resolve, reject) => {
45
+ server.once('error', (err) => {
46
+ reject(err);
47
+ });
48
+ server.listen(actualPort, '127.0.0.1', () => {
49
+ // Get the actual port from the server (important when port 0 is used)
50
+ const address = server.address();
51
+ const boundPort = typeof address === 'object' && address ? address.port : actualPort;
52
+ const url = `http://127.0.0.1:${boundPort}`;
53
+ resolve({
54
+ server,
55
+ port: boundPort,
56
+ url,
57
+ stop: async () => {
58
+ sseManager.closeAll();
59
+ return new Promise((resolveClose, rejectClose) => {
60
+ server.close((err) => {
61
+ if (err)
62
+ rejectClose(err);
63
+ else
64
+ resolveClose();
65
+ });
66
+ });
67
+ },
68
+ });
69
+ });
70
+ });
71
+ }
72
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,YAAY,GAAG,KAAK,CAAC;AAC3B,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;QAElC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;YAC5B,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,YAAoB,YAAY;IACtE,KAAK,IAAI,IAAI,GAAG,SAAS,EAAE,IAAI,GAAG,SAAS,GAAG,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;QACjE,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,SAAS,IAAI,SAAS,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC;AACjG,CAAC;AAgBD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAa;IAC7C,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,MAAM,iBAAiB,EAAE,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5C,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,0BAA0B;IAC1B,UAAU,CAAC,cAAc,EAAE,CAAC;IAE5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC3B,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE;YAC1C,sEAAsE;YACtE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;YACrF,MAAM,GAAG,GAAG,oBAAoB,SAAS,EAAE,CAAC;YAC5C,OAAO,CAAC;gBACN,MAAM;gBACN,IAAI,EAAE,SAAS;gBACf,GAAG;gBACH,IAAI,EAAE,KAAK,IAAI,EAAE;oBACf,UAAU,CAAC,QAAQ,EAAE,CAAC;oBACtB,OAAO,IAAI,OAAO,CAAO,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE;wBACrD,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;4BACnB,IAAI,GAAG;gCAAE,WAAW,CAAC,GAAG,CAAC,CAAC;;gCACrB,YAAY,EAAE,CAAC;wBACtB,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,125 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { CodeIndexer, IndexStatus, IndexProgress } from '../search/indexer.js';
3
+ import type { LanceContextConfig } from '../config.js';
4
+ /**
5
+ * Command names that can be tracked
6
+ */
7
+ export type CommandName = 'index_codebase' | 'search_code' | 'search_similar' | 'get_index_status' | 'clear_index' | 'get_project_instructions' | 'commit' | 'get_symbols_overview' | 'find_symbol' | 'find_referencing_symbols' | 'search_for_pattern' | 'replace_symbol_body' | 'insert_before_symbol' | 'insert_after_symbol' | 'rename_symbol' | 'write_memory' | 'read_memory' | 'list_memories' | 'delete_memory' | 'edit_memory' | 'create_worktree' | 'list_worktrees' | 'remove_worktree' | 'worktree_status' | 'list_concepts' | 'search_by_concept' | 'summarize_codebase';
8
+ /**
9
+ * Command usage statistics
10
+ */
11
+ export interface CommandUsage {
12
+ command: CommandName;
13
+ count: number;
14
+ label: string;
15
+ }
16
+ /**
17
+ * Events emitted by the DashboardStateManager
18
+ */
19
+ export interface DashboardStateEvents {
20
+ progress: (progress: IndexProgress) => void;
21
+ 'indexing:start': () => void;
22
+ 'indexing:complete': (result: {
23
+ filesIndexed: number;
24
+ chunksCreated: number;
25
+ }) => void;
26
+ 'status:change': (status: IndexStatus) => void;
27
+ 'usage:update': (usage: CommandUsage[]) => void;
28
+ }
29
+ export declare class DashboardStateManager extends EventEmitter {
30
+ private indexer;
31
+ private config;
32
+ private projectPath;
33
+ private version;
34
+ private isIndexing;
35
+ private lastProgress;
36
+ private commandUsage;
37
+ /**
38
+ * Get the path to the usage file
39
+ */
40
+ private getUsageFilePath;
41
+ /**
42
+ * Load command usage from disk
43
+ */
44
+ private loadUsageFromDisk;
45
+ /**
46
+ * Save command usage to disk
47
+ */
48
+ private saveUsageToDisk;
49
+ /**
50
+ * Set the indexer instance for the dashboard to use
51
+ */
52
+ setIndexer(indexer: CodeIndexer): void;
53
+ /**
54
+ * Set the configuration for the dashboard to display
55
+ */
56
+ setConfig(config: LanceContextConfig): void;
57
+ /**
58
+ * Set the project path
59
+ */
60
+ setProjectPath(projectPath: string): void;
61
+ /**
62
+ * Set the package version
63
+ */
64
+ setVersion(version: string): void;
65
+ /**
66
+ * Get the package version
67
+ */
68
+ getVersion(): string | null;
69
+ /**
70
+ * Get the current index status
71
+ */
72
+ getStatus(): Promise<IndexStatus | null>;
73
+ /**
74
+ * Get the current configuration
75
+ */
76
+ getConfig(): LanceContextConfig | null;
77
+ /**
78
+ * Get the project path
79
+ */
80
+ getProjectPath(): string | null;
81
+ /**
82
+ * Check if indexing is in progress
83
+ */
84
+ isIndexingInProgress(): boolean;
85
+ /**
86
+ * Get the last progress update
87
+ */
88
+ getLastProgress(): IndexProgress | null;
89
+ /**
90
+ * Called when indexing starts
91
+ */
92
+ onIndexingStart(): void;
93
+ /**
94
+ * Called with progress updates during indexing
95
+ */
96
+ onProgress(progress: IndexProgress): void;
97
+ /**
98
+ * Called when indexing completes
99
+ */
100
+ onIndexingComplete(result: {
101
+ filesIndexed: number;
102
+ chunksCreated: number;
103
+ }): void;
104
+ /**
105
+ * Called when status changes
106
+ */
107
+ onStatusChange(status: IndexStatus): void;
108
+ /**
109
+ * Record a command usage
110
+ */
111
+ recordCommandUsage(command: CommandName): void;
112
+ /**
113
+ * Get command usage statistics
114
+ */
115
+ getCommandUsage(): CommandUsage[];
116
+ /**
117
+ * Get total command count for percentage calculations
118
+ */
119
+ getTotalCommandCount(): number;
120
+ }
121
+ /**
122
+ * Singleton instance of the dashboard state manager
123
+ */
124
+ export declare const dashboardState: DashboardStateManager;
125
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/dashboard/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,264 @@
1
+ import { EventEmitter } from 'events';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ /**
5
+ * Manages the shared state for the dashboard.
6
+ * Acts as a bridge between the indexer and the dashboard.
7
+ */
8
+ /**
9
+ * Human-readable labels for commands
10
+ */
11
+ const COMMAND_LABELS = {
12
+ index_codebase: 'Index Codebase',
13
+ search_code: 'Search Code',
14
+ search_similar: 'Search Similar',
15
+ get_index_status: 'Get Status',
16
+ clear_index: 'Clear Index',
17
+ get_project_instructions: 'Get Instructions',
18
+ commit: 'Commit',
19
+ // Symbolic analysis tools
20
+ get_symbols_overview: 'Symbols Overview',
21
+ find_symbol: 'Find Symbol',
22
+ find_referencing_symbols: 'Find References',
23
+ search_for_pattern: 'Pattern Search',
24
+ replace_symbol_body: 'Replace Symbol',
25
+ insert_before_symbol: 'Insert Before',
26
+ insert_after_symbol: 'Insert After',
27
+ rename_symbol: 'Rename Symbol',
28
+ // Memory tools
29
+ write_memory: 'Write Memory',
30
+ read_memory: 'Read Memory',
31
+ list_memories: 'List Memories',
32
+ delete_memory: 'Delete Memory',
33
+ edit_memory: 'Edit Memory',
34
+ // Worktree tools
35
+ create_worktree: 'Create Worktree',
36
+ list_worktrees: 'List Worktrees',
37
+ remove_worktree: 'Remove Worktree',
38
+ worktree_status: 'Worktree Status',
39
+ // Clustering tools
40
+ list_concepts: 'List Concepts',
41
+ search_by_concept: 'Search by Concept',
42
+ summarize_codebase: 'Summarize Codebase',
43
+ };
44
+ export class DashboardStateManager extends EventEmitter {
45
+ indexer = null;
46
+ config = null;
47
+ projectPath = null;
48
+ version = null;
49
+ isIndexing = false;
50
+ lastProgress = null;
51
+ commandUsage = new Map();
52
+ /**
53
+ * Get the path to the usage file
54
+ */
55
+ getUsageFilePath() {
56
+ if (!this.projectPath)
57
+ return null;
58
+ return path.join(this.projectPath, '.lance-context', 'usage.json');
59
+ }
60
+ /**
61
+ * Load command usage from disk
62
+ */
63
+ loadUsageFromDisk() {
64
+ const filePath = this.getUsageFilePath();
65
+ if (!filePath)
66
+ return;
67
+ try {
68
+ if (fs.existsSync(filePath)) {
69
+ const data = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
70
+ this.commandUsage.clear();
71
+ for (const [cmd, count] of Object.entries(data)) {
72
+ if (typeof count === 'number') {
73
+ this.commandUsage.set(cmd, count);
74
+ }
75
+ }
76
+ }
77
+ }
78
+ catch {
79
+ // Ignore errors, start with empty usage
80
+ }
81
+ }
82
+ /**
83
+ * Save command usage to disk
84
+ */
85
+ saveUsageToDisk() {
86
+ const filePath = this.getUsageFilePath();
87
+ if (!filePath)
88
+ return;
89
+ try {
90
+ const data = {};
91
+ for (const [cmd, count] of this.commandUsage) {
92
+ data[cmd] = count;
93
+ }
94
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
95
+ }
96
+ catch {
97
+ // Ignore errors
98
+ }
99
+ }
100
+ /**
101
+ * Set the indexer instance for the dashboard to use
102
+ */
103
+ setIndexer(indexer) {
104
+ this.indexer = indexer;
105
+ }
106
+ /**
107
+ * Set the configuration for the dashboard to display
108
+ */
109
+ setConfig(config) {
110
+ this.config = config;
111
+ }
112
+ /**
113
+ * Set the project path
114
+ */
115
+ setProjectPath(projectPath) {
116
+ this.projectPath = projectPath;
117
+ this.loadUsageFromDisk();
118
+ }
119
+ /**
120
+ * Set the package version
121
+ */
122
+ setVersion(version) {
123
+ this.version = version;
124
+ }
125
+ /**
126
+ * Get the package version
127
+ */
128
+ getVersion() {
129
+ return this.version;
130
+ }
131
+ /**
132
+ * Get the current index status
133
+ */
134
+ async getStatus() {
135
+ if (!this.indexer) {
136
+ return null;
137
+ }
138
+ return this.indexer.getStatus();
139
+ }
140
+ /**
141
+ * Get the current configuration
142
+ */
143
+ getConfig() {
144
+ return this.config;
145
+ }
146
+ /**
147
+ * Get the project path
148
+ */
149
+ getProjectPath() {
150
+ return this.projectPath;
151
+ }
152
+ /**
153
+ * Check if indexing is in progress
154
+ */
155
+ isIndexingInProgress() {
156
+ return this.isIndexing;
157
+ }
158
+ /**
159
+ * Get the last progress update
160
+ */
161
+ getLastProgress() {
162
+ return this.lastProgress;
163
+ }
164
+ /**
165
+ * Called when indexing starts
166
+ */
167
+ onIndexingStart() {
168
+ this.isIndexing = true;
169
+ this.lastProgress = null;
170
+ this.emit('indexing:start');
171
+ }
172
+ /**
173
+ * Called with progress updates during indexing
174
+ */
175
+ onProgress(progress) {
176
+ this.lastProgress = progress;
177
+ this.emit('progress', progress);
178
+ }
179
+ /**
180
+ * Called when indexing completes
181
+ */
182
+ onIndexingComplete(result) {
183
+ this.isIndexing = false;
184
+ this.lastProgress = null;
185
+ this.emit('indexing:complete', result);
186
+ }
187
+ /**
188
+ * Called when status changes
189
+ */
190
+ onStatusChange(status) {
191
+ this.emit('status:change', status);
192
+ }
193
+ /**
194
+ * Record a command usage
195
+ */
196
+ recordCommandUsage(command) {
197
+ // Reload from disk to get latest counts (in case another process updated)
198
+ this.loadUsageFromDisk();
199
+ const current = this.commandUsage.get(command) || 0;
200
+ this.commandUsage.set(command, current + 1);
201
+ this.saveUsageToDisk();
202
+ this.emit('usage:update', this.getCommandUsage());
203
+ }
204
+ /**
205
+ * Get command usage statistics
206
+ */
207
+ getCommandUsage() {
208
+ // Reload from disk to get latest counts (in case another process updated)
209
+ this.loadUsageFromDisk();
210
+ const allCommands = [
211
+ 'search_code',
212
+ 'search_similar',
213
+ 'index_codebase',
214
+ 'get_index_status',
215
+ 'clear_index',
216
+ 'get_project_instructions',
217
+ 'commit',
218
+ // Symbolic analysis
219
+ 'get_symbols_overview',
220
+ 'find_symbol',
221
+ 'find_referencing_symbols',
222
+ 'search_for_pattern',
223
+ 'replace_symbol_body',
224
+ 'insert_before_symbol',
225
+ 'insert_after_symbol',
226
+ 'rename_symbol',
227
+ // Memory
228
+ 'write_memory',
229
+ 'read_memory',
230
+ 'list_memories',
231
+ 'delete_memory',
232
+ 'edit_memory',
233
+ // Worktree
234
+ 'create_worktree',
235
+ 'list_worktrees',
236
+ 'remove_worktree',
237
+ 'worktree_status',
238
+ // Clustering
239
+ 'list_concepts',
240
+ 'search_by_concept',
241
+ 'summarize_codebase',
242
+ ];
243
+ return allCommands.map((command) => ({
244
+ command,
245
+ count: this.commandUsage.get(command) || 0,
246
+ label: COMMAND_LABELS[command],
247
+ }));
248
+ }
249
+ /**
250
+ * Get total command count for percentage calculations
251
+ */
252
+ getTotalCommandCount() {
253
+ let total = 0;
254
+ for (const count of this.commandUsage.values()) {
255
+ total += count;
256
+ }
257
+ return total;
258
+ }
259
+ }
260
+ /**
261
+ * Singleton instance of the dashboard state manager
262
+ */
263
+ export const dashboardState = new DashboardStateManager();
264
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/dashboard/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Generate the dashboard HTML page.
3
+ * This is a self-contained HTML page with embedded CSS and JavaScript.
4
+ */
5
+ export declare function getDashboardHTML(): string;
6
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/dashboard/ui.ts"],"names":[],"mappings":"AAkCA;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAu2CzC"}