glancey 2.0.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 (336) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +435 -0
  3. package/dist/__tests__/ast-chunker.test.d.ts +2 -0
  4. package/dist/__tests__/ast-chunker.test.d.ts.map +1 -0
  5. package/dist/__tests__/ast-chunker.test.js +307 -0
  6. package/dist/__tests__/ast-chunker.test.js.map +1 -0
  7. package/dist/__tests__/config.test.d.ts +2 -0
  8. package/dist/__tests__/config.test.d.ts.map +1 -0
  9. package/dist/__tests__/config.test.js +242 -0
  10. package/dist/__tests__/config.test.js.map +1 -0
  11. package/dist/__tests__/dashboard/beads.test.d.ts +2 -0
  12. package/dist/__tests__/dashboard/beads.test.d.ts.map +1 -0
  13. package/dist/__tests__/dashboard/beads.test.js +151 -0
  14. package/dist/__tests__/dashboard/beads.test.js.map +1 -0
  15. package/dist/__tests__/dashboard/index.test.d.ts +2 -0
  16. package/dist/__tests__/dashboard/index.test.d.ts.map +1 -0
  17. package/dist/__tests__/dashboard/index.test.js +116 -0
  18. package/dist/__tests__/dashboard/index.test.js.map +1 -0
  19. package/dist/__tests__/dashboard/routes.test.d.ts +2 -0
  20. package/dist/__tests__/dashboard/routes.test.d.ts.map +1 -0
  21. package/dist/__tests__/dashboard/routes.test.js +125 -0
  22. package/dist/__tests__/dashboard/routes.test.js.map +1 -0
  23. package/dist/__tests__/dashboard/server.test.d.ts +2 -0
  24. package/dist/__tests__/dashboard/server.test.d.ts.map +1 -0
  25. package/dist/__tests__/dashboard/server.test.js +75 -0
  26. package/dist/__tests__/dashboard/server.test.js.map +1 -0
  27. package/dist/__tests__/dashboard/state.test.d.ts +2 -0
  28. package/dist/__tests__/dashboard/state.test.d.ts.map +1 -0
  29. package/dist/__tests__/dashboard/state.test.js +124 -0
  30. package/dist/__tests__/dashboard/state.test.js.map +1 -0
  31. package/dist/__tests__/dashboard/token-tracking.test.d.ts +2 -0
  32. package/dist/__tests__/dashboard/token-tracking.test.d.ts.map +1 -0
  33. package/dist/__tests__/dashboard/token-tracking.test.js +315 -0
  34. package/dist/__tests__/dashboard/token-tracking.test.js.map +1 -0
  35. package/dist/__tests__/embeddings/factory.test.d.ts +2 -0
  36. package/dist/__tests__/embeddings/factory.test.d.ts.map +1 -0
  37. package/dist/__tests__/embeddings/factory.test.js +157 -0
  38. package/dist/__tests__/embeddings/factory.test.js.map +1 -0
  39. package/dist/__tests__/embeddings/gemini.test.d.ts +2 -0
  40. package/dist/__tests__/embeddings/gemini.test.d.ts.map +1 -0
  41. package/dist/__tests__/embeddings/gemini.test.js +178 -0
  42. package/dist/__tests__/embeddings/gemini.test.js.map +1 -0
  43. package/dist/__tests__/embeddings/ollama.test.d.ts +2 -0
  44. package/dist/__tests__/embeddings/ollama.test.d.ts.map +1 -0
  45. package/dist/__tests__/embeddings/ollama.test.js +273 -0
  46. package/dist/__tests__/embeddings/ollama.test.js.map +1 -0
  47. package/dist/__tests__/embeddings/rate-limiter.test.d.ts +2 -0
  48. package/dist/__tests__/embeddings/rate-limiter.test.d.ts.map +1 -0
  49. package/dist/__tests__/embeddings/rate-limiter.test.js +163 -0
  50. package/dist/__tests__/embeddings/rate-limiter.test.js.map +1 -0
  51. package/dist/__tests__/embeddings/retry.test.d.ts +2 -0
  52. package/dist/__tests__/embeddings/retry.test.d.ts.map +1 -0
  53. package/dist/__tests__/embeddings/retry.test.js +334 -0
  54. package/dist/__tests__/embeddings/retry.test.js.map +1 -0
  55. package/dist/__tests__/embeddings/types.test.d.ts +2 -0
  56. package/dist/__tests__/embeddings/types.test.d.ts.map +1 -0
  57. package/dist/__tests__/embeddings/types.test.js +31 -0
  58. package/dist/__tests__/embeddings/types.test.js.map +1 -0
  59. package/dist/__tests__/mocks/embedding-backend.mock.d.ts +10 -0
  60. package/dist/__tests__/mocks/embedding-backend.mock.d.ts.map +1 -0
  61. package/dist/__tests__/mocks/embedding-backend.mock.js +39 -0
  62. package/dist/__tests__/mocks/embedding-backend.mock.js.map +1 -0
  63. package/dist/__tests__/mocks/fetch.mock.d.ts +49 -0
  64. package/dist/__tests__/mocks/fetch.mock.d.ts.map +1 -0
  65. package/dist/__tests__/mocks/fetch.mock.js +102 -0
  66. package/dist/__tests__/mocks/fetch.mock.js.map +1 -0
  67. package/dist/__tests__/mocks/lancedb.mock.d.ts +38 -0
  68. package/dist/__tests__/mocks/lancedb.mock.d.ts.map +1 -0
  69. package/dist/__tests__/mocks/lancedb.mock.js +63 -0
  70. package/dist/__tests__/mocks/lancedb.mock.js.map +1 -0
  71. package/dist/__tests__/search/clustering.test.d.ts +2 -0
  72. package/dist/__tests__/search/clustering.test.d.ts.map +1 -0
  73. package/dist/__tests__/search/clustering.test.js +230 -0
  74. package/dist/__tests__/search/clustering.test.js.map +1 -0
  75. package/dist/__tests__/search/hybrid-search.test.d.ts +2 -0
  76. package/dist/__tests__/search/hybrid-search.test.d.ts.map +1 -0
  77. package/dist/__tests__/search/hybrid-search.test.js +279 -0
  78. package/dist/__tests__/search/hybrid-search.test.js.map +1 -0
  79. package/dist/__tests__/search/indexer.test.d.ts +2 -0
  80. package/dist/__tests__/search/indexer.test.d.ts.map +1 -0
  81. package/dist/__tests__/search/indexer.test.js +1305 -0
  82. package/dist/__tests__/search/indexer.test.js.map +1 -0
  83. package/dist/__tests__/search/tree-sitter-chunker.test.d.ts +2 -0
  84. package/dist/__tests__/search/tree-sitter-chunker.test.d.ts.map +1 -0
  85. package/dist/__tests__/search/tree-sitter-chunker.test.js +228 -0
  86. package/dist/__tests__/search/tree-sitter-chunker.test.js.map +1 -0
  87. package/dist/__tests__/setup.d.ts +2 -0
  88. package/dist/__tests__/setup.d.ts.map +1 -0
  89. package/dist/__tests__/setup.js +11 -0
  90. package/dist/__tests__/setup.js.map +1 -0
  91. package/dist/__tests__/tools/clustering-handlers.test.d.ts +2 -0
  92. package/dist/__tests__/tools/clustering-handlers.test.d.ts.map +1 -0
  93. package/dist/__tests__/tools/clustering-handlers.test.js +286 -0
  94. package/dist/__tests__/tools/clustering-handlers.test.js.map +1 -0
  95. package/dist/__tests__/tools/commit-handlers.test.d.ts +2 -0
  96. package/dist/__tests__/tools/commit-handlers.test.d.ts.map +1 -0
  97. package/dist/__tests__/tools/commit-handlers.test.js +153 -0
  98. package/dist/__tests__/tools/commit-handlers.test.js.map +1 -0
  99. package/dist/__tests__/tools/index-handlers.test.d.ts +2 -0
  100. package/dist/__tests__/tools/index-handlers.test.d.ts.map +1 -0
  101. package/dist/__tests__/tools/index-handlers.test.js +184 -0
  102. package/dist/__tests__/tools/index-handlers.test.js.map +1 -0
  103. package/dist/__tests__/tools/instructions-handlers.test.d.ts +2 -0
  104. package/dist/__tests__/tools/instructions-handlers.test.d.ts.map +1 -0
  105. package/dist/__tests__/tools/instructions-handlers.test.js +53 -0
  106. package/dist/__tests__/tools/instructions-handlers.test.js.map +1 -0
  107. package/dist/__tests__/tools/memory-handlers.test.d.ts +2 -0
  108. package/dist/__tests__/tools/memory-handlers.test.d.ts.map +1 -0
  109. package/dist/__tests__/tools/memory-handlers.test.js +175 -0
  110. package/dist/__tests__/tools/memory-handlers.test.js.map +1 -0
  111. package/dist/__tests__/tools/search-handlers.test.d.ts +2 -0
  112. package/dist/__tests__/tools/search-handlers.test.d.ts.map +1 -0
  113. package/dist/__tests__/tools/search-handlers.test.js +229 -0
  114. package/dist/__tests__/tools/search-handlers.test.js.map +1 -0
  115. package/dist/__tests__/tools/symbol-handlers.test.d.ts +2 -0
  116. package/dist/__tests__/tools/symbol-handlers.test.d.ts.map +1 -0
  117. package/dist/__tests__/tools/symbol-handlers.test.js +348 -0
  118. package/dist/__tests__/tools/symbol-handlers.test.js.map +1 -0
  119. package/dist/__tests__/tools/worktree-handlers.test.d.ts +2 -0
  120. package/dist/__tests__/tools/worktree-handlers.test.d.ts.map +1 -0
  121. package/dist/__tests__/tools/worktree-handlers.test.js +297 -0
  122. package/dist/__tests__/tools/worktree-handlers.test.js.map +1 -0
  123. package/dist/__tests__/utils/cache.test.d.ts +2 -0
  124. package/dist/__tests__/utils/cache.test.d.ts.map +1 -0
  125. package/dist/__tests__/utils/cache.test.js +147 -0
  126. package/dist/__tests__/utils/cache.test.js.map +1 -0
  127. package/dist/__tests__/utils/concurrency.test.d.ts +2 -0
  128. package/dist/__tests__/utils/concurrency.test.d.ts.map +1 -0
  129. package/dist/__tests__/utils/concurrency.test.js +83 -0
  130. package/dist/__tests__/utils/concurrency.test.js.map +1 -0
  131. package/dist/__tests__/utils/errors.test.d.ts +2 -0
  132. package/dist/__tests__/utils/errors.test.d.ts.map +1 -0
  133. package/dist/__tests__/utils/errors.test.js +136 -0
  134. package/dist/__tests__/utils/errors.test.js.map +1 -0
  135. package/dist/__tests__/utils/logger.test.d.ts +2 -0
  136. package/dist/__tests__/utils/logger.test.d.ts.map +1 -0
  137. package/dist/__tests__/utils/logger.test.js +131 -0
  138. package/dist/__tests__/utils/logger.test.js.map +1 -0
  139. package/dist/__tests__/utils/type-guards.test.d.ts +2 -0
  140. package/dist/__tests__/utils/type-guards.test.d.ts.map +1 -0
  141. package/dist/__tests__/utils/type-guards.test.js +80 -0
  142. package/dist/__tests__/utils/type-guards.test.js.map +1 -0
  143. package/dist/__tests__/worktree/worktree-manager.test.d.ts +2 -0
  144. package/dist/__tests__/worktree/worktree-manager.test.d.ts.map +1 -0
  145. package/dist/__tests__/worktree/worktree-manager.test.js +403 -0
  146. package/dist/__tests__/worktree/worktree-manager.test.js.map +1 -0
  147. package/dist/config.d.ts +191 -0
  148. package/dist/config.d.ts.map +1 -0
  149. package/dist/config.js +788 -0
  150. package/dist/config.js.map +1 -0
  151. package/dist/dashboard/beads.d.ts +35 -0
  152. package/dist/dashboard/beads.d.ts.map +1 -0
  153. package/dist/dashboard/beads.js +102 -0
  154. package/dist/dashboard/beads.js.map +1 -0
  155. package/dist/dashboard/events.d.ts +64 -0
  156. package/dist/dashboard/events.d.ts.map +1 -0
  157. package/dist/dashboard/events.js +211 -0
  158. package/dist/dashboard/events.js.map +1 -0
  159. package/dist/dashboard/index.d.ts +69 -0
  160. package/dist/dashboard/index.d.ts.map +1 -0
  161. package/dist/dashboard/index.js +93 -0
  162. package/dist/dashboard/index.js.map +1 -0
  163. package/dist/dashboard/routes.d.ts +6 -0
  164. package/dist/dashboard/routes.d.ts.map +1 -0
  165. package/dist/dashboard/routes.js +505 -0
  166. package/dist/dashboard/routes.js.map +1 -0
  167. package/dist/dashboard/server.d.ts +27 -0
  168. package/dist/dashboard/server.d.ts.map +1 -0
  169. package/dist/dashboard/server.js +72 -0
  170. package/dist/dashboard/server.js.map +1 -0
  171. package/dist/dashboard/state.d.ts +172 -0
  172. package/dist/dashboard/state.d.ts.map +1 -0
  173. package/dist/dashboard/state.js +362 -0
  174. package/dist/dashboard/state.js.map +1 -0
  175. package/dist/dashboard/token-tracking.d.ts +143 -0
  176. package/dist/dashboard/token-tracking.d.ts.map +1 -0
  177. package/dist/dashboard/token-tracking.js +363 -0
  178. package/dist/dashboard/token-tracking.js.map +1 -0
  179. package/dist/dashboard/ui.d.ts +6 -0
  180. package/dist/dashboard/ui.d.ts.map +1 -0
  181. package/dist/dashboard/ui.js +2710 -0
  182. package/dist/dashboard/ui.js.map +1 -0
  183. package/dist/embeddings/gemini.d.ts +28 -0
  184. package/dist/embeddings/gemini.d.ts.map +1 -0
  185. package/dist/embeddings/gemini.js +165 -0
  186. package/dist/embeddings/gemini.js.map +1 -0
  187. package/dist/embeddings/index.d.ts +34 -0
  188. package/dist/embeddings/index.d.ts.map +1 -0
  189. package/dist/embeddings/index.js +120 -0
  190. package/dist/embeddings/index.js.map +1 -0
  191. package/dist/embeddings/ollama.d.ts +22 -0
  192. package/dist/embeddings/ollama.d.ts.map +1 -0
  193. package/dist/embeddings/ollama.js +179 -0
  194. package/dist/embeddings/ollama.js.map +1 -0
  195. package/dist/embeddings/rate-limiter.d.ts +75 -0
  196. package/dist/embeddings/rate-limiter.d.ts.map +1 -0
  197. package/dist/embeddings/rate-limiter.js +145 -0
  198. package/dist/embeddings/rate-limiter.js.map +1 -0
  199. package/dist/embeddings/retry.d.ts +20 -0
  200. package/dist/embeddings/retry.d.ts.map +1 -0
  201. package/dist/embeddings/retry.js +227 -0
  202. package/dist/embeddings/retry.js.map +1 -0
  203. package/dist/embeddings/types.d.ts +103 -0
  204. package/dist/embeddings/types.d.ts.map +1 -0
  205. package/dist/embeddings/types.js +23 -0
  206. package/dist/embeddings/types.js.map +1 -0
  207. package/dist/index.d.ts +12 -0
  208. package/dist/index.d.ts.map +1 -0
  209. package/dist/index.js +2028 -0
  210. package/dist/index.js.map +1 -0
  211. package/dist/memory/index.d.ts +63 -0
  212. package/dist/memory/index.d.ts.map +1 -0
  213. package/dist/memory/index.js +168 -0
  214. package/dist/memory/index.js.map +1 -0
  215. package/dist/search/ast-chunker.d.ts +29 -0
  216. package/dist/search/ast-chunker.d.ts.map +1 -0
  217. package/dist/search/ast-chunker.js +236 -0
  218. package/dist/search/ast-chunker.js.map +1 -0
  219. package/dist/search/chunk-utils.d.ts +24 -0
  220. package/dist/search/chunk-utils.d.ts.map +1 -0
  221. package/dist/search/chunk-utils.js +41 -0
  222. package/dist/search/chunk-utils.js.map +1 -0
  223. package/dist/search/clustering.d.ts +77 -0
  224. package/dist/search/clustering.d.ts.map +1 -0
  225. package/dist/search/clustering.js +455 -0
  226. package/dist/search/clustering.js.map +1 -0
  227. package/dist/search/indexer.d.ts +377 -0
  228. package/dist/search/indexer.d.ts.map +1 -0
  229. package/dist/search/indexer.js +1557 -0
  230. package/dist/search/indexer.js.map +1 -0
  231. package/dist/search/tree-sitter-chunker.d.ts +64 -0
  232. package/dist/search/tree-sitter-chunker.d.ts.map +1 -0
  233. package/dist/search/tree-sitter-chunker.js +412 -0
  234. package/dist/search/tree-sitter-chunker.js.map +1 -0
  235. package/dist/symbols/index.d.ts +14 -0
  236. package/dist/symbols/index.d.ts.map +1 -0
  237. package/dist/symbols/index.js +19 -0
  238. package/dist/symbols/index.js.map +1 -0
  239. package/dist/symbols/name-path.d.ts +113 -0
  240. package/dist/symbols/name-path.d.ts.map +1 -0
  241. package/dist/symbols/name-path.js +194 -0
  242. package/dist/symbols/name-path.js.map +1 -0
  243. package/dist/symbols/pattern-search.d.ts +14 -0
  244. package/dist/symbols/pattern-search.d.ts.map +1 -0
  245. package/dist/symbols/pattern-search.js +224 -0
  246. package/dist/symbols/pattern-search.js.map +1 -0
  247. package/dist/symbols/reference-finder.d.ts +38 -0
  248. package/dist/symbols/reference-finder.d.ts.map +1 -0
  249. package/dist/symbols/reference-finder.js +376 -0
  250. package/dist/symbols/reference-finder.js.map +1 -0
  251. package/dist/symbols/symbol-editor.d.ts +81 -0
  252. package/dist/symbols/symbol-editor.d.ts.map +1 -0
  253. package/dist/symbols/symbol-editor.js +257 -0
  254. package/dist/symbols/symbol-editor.js.map +1 -0
  255. package/dist/symbols/symbol-extractor.d.ts +49 -0
  256. package/dist/symbols/symbol-extractor.d.ts.map +1 -0
  257. package/dist/symbols/symbol-extractor.js +593 -0
  258. package/dist/symbols/symbol-extractor.js.map +1 -0
  259. package/dist/symbols/symbol-renamer.d.ts +81 -0
  260. package/dist/symbols/symbol-renamer.d.ts.map +1 -0
  261. package/dist/symbols/symbol-renamer.js +204 -0
  262. package/dist/symbols/symbol-renamer.js.map +1 -0
  263. package/dist/symbols/types.d.ts +234 -0
  264. package/dist/symbols/types.d.ts.map +1 -0
  265. package/dist/symbols/types.js +106 -0
  266. package/dist/symbols/types.js.map +1 -0
  267. package/dist/tools/clustering-handlers.d.ts +70 -0
  268. package/dist/tools/clustering-handlers.d.ts.map +1 -0
  269. package/dist/tools/clustering-handlers.js +150 -0
  270. package/dist/tools/clustering-handlers.js.map +1 -0
  271. package/dist/tools/commit-handlers.d.ts +77 -0
  272. package/dist/tools/commit-handlers.d.ts.map +1 -0
  273. package/dist/tools/commit-handlers.js +251 -0
  274. package/dist/tools/commit-handlers.js.map +1 -0
  275. package/dist/tools/index-handlers.d.ts +31 -0
  276. package/dist/tools/index-handlers.d.ts.map +1 -0
  277. package/dist/tools/index-handlers.js +53 -0
  278. package/dist/tools/index-handlers.js.map +1 -0
  279. package/dist/tools/instructions-handlers.d.ts +25 -0
  280. package/dist/tools/instructions-handlers.d.ts.map +1 -0
  281. package/dist/tools/instructions-handlers.js +36 -0
  282. package/dist/tools/instructions-handlers.js.map +1 -0
  283. package/dist/tools/memory-handlers.d.ts +95 -0
  284. package/dist/tools/memory-handlers.d.ts.map +1 -0
  285. package/dist/tools/memory-handlers.js +126 -0
  286. package/dist/tools/memory-handlers.js.map +1 -0
  287. package/dist/tools/search-handlers.d.ts +51 -0
  288. package/dist/tools/search-handlers.d.ts.map +1 -0
  289. package/dist/tools/search-handlers.js +128 -0
  290. package/dist/tools/search-handlers.js.map +1 -0
  291. package/dist/tools/symbol-handlers.d.ts +171 -0
  292. package/dist/tools/symbol-handlers.d.ts.map +1 -0
  293. package/dist/tools/symbol-handlers.js +456 -0
  294. package/dist/tools/symbol-handlers.js.map +1 -0
  295. package/dist/tools/types.d.ts +32 -0
  296. package/dist/tools/types.d.ts.map +1 -0
  297. package/dist/tools/types.js +17 -0
  298. package/dist/tools/types.js.map +1 -0
  299. package/dist/tools/worktree-handlers.d.ts +96 -0
  300. package/dist/tools/worktree-handlers.d.ts.map +1 -0
  301. package/dist/tools/worktree-handlers.js +186 -0
  302. package/dist/tools/worktree-handlers.js.map +1 -0
  303. package/dist/utils/cache.d.ts +77 -0
  304. package/dist/utils/cache.d.ts.map +1 -0
  305. package/dist/utils/cache.js +134 -0
  306. package/dist/utils/cache.js.map +1 -0
  307. package/dist/utils/concurrency.d.ts +32 -0
  308. package/dist/utils/concurrency.d.ts.map +1 -0
  309. package/dist/utils/concurrency.js +57 -0
  310. package/dist/utils/concurrency.js.map +1 -0
  311. package/dist/utils/errors.d.ts +36 -0
  312. package/dist/utils/errors.d.ts.map +1 -0
  313. package/dist/utils/errors.js +91 -0
  314. package/dist/utils/errors.js.map +1 -0
  315. package/dist/utils/logger.d.ts +37 -0
  316. package/dist/utils/logger.d.ts.map +1 -0
  317. package/dist/utils/logger.js +114 -0
  318. package/dist/utils/logger.js.map +1 -0
  319. package/dist/utils/type-guards.d.ts +17 -0
  320. package/dist/utils/type-guards.d.ts.map +1 -0
  321. package/dist/utils/type-guards.js +25 -0
  322. package/dist/utils/type-guards.js.map +1 -0
  323. package/dist/worktree/index.d.ts +6 -0
  324. package/dist/worktree/index.d.ts.map +1 -0
  325. package/dist/worktree/index.js +6 -0
  326. package/dist/worktree/index.js.map +1 -0
  327. package/dist/worktree/types.d.ts +101 -0
  328. package/dist/worktree/types.d.ts.map +1 -0
  329. package/dist/worktree/types.js +6 -0
  330. package/dist/worktree/types.js.map +1 -0
  331. package/dist/worktree/worktree-manager.d.ts +80 -0
  332. package/dist/worktree/worktree-manager.d.ts.map +1 -0
  333. package/dist/worktree/worktree-manager.js +407 -0
  334. package/dist/worktree/worktree-manager.js.map +1 -0
  335. package/package.json +87 -0
  336. package/scripts/postinstall.js +48 -0
