@code-insights/cli 2.1.0 → 3.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 (270) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +146 -156
  3. package/dashboard-dist/assets/index-BMhL7wL8.css +1 -0
  4. package/dashboard-dist/assets/index-CuCBzQyQ.js +548 -0
  5. package/dashboard-dist/dist/assets/index-BMhL7wL8.css +1 -0
  6. package/dashboard-dist/dist/assets/index-CuCBzQyQ.js +548 -0
  7. package/dashboard-dist/dist/favicon.svg +4 -0
  8. package/dashboard-dist/dist/index.html +33 -0
  9. package/dashboard-dist/favicon.svg +4 -0
  10. package/dashboard-dist/index.html +33 -0
  11. package/dist/commands/config.d.ts.map +1 -1
  12. package/dist/commands/config.js +188 -69
  13. package/dist/commands/config.js.map +1 -1
  14. package/dist/commands/dashboard.d.ts +16 -0
  15. package/dist/commands/dashboard.d.ts.map +1 -0
  16. package/dist/commands/dashboard.js +82 -0
  17. package/dist/commands/dashboard.js.map +1 -0
  18. package/dist/commands/init.d.ts +3 -4
  19. package/dist/commands/init.d.ts.map +1 -1
  20. package/dist/commands/init.js +24 -201
  21. package/dist/commands/init.js.map +1 -1
  22. package/dist/commands/install-hook.d.ts.map +1 -1
  23. package/dist/commands/install-hook.js +4 -21
  24. package/dist/commands/install-hook.js.map +1 -1
  25. package/dist/commands/open.d.ts +2 -1
  26. package/dist/commands/open.d.ts.map +1 -1
  27. package/dist/commands/open.js +10 -21
  28. package/dist/commands/open.js.map +1 -1
  29. package/dist/commands/reset.d.ts.map +1 -1
  30. package/dist/commands/reset.js +38 -69
  31. package/dist/commands/reset.js.map +1 -1
  32. package/dist/commands/stats/actions/error-handler.d.ts.map +1 -1
  33. package/dist/commands/stats/actions/error-handler.js +1 -11
  34. package/dist/commands/stats/actions/error-handler.js.map +1 -1
  35. package/dist/commands/stats/data/local.d.ts +0 -2
  36. package/dist/commands/stats/data/local.d.ts.map +1 -1
  37. package/dist/commands/stats/data/local.js +44 -44
  38. package/dist/commands/stats/data/local.js.map +1 -1
  39. package/dist/commands/stats/data/source.d.ts +3 -9
  40. package/dist/commands/stats/data/source.d.ts.map +1 -1
  41. package/dist/commands/stats/data/source.js +3 -35
  42. package/dist/commands/stats/data/source.js.map +1 -1
  43. package/dist/commands/stats/data/types.d.ts +1 -12
  44. package/dist/commands/stats/data/types.d.ts.map +1 -1
  45. package/dist/commands/stats/data/types.js +0 -16
  46. package/dist/commands/stats/data/types.js.map +1 -1
  47. package/dist/commands/stats/shared.d.ts.map +1 -1
  48. package/dist/commands/stats/shared.js +1 -5
  49. package/dist/commands/stats/shared.js.map +1 -1
  50. package/dist/commands/status.d.ts.map +1 -1
  51. package/dist/commands/status.js +53 -92
  52. package/dist/commands/status.js.map +1 -1
  53. package/dist/commands/sync.d.ts +5 -5
  54. package/dist/commands/sync.d.ts.map +1 -1
  55. package/dist/commands/sync.js +31 -39
  56. package/dist/commands/sync.js.map +1 -1
  57. package/dist/commands/telemetry.d.ts.map +1 -1
  58. package/dist/commands/telemetry.js +0 -1
  59. package/dist/commands/telemetry.js.map +1 -1
  60. package/dist/constants/llm-providers.d.ts +5 -0
  61. package/dist/constants/llm-providers.d.ts.map +1 -0
  62. package/dist/constants/llm-providers.js +56 -0
  63. package/dist/constants/llm-providers.js.map +1 -0
  64. package/dist/db/client.d.ts +17 -0
  65. package/dist/db/client.d.ts.map +1 -0
  66. package/dist/db/client.js +53 -0
  67. package/dist/db/client.js.map +1 -0
  68. package/dist/db/migrate.d.ts +9 -0
  69. package/dist/db/migrate.d.ts.map +1 -0
  70. package/dist/db/migrate.js +31 -0
  71. package/dist/db/migrate.js.map +1 -0
  72. package/dist/db/read.d.ts +42 -0
  73. package/dist/db/read.d.ts.map +1 -0
  74. package/dist/db/read.js +194 -0
  75. package/dist/db/read.js.map +1 -0
  76. package/dist/db/schema.d.ts +3 -0
  77. package/dist/db/schema.d.ts.map +1 -0
  78. package/dist/db/schema.js +129 -0
  79. package/dist/db/schema.js.map +1 -0
  80. package/dist/db/write.d.ts +24 -0
  81. package/dist/db/write.d.ts.map +1 -0
  82. package/dist/db/write.js +287 -0
  83. package/dist/db/write.js.map +1 -0
  84. package/dist/firebase/client.d.ts +5 -0
  85. package/dist/firebase/client.d.ts.map +1 -1
  86. package/dist/firebase/client.js +23 -0
  87. package/dist/firebase/client.js.map +1 -1
  88. package/dist/index.js +12 -12
  89. package/dist/index.js.map +1 -1
  90. package/dist/providers/context.d.ts +3 -0
  91. package/dist/providers/context.d.ts.map +1 -0
  92. package/dist/providers/context.js +13 -0
  93. package/dist/providers/context.js.map +1 -0
  94. package/dist/providers/copilot.d.ts +18 -0
  95. package/dist/providers/copilot.d.ts.map +1 -0
  96. package/dist/providers/copilot.js +289 -0
  97. package/dist/providers/copilot.js.map +1 -0
  98. package/dist/providers/cursor.d.ts.map +1 -1
  99. package/dist/providers/cursor.js +8 -3
  100. package/dist/providers/cursor.js.map +1 -1
  101. package/dist/providers/registry.d.ts.map +1 -1
  102. package/dist/providers/registry.js +3 -0
  103. package/dist/providers/registry.js.map +1 -1
  104. package/dist/types.d.ts +38 -47
  105. package/dist/types.d.ts.map +1 -1
  106. package/dist/utils/browser.d.ts +6 -0
  107. package/dist/utils/browser.d.ts.map +1 -0
  108. package/dist/utils/browser.js +23 -0
  109. package/dist/utils/browser.js.map +1 -0
  110. package/dist/utils/config.d.ts +9 -21
  111. package/dist/utils/config.d.ts.map +1 -1
  112. package/dist/utils/config.js +23 -50
  113. package/dist/utils/config.js.map +1 -1
  114. package/dist/utils/telemetry.js +2 -7
  115. package/dist/utils/telemetry.js.map +1 -1
  116. package/dist/utils/tips.js +1 -1
  117. package/dist/utils/tips.js.map +1 -1
  118. package/package.json +19 -5
  119. package/server-dist/dist/index.d.ts +12 -0
  120. package/server-dist/dist/index.d.ts.map +1 -0
  121. package/server-dist/dist/index.js +92 -0
  122. package/server-dist/dist/index.js.map +1 -0
  123. package/server-dist/dist/llm/analysis.d.ts +80 -0
  124. package/server-dist/dist/llm/analysis.d.ts.map +1 -0
  125. package/server-dist/dist/llm/analysis.js +509 -0
  126. package/server-dist/dist/llm/analysis.js.map +1 -0
  127. package/server-dist/dist/llm/client.d.ts +27 -0
  128. package/server-dist/dist/llm/client.d.ts.map +1 -0
  129. package/server-dist/dist/llm/client.js +71 -0
  130. package/server-dist/dist/llm/client.js.map +1 -0
  131. package/server-dist/dist/llm/index.d.ts +7 -0
  132. package/server-dist/dist/llm/index.d.ts.map +1 -0
  133. package/server-dist/dist/llm/index.js +5 -0
  134. package/server-dist/dist/llm/index.js.map +1 -0
  135. package/server-dist/dist/llm/prompts.d.ts +73 -0
  136. package/server-dist/dist/llm/prompts.d.ts.map +1 -0
  137. package/server-dist/dist/llm/prompts.js +242 -0
  138. package/server-dist/dist/llm/prompts.js.map +1 -0
  139. package/server-dist/dist/llm/providers/anthropic.d.ts +3 -0
  140. package/server-dist/dist/llm/providers/anthropic.d.ts.map +1 -0
  141. package/server-dist/dist/llm/providers/anthropic.js +45 -0
  142. package/server-dist/dist/llm/providers/anthropic.js.map +1 -0
  143. package/server-dist/dist/llm/providers/gemini.d.ts +3 -0
  144. package/server-dist/dist/llm/providers/gemini.d.ts.map +1 -0
  145. package/server-dist/dist/llm/providers/gemini.js +51 -0
  146. package/server-dist/dist/llm/providers/gemini.js.map +1 -0
  147. package/server-dist/dist/llm/providers/ollama.d.ts +12 -0
  148. package/server-dist/dist/llm/providers/ollama.d.ts.map +1 -0
  149. package/server-dist/dist/llm/providers/ollama.js +61 -0
  150. package/server-dist/dist/llm/providers/ollama.js.map +1 -0
  151. package/server-dist/dist/llm/providers/openai.d.ts +3 -0
  152. package/server-dist/dist/llm/providers/openai.d.ts.map +1 -0
  153. package/server-dist/dist/llm/providers/openai.js +39 -0
  154. package/server-dist/dist/llm/providers/openai.js.map +1 -0
  155. package/server-dist/dist/llm/types.d.ts +22 -0
  156. package/server-dist/dist/llm/types.d.ts.map +1 -0
  157. package/server-dist/dist/llm/types.js +5 -0
  158. package/server-dist/dist/llm/types.js.map +1 -0
  159. package/server-dist/dist/routes/analysis.d.ts +4 -0
  160. package/server-dist/dist/routes/analysis.d.ts.map +1 -0
  161. package/server-dist/dist/routes/analysis.js +103 -0
  162. package/server-dist/dist/routes/analysis.js.map +1 -0
  163. package/server-dist/dist/routes/analytics.d.ts +4 -0
  164. package/server-dist/dist/routes/analytics.d.ts.map +1 -0
  165. package/server-dist/dist/routes/analytics.js +47 -0
  166. package/server-dist/dist/routes/analytics.js.map +1 -0
  167. package/server-dist/dist/routes/config.d.ts +4 -0
  168. package/server-dist/dist/routes/config.d.ts.map +1 -0
  169. package/server-dist/dist/routes/config.js +108 -0
  170. package/server-dist/dist/routes/config.js.map +1 -0
  171. package/server-dist/dist/routes/export.d.ts +4 -0
  172. package/server-dist/dist/routes/export.d.ts.map +1 -0
  173. package/server-dist/dist/routes/export.js +52 -0
  174. package/server-dist/dist/routes/export.js.map +1 -0
  175. package/server-dist/dist/routes/insights.d.ts +4 -0
  176. package/server-dist/dist/routes/insights.d.ts.map +1 -0
  177. package/server-dist/dist/routes/insights.js +80 -0
  178. package/server-dist/dist/routes/insights.js.map +1 -0
  179. package/server-dist/dist/routes/messages.d.ts +4 -0
  180. package/server-dist/dist/routes/messages.d.ts.map +1 -0
  181. package/server-dist/dist/routes/messages.js +19 -0
  182. package/server-dist/dist/routes/messages.js.map +1 -0
  183. package/server-dist/dist/routes/projects.d.ts +4 -0
  184. package/server-dist/dist/routes/projects.d.ts.map +1 -0
  185. package/server-dist/dist/routes/projects.js +32 -0
  186. package/server-dist/dist/routes/projects.js.map +1 -0
  187. package/server-dist/dist/routes/sessions.d.ts +4 -0
  188. package/server-dist/dist/routes/sessions.d.ts.map +1 -0
  189. package/server-dist/dist/routes/sessions.js +65 -0
  190. package/server-dist/dist/routes/sessions.js.map +1 -0
  191. package/server-dist/dist/utils.d.ts +6 -0
  192. package/server-dist/dist/utils.d.ts.map +1 -0
  193. package/server-dist/dist/utils.js +9 -0
  194. package/server-dist/dist/utils.js.map +1 -0
  195. package/server-dist/index.d.ts +12 -0
  196. package/server-dist/index.d.ts.map +1 -0
  197. package/server-dist/index.js +92 -0
  198. package/server-dist/index.js.map +1 -0
  199. package/server-dist/llm/analysis.d.ts +80 -0
  200. package/server-dist/llm/analysis.d.ts.map +1 -0
  201. package/server-dist/llm/analysis.js +509 -0
  202. package/server-dist/llm/analysis.js.map +1 -0
  203. package/server-dist/llm/client.d.ts +27 -0
  204. package/server-dist/llm/client.d.ts.map +1 -0
  205. package/server-dist/llm/client.js +71 -0
  206. package/server-dist/llm/client.js.map +1 -0
  207. package/server-dist/llm/index.d.ts +7 -0
  208. package/server-dist/llm/index.d.ts.map +1 -0
  209. package/server-dist/llm/index.js +5 -0
  210. package/server-dist/llm/index.js.map +1 -0
  211. package/server-dist/llm/prompts.d.ts +73 -0
  212. package/server-dist/llm/prompts.d.ts.map +1 -0
  213. package/server-dist/llm/prompts.js +242 -0
  214. package/server-dist/llm/prompts.js.map +1 -0
  215. package/server-dist/llm/providers/anthropic.d.ts +3 -0
  216. package/server-dist/llm/providers/anthropic.d.ts.map +1 -0
  217. package/server-dist/llm/providers/anthropic.js +45 -0
  218. package/server-dist/llm/providers/anthropic.js.map +1 -0
  219. package/server-dist/llm/providers/gemini.d.ts +3 -0
  220. package/server-dist/llm/providers/gemini.d.ts.map +1 -0
  221. package/server-dist/llm/providers/gemini.js +51 -0
  222. package/server-dist/llm/providers/gemini.js.map +1 -0
  223. package/server-dist/llm/providers/ollama.d.ts +12 -0
  224. package/server-dist/llm/providers/ollama.d.ts.map +1 -0
  225. package/server-dist/llm/providers/ollama.js +61 -0
  226. package/server-dist/llm/providers/ollama.js.map +1 -0
  227. package/server-dist/llm/providers/openai.d.ts +3 -0
  228. package/server-dist/llm/providers/openai.d.ts.map +1 -0
  229. package/server-dist/llm/providers/openai.js +39 -0
  230. package/server-dist/llm/providers/openai.js.map +1 -0
  231. package/server-dist/llm/types.d.ts +22 -0
  232. package/server-dist/llm/types.d.ts.map +1 -0
  233. package/server-dist/llm/types.js +5 -0
  234. package/server-dist/llm/types.js.map +1 -0
  235. package/server-dist/routes/analysis.d.ts +4 -0
  236. package/server-dist/routes/analysis.d.ts.map +1 -0
  237. package/server-dist/routes/analysis.js +103 -0
  238. package/server-dist/routes/analysis.js.map +1 -0
  239. package/server-dist/routes/analytics.d.ts +4 -0
  240. package/server-dist/routes/analytics.d.ts.map +1 -0
  241. package/server-dist/routes/analytics.js +47 -0
  242. package/server-dist/routes/analytics.js.map +1 -0
  243. package/server-dist/routes/config.d.ts +4 -0
  244. package/server-dist/routes/config.d.ts.map +1 -0
  245. package/server-dist/routes/config.js +108 -0
  246. package/server-dist/routes/config.js.map +1 -0
  247. package/server-dist/routes/export.d.ts +4 -0
  248. package/server-dist/routes/export.d.ts.map +1 -0
  249. package/server-dist/routes/export.js +52 -0
  250. package/server-dist/routes/export.js.map +1 -0
  251. package/server-dist/routes/insights.d.ts +4 -0
  252. package/server-dist/routes/insights.d.ts.map +1 -0
  253. package/server-dist/routes/insights.js +80 -0
  254. package/server-dist/routes/insights.js.map +1 -0
  255. package/server-dist/routes/messages.d.ts +4 -0
  256. package/server-dist/routes/messages.d.ts.map +1 -0
  257. package/server-dist/routes/messages.js +19 -0
  258. package/server-dist/routes/messages.js.map +1 -0
  259. package/server-dist/routes/projects.d.ts +4 -0
  260. package/server-dist/routes/projects.d.ts.map +1 -0
  261. package/server-dist/routes/projects.js +32 -0
  262. package/server-dist/routes/projects.js.map +1 -0
  263. package/server-dist/routes/sessions.d.ts +4 -0
  264. package/server-dist/routes/sessions.d.ts.map +1 -0
  265. package/server-dist/routes/sessions.js +65 -0
  266. package/server-dist/routes/sessions.js.map +1 -0
  267. package/server-dist/utils.d.ts +6 -0
  268. package/server-dist/utils.d.ts.map +1 -0
  269. package/server-dist/utils.js +9 -0
  270. package/server-dist/utils.js.map +1 -0
