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 @@
1
+ {"version":3,"file":"token-tracking.d.ts","sourceRoot":"","sources":["../../src/dashboard/token-tracking.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,363 @@
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
+ import * as fs from 'fs';
9
+ import * as path from 'path';
10
+ /**
11
+ * Approximate characters per token (industry standard estimate)
12
+ */
13
+ const CHARS_PER_TOKEN = 4;
14
+ /**
15
+ * Average characters per line of code
16
+ */
17
+ const AVG_CHARS_PER_LINE = 60;
18
+ /**
19
+ * Maximum number of events to keep in history (prevents unbounded growth)
20
+ */
21
+ const MAX_EVENTS = 1000;
22
+ /**
23
+ * Debounce delay for disk writes in milliseconds
24
+ */
25
+ const SAVE_DEBOUNCE_MS = 1000;
26
+ /**
27
+ * Estimated lines an agent would read via grep for different operations.
28
+ * These are conservative estimates based on typical grep + read patterns:
29
+ * - grep returns ~5-10 lines of context per match
30
+ * - agent might read 2-3 additional snippets of ~20-30 lines
31
+ */
32
+ const GREP_ESTIMATE = {
33
+ /** search_code: grep + read a few snippets to understand context */
34
+ SEARCH_CODE_LINES: 100,
35
+ /** search_similar: would need to read multiple files to find patterns */
36
+ SEARCH_SIMILAR_LINES: 150,
37
+ /** find_symbol: grep for symbol name, read definition + usages */
38
+ FIND_SYMBOL_LINES: 80,
39
+ /** summarize_codebase: would read file headers, READMEs, key files */
40
+ SUMMARIZE_LINES: 300,
41
+ /** list_concepts: would explore directory structure, read samples */
42
+ LIST_CONCEPTS_LINES: 200,
43
+ /** search_by_concept: grep by keywords, read matching sections */
44
+ SEARCH_BY_CONCEPT_LINES: 120,
45
+ };
46
+ /**
47
+ * Valid event types for validation
48
+ */
49
+ const VALID_EVENT_TYPES = new Set([
50
+ 'search_code',
51
+ 'search_similar',
52
+ 'get_symbols_overview',
53
+ 'find_symbol',
54
+ 'summarize_codebase',
55
+ 'list_concepts',
56
+ 'search_by_concept',
57
+ ]);
58
+ /**
59
+ * Validate that an object is a valid TokenSavingsEvent
60
+ */
61
+ function isValidEvent(event) {
62
+ if (typeof event !== 'object' || event === null)
63
+ return false;
64
+ const e = event;
65
+ return (typeof e.type === 'string' &&
66
+ VALID_EVENT_TYPES.has(e.type) &&
67
+ typeof e.timestamp === 'number' &&
68
+ typeof e.charsReturned === 'number' &&
69
+ typeof e.charsAvoided === 'number' &&
70
+ typeof e.filesAvoided === 'number');
71
+ }
72
+ /**
73
+ * Token savings tracker for a session
74
+ */
75
+ export class TokenSavingsTracker {
76
+ events = [];
77
+ sessionStart = Date.now();
78
+ onUpdate = null;
79
+ projectPath = null;
80
+ saveTimer = null;
81
+ pendingSave = false;
82
+ /**
83
+ * Set the project path and load persisted data
84
+ */
85
+ setProjectPath(projectPath) {
86
+ this.projectPath = projectPath;
87
+ this.loadFromDisk();
88
+ }
89
+ /**
90
+ * Get the path to the token savings file
91
+ */
92
+ getFilePath() {
93
+ if (!this.projectPath)
94
+ return null;
95
+ return path.join(this.projectPath, '.glancey', 'token-savings.json');
96
+ }
97
+ /**
98
+ * Load token savings from disk with validation
99
+ */
100
+ loadFromDisk() {
101
+ const filePath = this.getFilePath();
102
+ if (!filePath)
103
+ return;
104
+ try {
105
+ if (fs.existsSync(filePath)) {
106
+ const data = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
107
+ if (Array.isArray(data.events)) {
108
+ // Validate each event and only keep valid ones
109
+ this.events = data.events.filter(isValidEvent);
110
+ // Apply event limit on load
111
+ if (this.events.length > MAX_EVENTS) {
112
+ this.events = this.events.slice(-MAX_EVENTS);
113
+ }
114
+ }
115
+ if (typeof data.sessionStart === 'number') {
116
+ this.sessionStart = data.sessionStart;
117
+ }
118
+ }
119
+ }
120
+ catch {
121
+ // Ignore errors loading from disk
122
+ }
123
+ }
124
+ /**
125
+ * Save token savings to disk (debounced to avoid blocking on every event)
126
+ */
127
+ saveToDisk() {
128
+ const filePath = this.getFilePath();
129
+ if (!filePath)
130
+ return;
131
+ // Mark that we have pending changes
132
+ this.pendingSave = true;
133
+ // If a save is already scheduled, let it handle the write
134
+ if (this.saveTimer)
135
+ return;
136
+ // Schedule a debounced write
137
+ this.saveTimer = setTimeout(() => {
138
+ this.saveTimer = null;
139
+ if (!this.pendingSave)
140
+ return;
141
+ this.pendingSave = false;
142
+ try {
143
+ const dir = path.dirname(filePath);
144
+ if (!fs.existsSync(dir)) {
145
+ fs.mkdirSync(dir, { recursive: true });
146
+ }
147
+ fs.writeFileSync(filePath, JSON.stringify({ events: this.events, sessionStart: this.sessionStart }, null, 2));
148
+ }
149
+ catch {
150
+ // Ignore errors saving to disk
151
+ }
152
+ }, SAVE_DEBOUNCE_MS);
153
+ }
154
+ /**
155
+ * Set callback to be called when token savings are updated
156
+ */
157
+ setOnUpdate(callback) {
158
+ this.onUpdate = callback;
159
+ }
160
+ /**
161
+ * Notify that token savings have been updated
162
+ */
163
+ notifyUpdate() {
164
+ // Rotate events if we exceed the limit
165
+ if (this.events.length > MAX_EVENTS) {
166
+ this.events = this.events.slice(-MAX_EVENTS);
167
+ }
168
+ this.saveToDisk();
169
+ if (this.onUpdate) {
170
+ this.onUpdate();
171
+ }
172
+ }
173
+ /**
174
+ * Record a search_code operation
175
+ * @param charsReturned Characters in the search results
176
+ * @param matchedFiles Number of files that matched
177
+ * @param totalFilesSearched Total files in the index
178
+ */
179
+ recordSearchCode(charsReturned, matchedFiles, totalFilesSearched) {
180
+ // Estimate: agent would grep and read ~100 lines of context to find what semantic search found
181
+ const charsAvoided = Math.max(0, GREP_ESTIMATE.SEARCH_CODE_LINES * AVG_CHARS_PER_LINE - charsReturned);
182
+ // Estimate: agent would grep through ~5-10 files to find what semantic search found directly
183
+ const filesAvoided = Math.max(0, Math.min(10, totalFilesSearched) - matchedFiles);
184
+ this.events.push({
185
+ type: 'search_code',
186
+ timestamp: Date.now(),
187
+ charsReturned,
188
+ charsAvoided,
189
+ filesAvoided,
190
+ context: `Searched ${totalFilesSearched} files, returned ${matchedFiles} matches`,
191
+ });
192
+ this.notifyUpdate();
193
+ }
194
+ /**
195
+ * Record a search_similar operation
196
+ * @param charsReturned Characters in the similar code results
197
+ * @param matchedChunks Number of similar chunks found
198
+ */
199
+ recordSearchSimilar(charsReturned, matchedChunks) {
200
+ // Estimate: agent would grep patterns and read ~150 lines across files
201
+ const charsAvoided = Math.max(0, GREP_ESTIMATE.SEARCH_SIMILAR_LINES * AVG_CHARS_PER_LINE - charsReturned);
202
+ // Estimate: agent would read at least 3 files to find similar patterns
203
+ const filesAvoided = Math.max(3, matchedChunks);
204
+ this.events.push({
205
+ type: 'search_similar',
206
+ timestamp: Date.now(),
207
+ charsReturned,
208
+ charsAvoided,
209
+ filesAvoided,
210
+ context: `Found ${matchedChunks} similar code chunks`,
211
+ });
212
+ this.notifyUpdate();
213
+ }
214
+ /**
215
+ * Record a get_symbols_overview operation
216
+ * @param charsReturned Characters in the symbols overview
217
+ * @param fileLines Total lines in the file
218
+ */
219
+ recordSymbolsOverview(charsReturned, fileLines) {
220
+ // Without symbols overview, agent would read larger portions of the file
221
+ const charsAvoided = Math.max(0, fileLines * AVG_CHARS_PER_LINE - charsReturned);
222
+ this.events.push({
223
+ type: 'get_symbols_overview',
224
+ timestamp: Date.now(),
225
+ charsReturned,
226
+ charsAvoided,
227
+ filesAvoided: 0,
228
+ context: `File has ${fileLines} lines`,
229
+ });
230
+ this.notifyUpdate();
231
+ }
232
+ /**
233
+ * Record a find_symbol operation
234
+ * @param charsReturned Characters in the symbol results
235
+ * @param filesSearched Number of files searched
236
+ */
237
+ recordFindSymbol(charsReturned, filesSearched) {
238
+ // Estimate: agent would grep for symbol and read ~80 lines of context
239
+ const charsAvoided = Math.max(0, GREP_ESTIMATE.FIND_SYMBOL_LINES * AVG_CHARS_PER_LINE - charsReturned);
240
+ // Estimate: agent would grep through multiple files to find symbol definition
241
+ const filesAvoided = Math.max(0, Math.min(filesSearched, 5) - 1);
242
+ this.events.push({
243
+ type: 'find_symbol',
244
+ timestamp: Date.now(),
245
+ charsReturned,
246
+ charsAvoided,
247
+ filesAvoided,
248
+ context: `Searched ${filesSearched} files`,
249
+ });
250
+ this.notifyUpdate();
251
+ }
252
+ /**
253
+ * Record a summarize_codebase operation
254
+ * @param charsReturned Characters in the summary
255
+ * @param totalFiles Total files in codebase
256
+ */
257
+ recordSummarizeCodebase(charsReturned, totalFiles) {
258
+ // Estimate: agent would read READMEs, directory listings, ~300 lines total
259
+ const charsAvoided = Math.max(0, GREP_ESTIMATE.SUMMARIZE_LINES * AVG_CHARS_PER_LINE - charsReturned);
260
+ // Estimate: agent would explore ~20 files to understand codebase structure
261
+ const filesAvoided = Math.min(totalFiles, 20);
262
+ this.events.push({
263
+ type: 'summarize_codebase',
264
+ timestamp: Date.now(),
265
+ charsReturned,
266
+ charsAvoided,
267
+ filesAvoided,
268
+ context: `Summarized ${totalFiles} files`,
269
+ });
270
+ this.notifyUpdate();
271
+ }
272
+ /**
273
+ * Record a list_concepts operation
274
+ * @param charsReturned Characters in the concepts list
275
+ * @param clusterCount Number of concept clusters
276
+ */
277
+ recordListConcepts(charsReturned, clusterCount) {
278
+ // Estimate: agent would explore directory structure, read ~200 lines
279
+ const charsAvoided = Math.max(0, GREP_ESTIMATE.LIST_CONCEPTS_LINES * AVG_CHARS_PER_LINE - charsReturned);
280
+ // Estimate: agent would explore ~3 files per concept cluster to understand organization
281
+ const filesAvoided = Math.min(clusterCount * 3, 15);
282
+ this.events.push({
283
+ type: 'list_concepts',
284
+ timestamp: Date.now(),
285
+ charsReturned,
286
+ charsAvoided,
287
+ filesAvoided,
288
+ context: `Found ${clusterCount} concept clusters`,
289
+ });
290
+ this.notifyUpdate();
291
+ }
292
+ /**
293
+ * Record a search_by_concept operation
294
+ * @param charsReturned Characters in the concept search results
295
+ * @param matchedChunks Number of chunks in the concept
296
+ */
297
+ recordSearchByConcept(charsReturned, matchedChunks) {
298
+ // Estimate: agent would grep by keywords and read ~120 lines
299
+ const charsAvoided = Math.max(0, GREP_ESTIMATE.SEARCH_BY_CONCEPT_LINES * AVG_CHARS_PER_LINE - charsReturned);
300
+ // Estimate: agent would grep and read ~half the matched chunks worth of files
301
+ const filesAvoided = Math.max(2, Math.floor(matchedChunks / 2));
302
+ this.events.push({
303
+ type: 'search_by_concept',
304
+ timestamp: Date.now(),
305
+ charsReturned,
306
+ charsAvoided,
307
+ filesAvoided,
308
+ context: `Explored concept with ${matchedChunks} chunks`,
309
+ });
310
+ this.notifyUpdate();
311
+ }
312
+ /**
313
+ * Get aggregated statistics
314
+ */
315
+ getStats() {
316
+ const byType = {
317
+ search_code: { count: 0, tokensSaved: 0, charsReturned: 0, charsAvoided: 0 },
318
+ search_similar: { count: 0, tokensSaved: 0, charsReturned: 0, charsAvoided: 0 },
319
+ get_symbols_overview: { count: 0, tokensSaved: 0, charsReturned: 0, charsAvoided: 0 },
320
+ find_symbol: { count: 0, tokensSaved: 0, charsReturned: 0, charsAvoided: 0 },
321
+ summarize_codebase: { count: 0, tokensSaved: 0, charsReturned: 0, charsAvoided: 0 },
322
+ list_concepts: { count: 0, tokensSaved: 0, charsReturned: 0, charsAvoided: 0 },
323
+ search_by_concept: { count: 0, tokensSaved: 0, charsReturned: 0, charsAvoided: 0 },
324
+ };
325
+ let totalCharsReturned = 0;
326
+ let totalCharsAvoided = 0;
327
+ let totalFilesAvoided = 0;
328
+ for (const event of this.events) {
329
+ totalCharsReturned += event.charsReturned;
330
+ totalCharsAvoided += event.charsAvoided;
331
+ totalFilesAvoided += event.filesAvoided;
332
+ const typeStats = byType[event.type];
333
+ typeStats.count++;
334
+ typeStats.charsReturned += event.charsReturned;
335
+ typeStats.charsAvoided += event.charsAvoided;
336
+ typeStats.tokensSaved += Math.floor(event.charsAvoided / CHARS_PER_TOKEN);
337
+ }
338
+ const totalTokensSaved = Math.floor(totalCharsAvoided / CHARS_PER_TOKEN);
339
+ const totalChars = totalCharsReturned + totalCharsAvoided;
340
+ const efficiencyPercent = totalChars > 0 ? Math.round((totalCharsAvoided / totalChars) * 100) : 0;
341
+ return {
342
+ tokensSaved: totalTokensSaved,
343
+ charsReturned: totalCharsReturned,
344
+ charsAvoided: totalCharsAvoided,
345
+ filesAvoided: totalFilesAvoided,
346
+ operationCount: this.events.length,
347
+ byType,
348
+ efficiencyPercent,
349
+ sessionStart: this.sessionStart,
350
+ };
351
+ }
352
+ /**
353
+ * Get recent events (for debugging/display)
354
+ */
355
+ getRecentEvents(limit = 10) {
356
+ return this.events.slice(-limit);
357
+ }
358
+ }
359
+ /**
360
+ * Global token savings tracker instance
361
+ */
362
+ export const tokenTracker = new TokenSavingsTracker();
363
+ //# sourceMappingURL=token-tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-tracking.js","sourceRoot":"","sources":["../../src/dashboard/token-tracking.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":"AAUA;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAwoFzC"}