@@ -0,0 +1,172 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { CodeIndexer, IndexStatus, IndexProgress } from '../search/indexer.js';
3
+ import type { GlanceyConfig } from '../config.js';
4
+ import type { BackendFallbackInfo } from '../embeddings/types.js';
5
+ import { type TokenSavingsStats } from './token-tracking.js';
6
+ /**
7
+ * Command names that can be tracked
8
+ */
9
+ 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' | 'open_dashboard';
10
+ /**
11
+ * Command usage statistics
12
+ */
13
+ export interface CommandUsage {
14
+ command: CommandName;
15
+ count: number;
16
+ label: string;
17
+ }
18
+ /**
19
+ * Events emitted by the DashboardStateManager
20
+ */
21
+ export interface DashboardStateEvents {
22
+ progress: (progress: IndexProgress) => void;
23
+ 'indexing:start': () => void;
24
+ 'indexing:complete': (result: {
25
+ filesIndexed: number;
26
+ chunksCreated: number;
27
+ }) => void;
28
+ 'status:change': (status: IndexStatus) => void;
29
+ 'usage:update': (usage: CommandUsage[]) => void;
30
+ }
31
+ export declare class DashboardStateManager extends EventEmitter {
32
+ private indexer;
33
+ private config;
34
+ private projectPath;
35
+ private version;
36
+ private isIndexing;
37
+ private lastProgress;
38
+ private commandUsage;
39
+ private backendFallback;
40
+ constructor();
41
+ /**
42
+ * Get the path to the usage file
43
+ */
44
+ private getUsageFilePath;
45
+ /**
46
+ * Load command usage from disk
47
+ */
48
+ private loadUsageFromDisk;
49
+ /**
50
+ * Save command usage to disk
51
+ */
52
+ private saveUsageToDisk;
53
+ /**
54
+ * Set the indexer instance for the dashboard to use
55
+ */
56
+ setIndexer(indexer: CodeIndexer): void;
57
+ /**
58
+ * Set the configuration for the dashboard to display
59
+ */
60
+ setConfig(config: GlanceyConfig): void;
61
+ /**
62
+ * Set the project path
63
+ */
64
+ setProjectPath(projectPath: string): void;
65
+ /**
66
+ * Set the package version
67
+ */
68
+ setVersion(version: string): void;
69
+ /**
70
+ * Get the package version
71
+ */
72
+ getVersion(): string | null;
73
+ /**
74
+ * Set backend fallback info when a fallback occurred during initialization
75
+ */
76
+ setBackendFallback(fallback: BackendFallbackInfo): void;
77
+ /**
78
+ * Clear backend fallback info (when backend is successfully reinitialized)
79
+ */
80
+ clearBackendFallback(): void;
81
+ /**
82
+ * Get backend fallback info if a fallback occurred
83
+ */
84
+ getBackendFallback(): BackendFallbackInfo | null;
85
+ /**
86
+ * Get the current index status
87
+ */
88
+ getStatus(): Promise<IndexStatus | null>;
89
+ /**
90
+ * Get the current configuration
91
+ */
92
+ getConfig(): GlanceyConfig | null;
93
+ /**
94
+ * Get the project path
95
+ */
96
+ getProjectPath(): string | null;
97
+ /**
98
+ * Check if indexing is in progress
99
+ */
100
+ isIndexingInProgress(): boolean;
101
+ /**
102
+ * Get the last progress update
103
+ */
104
+ getLastProgress(): IndexProgress | null;
105
+ /**
106
+ * Called when indexing starts
107
+ */
108
+ onIndexingStart(): void;
109
+ /**
110
+ * Called with progress updates during indexing
111
+ */
112
+ onProgress(progress: IndexProgress): void;
113
+ /**
114
+ * Update just the message portion of the current progress.
115
+ * Useful for sub-progress updates (e.g., Ollama batch progress).
116
+ */
117
+ updateProgressMessage(message: string): void;
118
+ /**
119
+ * Update sub-progress within the current phase.
120
+ * Allows embedding backends to report their own progress with percentage.
121
+ * The current/total values represent sub-progress within the phase.
122
+ */
123
+ updateSubProgress(current: number, total: number, message: string): void;
124
+ /**
125
+ * Called when indexing completes
126
+ */
127
+ onIndexingComplete(result: {
128
+ filesIndexed: number;
129
+ chunksCreated: number;
130
+ }): void;
131
+ /**
132
+ * Called when status changes
133
+ */
134
+ onStatusChange(status: IndexStatus): void;
135
+ /**
136
+ * Trigger a reindex of the codebase.
137
+ * Returns a promise that resolves when indexing completes.
138
+ */
139
+ triggerReindex(forceReindex?: boolean): Promise<{
140
+ filesIndexed: number;
141
+ chunksCreated: number;
142
+ } | null>;
143
+ /**
144
+ * Record a command usage
145
+ */
146
+ recordCommandUsage(command: CommandName): void;
147
+ /**
148
+ * Get command usage statistics
149
+ */
150
+ getCommandUsage(): CommandUsage[];
151
+ /**
152
+ * Get total command count for percentage calculations
153
+ */
154
+ getTotalCommandCount(): number;
155
+ /**
156
+ * Get token savings statistics
157
+ */
158
+ getTokenSavings(): TokenSavingsStats;
159
+ /**
160
+ * Get the token tracker for recording savings
161
+ */
162
+ getTokenTracker(): import("./token-tracking.js").TokenSavingsTracker;
163
+ /**
164
+ * Emit token savings update event for real-time dashboard updates
165
+ */
166
+ emitTokenSavingsUpdate(): void;
167
+ }
168
+ /**
169
+ * Singleton instance of the dashboard state manager
170
+ */
171
+ export declare const dashboardState: DashboardStateManager;
172
+ //# 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,362 @@
1
+ import { EventEmitter } from 'events';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import { tokenTracker } from './token-tracking.js';
5
+ /**
6
+ * Manages the shared state for the dashboard.
7
+ * Acts as a bridge between the indexer and the dashboard.
8
+ */
9
+ /**
10
+ * Human-readable labels for commands
11
+ */
12
+ const COMMAND_LABELS = {
13
+ index_codebase: 'Index Codebase',
14
+ search_code: 'Search Code',
15
+ search_similar: 'Search Similar',
16
+ get_index_status: 'Get Status',
17
+ clear_index: 'Clear Index',
18
+ get_project_instructions: 'Get Instructions',
19
+ commit: 'Commit',
20
+ // Symbolic analysis tools
21
+ get_symbols_overview: 'Symbols Overview',
22
+ find_symbol: 'Find Symbol',
23
+ find_referencing_symbols: 'Find References',
24
+ search_for_pattern: 'Pattern Search',
25
+ replace_symbol_body: 'Replace Symbol',
26
+ insert_before_symbol: 'Insert Before',
27
+ insert_after_symbol: 'Insert After',
28
+ rename_symbol: 'Rename Symbol',
29
+ // Memory tools
30
+ write_memory: 'Write Memory',
31
+ read_memory: 'Read Memory',
32
+ list_memories: 'List Memories',
33
+ delete_memory: 'Delete Memory',
34
+ edit_memory: 'Edit Memory',
35
+ // Worktree tools
36
+ create_worktree: 'Create Worktree',
37
+ list_worktrees: 'List Worktrees',
38
+ remove_worktree: 'Remove Worktree',
39
+ worktree_status: 'Worktree Status',
40
+ // Clustering tools
41
+ list_concepts: 'List Concepts',
42
+ search_by_concept: 'Search by Concept',
43
+ summarize_codebase: 'Summarize Codebase',
44
+ // Dashboard tools
45
+ open_dashboard: 'Open Dashboard',
46
+ };
47
+ /** Maximum number of event listeners to prevent memory leaks */
48
+ const MAX_LISTENERS = 20;
49
+ export class DashboardStateManager extends EventEmitter {
50
+ indexer = null;
51
+ config = null;
52
+ projectPath = null;
53
+ version = null;
54
+ isIndexing = false;
55
+ lastProgress = null;
56
+ commandUsage = new Map();
57
+ backendFallback = null;
58
+ constructor() {
59
+ super();
60
+ // Set max listeners to prevent memory leak warnings and enforce bounds
61
+ this.setMaxListeners(MAX_LISTENERS);
62
+ }
63
+ /**
64
+ * Get the path to the usage file
65
+ */
66
+ getUsageFilePath() {
67
+ if (!this.projectPath)
68
+ return null;
69
+ return path.join(this.projectPath, '.glancey', 'usage.json');
70
+ }
71
+ /**
72
+ * Load command usage from disk
73
+ */
74
+ loadUsageFromDisk() {
75
+ const filePath = this.getUsageFilePath();
76
+ if (!filePath)
77
+ return;
78
+ try {
79
+ if (fs.existsSync(filePath)) {
80
+ const data = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
81
+ this.commandUsage.clear();
82
+ for (const [cmd, count] of Object.entries(data)) {
83
+ if (typeof count === 'number') {
84
+ this.commandUsage.set(cmd, count);
85
+ }
86
+ }
87
+ }
88
+ }
89
+ catch {
90
+ // Ignore errors, start with empty usage
91
+ }
92
+ }
93
+ /**
94
+ * Save command usage to disk
95
+ */
96
+ saveUsageToDisk() {
97
+ const filePath = this.getUsageFilePath();
98
+ if (!filePath)
99
+ return;
100
+ try {
101
+ const data = {};
102
+ for (const [cmd, count] of this.commandUsage) {
103
+ data[cmd] = count;
104
+ }
105
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
106
+ }
107
+ catch {
108
+ // Ignore errors
109
+ }
110
+ }
111
+ /**
112
+ * Set the indexer instance for the dashboard to use
113
+ */
114
+ setIndexer(indexer) {
115
+ this.indexer = indexer;
116
+ }
117
+ /**
118
+ * Set the configuration for the dashboard to display
119
+ */
120
+ setConfig(config) {
121
+ this.config = config;
122
+ }
123
+ /**
124
+ * Set the project path
125
+ */
126
+ setProjectPath(projectPath) {
127
+ this.projectPath = projectPath;
128
+ this.loadUsageFromDisk();
129
+ tokenTracker.setProjectPath(projectPath);
130
+ }
131
+ /**
132
+ * Set the package version
133
+ */
134
+ setVersion(version) {
135
+ this.version = version;
136
+ }
137
+ /**
138
+ * Get the package version
139
+ */
140
+ getVersion() {
141
+ return this.version;
142
+ }
143
+ /**
144
+ * Set backend fallback info when a fallback occurred during initialization
145
+ */
146
+ setBackendFallback(fallback) {
147
+ this.backendFallback = fallback;
148
+ }
149
+ /**
150
+ * Clear backend fallback info (when backend is successfully reinitialized)
151
+ */
152
+ clearBackendFallback() {
153
+ this.backendFallback = null;
154
+ }
155
+ /**
156
+ * Get backend fallback info if a fallback occurred
157
+ */
158
+ getBackendFallback() {
159
+ return this.backendFallback;
160
+ }
161
+ /**
162
+ * Get the current index status
163
+ */
164
+ async getStatus() {
165
+ if (!this.indexer) {
166
+ return null;
167
+ }
168
+ return this.indexer.getStatus();
169
+ }
170
+ /**
171
+ * Get the current configuration
172
+ */
173
+ getConfig() {
174
+ return this.config;
175
+ }
176
+ /**
177
+ * Get the project path
178
+ */
179
+ getProjectPath() {
180
+ return this.projectPath;
181
+ }
182
+ /**
183
+ * Check if indexing is in progress
184
+ */
185
+ isIndexingInProgress() {
186
+ return this.isIndexing;
187
+ }
188
+ /**
189
+ * Get the last progress update
190
+ */
191
+ getLastProgress() {
192
+ return this.lastProgress;
193
+ }
194
+ /**
195
+ * Called when indexing starts
196
+ */
197
+ onIndexingStart() {
198
+ this.isIndexing = true;
199
+ this.lastProgress = null;
200
+ this.emit('indexing:start');
201
+ }
202
+ /**
203
+ * Called with progress updates during indexing
204
+ */
205
+ onProgress(progress) {
206
+ this.lastProgress = progress;
207
+ this.emit('progress', progress);
208
+ }
209
+ /**
210
+ * Update just the message portion of the current progress.
211
+ * Useful for sub-progress updates (e.g., Ollama batch progress).
212
+ */
213
+ updateProgressMessage(message) {
214
+ if (this.lastProgress) {
215
+ this.lastProgress = { ...this.lastProgress, message };
216
+ this.emit('progress', this.lastProgress);
217
+ }
218
+ }
219
+ /**
220
+ * Update sub-progress within the current phase.
221
+ * Allows embedding backends to report their own progress with percentage.
222
+ * The current/total values represent sub-progress within the phase.
223
+ */
224
+ updateSubProgress(current, total, message) {
225
+ if (this.lastProgress) {
226
+ this.lastProgress = { ...this.lastProgress, current, total, message };
227
+ this.emit('progress', this.lastProgress);
228
+ }
229
+ }
230
+ /**
231
+ * Called when indexing completes
232
+ */
233
+ onIndexingComplete(result) {
234
+ this.isIndexing = false;
235
+ this.lastProgress = null;
236
+ this.emit('indexing:complete', result);
237
+ }
238
+ /**
239
+ * Called when status changes
240
+ */
241
+ onStatusChange(status) {
242
+ this.emit('status:change', status);
243
+ }
244
+ /**
245
+ * Trigger a reindex of the codebase.
246
+ * Returns a promise that resolves when indexing completes.
247
+ */
248
+ async triggerReindex(forceReindex = false) {
249
+ if (!this.indexer || !this.config) {
250
+ return null;
251
+ }
252
+ if (this.isIndexing) {
253
+ throw new Error('Indexing is already in progress');
254
+ }
255
+ this.onIndexingStart();
256
+ try {
257
+ const result = await this.indexer.indexCodebase(this.config.patterns, this.config.excludePatterns, forceReindex, (progress) => this.onProgress(progress));
258
+ this.onIndexingComplete(result);
259
+ return result;
260
+ }
261
+ catch (error) {
262
+ this.isIndexing = false;
263
+ this.lastProgress = null;
264
+ throw error;
265
+ }
266
+ }
267
+ /**
268
+ * Record a command usage
269
+ */
270
+ recordCommandUsage(command) {
271
+ // Reload from disk to get latest counts (in case another process updated)
272
+ this.loadUsageFromDisk();
273
+ const current = this.commandUsage.get(command) || 0;
274
+ this.commandUsage.set(command, current + 1);
275
+ this.saveUsageToDisk();
276
+ this.emit('usage:update', this.getCommandUsage());
277
+ }
278
+ /**
279
+ * Get command usage statistics
280
+ */
281
+ getCommandUsage() {
282
+ // Reload from disk to get latest counts (in case another process updated)
283
+ this.loadUsageFromDisk();
284
+ const allCommands = [
285
+ 'search_code',
286
+ 'search_similar',
287
+ 'index_codebase',
288
+ 'get_index_status',
289
+ 'clear_index',
290
+ 'get_project_instructions',
291
+ 'commit',
292
+ // Symbolic analysis
293
+ 'get_symbols_overview',
294
+ 'find_symbol',
295
+ 'find_referencing_symbols',
296
+ 'search_for_pattern',
297
+ 'replace_symbol_body',
298
+ 'insert_before_symbol',
299
+ 'insert_after_symbol',
300
+ 'rename_symbol',
301
+ // Memory
302
+ 'write_memory',
303
+ 'read_memory',
304
+ 'list_memories',
305
+ 'delete_memory',
306
+ 'edit_memory',
307
+ // Worktree
308
+ 'create_worktree',
309
+ 'list_worktrees',
310
+ 'remove_worktree',
311
+ 'worktree_status',
312
+ // Clustering
313
+ 'list_concepts',
314
+ 'search_by_concept',
315
+ 'summarize_codebase',
316
+ // Dashboard
317
+ 'open_dashboard',
318
+ ];
319
+ return allCommands.map((command) => ({
320
+ command,
321
+ count: this.commandUsage.get(command) || 0,
322
+ label: COMMAND_LABELS[command],
323
+ }));
324
+ }
325
+ /**
326
+ * Get total command count for percentage calculations
327
+ */
328
+ getTotalCommandCount() {
329
+ let total = 0;
330
+ for (const count of this.commandUsage.values()) {
331
+ total += count;
332
+ }
333
+ return total;
334
+ }
335
+ /**
336
+ * Get token savings statistics
337
+ */
338
+ getTokenSavings() {
339
+ return tokenTracker.getStats();
340
+ }
341
+ /**
342
+ * Get the token tracker for recording savings
343
+ */
344
+ getTokenTracker() {
345
+ return tokenTracker;
346
+ }
347
+ /**
348
+ * Emit token savings update event for real-time dashboard updates
349
+ */
350
+ emitTokenSavingsUpdate() {
351
+ this.emit('tokenSavings:update', tokenTracker.getStats());
352
+ }
353
+ }
354
+ /**
355
+ * Singleton instance of the dashboard state manager
356
+ */
357
+ export const dashboardState = new DashboardStateManager();
358
+ // Wire up token savings updates to emit SSE events
359
+ tokenTracker.setOnUpdate(() => {
360
+ dashboardState.emitTokenSavingsUpdate();
361
+ });
362
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/dashboard/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAI7B,OAAO,EAAE,YAAY,EAA0B,MAAM,qBAAqB,CAAC;AA4D3E;;;GAGG;AACH;;GAEG;AACH,MAAM,cAAc,GAAgC;IAClD,cAAc,EAAE,gBAAgB;IAChC,WAAW,EAAE,aAAa;IAC1B,cAAc,EAAE,gBAAgB;IAChC,gBAAgB,EAAE,YAAY;IAC9B,WAAW,EAAE,aAAa;IAC1B,wBAAwB,EAAE,kBAAkB;IAC5C,MAAM,EAAE,QAAQ;IAChB,0BAA0B;IAC1B,oBAAoB,EAAE,kBAAkB;IACxC,WAAW,EAAE,aAAa;IAC1B,wBAAwB,EAAE,iBAAiB;IAC3C,kBAAkB,EAAE,gBAAgB;IACpC,mBAAmB,EAAE,gBAAgB;IACrC,oBAAoB,EAAE,eAAe;IACrC,mBAAmB,EAAE,cAAc;IACnC,aAAa,EAAE,eAAe;IAC9B,eAAe;IACf,YAAY,EAAE,cAAc;IAC5B,WAAW,EAAE,aAAa;IAC1B,aAAa,EAAE,eAAe;IAC9B,aAAa,EAAE,eAAe;IAC9B,WAAW,EAAE,aAAa;IAC1B,iBAAiB;IACjB,eAAe,EAAE,iBAAiB;IAClC,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;IAClC,mBAAmB;IACnB,aAAa,EAAE,eAAe;IAC9B,iBAAiB,EAAE,mBAAmB;IACtC,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB;IAClB,cAAc,EAAE,gBAAgB;CACjC,CAAC;AAEF,gEAAgE;AAChE,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,MAAM,OAAO,qBAAsB,SAAQ,YAAY;IAC7C,OAAO,GAAuB,IAAI,CAAC;IACnC,MAAM,GAAyB,IAAI,CAAC;IACpC,WAAW,GAAkB,IAAI,CAAC;IAClC,OAAO,GAAkB,IAAI,CAAC;IAC9B,UAAU,GAAG,KAAK,CAAC;IACnB,YAAY,GAAyB,IAAI,CAAC;IAC1C,YAAY,GAA6B,IAAI,GAAG,EAAE,CAAC;IACnD,eAAe,GAA+B,IAAI,CAAC;IAE3D;QACE,KAAK,EAAE,CAAC;QACR,uEAAuE;QACvE,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC5D,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;gBAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;wBAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAkB,EAAE,KAAK,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;IACH,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,IAAI,CAAC;YACH,MAAM,IAAI,GAA2B,EAAE,CAAC;YACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC7C,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACpB,CAAC;YACD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAAoB;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAqB;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,WAAmB;QAChC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAAe;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,QAA6B;QAC9C,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,eAAe;QACb,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,QAAuB;QAChC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,qBAAqB,CAAC,OAAe;QACnC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,OAAe,EAAE,KAAa,EAAE,OAAe;QAC/D,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YACtE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,MAAuD;QACxE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,MAAmB;QAChC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAClB,eAAwB,KAAK;QAE7B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,EACpB,IAAI,CAAC,MAAM,CAAC,eAAe,EAC3B,YAAY,EACZ,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CACxC,CAAC;YACF,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,OAAoB;QACrC,0EAA0E;QAC1E,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,eAAe;QACb,0EAA0E;QAC1E,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,WAAW,GAAkB;YACjC,aAAa;YACb,gBAAgB;YAChB,gBAAgB;YAChB,kBAAkB;YAClB,aAAa;YACb,0BAA0B;YAC1B,QAAQ;YACR,oBAAoB;YACpB,sBAAsB;YACtB,aAAa;YACb,0BAA0B;YAC1B,oBAAoB;YACpB,qBAAqB;YACrB,sBAAsB;YACtB,qBAAqB;YACrB,eAAe;YACf,SAAS;YACT,cAAc;YACd,aAAa;YACb,eAAe;YACf,eAAe;YACf,aAAa;YACb,WAAW;YACX,iBAAiB;YACjB,gBAAgB;YAChB,iBAAiB;YACjB,iBAAiB;YACjB,aAAa;YACb,eAAe;YACf,mBAAmB;YACnB,oBAAoB;YACpB,YAAY;YACZ,gBAAgB;SACjB,CAAC;QAEF,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACnC,OAAO;YACP,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;YAC1C,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC;SAC/B,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,KAAK,IAAI,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,YAAY,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,sBAAsB;QACpB,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,qBAAqB,EAAE,CAAC;AAE1D,mDAAmD;AACnD,YAAY,CAAC,WAAW,CAAC,GAAG,EAAE;IAC5B,cAAc,CAAC,sBAAsB,EAAE,CAAC;AAC1C,CAAC,CAAC,CAAC"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Token tracking module for estimating tokens saved by lance-context operations.
3
+ *
4
+ * Token estimation is based on the common approximation that 1 token ≈ 4 characters.
5
+ * This provides a rough estimate for understanding the efficiency gains from using
6
+ * semantic search vs. reading entire files.
7
+ */
8
+ /**
9
+ * Token savings event types
10
+ */
11
+ export type TokenSavingsEventType = 'search_code' | 'search_similar' | 'get_symbols_overview' | 'find_symbol' | 'summarize_codebase' | 'list_concepts' | 'search_by_concept';
12
+ /**
13
+ * Record of a single token savings event
14
+ */
15
+ export interface TokenSavingsEvent {
16
+ type: TokenSavingsEventType;
17
+ timestamp: number;
18
+ /** Characters returned to the agent */
19
+ charsReturned: number;
20
+ /** Estimated characters that would have been read without lance-context */
21
+ charsAvoided: number;
22
+ /** Number of files that would have been read */
23
+ filesAvoided: number;
24
+ /** Additional context about the operation */
25
+ context?: string;
26
+ }
27
+ /**
28
+ * Aggregated token savings statistics
29
+ */
30
+ export interface TokenSavingsStats {
31
+ /** Total estimated tokens saved */
32
+ tokensSaved: number;
33
+ /** Total characters returned */
34
+ charsReturned: number;
35
+ /** Total characters avoided (not sent to agent) */
36
+ charsAvoided: number;
37
+ /** Total files avoided reading */
38
+ filesAvoided: number;
39
+ /** Number of operations tracked */
40
+ operationCount: number;
41
+ /** Savings breakdown by operation type */
42
+ byType: Record<TokenSavingsEventType, {
43
+ count: number;
44
+ tokensSaved: number;
45
+ charsReturned: number;
46
+ charsAvoided: number;
47
+ }>;
48
+ /** Efficiency percentage (chars avoided / total chars) */
49
+ efficiencyPercent: number;
50
+ /** Session start time */
51
+ sessionStart: number;
52
+ }
53
+ /**
54
+ * Token savings tracker for a session
55
+ */
56
+ export declare class TokenSavingsTracker {
57
+ private events;
58
+ private sessionStart;
59
+ private onUpdate;
60
+ private projectPath;
61
+ private saveTimer;
62
+ private pendingSave;
63
+ /**
64
+ * Set the project path and load persisted data
65
+ */
66
+ setProjectPath(projectPath: string): void;
67
+ /**
68
+ * Get the path to the token savings file
69
+ */
70
+ private getFilePath;
71
+ /**
72
+ * Load token savings from disk with validation
73
+ */
74
+ private loadFromDisk;
75
+ /**
76
+ * Save token savings to disk (debounced to avoid blocking on every event)
77
+ */
78
+ private saveToDisk;
79
+ /**
80
+ * Set callback to be called when token savings are updated
81
+ */
82
+ setOnUpdate(callback: () => void): void;
83
+ /**
84
+ * Notify that token savings have been updated
85
+ */
86
+ private notifyUpdate;
87
+ /**
88
+ * Record a search_code operation
89
+ * @param charsReturned Characters in the search results
90
+ * @param matchedFiles Number of files that matched
91
+ * @param totalFilesSearched Total files in the index
92
+ */
93
+ recordSearchCode(charsReturned: number, matchedFiles: number, totalFilesSearched: number): void;
94
+ /**
95
+ * Record a search_similar operation
96
+ * @param charsReturned Characters in the similar code results
97
+ * @param matchedChunks Number of similar chunks found
98
+ */
99
+ recordSearchSimilar(charsReturned: number, matchedChunks: number): void;
100
+ /**
101
+ * Record a get_symbols_overview operation
102
+ * @param charsReturned Characters in the symbols overview
103
+ * @param fileLines Total lines in the file
104
+ */
105
+ recordSymbolsOverview(charsReturned: number, fileLines: number): void;
106
+ /**
107
+ * Record a find_symbol operation
108
+ * @param charsReturned Characters in the symbol results
109
+ * @param filesSearched Number of files searched
110
+ */
111
+ recordFindSymbol(charsReturned: number, filesSearched: number): void;
112
+ /**
113
+ * Record a summarize_codebase operation
114
+ * @param charsReturned Characters in the summary
115
+ * @param totalFiles Total files in codebase
116
+ */
117
+ recordSummarizeCodebase(charsReturned: number, totalFiles: number): void;
118
+ /**
119
+ * Record a list_concepts operation
120
+ * @param charsReturned Characters in the concepts list
121
+ * @param clusterCount Number of concept clusters
122
+ */
123
+ recordListConcepts(charsReturned: number, clusterCount: number): void;
124
+ /**
125
+ * Record a search_by_concept operation
126
+ * @param charsReturned Characters in the concept search results
127
+ * @param matchedChunks Number of chunks in the concept
128
+ */
129
+ recordSearchByConcept(charsReturned: number, matchedChunks: number): void;
130
+ /**
131
+ * Get aggregated statistics
132
+ */
133
+ getStats(): TokenSavingsStats;
134
+ /**
135
+ * Get recent events (for debugging/display)
136
+ */
137
+ getRecentEvents(limit?: number): TokenSavingsEvent[];
138
+ }
139
+ /**
140
+ * Global token savings tracker instance
141
+ */
142
+ export declare const tokenTracker: TokenSavingsTracker;
143
+ //# sourceMappingURL=token-tracking.d.ts.map