@@ -1,7 +1,7 @@
1
1
  // ──────────────────────────────────────────────────────
2
2
  // Shared error handler for all stats action handlers
3
3
  // ──────────────────────────────────────────────────────
4
- import { ProjectNotFoundError, FirestoreIndexError, ConfigNotFoundError, InvalidPeriodError, } from '../data/types.js';
4
+ import { ProjectNotFoundError, InvalidPeriodError, } from '../data/types.js';
5
5
  import { colors } from '../render/colors.js';
6
6
  /**
7
7
  * Handle known stats errors with user-friendly output.
@@ -13,10 +13,6 @@ export function handleStatsError(err) {
13
13
  console.log(colors.hint('Expected: 7d, 30d, 90d, or all'));
14
14
  process.exit(1);
15
15
  }
16
- if (err instanceof ConfigNotFoundError) {
17
- console.error(`\n ${colors.error('\u2717')} ${err.message}`);
18
- process.exit(1);
19
- }
20
16
  if (err instanceof ProjectNotFoundError) {
21
17
  console.error(`\n ${colors.error(`Project "${err.projectName}" not found.`)}`);
22
18
  if (err.suggestions.length > 0) {
@@ -31,12 +27,6 @@ export function handleStatsError(err) {
31
27
  }
32
28
  process.exit(1);
33
29
  }
34
- if (err instanceof FirestoreIndexError) {
35
- console.error(`\n ${colors.error('\u2717')} Failed to load stats`);
36
- console.log(`\n ${colors.error('Error:')} Missing Firestore index for sessions query.`);
37
- console.log(` Create it here: ${err.indexUrl}`);
38
- process.exit(1);
39
- }
40
30
  throw err;
41
31
  }
42
32
  //# sourceMappingURL=error-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../../../src/commands/stats/actions/error-handler.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,qDAAqD;AACrD,yDAAyD;AAEzD,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,YAAY,mBAAmB,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,YAAY,oBAAoB,EAAE,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,WAAW,cAAc,CAAC,EAAE,CAAC,CAAC;QAChF,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACjC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,YAAY,mBAAmB,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,8CAA8C,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../../../src/commands/stats/actions/error-handler.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,qDAAqD;AACrD,yDAAyD;AAEzD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,GAAG,YAAY,oBAAoB,EAAE,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,WAAW,cAAc,CAAC,EAAE,CAAC,CAAC;QAChF,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YACjC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,GAAG,CAAC;AACZ,CAAC"}
@@ -1,8 +1,6 @@
1
1
  import type { StatsDataSource, SessionRow, SessionQueryOptions, UsageStatsDoc, ProjectResolution, PrepareResult, StatsFlags } from './types.js';
2
2
  export declare class LocalDataSource implements StatsDataSource {
3
3
  readonly name = "local";
4
- private cache;
5
- constructor();
6
4
  prepare(flags: StatsFlags): Promise<PrepareResult>;
7
5
  getSessions(opts: SessionQueryOptions): Promise<SessionRow[]>;
8
6
  getUsageStats(): Promise<UsageStatsDoc | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../../src/commands/stats/data/local.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AASpB,qBAAa,eAAgB,YAAW,eAAe;IACrD,QAAQ,CAAC,IAAI,WAAW;IACxB,OAAO,CAAC,KAAK,CAAa;;IAMpB,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAgBlD,WAAW,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAW7D,aAAa,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAK9C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA4B1D,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,YAAY,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;CAO/G"}
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../../src/commands/stats/data/local.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,UAAU,EACX,MAAM,YAAY,CAAC;AAUpB,qBAAa,eAAgB,YAAW,eAAe;IACrD,QAAQ,CAAC,IAAI,WAAW;IAElB,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IA2BlD,WAAW,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAI7D,aAAa,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IA6B9C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAqB1D,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,YAAY,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;CAG/G"}
@@ -1,60 +1,67 @@
1
1
  // ──────────────────────────────────────────────────────
2
2
  // Local data source for stats commands
3
3
  //
4
- // Reads from the disk-based stats cache (no Firestore).
5
- // Zero-config: works out of the box by discovering and
6
- // parsing local session files from all providers.
4
+ // Reads directly from the local SQLite database.
5
+ // Auto-syncs on prepare() unless --no-sync is passed.
7
6
  // ──────────────────────────────────────────────────────
8
7
  import { ProjectNotFoundError } from './types.js';
9
8
  import { findSimilarNames } from './fuzzy-match.js';
10
- import { StatsCache } from './cache.js';
9
+ import { getSessions, getSessionCount, getLastSession, getProjectList } from '../../../db/read.js';
10
+ import { getDb } from '../../../db/client.js';
11
11
  // ──────────────────────────────────────────────────────
12
12
  // LocalDataSource
13
13
  // ──────────────────────────────────────────────────────
14
14
  export class LocalDataSource {
15
15
  name = 'local';
16
- cache;
17
- constructor() {
18
- this.cache = new StatsCache();
19
- }
20
16
  async prepare(flags) {
17
+ // Initialize the DB (runs migrations if first use)
18
+ getDb();
21
19
  if (flags.noSync) {
22
- const total = this.cache.getAllRows().length;
23
- return { message: `${total} sessions cached`, dataChanged: false };
20
+ const count = getSessionCount();
21
+ return { message: `${count} sessions in database`, dataChanged: false };
22
+ }
23
+ // Auto-sync before showing stats
24
+ try {
25
+ const { runSync } = await import('../../sync.js');
26
+ const result = await runSync({ quiet: true });
27
+ if (result.syncedCount > 0) {
28
+ return {
29
+ message: `Synced ${result.syncedCount} new sessions`,
30
+ dataChanged: true,
31
+ };
32
+ }
33
+ const total = getSessionCount();
34
+ return { message: `${total} sessions`, dataChanged: false };
24
35
  }
25
- const result = await this.cache.refresh();
26
- if (result.newSessions > 0) {
27
- return {
28
- message: `Parsed ${result.newSessions} new sessions (${result.totalSessions} total)`,
29
- dataChanged: true,
30
- };
36
+ catch {
37
+ const total = getSessionCount();
38
+ return { message: `${total} sessions (sync failed)`, dataChanged: false };
31
39
  }
32
- return { message: `${result.totalSessions} sessions cached`, dataChanged: false };
33
40
  }
34
41
  async getSessions(opts) {
35
- let rows = this.cache.getAllRows();
36
- if (opts.periodStart)
37
- rows = rows.filter((r) => r.startedAt >= opts.periodStart);
38
- if (opts.projectId)
39
- rows = rows.filter((r) => r.projectId === opts.projectId);
40
- if (opts.sourceTool)
41
- rows = rows.filter((r) => r.sourceTool === opts.sourceTool);
42
- rows.sort((a, b) => b.startedAt.getTime() - a.startedAt.getTime());
43
- return rows;
42
+ return getSessions(opts);
44
43
  }
45
44
  async getUsageStats() {
46
- // Local source has no pre-computed aggregate
47
- return null;
45
+ const db = getDb();
46
+ const row = db.prepare(`
47
+ SELECT total_input_tokens, total_output_tokens, cache_creation_tokens,
48
+ cache_read_tokens, estimated_cost_usd, sessions_with_usage, last_updated_at
49
+ FROM usage_stats WHERE id = 1
50
+ `).get();
51
+ if (!row)
52
+ return null;
53
+ return {
54
+ totalInputTokens: row.total_input_tokens,
55
+ totalOutputTokens: row.total_output_tokens,
56
+ cacheCreationTokens: row.cache_creation_tokens,
57
+ cacheReadTokens: row.cache_read_tokens,
58
+ estimatedCostUsd: row.estimated_cost_usd,
59
+ sessionsWithUsage: row.sessions_with_usage,
60
+ lastUpdatedAt: new Date(row.last_updated_at),
61
+ };
48
62
  }
49
63
  async resolveProjectId(name) {
50
- const rows = this.cache.getAllRows();
51
- const projects = new Map();
52
- for (const row of rows) {
53
- if (!projects.has(row.projectId)) {
54
- projects.set(row.projectId, { id: row.projectId, name: row.projectName });
55
- }
56
- }
57
- const projectList = [...projects.values()];
64
+ const projectList = getProjectList();
58
65
  // Exact match (case-insensitive)
59
66
  const exact = projectList.find((p) => p.name.toLowerCase() === name.toLowerCase());
60
67
  if (exact)
@@ -68,14 +75,7 @@ export class LocalDataSource {
68
75
  throw new ProjectNotFoundError(`Project "${name}" not found.`, name, projectList.map((p) => ({ name: p.name })), suggestions);
69
76
  }
70
77
  async getLastSession(opts) {
71
- let rows = this.cache.getAllRows();
72
- if (opts?.sourceTool)
73
- rows = rows.filter(r => r.sourceTool === opts.sourceTool);
74
- if (opts?.projectId)
75
- rows = rows.filter(r => r.projectId === opts.projectId);
76
- if (rows.length === 0)
77
- return null;
78
- return rows.reduce((latest, row) => (row.startedAt > latest.startedAt ? row : latest));
78
+ return getLastSession(opts);
79
79
  }
80
80
  }
81
81
  //# sourceMappingURL=local.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../../src/commands/stats/data/local.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,uCAAuC;AACvC,EAAE;AACF,wDAAwD;AACxD,uDAAuD;AACvD,kDAAkD;AAClD,yDAAyD;AAWzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,yDAAyD;AACzD,kBAAkB;AAClB,yDAAyD;AAEzD,MAAM,OAAO,eAAe;IACjB,IAAI,GAAG,OAAO,CAAC;IAChB,KAAK,CAAa;IAE1B;QACE,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAiB;QAC7B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC;YAC7C,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,kBAAkB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QACrE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1C,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACL,OAAO,EAAE,UAAU,MAAM,CAAC,WAAW,kBAAkB,MAAM,CAAC,aAAa,SAAS;gBACpF,WAAW,EAAE,IAAI;aAClB,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,aAAa,kBAAkB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAyB;QACzC,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAEnC,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,WAAY,CAAC,CAAC;QAClF,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9E,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QAEjF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,6CAA6C;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAAY;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwC,CAAC;QACjE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QACD,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAE3C,iCAAiC;QACjC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACnF,IAAI,KAAK;YAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QAEnE,kBAAkB;QAClB,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC/F,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAElG,oCAAoC;QACpC,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,MAAM,IAAI,oBAAoB,CAC5B,YAAY,IAAI,cAAc,EAC9B,IAAI,EACJ,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAC1C,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAA4D;QAC/E,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACnC,IAAI,IAAI,EAAE,UAAU;YAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QAChF,IAAI,IAAI,EAAE,SAAS;YAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACzF,CAAC;CACF"}
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../../src/commands/stats/data/local.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,7 @@
1
1
  import type { StatsDataSource, StatsFlags } from './types.js';
2
2
  /**
3
- * Resolve which data source to use based on flags and config.
4
- *
5
- * Priority (highest to lowest):
6
- * 1. --local flag -> always LocalDataSource
7
- * 2. --remote flag -> always FirestoreDataSource (error if not configured)
8
- * 3. config.dataSource -> as configured ('local' or 'firebase')
9
- * 4. No config, Firebase creds present -> FirestoreDataSource (backward compat)
10
- * 5. No config at all -> LocalDataSource (zero-config first run)
3
+ * Resolve the data source for stats commands.
4
+ * Phase 2: always local SQLite — Firebase is removed.
11
5
  */
12
- export declare function resolveDataSource(flags: StatsFlags): Promise<StatsDataSource>;
6
+ export declare function resolveDataSource(_flags: StatsFlags): Promise<StatsDataSource>;
13
7
  //# sourceMappingURL=source.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../../src/commands/stats/data/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI9D;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAoCnF"}
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../../src/commands/stats/data/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE9D;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAGpF"}
@@ -1,40 +1,8 @@
1
- import { loadConfig } from '../../../utils/config.js';
2
- import { ConfigNotFoundError } from './types.js';
3
1
  /**
4
- * Resolve which data source to use based on flags and config.
5
- *
6
- * Priority (highest to lowest):
7
- * 1. --local flag -> always LocalDataSource
8
- * 2. --remote flag -> always FirestoreDataSource (error if not configured)
9
- * 3. config.dataSource -> as configured ('local' or 'firebase')
10
- * 4. No config, Firebase creds present -> FirestoreDataSource (backward compat)
11
- * 5. No config at all -> LocalDataSource (zero-config first run)
2
+ * Resolve the data source for stats commands.
3
+ * Phase 2: always local SQLite — Firebase is removed.
12
4
  */
13
- export async function resolveDataSource(flags) {
14
- if (flags.local) {
15
- const { LocalDataSource } = await import('./local.js');
16
- return new LocalDataSource();
17
- }
18
- if (flags.remote) {
19
- const config = loadConfig();
20
- if (!config?.firebase) {
21
- throw new ConfigNotFoundError('Firebase not configured. Run `code-insights init` first, or use `stats --local` for local-only stats.');
22
- }
23
- const { FirestoreDataSource } = await import('./firestore.js');
24
- return new FirestoreDataSource(config);
25
- }
26
- const config = loadConfig();
27
- if (!config) {
28
- const { LocalDataSource } = await import('./local.js');
29
- return new LocalDataSource();
30
- }
31
- // Explicit dataSource preference or backward-compat inference
32
- const useFirebase = config.dataSource === 'firebase' ||
33
- (!config.dataSource && config.firebase?.projectId);
34
- if (useFirebase && config.firebase) {
35
- const { FirestoreDataSource } = await import('./firestore.js');
36
- return new FirestoreDataSource(config);
37
- }
5
+ export async function resolveDataSource(_flags) {
38
6
  const { LocalDataSource } = await import('./local.js');
39
7
  return new LocalDataSource();
40
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"source.js","sourceRoot":"","sources":["../../../../src/commands/stats/data/source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAiB;IACvD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QACvD,OAAO,IAAI,eAAe,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,mBAAmB,CAC3B,uGAAuG,CACxG,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC/D,OAAO,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QACvD,OAAO,IAAI,eAAe,EAAE,CAAC;IAC/B,CAAC;IAED,8DAA8D;IAC9D,MAAM,WAAW,GACf,MAAM,CAAC,UAAU,KAAK,UAAU;QAChC,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAErD,IAAI,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC/D,OAAO,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IACvD,OAAO,IAAI,eAAe,EAAE,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["../../../../src/commands/stats/data/source.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAAkB;IACxD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IACvD,OAAO,IAAI,eAAe,EAAE,CAAC;AAC/B,CAAC"}
@@ -34,7 +34,7 @@ export interface SessionRow {
34
34
  customTitle?: string;
35
35
  summary?: string;
36
36
  sessionCharacter?: string;
37
- sourceTool?: string;
37
+ sourceTool: string;
38
38
  usageSource?: string;
39
39
  }
40
40
  /** Resolved project identity */
@@ -68,8 +68,6 @@ export interface StatsFlags {
68
68
  project?: string;
69
69
  source?: string;
70
70
  noSync: boolean;
71
- local: boolean;
72
- remote: boolean;
73
71
  }
74
72
  /**
75
73
  * Contract that every data source must implement.
@@ -202,10 +200,6 @@ export interface ModelStatsEntry {
202
200
  export declare class StatsError extends Error {
203
201
  constructor(message: string);
204
202
  }
205
- /** Thrown when required configuration is missing */
206
- export declare class ConfigNotFoundError extends StatsError {
207
- constructor(message: string);
208
- }
209
203
  /** Thrown when a project name cannot be resolved */
210
204
  export declare class ProjectNotFoundError extends StatsError {
211
205
  readonly projectName: string;
@@ -217,11 +211,6 @@ export declare class ProjectNotFoundError extends StatsError {
217
211
  name: string;
218
212
  }[], suggestions: string[]);
219
213
  }
220
- /** Thrown when a Firestore composite index is required but missing */
221
- export declare class FirestoreIndexError extends StatsError {
222
- readonly indexUrl: string;
223
- constructor(message: string, indexUrl: string);
224
- }
225
214
  /** Thrown when an invalid period value is provided */
226
215
  export declare class InvalidPeriodError extends StatsError {
227
216
  constructor(message: string);
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/commands/stats/data/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/commands/stats/data/types.ts"],"names":[],"mappings":"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"}
@@ -11,13 +11,6 @@ export class StatsError extends Error {
11
11
  this.name = 'StatsError';
12
12
  }
13
13
  }
14
- /** Thrown when required configuration is missing */
15
- export class ConfigNotFoundError extends StatsError {
16
- constructor(message) {
17
- super(message);
18
- this.name = 'ConfigNotFoundError';
19
- }
20
- }
21
14
  /** Thrown when a project name cannot be resolved */
22
15
  export class ProjectNotFoundError extends StatsError {
23
16
  projectName;
@@ -31,15 +24,6 @@ export class ProjectNotFoundError extends StatsError {
31
24
  this.suggestions = suggestions;
32
25
  }
33
26
  }
34
- /** Thrown when a Firestore composite index is required but missing */
35
- export class FirestoreIndexError extends StatsError {
36
- indexUrl;
37
- constructor(message, indexUrl) {
38
- super(message);
39
- this.name = 'FirestoreIndexError';
40
- this.indexUrl = indexUrl;
41
- }
42
- }
43
27
  /** Thrown when an invalid period value is provided */
44
28
  export class InvalidPeriodError extends StatsError {
45
29
  constructor(message) {
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/commands/stats/data/types.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,mCAAmC;AACnC,yDAAyD;AA0OzD,yDAAyD;AACzD,gBAAgB;AAChB,yDAAyD;AAEzD,gDAAgD;AAChD,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,oDAAoD;AACpD,MAAM,OAAO,mBAAoB,SAAQ,UAAU;IACjD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,oDAAoD;AACpD,MAAM,OAAO,oBAAqB,SAAQ,UAAU;IAClC,WAAW,CAAS;IACpB,iBAAiB,CAAqB;IACtC,WAAW,CAAW;IAEtC,YACE,OAAe,EACf,WAAmB,EACnB,iBAAqC,EACrC,WAAqB;QAErB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF;AAED,sEAAsE;AACtE,MAAM,OAAO,mBAAoB,SAAQ,UAAU;IACjC,QAAQ,CAAS;IAEjC,YAAY,OAAe,EAAE,QAAgB;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,sDAAsD;AACtD,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/commands/stats/data/types.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,mCAAmC;AACnC,yDAAyD;AAyOzD,yDAAyD;AACzD,gBAAgB;AAChB,yDAAyD;AAEzD,gDAAgD;AAChD,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,oDAAoD;AACpD,MAAM,OAAO,oBAAqB,SAAQ,UAAU;IAClC,WAAW,CAAS;IACpB,iBAAiB,CAAqB;IACtC,WAAW,CAAW;IAEtC,YACE,OAAe,EACf,WAAmB,EACnB,iBAAqC,EACrC,WAAqB;QAErB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF;AAED,sDAAsD;AACtD,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/commands/stats/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAK1D,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAQtD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAavE"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/commands/stats/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAK1D,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAMtD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAWvE"}
@@ -5,9 +5,7 @@ export function applySharedFlags(cmd) {
5
5
  .option('-p, --period <period>', 'Time range: 7d, 30d, 90d, all', '7d')
6
6
  .option('--project <name>', 'Scope to a single project')
7
7
  .option('--source <tool>', 'Filter by source tool (claude-code, cursor, etc.)')
8
- .option('--no-sync', 'Skip auto-sync before displaying stats')
9
- .option('--local', 'Use local session files (no Firebase required)')
10
- .option('--remote', 'Force Firestore data source (requires Firebase config)');
8
+ .option('--no-sync', 'Skip auto-sync before displaying stats');
11
9
  }
12
10
  export function parseFlags(options) {
13
11
  const period = options.period || '7d';
@@ -19,8 +17,6 @@ export function parseFlags(options) {
19
17
  project: options.project,
20
18
  source: options.source,
21
19
  noSync: !options.sync, // Commander's --no-sync sets sync=false
22
- local: !!options.local,
23
- remote: !!options.remote,
24
20
  };
25
21
  }
26
22
  //# sourceMappingURL=shared.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/commands/stats/shared.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAIlD,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,GAAG;SACP,MAAM,CAAC,uBAAuB,EAAE,+BAA+B,EAAE,IAAI,CAAC;SACtE,MAAM,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;SACvD,MAAM,CAAC,iBAAiB,EAAE,mDAAmD,CAAC;SAC9E,MAAM,CAAC,WAAW,EAAE,wCAAwC,CAAC;SAC7D,MAAM,CAAC,SAAS,EAAE,gDAAgD,CAAC;SACnE,MAAM,CAAC,UAAU,EAAE,wDAAwD,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAgC;IACzD,MAAM,MAAM,GAAI,OAAO,CAAC,MAAiB,IAAI,IAAI,CAAC;IAClD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,kBAAkB,CAAC,mBAAmB,MAAM,gBAAgB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,OAAO;QACL,MAAM,EAAE,MAAgB;QACxB,OAAO,EAAE,OAAO,CAAC,OAA6B;QAC9C,MAAM,EAAE,OAAO,CAAC,MAA4B;QAC5C,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,EAAG,wCAAwC;QAChE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK;QACtB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM;KACzB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/commands/stats/shared.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAIlD,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,GAAG;SACP,MAAM,CAAC,uBAAuB,EAAE,+BAA+B,EAAE,IAAI,CAAC;SACtE,MAAM,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;SACvD,MAAM,CAAC,iBAAiB,EAAE,mDAAmD,CAAC;SAC9E,MAAM,CAAC,WAAW,EAAE,wCAAwC,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAgC;IACzD,MAAM,MAAM,GAAI,OAAO,CAAC,MAAiB,IAAI,IAAI,CAAC;IAClD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,kBAAkB,CAAC,mBAAmB,MAAM,gBAAgB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,OAAO;QACL,MAAM,EAAE,MAAgB;QACxB,OAAO,EAAE,OAAO,CAAC,OAA6B;QAC9C,MAAM,EAAE,OAAO,CAAC,MAA4B;QAC5C,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,EAAG,wCAAwC;KACjE,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA6FnD"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAuEnD"}
@@ -1,40 +1,50 @@
1
1
  import chalk from 'chalk';
2
- import { loadConfig, loadSyncState, isConfigured, getConfigDir, getClaudeDir, hasWebConfig, loadWebConfig, resolveDataSourcePreference } from '../utils/config.js';
3
- import { initializeFirebase, getProjects } from '../firebase/client.js';
2
+ import { loadSyncState } from '../utils/config.js';
3
+ import { getDb, getDbPath } from '../db/client.js';
4
+ import { getProjects } from '../db/read.js';
5
+ import { getAllProviders } from '../providers/registry.js';
4
6
  import { trackEvent } from '../utils/telemetry.js';
5
- import * as fs from 'fs';
6
7
  /**
7
8
  * Show Code Insights status
8
9
  */
9
10
  export async function statusCommand() {
10
- console.log(chalk.cyan('\n📊 Code Insights Status\n'));
11
- // Check configuration
12
- console.log(chalk.white('Configuration:'));
13
- const preference = resolveDataSourcePreference();
14
- if (isConfigured()) {
15
- console.log(chalk.green(` ✓ Configured at ${getConfigDir()}`));
16
- const config = loadConfig();
17
- if (config) {
18
- console.log(chalk.gray(` Project: ${config.firebase?.projectId ?? '(local)'}`));
11
+ console.log(chalk.cyan('\n Code Insights Status\n'));
12
+ // Check database
13
+ console.log(chalk.white('Database:'));
14
+ try {
15
+ getDb(); // ensures migrations run
16
+ const dbPath = getDbPath();
17
+ console.log(chalk.green(` Connected: ${dbPath}`));
18
+ const projects = getProjects();
19
+ if (projects.length > 0) {
20
+ const totalSessions = projects.reduce((sum, p) => sum + p.session_count, 0);
21
+ console.log(chalk.gray(` ${projects.length} projects, ${totalSessions} sessions synced`));
22
+ }
23
+ else {
24
+ console.log(chalk.gray(' No sessions synced yet. Run `code-insights sync`'));
19
25
  }
20
- console.log(chalk.gray(` Data source: ${preference}`));
21
26
  }
22
- else {
23
- console.log(chalk.yellow(' Not configured (running in zero-config mode)'));
24
- console.log(chalk.gray(' Stats work without config: code-insights stats'));
25
- console.log(chalk.gray(' To configure Firebase: code-insights init'));
27
+ catch (error) {
28
+ console.log(chalk.red(` Database error: ${error instanceof Error ? error.message : 'Unknown'}`));
26
29
  }
27
- // Check Claude directory
28
- console.log(chalk.white('\nClaude Code:'));
29
- const claudeDir = getClaudeDir();
30
- if (fs.existsSync(claudeDir)) {
31
- const projectDirs = fs.readdirSync(claudeDir).filter((d) => !d.startsWith('.'));
32
- const sessionCount = countJsonlFiles(claudeDir);
33
- console.log(chalk.green(` ✓ Found at ${claudeDir}`));
34
- console.log(chalk.gray(` ${projectDirs.length} projects, ${sessionCount} sessions`));
30
+ // Discover local sessions across all providers
31
+ console.log(chalk.white('\nLocal Sessions:'));
32
+ const providers = getAllProviders();
33
+ let totalLocal = 0;
34
+ for (const provider of providers) {
35
+ try {
36
+ const files = await provider.discover();
37
+ if (files.length > 0) {
38
+ console.log(chalk.green(` ${provider.getProviderName()}: ${files.length} sessions`));
39
+ totalLocal += files.length;
40
+ }
41
+ }
42
+ catch {
43
+ // Provider not available on this machine (e.g., no Cursor installed)
44
+ }
35
45
  }
36
- else {
37
- console.log(chalk.yellow(` Not found at ${claudeDir}`));
46
+ if (totalLocal === 0) {
47
+ console.log(chalk.yellow(' No sessions found from any tool'));
38
48
  }
39
49
  // Check sync state
40
50
  console.log(chalk.white('\nSync State:'));
@@ -42,79 +52,30 @@ export async function statusCommand() {
42
52
  if (syncState.lastSync) {
43
53
  const lastSync = new Date(syncState.lastSync);
44
54
  const syncedFiles = Object.keys(syncState.files).length;
45
- console.log(chalk.green(` Last sync: ${lastSync.toLocaleString()}`));
46
- console.log(chalk.gray(` ${syncedFiles} files tracked`));
55
+ console.log(chalk.green(` Last sync: ${lastSync.toLocaleString()}`));
56
+ console.log(chalk.gray(` ${syncedFiles} files tracked`));
47
57
  }
48
58
  else {
49
- console.log(chalk.yellow(' Never synced'));
50
- console.log(chalk.gray(' Run `code-insights sync` to sync'));
59
+ console.log(chalk.yellow(' Never synced'));
60
+ console.log(chalk.gray(' Run `code-insights sync` to sync'));
51
61
  }
52
- if (preference === 'local') {
53
- // Local mode — skip Firebase connection check
54
- console.log(chalk.white('\nFirebase:'));
55
- console.log(chalk.gray(' ○ Not applicable (data source is local)'));
56
- console.log(chalk.gray(' Use `code-insights stats --local` for session analytics'));
57
- console.log(chalk.gray(' To switch: code-insights config set-source firebase'));
58
- }
59
- else {
60
- // Check Firebase connection
61
- console.log(chalk.white('\nFirebase:'));
62
- const config = loadConfig();
63
- if (config) {
64
- try {
65
- initializeFirebase(config);
66
- const projects = await getProjects();
67
- console.log(chalk.green(' ✓ Connected'));
68
- console.log(chalk.gray(` ${projects.length} projects in Firestore`));
69
- if (projects.length > 0) {
70
- console.log(chalk.white('\nSynced Projects:'));
71
- for (const project of projects.slice(0, 5)) {
72
- console.log(chalk.gray(` ${project.name} (${project.sessionCount} sessions)`));
73
- }
74
- if (projects.length > 5) {
75
- console.log(chalk.gray(` ... and ${projects.length - 5} more`));
76
- }
77
- }
62
+ // Synced projects list
63
+ try {
64
+ const projects = getProjects();
65
+ if (projects.length > 0) {
66
+ console.log(chalk.white('\nSynced Projects:'));
67
+ for (const project of projects.slice(0, 5)) {
68
+ console.log(chalk.gray(` ${project.name} (${project.session_count} sessions)`));
78
69
  }
79
- catch (error) {
80
- console.log(chalk.red(' Connection failed'));
81
- console.log(chalk.gray(` ${error instanceof Error ? error.message : 'Unknown error'}`));
70
+ if (projects.length > 5) {
71
+ console.log(chalk.gray(` ... and ${projects.length - 5} more`));
82
72
  }
83
73
  }
84
- // Check web dashboard config
85
- console.log(chalk.white('\nWeb Dashboard:'));
86
- if (hasWebConfig()) {
87
- const webConfig = loadWebConfig();
88
- console.log(chalk.green(' ✓ Configured'));
89
- if (webConfig && typeof webConfig.projectId === 'string') {
90
- console.log(chalk.gray(` Project: ${webConfig.projectId}`));
91
- }
92
- console.log(chalk.gray(' Run "code-insights connect" to get dashboard URL'));
93
- }
94
- else {
95
- console.log(chalk.yellow(' ○ Not configured'));
96
- console.log(chalk.gray(' Run "code-insights init" to configure'));
97
- }
74
+ }
75
+ catch {
76
+ // DB not ready yet
98
77
  }
99
78
  console.log('');
100
79
  trackEvent('status', true);
101
80
  }
102
- /**
103
- * Count JSONL files in Claude directory
104
- */
105
- function countJsonlFiles(baseDir) {
106
- let count = 0;
107
- const dirs = fs.readdirSync(baseDir);
108
- for (const dir of dirs) {
109
- if (dir.startsWith('.'))
110
- continue;
111
- const projectPath = `${baseDir}/${dir}`;
112
- const stat = fs.statSync(projectPath);
113
- if (!stat.isDirectory())
114
- continue;
115
- const files = fs.readdirSync(projectPath);
116
- count += files.filter((f) => f.endsWith('.jsonl')).length;
117
- }
118
- return count;
119
- }
120
81
  //# sourceMappingURL=status.js.map