@cairn-tool/cairn 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 (526) hide show
  1. package/.markdownlintrc +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1431 -0
  4. package/dist/agent/audit/baseline.d.ts +69 -0
  5. package/dist/agent/audit/baseline.js +128 -0
  6. package/dist/agent/audit/baseline.js.map +1 -0
  7. package/dist/agent/audit/index.d.ts +126 -0
  8. package/dist/agent/audit/index.js +625 -0
  9. package/dist/agent/audit/index.js.map +1 -0
  10. package/dist/agent/import/detect.d.ts +49 -0
  11. package/dist/agent/import/detect.js +159 -0
  12. package/dist/agent/import/detect.js.map +1 -0
  13. package/dist/agent/import/normalize.d.ts +72 -0
  14. package/dist/agent/import/normalize.js +475 -0
  15. package/dist/agent/import/normalize.js.map +1 -0
  16. package/dist/agent/install/index.d.ts +211 -0
  17. package/dist/agent/install/index.js +907 -0
  18. package/dist/agent/install/index.js.map +1 -0
  19. package/dist/agent/manifest.d.ts +75 -0
  20. package/dist/agent/manifest.js +210 -0
  21. package/dist/agent/manifest.js.map +1 -0
  22. package/dist/agent/marketplace/index.d.ts +69 -0
  23. package/dist/agent/marketplace/index.js +212 -0
  24. package/dist/agent/marketplace/index.js.map +1 -0
  25. package/dist/agent/marketplace/spec.d.ts +48 -0
  26. package/dist/agent/marketplace/spec.js +237 -0
  27. package/dist/agent/marketplace/spec.js.map +1 -0
  28. package/dist/agent/output.d.ts +36 -0
  29. package/dist/agent/output.js +56 -0
  30. package/dist/agent/output.js.map +1 -0
  31. package/dist/agent/overlays.d.ts +38 -0
  32. package/dist/agent/overlays.js +223 -0
  33. package/dist/agent/overlays.js.map +1 -0
  34. package/dist/agent/package/index.d.ts +105 -0
  35. package/dist/agent/package/index.js +339 -0
  36. package/dist/agent/package/index.js.map +1 -0
  37. package/dist/agent/package/tar.d.ts +36 -0
  38. package/dist/agent/package/tar.js +137 -0
  39. package/dist/agent/package/tar.js.map +1 -0
  40. package/dist/agent/parser.d.ts +13 -0
  41. package/dist/agent/parser.js +559 -0
  42. package/dist/agent/parser.js.map +1 -0
  43. package/dist/agent/render.d.ts +16 -0
  44. package/dist/agent/render.js +721 -0
  45. package/dist/agent/render.js.map +1 -0
  46. package/dist/agent/sarif.d.ts +18 -0
  47. package/dist/agent/sarif.js +56 -0
  48. package/dist/agent/sarif.js.map +1 -0
  49. package/dist/agent/scaffold.d.ts +86 -0
  50. package/dist/agent/scaffold.js +250 -0
  51. package/dist/agent/scaffold.js.map +1 -0
  52. package/dist/agent/targets/antigravity.d.ts +17 -0
  53. package/dist/agent/targets/antigravity.js +218 -0
  54. package/dist/agent/targets/antigravity.js.map +1 -0
  55. package/dist/agent/targets/claude-code.d.ts +2 -0
  56. package/dist/agent/targets/claude-code.js +220 -0
  57. package/dist/agent/targets/claude-code.js.map +1 -0
  58. package/dist/agent/targets/codex.d.ts +2 -0
  59. package/dist/agent/targets/codex.js +212 -0
  60. package/dist/agent/targets/codex.js.map +1 -0
  61. package/dist/agent/targets/cursor.d.ts +2 -0
  62. package/dist/agent/targets/cursor.js +210 -0
  63. package/dist/agent/targets/cursor.js.map +1 -0
  64. package/dist/agent/targets/index.d.ts +31 -0
  65. package/dist/agent/targets/index.js +64 -0
  66. package/dist/agent/targets/index.js.map +1 -0
  67. package/dist/agent/targets/opencode.d.ts +15 -0
  68. package/dist/agent/targets/opencode.js +215 -0
  69. package/dist/agent/targets/opencode.js.map +1 -0
  70. package/dist/agent/targets/schema.d.ts +315 -0
  71. package/dist/agent/targets/schema.js +179 -0
  72. package/dist/agent/targets/schema.js.map +1 -0
  73. package/dist/agent/test/assert.d.ts +46 -0
  74. package/dist/agent/test/assert.js +288 -0
  75. package/dist/agent/test/assert.js.map +1 -0
  76. package/dist/agent/test/index.d.ts +73 -0
  77. package/dist/agent/test/index.js +181 -0
  78. package/dist/agent/test/index.js.map +1 -0
  79. package/dist/agent/test/schema.d.ts +81 -0
  80. package/dist/agent/test/schema.js +235 -0
  81. package/dist/agent/test/schema.js.map +1 -0
  82. package/dist/agent/types.d.ts +204 -0
  83. package/dist/agent/types.js +11 -0
  84. package/dist/agent/types.js.map +1 -0
  85. package/dist/agent/upgrade.d.ts +29 -0
  86. package/dist/agent/upgrade.js +72 -0
  87. package/dist/agent/upgrade.js.map +1 -0
  88. package/dist/agent/writer.d.ts +30 -0
  89. package/dist/agent/writer.js +73 -0
  90. package/dist/agent/writer.js.map +1 -0
  91. package/dist/archive/db.d.ts +20 -0
  92. package/dist/archive/db.js +98 -0
  93. package/dist/archive/db.js.map +1 -0
  94. package/dist/archive/progress.d.ts +62 -0
  95. package/dist/archive/progress.js +151 -0
  96. package/dist/archive/progress.js.map +1 -0
  97. package/dist/archive/query.d.ts +86 -0
  98. package/dist/archive/query.js +241 -0
  99. package/dist/archive/query.js.map +1 -0
  100. package/dist/archive/run.d.ts +91 -0
  101. package/dist/archive/run.js +331 -0
  102. package/dist/archive/run.js.map +1 -0
  103. package/dist/archive/segments.d.ts +89 -0
  104. package/dist/archive/segments.js +144 -0
  105. package/dist/archive/segments.js.map +1 -0
  106. package/dist/archive/sets.d.ts +58 -0
  107. package/dist/archive/sets.js +344 -0
  108. package/dist/archive/sets.js.map +1 -0
  109. package/dist/archive/tar-read.d.ts +35 -0
  110. package/dist/archive/tar-read.js +90 -0
  111. package/dist/archive/tar-read.js.map +1 -0
  112. package/dist/audit-baseline.d.ts +66 -0
  113. package/dist/audit-baseline.js +124 -0
  114. package/dist/audit-baseline.js.map +1 -0
  115. package/dist/automation.d.ts +16 -0
  116. package/dist/automation.js +38 -0
  117. package/dist/automation.js.map +1 -0
  118. package/dist/backlinks.d.ts +15 -0
  119. package/dist/backlinks.js +30 -0
  120. package/dist/backlinks.js.map +1 -0
  121. package/dist/checkers/katex.d.ts +3 -0
  122. package/dist/checkers/katex.js +71 -0
  123. package/dist/checkers/katex.js.map +1 -0
  124. package/dist/checkers/markdown-lint.d.ts +28 -0
  125. package/dist/checkers/markdown-lint.js +53 -0
  126. package/dist/checkers/markdown-lint.js.map +1 -0
  127. package/dist/checkers/mermaid.d.ts +6 -0
  128. package/dist/checkers/mermaid.js +53 -0
  129. package/dist/checkers/mermaid.js.map +1 -0
  130. package/dist/checkers/references.d.ts +3 -0
  131. package/dist/checkers/references.js +55 -0
  132. package/dist/checkers/references.js.map +1 -0
  133. package/dist/cli.d.ts +2 -0
  134. package/dist/cli.js +1117 -0
  135. package/dist/cli.js.map +1 -0
  136. package/dist/command-result.d.ts +6 -0
  137. package/dist/command-result.js +13 -0
  138. package/dist/command-result.js.map +1 -0
  139. package/dist/commands/agent-audit.d.ts +21 -0
  140. package/dist/commands/agent-audit.js +119 -0
  141. package/dist/commands/agent-audit.js.map +1 -0
  142. package/dist/commands/agent-doctor.d.ts +25 -0
  143. package/dist/commands/agent-doctor.js +217 -0
  144. package/dist/commands/agent-doctor.js.map +1 -0
  145. package/dist/commands/agent-import.d.ts +21 -0
  146. package/dist/commands/agent-import.js +212 -0
  147. package/dist/commands/agent-import.js.map +1 -0
  148. package/dist/commands/agent-install.d.ts +18 -0
  149. package/dist/commands/agent-install.js +59 -0
  150. package/dist/commands/agent-install.js.map +1 -0
  151. package/dist/commands/agent-installed.d.ts +6 -0
  152. package/dist/commands/agent-installed.js +17 -0
  153. package/dist/commands/agent-installed.js.map +1 -0
  154. package/dist/commands/agent-marketplace.d.ts +11 -0
  155. package/dist/commands/agent-marketplace.js +178 -0
  156. package/dist/commands/agent-marketplace.js.map +1 -0
  157. package/dist/commands/agent-package.d.ts +16 -0
  158. package/dist/commands/agent-package.js +159 -0
  159. package/dist/commands/agent-package.js.map +1 -0
  160. package/dist/commands/agent-scaffold.d.ts +17 -0
  161. package/dist/commands/agent-scaffold.js +181 -0
  162. package/dist/commands/agent-scaffold.js.map +1 -0
  163. package/dist/commands/agent-specs.d.ts +7 -0
  164. package/dist/commands/agent-specs.js +20 -0
  165. package/dist/commands/agent-specs.js.map +1 -0
  166. package/dist/commands/agent-test.d.ts +21 -0
  167. package/dist/commands/agent-test.js +50 -0
  168. package/dist/commands/agent-test.js.map +1 -0
  169. package/dist/commands/agent-uninstall.d.ts +6 -0
  170. package/dist/commands/agent-uninstall.js +45 -0
  171. package/dist/commands/agent-uninstall.js.map +1 -0
  172. package/dist/commands/agent-upgrade.d.ts +5 -0
  173. package/dist/commands/agent-upgrade.js +105 -0
  174. package/dist/commands/agent-upgrade.js.map +1 -0
  175. package/dist/commands/agent.d.ts +27 -0
  176. package/dist/commands/agent.js +549 -0
  177. package/dist/commands/agent.js.map +1 -0
  178. package/dist/commands/archive.d.ts +47 -0
  179. package/dist/commands/archive.js +311 -0
  180. package/dist/commands/archive.js.map +1 -0
  181. package/dist/commands/audit.d.ts +25 -0
  182. package/dist/commands/audit.js +325 -0
  183. package/dist/commands/audit.js.map +1 -0
  184. package/dist/commands/check-snippets.d.ts +58 -0
  185. package/dist/commands/check-snippets.js +247 -0
  186. package/dist/commands/check-snippets.js.map +1 -0
  187. package/dist/commands/check-urls.d.ts +52 -0
  188. package/dist/commands/check-urls.js +205 -0
  189. package/dist/commands/check-urls.js.map +1 -0
  190. package/dist/commands/code-blocks.d.ts +8 -0
  191. package/dist/commands/code-blocks.js +66 -0
  192. package/dist/commands/code-blocks.js.map +1 -0
  193. package/dist/commands/completion.d.ts +15 -0
  194. package/dist/commands/completion.js +20 -0
  195. package/dist/commands/completion.js.map +1 -0
  196. package/dist/commands/context.d.ts +16 -0
  197. package/dist/commands/context.js +131 -0
  198. package/dist/commands/context.js.map +1 -0
  199. package/dist/commands/describe.d.ts +12 -0
  200. package/dist/commands/describe.js +62 -0
  201. package/dist/commands/describe.js.map +1 -0
  202. package/dist/commands/diff.d.ts +11 -0
  203. package/dist/commands/diff.js +185 -0
  204. package/dist/commands/diff.js.map +1 -0
  205. package/dist/commands/fix.d.ts +59 -0
  206. package/dist/commands/fix.js +173 -0
  207. package/dist/commands/fix.js.map +1 -0
  208. package/dist/commands/frontmatter.d.ts +7 -0
  209. package/dist/commands/frontmatter.js +84 -0
  210. package/dist/commands/frontmatter.js.map +1 -0
  211. package/dist/commands/graph.d.ts +12 -0
  212. package/dist/commands/graph.js +122 -0
  213. package/dist/commands/graph.js.map +1 -0
  214. package/dist/commands/headers.d.ts +7 -0
  215. package/dist/commands/headers.js +48 -0
  216. package/dist/commands/headers.js.map +1 -0
  217. package/dist/commands/index.d.ts +8 -0
  218. package/dist/commands/index.js +32 -0
  219. package/dist/commands/index.js.map +1 -0
  220. package/dist/commands/links.d.ts +9 -0
  221. package/dist/commands/links.js +123 -0
  222. package/dist/commands/links.js.map +1 -0
  223. package/dist/commands/lint-dir.d.ts +15 -0
  224. package/dist/commands/lint-dir.js +156 -0
  225. package/dist/commands/lint-dir.js.map +1 -0
  226. package/dist/commands/lint.d.ts +14 -0
  227. package/dist/commands/lint.js +45 -0
  228. package/dist/commands/lint.js.map +1 -0
  229. package/dist/commands/orphans.d.ts +10 -0
  230. package/dist/commands/orphans.js +74 -0
  231. package/dist/commands/orphans.js.map +1 -0
  232. package/dist/commands/outline.d.ts +7 -0
  233. package/dist/commands/outline.js +54 -0
  234. package/dist/commands/outline.js.map +1 -0
  235. package/dist/commands/query.d.ts +18 -0
  236. package/dist/commands/query.js +341 -0
  237. package/dist/commands/query.js.map +1 -0
  238. package/dist/commands/refs-to.d.ts +8 -0
  239. package/dist/commands/refs-to.js +65 -0
  240. package/dist/commands/refs-to.js.map +1 -0
  241. package/dist/commands/refs.d.ts +10 -0
  242. package/dist/commands/refs.js +103 -0
  243. package/dist/commands/refs.js.map +1 -0
  244. package/dist/commands/rename-file.d.ts +16 -0
  245. package/dist/commands/rename-file.js +215 -0
  246. package/dist/commands/rename-file.js.map +1 -0
  247. package/dist/commands/rename-heading.d.ts +10 -0
  248. package/dist/commands/rename-heading.js +182 -0
  249. package/dist/commands/rename-heading.js.map +1 -0
  250. package/dist/commands/schema.d.ts +10 -0
  251. package/dist/commands/schema.js +34 -0
  252. package/dist/commands/schema.js.map +1 -0
  253. package/dist/commands/scripts.d.ts +59 -0
  254. package/dist/commands/scripts.js +222 -0
  255. package/dist/commands/scripts.js.map +1 -0
  256. package/dist/commands/section.d.ts +9 -0
  257. package/dist/commands/section.js +49 -0
  258. package/dist/commands/section.js.map +1 -0
  259. package/dist/commands/serve.d.ts +6 -0
  260. package/dist/commands/serve.js +48 -0
  261. package/dist/commands/serve.js.map +1 -0
  262. package/dist/commands/stats.d.ts +6 -0
  263. package/dist/commands/stats.js +109 -0
  264. package/dist/commands/stats.js.map +1 -0
  265. package/dist/commands/structure.d.ts +6 -0
  266. package/dist/commands/structure.js +130 -0
  267. package/dist/commands/structure.js.map +1 -0
  268. package/dist/commands/tables.d.ts +8 -0
  269. package/dist/commands/tables.js +77 -0
  270. package/dist/commands/tables.js.map +1 -0
  271. package/dist/commands/tasks.d.ts +8 -0
  272. package/dist/commands/tasks.js +59 -0
  273. package/dist/commands/tasks.js.map +1 -0
  274. package/dist/commands/toc.d.ts +18 -0
  275. package/dist/commands/toc.js +105 -0
  276. package/dist/commands/toc.js.map +1 -0
  277. package/dist/commands/update-check.d.ts +36 -0
  278. package/dist/commands/update-check.js +119 -0
  279. package/dist/commands/update-check.js.map +1 -0
  280. package/dist/commands/usage.d.ts +56 -0
  281. package/dist/commands/usage.js +883 -0
  282. package/dist/commands/usage.js.map +1 -0
  283. package/dist/commands/validate-frontmatter.d.ts +13 -0
  284. package/dist/commands/validate-frontmatter.js +34 -0
  285. package/dist/commands/validate-frontmatter.js.map +1 -0
  286. package/dist/completion/model.d.ts +49 -0
  287. package/dist/completion/model.js +194 -0
  288. package/dist/completion/model.js.map +1 -0
  289. package/dist/completion/shells.d.ts +2 -0
  290. package/dist/completion/shells.js +280 -0
  291. package/dist/completion/shells.js.map +1 -0
  292. package/dist/config-schema.d.ts +15 -0
  293. package/dist/config-schema.js +44 -0
  294. package/dist/config-schema.js.map +1 -0
  295. package/dist/config.d.ts +102 -0
  296. package/dist/config.js +614 -0
  297. package/dist/config.js.map +1 -0
  298. package/dist/context.d.ts +106 -0
  299. package/dist/context.js +202 -0
  300. package/dist/context.js.map +1 -0
  301. package/dist/contract/describe.d.ts +84 -0
  302. package/dist/contract/describe.js +104 -0
  303. package/dist/contract/describe.js.map +1 -0
  304. package/dist/contract/registry.d.ts +2 -0
  305. package/dist/contract/registry.js +622 -0
  306. package/dist/contract/registry.js.map +1 -0
  307. package/dist/contract/schemas/agent.d.ts +2 -0
  308. package/dist/contract/schemas/agent.js +572 -0
  309. package/dist/contract/schemas/agent.js.map +1 -0
  310. package/dist/contract/schemas/archive.d.ts +3 -0
  311. package/dist/contract/schemas/archive.js +227 -0
  312. package/dist/contract/schemas/archive.js.map +1 -0
  313. package/dist/contract/schemas/index.d.ts +11 -0
  314. package/dist/contract/schemas/index.js +49 -0
  315. package/dist/contract/schemas/index.js.map +1 -0
  316. package/dist/contract/schemas/markdown.d.ts +15 -0
  317. package/dist/contract/schemas/markdown.js +1035 -0
  318. package/dist/contract/schemas/markdown.js.map +1 -0
  319. package/dist/contract/schemas/meta.d.ts +5 -0
  320. package/dist/contract/schemas/meta.js +233 -0
  321. package/dist/contract/schemas/meta.js.map +1 -0
  322. package/dist/contract/schemas/scripts.d.ts +4 -0
  323. package/dist/contract/schemas/scripts.js +183 -0
  324. package/dist/contract/schemas/scripts.js.map +1 -0
  325. package/dist/contract/schemas/shared.d.ts +11 -0
  326. package/dist/contract/schemas/shared.js +26 -0
  327. package/dist/contract/schemas/shared.js.map +1 -0
  328. package/dist/contract/schemas/usage.d.ts +6 -0
  329. package/dist/contract/schemas/usage.js +489 -0
  330. package/dist/contract/schemas/usage.js.map +1 -0
  331. package/dist/contract/types.d.ts +63 -0
  332. package/dist/contract/types.js +2 -0
  333. package/dist/contract/types.js.map +1 -0
  334. package/dist/contract/version.d.ts +20 -0
  335. package/dist/contract/version.js +21 -0
  336. package/dist/contract/version.js.map +1 -0
  337. package/dist/diff.d.ts +156 -0
  338. package/dist/diff.js +500 -0
  339. package/dist/diff.js.map +1 -0
  340. package/dist/edit-plan.d.ts +133 -0
  341. package/dist/edit-plan.js +245 -0
  342. package/dist/edit-plan.js.map +1 -0
  343. package/dist/fix/markdownlint-fixer.d.ts +34 -0
  344. package/dist/fix/markdownlint-fixer.js +125 -0
  345. package/dist/fix/markdownlint-fixer.js.map +1 -0
  346. package/dist/fix/registry.d.ts +48 -0
  347. package/dist/fix/registry.js +28 -0
  348. package/dist/fix/registry.js.map +1 -0
  349. package/dist/fix/relative-links-fixer.d.ts +21 -0
  350. package/dist/fix/relative-links-fixer.js +96 -0
  351. package/dist/fix/relative-links-fixer.js.map +1 -0
  352. package/dist/fix/snippets-fixer.d.ts +2 -0
  353. package/dist/fix/snippets-fixer.js +64 -0
  354. package/dist/fix/snippets-fixer.js.map +1 -0
  355. package/dist/fix/toc-fixer.d.ts +2 -0
  356. package/dist/fix/toc-fixer.js +94 -0
  357. package/dist/fix/toc-fixer.js.map +1 -0
  358. package/dist/formats.d.ts +22 -0
  359. package/dist/formats.js +34 -0
  360. package/dist/formats.js.map +1 -0
  361. package/dist/formatters.d.ts +11 -0
  362. package/dist/formatters.js +48 -0
  363. package/dist/formatters.js.map +1 -0
  364. package/dist/frontmatter-validation.d.ts +11 -0
  365. package/dist/frontmatter-validation.js +188 -0
  366. package/dist/frontmatter-validation.js.map +1 -0
  367. package/dist/git.d.ts +40 -0
  368. package/dist/git.js +124 -0
  369. package/dist/git.js.map +1 -0
  370. package/dist/graph.d.ts +50 -0
  371. package/dist/graph.js +200 -0
  372. package/dist/graph.js.map +1 -0
  373. package/dist/input-selection.d.ts +9 -0
  374. package/dist/input-selection.js +122 -0
  375. package/dist/input-selection.js.map +1 -0
  376. package/dist/input.d.ts +2 -0
  377. package/dist/input.js +32 -0
  378. package/dist/input.js.map +1 -0
  379. package/dist/link-target.d.ts +39 -0
  380. package/dist/link-target.js +68 -0
  381. package/dist/link-target.js.map +1 -0
  382. package/dist/lint.d.ts +13 -0
  383. package/dist/lint.js +27 -0
  384. package/dist/lint.js.map +1 -0
  385. package/dist/markdown-ast.d.ts +73 -0
  386. package/dist/markdown-ast.js +187 -0
  387. package/dist/markdown-ast.js.map +1 -0
  388. package/dist/object-path.d.ts +14 -0
  389. package/dist/object-path.js +14 -0
  390. package/dist/object-path.js.map +1 -0
  391. package/dist/option-utils.d.ts +13 -0
  392. package/dist/option-utils.js +25 -0
  393. package/dist/option-utils.js.map +1 -0
  394. package/dist/outline.d.ts +16 -0
  395. package/dist/outline.js +32 -0
  396. package/dist/outline.js.map +1 -0
  397. package/dist/query/entities.d.ts +60 -0
  398. package/dist/query/entities.js +219 -0
  399. package/dist/query/entities.js.map +1 -0
  400. package/dist/query/execute.d.ts +22 -0
  401. package/dist/query/execute.js +0 -0
  402. package/dist/query/execute.js.map +1 -0
  403. package/dist/query/plan.d.ts +76 -0
  404. package/dist/query/plan.js +183 -0
  405. package/dist/query/plan.js.map +1 -0
  406. package/dist/query/render.d.ts +3 -0
  407. package/dist/query/render.js +39 -0
  408. package/dist/query/render.js.map +1 -0
  409. package/dist/refs.d.ts +19 -0
  410. package/dist/refs.js +10 -0
  411. package/dist/refs.js.map +1 -0
  412. package/dist/result.d.ts +49 -0
  413. package/dist/result.js +47 -0
  414. package/dist/result.js.map +1 -0
  415. package/dist/runtime.d.ts +35 -0
  416. package/dist/runtime.js +77 -0
  417. package/dist/runtime.js.map +1 -0
  418. package/dist/sarif.d.ts +36 -0
  419. package/dist/sarif.js +30 -0
  420. package/dist/sarif.js.map +1 -0
  421. package/dist/scripts/execute.d.ts +65 -0
  422. package/dist/scripts/execute.js +235 -0
  423. package/dist/scripts/execute.js.map +1 -0
  424. package/dist/scripts/registry.d.ts +55 -0
  425. package/dist/scripts/registry.js +103 -0
  426. package/dist/scripts/registry.js.map +1 -0
  427. package/dist/scripts/resolve.d.ts +90 -0
  428. package/dist/scripts/resolve.js +288 -0
  429. package/dist/scripts/resolve.js.map +1 -0
  430. package/dist/sections.d.ts +53 -0
  431. package/dist/sections.js +100 -0
  432. package/dist/sections.js.map +1 -0
  433. package/dist/serve/errors.d.ts +25 -0
  434. package/dist/serve/errors.js +45 -0
  435. package/dist/serve/errors.js.map +1 -0
  436. package/dist/serve/paths.d.ts +32 -0
  437. package/dist/serve/paths.js +71 -0
  438. package/dist/serve/paths.js.map +1 -0
  439. package/dist/serve/server.d.ts +31 -0
  440. package/dist/serve/server.js +123 -0
  441. package/dist/serve/server.js.map +1 -0
  442. package/dist/serve/tools.d.ts +19 -0
  443. package/dist/serve/tools.js +597 -0
  444. package/dist/serve/tools.js.map +1 -0
  445. package/dist/snippets.d.ts +184 -0
  446. package/dist/snippets.js +454 -0
  447. package/dist/snippets.js.map +1 -0
  448. package/dist/sqlite-store.d.ts +62 -0
  449. package/dist/sqlite-store.js +104 -0
  450. package/dist/sqlite-store.js.map +1 -0
  451. package/dist/sqlite.d.ts +59 -0
  452. package/dist/sqlite.js +51 -0
  453. package/dist/sqlite.js.map +1 -0
  454. package/dist/toc.d.ts +58 -0
  455. package/dist/toc.js +83 -0
  456. package/dist/toc.js.map +1 -0
  457. package/dist/types.d.ts +7 -0
  458. package/dist/types.js +2 -0
  459. package/dist/types.js.map +1 -0
  460. package/dist/update-notifier.d.ts +95 -0
  461. package/dist/update-notifier.js +301 -0
  462. package/dist/update-notifier.js.map +1 -0
  463. package/dist/url-cache.d.ts +14 -0
  464. package/dist/url-cache.js +70 -0
  465. package/dist/url-cache.js.map +1 -0
  466. package/dist/usage/aggregate.d.ts +107 -0
  467. package/dist/usage/aggregate.js +435 -0
  468. package/dist/usage/aggregate.js.map +1 -0
  469. package/dist/usage/db/index.d.ts +49 -0
  470. package/dist/usage/db/index.js +118 -0
  471. package/dist/usage/db/index.js.map +1 -0
  472. package/dist/usage/db/migrations.d.ts +29 -0
  473. package/dist/usage/db/migrations.js +38 -0
  474. package/dist/usage/db/migrations.js.map +1 -0
  475. package/dist/usage/db/open.d.ts +33 -0
  476. package/dist/usage/db/open.js +37 -0
  477. package/dist/usage/db/open.js.map +1 -0
  478. package/dist/usage/db/schema.d.ts +18 -0
  479. package/dist/usage/db/schema.js +147 -0
  480. package/dist/usage/db/schema.js.map +1 -0
  481. package/dist/usage/db/store.d.ts +74 -0
  482. package/dist/usage/db/store.js +280 -0
  483. package/dist/usage/db/store.js.map +1 -0
  484. package/dist/usage/events.d.ts +202 -0
  485. package/dist/usage/events.js +243 -0
  486. package/dist/usage/events.js.map +1 -0
  487. package/dist/usage/filter.d.ts +43 -0
  488. package/dist/usage/filter.js +97 -0
  489. package/dist/usage/filter.js.map +1 -0
  490. package/dist/usage/providers/antigravity.d.ts +2 -0
  491. package/dist/usage/providers/antigravity.js +431 -0
  492. package/dist/usage/providers/antigravity.js.map +1 -0
  493. package/dist/usage/providers/claude-code.d.ts +2 -0
  494. package/dist/usage/providers/claude-code.js +400 -0
  495. package/dist/usage/providers/claude-code.js.map +1 -0
  496. package/dist/usage/providers/codex.d.ts +2 -0
  497. package/dist/usage/providers/codex.js +387 -0
  498. package/dist/usage/providers/codex.js.map +1 -0
  499. package/dist/usage/providers/gemini-cli.d.ts +2 -0
  500. package/dist/usage/providers/gemini-cli.js +466 -0
  501. package/dist/usage/providers/gemini-cli.js.map +1 -0
  502. package/dist/usage/providers/index.d.ts +23 -0
  503. package/dist/usage/providers/index.js +46 -0
  504. package/dist/usage/providers/index.js.map +1 -0
  505. package/dist/usage/providers/opencode.d.ts +2 -0
  506. package/dist/usage/providers/opencode.js +422 -0
  507. package/dist/usage/providers/opencode.js.map +1 -0
  508. package/dist/usage/providers/protobuf.d.ts +35 -0
  509. package/dist/usage/providers/protobuf.js +125 -0
  510. package/dist/usage/providers/protobuf.js.map +1 -0
  511. package/dist/usage/providers/types.d.ts +74 -0
  512. package/dist/usage/providers/types.js +2 -0
  513. package/dist/usage/providers/types.js.map +1 -0
  514. package/dist/usage/scan.d.ts +54 -0
  515. package/dist/usage/scan.js +216 -0
  516. package/dist/usage/scan.js.map +1 -0
  517. package/dist/version.d.ts +2 -0
  518. package/dist/version.js +8 -0
  519. package/dist/version.js.map +1 -0
  520. package/dist/workspace-index.d.ts +39 -0
  521. package/dist/workspace-index.js +265 -0
  522. package/dist/workspace-index.js.map +1 -0
  523. package/dist/workspace.d.ts +89 -0
  524. package/dist/workspace.js +219 -0
  525. package/dist/workspace.js.map +1 -0
  526. package/package.json +92 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/usage/db/store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEhE;;;;;;;;GAQG;AAEH;;;GAGG;AACH,SAAS,IAAI,CAAC,KAAkC;IAC9C,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC;AAED,SAAS,IAAI,CAAC,KAAc;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,CAAC;AAED,SAAS,GAAG,CAAC,KAAc;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,EAAkB,EAAE,QAAgB;IAC9D,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CAAC,kEAAkE,CAAC;SAC3E,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC9B,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;SAC9B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAgBD,MAAM,UAAU,aAAa,CAAC,EAAkB;IAC9C,OAAO;QACL,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,+BAA+B,CAAC;QACvD,UAAU,EAAE,EAAE,CAAC,OAAO,CACpB;;;uDAGiD,CAClD;QACD,WAAW,EAAE,EAAE,CAAC,OAAO,CACrB;;;uDAGiD,CAClD;QACD,SAAS,EAAE,EAAE,CAAC,OAAO,CACnB,+EAA+E,CAChF;QACD,cAAc,EAAE,EAAE,CAAC,OAAO,CACxB;;uCAEiC,CAClC;QACD,aAAa,EAAE,EAAE,CAAC,OAAO,CAAC,yDAAyD,CAAC;QACpF,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC,2DAA2D,CAAC;QACvF,gBAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,+DAA+D,CAAC;QAC7F,cAAc,EAAE,EAAE,CAAC,OAAO,CACxB,wEAAwE,CACzE;QACD,aAAa,EAAE,EAAE,CAAC,OAAO,CACvB;6BACuB,CACxB;KACF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,UAA2B,EAC3B,MAAkB,EAClB,QAAgB,EAChB,UAAkB,EAClB,UAAmB;IAEnB,IAAI,UAAU,KAAK,SAAS;QAAE,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAEpE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACnC,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,GAAG,CACxC,SAAS,CAAC,QAAQ,EAClB,QAAQ,EACR,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,IAAI,EACd,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,SAAS,EACnB,SAAS,CAAC,IAAI,EACd,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAC/B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EACvB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EACzB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EACzB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAC1B,SAAS,CAAC,OAAO,EACjB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EACrB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EACzB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAC3B,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,cAAc,EACxB,UAAU,CACX,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAEhD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,UAAU,CAAC,WAAW,CAAC,GAAG,CACxB,MAAM,EACN,KAAK,CAAC,EAAE,EACR,GAAG,EACH,KAAK,CAAC,IAAI,EACV,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EACjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAChB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAChB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAClB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EACtB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EACjB,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EACpB,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EACvB,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,EACxB,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAC1B,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAC1B,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,EACtB,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,EACvB,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,EACtB,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CACvB,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,CACrC,MAAM,EACN,GAAG,EACH,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,WAAW,CACnB,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC7C,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5D,UAAU,CAAC,cAAc,CAAC,GAAG,CAC3B,KAAK,EACL,KAAK,EACL,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,QAAQ,CAChB,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3D,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;QACD,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5D,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7E,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1D,UAAU,CAAC,aAAa,CAAC,GAAG,CAC1B,KAAK,EACL,IAAI,EACJ,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,KAAK,CACb,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,EAAkB,EAClB,QAAgB,EAChB,IAAyB;IAEzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC3D,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAAE,SAAS;QAC7C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,CAAC;IACf,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAWD;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,EAAkB,EAAE,MAAoB;IAClE,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE7C,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,CAAC,kBAAkB,YAAY,GAAG,CAAC,CAAC;IACvD,MAAM,UAAU,GAAwB,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM,CAAC,SAAS;QAAE,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAE/D,MAAM,QAAQ,GAAG,EAAE;SAChB,OAAO,CAAC,8BAA8B,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;SAC/E,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;IAEtB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;YACX,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC7B,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC9B,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;YACjC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAmB;YACxC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxF,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/E,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;YAC5B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1E,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC7B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;YAC3B,IAAI,EAAE,EAAE;YACR,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE/B,MAAM,aAAa,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;IAC7C,MAAM,OAAO,GAAG,EAAE;SACf,OAAO,CACN;;gBAEU,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CACxC;SACA,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1C,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAElD,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,OAAe,EAAqC,EAAE,CAClF,EAAE;SACC,OAAO,CACN,oBAAoB,OAAO;kBACjB,KAAK;;;kBAGL,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CACxC;SACA,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;IAE3B,KAAK,MAAM,GAAG,IAAI,KAAK,CACrB,WAAW,EACX;yEACqE,CACtE,EAAE,CAAC;QACF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG;YACjC,GAAG,WAAW,EAAE;YAChB,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;YACrB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;YACvB,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;YAC9B,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC;YAChC,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC;YACrC,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC;YACrC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC3B,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;YAC9B,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC;YAC5B,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;SAC5B,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAqD;QAC/D,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC;QAC7B,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC;QAChC,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC;KACvC,CAAC;IACF,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QAC7C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,MAAM,kBAAkB,CAAC,EAAE,CAAC;YAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM;gBAAE,SAAS;YACrB,MAAM,CAAC,MAAM,CAA4B,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,+BAA+B,CAAC,EAAE,CAAC;QACtE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;IAC7F,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,KAAK,CACrB,UAAU,EACV,gEAAgE,CACjE,EAAE,CAAC;QACF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG;YAC/B,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;YACrB,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC3B,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC;YAC7B,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC1B,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;SACvB,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5B,CAAC;AAgBD,MAAM,UAAU,WAAW,CAAC,EAAkB;IAC5C,MAAM,GAAG,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,GAAG,IAAI,EAAE;SACjB,OAAO,CAAC,8EAA8E,CAAC;SACvF,GAAG,EAAE,EAAE,CAAC;QACT,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;IAChF,OAAO;QACL,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAG,EAAE,EAAE,YAAY,IAAI,CAAC,CAAC;QACjF,KAAK,EAAE,GAAG,CAAC,gCAAgC,CAAC;QAC5C,IAAI,EAAE,GAAG,CAAC,+BAA+B,CAAC;QAC1C,MAAM,EAAE,GAAG,CAAC,iCAAiC,CAAC;QAC9C,SAAS,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;QACvD,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * The normalized usage model.
3
+ *
4
+ * Nothing here touches the filesystem or knows which provider produced it: a
5
+ * provider's job is to turn its own on-disk format into these shapes, and every
6
+ * rollup in `aggregate.ts` reads only these. That split is what lets a second
7
+ * LLM's logs join the same reports without a single change to the commands.
8
+ *
9
+ * The unit of storage is a **day-bucketed per-file aggregate**. Keeping raw
10
+ * events would make the index unusable at corpus scale, and keeping flat
11
+ * per-file totals would make `usage tokens --by day` impossible; bucketing by
12
+ * UTC date costs almost nothing (a session rarely spans two days) and preserves
13
+ * every cross-tab the subcommands need.
14
+ */
15
+ /**
16
+ * Token counters for one bucket.
17
+ *
18
+ * `cacheWrite` is the authoritative total; `cacheWrite5m` and `cacheWrite1h`
19
+ * are a best-effort TTL split, which the oldest records do not carry. They can
20
+ * therefore sum to less than `cacheWrite`, and never to more — reporting the
21
+ * total separately is what keeps a legacy record from being silently filed
22
+ * under the wrong TTL.
23
+ *
24
+ * `requests` counts deduplicated API responses, not JSONL lines — see
25
+ * `providers/claude-code.ts` for why those differ by a factor of two.
26
+ */
27
+ export interface TokenTotals {
28
+ input: number;
29
+ output: number;
30
+ cacheRead: number;
31
+ cacheWrite: number;
32
+ cacheWrite5m: number;
33
+ cacheWrite1h: number;
34
+ thinking: number;
35
+ webSearch: number;
36
+ webFetch: number;
37
+ requests: number;
38
+ }
39
+ export interface HookTotals {
40
+ count: number;
41
+ failures: number;
42
+ cancelled: number;
43
+ totalMs: number;
44
+ maxMs: number;
45
+ }
46
+ export interface AgentTotals {
47
+ count: number;
48
+ maxDepth: number;
49
+ }
50
+ /** Everything observed on one UTC calendar day within one transcript. */
51
+ export interface DayBucket {
52
+ models: Record<string, TokenTotals>;
53
+ tools: Record<string, number>;
54
+ skills: Record<string, number>;
55
+ agents: Record<string, AgentTotals>;
56
+ hooks: Record<string, HookTotals>;
57
+ commands: Record<string, number>;
58
+ prompts: number;
59
+ errors: number;
60
+ compactions: number;
61
+ }
62
+ /**
63
+ * One transcript file, reduced.
64
+ *
65
+ * `size` and `mtimeMs` are the cache key: transcripts are append-only, so a file
66
+ * whose size and mtime are unchanged cannot have new records in it.
67
+ */
68
+ export interface FileAggregate {
69
+ file: string;
70
+ size: number;
71
+ mtimeMs: number;
72
+ provider: string;
73
+ sessionId: string;
74
+ kind: TranscriptKind;
75
+ parentSessionId?: string;
76
+ agentId?: string;
77
+ agentType?: string;
78
+ /**
79
+ * The task-specific identifier for a subagent run, where the provider records
80
+ * one separately from its reusable type. Codex names both; Claude Code names
81
+ * only the type, so this is absent there.
82
+ */
83
+ agentPath?: string;
84
+ spawnDepth?: number;
85
+ /** Absolute working directory, read from the records rather than the directory name. */
86
+ project: string;
87
+ title?: string;
88
+ gitBranch?: string;
89
+ toolVersion?: string;
90
+ firstTs: string;
91
+ lastTs: string;
92
+ days: Record<string, DayBucket>;
93
+ /** Lines that were not valid JSON. Reported, never thrown. */
94
+ malformedLines: number;
95
+ }
96
+ export type TranscriptKind = "main" | "subagent";
97
+ /** How a tool call is classified for `usage tools --by kind`. */
98
+ export type ToolKind = "builtin" | "mcp" | "agent" | "skill";
99
+ export declare const TOOL_KINDS: readonly ToolKind[];
100
+ export declare function emptyTokens(): TokenTotals;
101
+ export declare function addTokens(into: TokenTotals, from: TokenTotals): TokenTotals;
102
+ /**
103
+ * Every token that passed through the model, billable or not.
104
+ *
105
+ * Cache reads are included: they are what the request actually cost in context,
106
+ * and omitting them understates real usage by an order of magnitude.
107
+ */
108
+ export declare function totalTokens(tokens: TokenTotals): number;
109
+ export declare function emptyBucket(): DayBucket;
110
+ export declare function addBucket(into: DayBucket, from: DayBucket): DayBucket;
111
+ /** Token totals across every model in a bucket. */
112
+ export declare function bucketTokens(bucket: DayBucket): TokenTotals;
113
+ /** Tool calls across every name in a bucket. */
114
+ export declare function bucketToolCalls(bucket: DayBucket): number;
115
+ /**
116
+ * Splits an MCP tool name into its server and tool halves.
117
+ *
118
+ * Claude Code names an MCP tool `mcp__<server>__<tool>`, and a server name may
119
+ * itself contain underscores, so the split is on the *first* `__` after the
120
+ * prefix and the remainder is the tool. Anything that does not match is a
121
+ * builtin.
122
+ */
123
+ export declare function classifyTool(name: string): {
124
+ kind: ToolKind;
125
+ server?: string;
126
+ tool: string;
127
+ };
128
+ /**
129
+ * A session's identity across providers.
130
+ *
131
+ * A session id is unique only within the provider that issued it — two
132
+ * assistants can and do mint the same UUID — so anything counting or grouping
133
+ * sessions while several providers are in scope must qualify it. The separator
134
+ * is a NUL, which cannot occur in either half.
135
+ */
136
+ export declare function sessionKey(file: {
137
+ provider: string;
138
+ sessionId: string;
139
+ }): string;
140
+ /** The UTC calendar day an ISO timestamp falls on, or null when unparseable. */
141
+ export declare function utcDay(timestamp: string): string | null;
142
+ /**
143
+ * What one observed occurrence in a transcript was.
144
+ *
145
+ * Events are the per-occurrence decomposition of a {@link DayBucket}: the bucket
146
+ * is a sum, and this is what was summed. Storing both is deliberate. The bucket
147
+ * answers every report that exists today in 82k rows; the event stream answers
148
+ * the questions a day bucket cannot — anything sub-day, per-turn, or sequential —
149
+ * at roughly 2.5M rows.
150
+ *
151
+ * A provider emits these *alongside* the bucket it already builds rather than
152
+ * instead of it, so no published number depends on this type being complete.
153
+ * {@link foldDays} folds a stream back into buckets, and
154
+ * `tests/unit/usage-events.test.ts` asserts the fold reproduces what the
155
+ * provider built. That test is what makes the stream trustworthy; without it
156
+ * an event silently missing from a provider would be invisible.
157
+ *
158
+ * `hook_error` exists because a hook's failure count and its execution count can
159
+ * legitimately diverge: Claude Code's `stop_hook_summary` reports failures in a
160
+ * `hookErrors` array that carries no matching execution record, so a `hook`
161
+ * event per failure would invent executions that never ran.
162
+ */
163
+ export type EventKind = "response" | "tool_use" | "agent" | "skill" | "command" | "prompt" | "error" | "compaction" | "hook" | "hook_error";
164
+ export interface UsageEvent {
165
+ /** ISO instant from the record itself. */
166
+ ts: string;
167
+ kind: EventKind;
168
+ /** `response` only. */
169
+ model?: string;
170
+ /** `response` only. Already corrected for each provider's distortions. */
171
+ tokens?: TokenTotals;
172
+ /** `tool_use` only: the raw tool name, before {@link classifyTool}. */
173
+ tool?: string;
174
+ /** `agent`, `skill`, `command`, `hook`, `hook_error`: the thing's name. */
175
+ name?: string;
176
+ /** `hook` only. */
177
+ status?: "ok" | "failed" | "cancelled";
178
+ /** `hook` only. */
179
+ durationMs?: number;
180
+ /** `agent` only, where the provider records a spawn depth on the call itself. */
181
+ depth?: number;
182
+ }
183
+ /**
184
+ * One transcript, parsed.
185
+ *
186
+ * `aggregate` is exactly what {@link UsageProvider.read} has always returned;
187
+ * `events` is the same content decomposed. Both come out of one pass.
188
+ */
189
+ export interface ParsedFile {
190
+ aggregate: FileAggregate;
191
+ events: UsageEvent[];
192
+ }
193
+ /**
194
+ * Folds an event stream back into day buckets.
195
+ *
196
+ * `observedDays` seeds the result, because a provider opens a bucket for every
197
+ * timestamped record it sees — including records that increment nothing. Those
198
+ * all-zero days are real output: `usage tokens --by day` reports a row for a day
199
+ * a session touched but spent nothing on. Deriving days from events alone would
200
+ * drop them.
201
+ */
202
+ export declare function foldDays(events: readonly UsageEvent[], observedDays?: readonly string[]): Record<string, DayBucket>;
@@ -0,0 +1,243 @@
1
+ /**
2
+ * The normalized usage model.
3
+ *
4
+ * Nothing here touches the filesystem or knows which provider produced it: a
5
+ * provider's job is to turn its own on-disk format into these shapes, and every
6
+ * rollup in `aggregate.ts` reads only these. That split is what lets a second
7
+ * LLM's logs join the same reports without a single change to the commands.
8
+ *
9
+ * The unit of storage is a **day-bucketed per-file aggregate**. Keeping raw
10
+ * events would make the index unusable at corpus scale, and keeping flat
11
+ * per-file totals would make `usage tokens --by day` impossible; bucketing by
12
+ * UTC date costs almost nothing (a session rarely spans two days) and preserves
13
+ * every cross-tab the subcommands need.
14
+ */
15
+ export const TOOL_KINDS = ["builtin", "mcp", "agent", "skill"];
16
+ export function emptyTokens() {
17
+ return {
18
+ input: 0,
19
+ output: 0,
20
+ cacheRead: 0,
21
+ cacheWrite: 0,
22
+ cacheWrite5m: 0,
23
+ cacheWrite1h: 0,
24
+ thinking: 0,
25
+ webSearch: 0,
26
+ webFetch: 0,
27
+ requests: 0,
28
+ };
29
+ }
30
+ export function addTokens(into, from) {
31
+ into.input += from.input;
32
+ into.output += from.output;
33
+ into.cacheRead += from.cacheRead;
34
+ into.cacheWrite += from.cacheWrite;
35
+ into.cacheWrite5m += from.cacheWrite5m;
36
+ into.cacheWrite1h += from.cacheWrite1h;
37
+ into.thinking += from.thinking;
38
+ into.webSearch += from.webSearch;
39
+ into.webFetch += from.webFetch;
40
+ into.requests += from.requests;
41
+ return into;
42
+ }
43
+ /**
44
+ * Every token that passed through the model, billable or not.
45
+ *
46
+ * Cache reads are included: they are what the request actually cost in context,
47
+ * and omitting them understates real usage by an order of magnitude.
48
+ */
49
+ export function totalTokens(tokens) {
50
+ return tokens.input + tokens.output + tokens.cacheRead + tokens.cacheWrite;
51
+ }
52
+ export function emptyBucket() {
53
+ return {
54
+ models: {},
55
+ tools: {},
56
+ skills: {},
57
+ agents: {},
58
+ hooks: {},
59
+ commands: {},
60
+ prompts: 0,
61
+ errors: 0,
62
+ compactions: 0,
63
+ };
64
+ }
65
+ function addCounts(into, from) {
66
+ for (const [key, value] of Object.entries(from))
67
+ into[key] = (into[key] ?? 0) + value;
68
+ }
69
+ export function addBucket(into, from) {
70
+ for (const [model, tokens] of Object.entries(from.models)) {
71
+ addTokens((into.models[model] ??= emptyTokens()), tokens);
72
+ }
73
+ addCounts(into.tools, from.tools);
74
+ addCounts(into.skills, from.skills);
75
+ addCounts(into.commands, from.commands);
76
+ for (const [name, totals] of Object.entries(from.agents)) {
77
+ const target = (into.agents[name] ??= { count: 0, maxDepth: 0 });
78
+ target.count += totals.count;
79
+ target.maxDepth = Math.max(target.maxDepth, totals.maxDepth);
80
+ }
81
+ for (const [name, totals] of Object.entries(from.hooks)) {
82
+ const target = (into.hooks[name] ??= {
83
+ count: 0,
84
+ failures: 0,
85
+ cancelled: 0,
86
+ totalMs: 0,
87
+ maxMs: 0,
88
+ });
89
+ target.count += totals.count;
90
+ target.failures += totals.failures;
91
+ target.cancelled += totals.cancelled;
92
+ target.totalMs += totals.totalMs;
93
+ target.maxMs = Math.max(target.maxMs, totals.maxMs);
94
+ }
95
+ into.prompts += from.prompts;
96
+ into.errors += from.errors;
97
+ into.compactions += from.compactions;
98
+ return into;
99
+ }
100
+ /** Token totals across every model in a bucket. */
101
+ export function bucketTokens(bucket) {
102
+ const totals = emptyTokens();
103
+ for (const tokens of Object.values(bucket.models))
104
+ addTokens(totals, tokens);
105
+ return totals;
106
+ }
107
+ /** Tool calls across every name in a bucket. */
108
+ export function bucketToolCalls(bucket) {
109
+ let total = 0;
110
+ for (const count of Object.values(bucket.tools))
111
+ total += count;
112
+ return total;
113
+ }
114
+ /**
115
+ * Splits an MCP tool name into its server and tool halves.
116
+ *
117
+ * Claude Code names an MCP tool `mcp__<server>__<tool>`, and a server name may
118
+ * itself contain underscores, so the split is on the *first* `__` after the
119
+ * prefix and the remainder is the tool. Anything that does not match is a
120
+ * builtin.
121
+ */
122
+ export function classifyTool(name) {
123
+ if (name.startsWith("mcp__")) {
124
+ const rest = name.slice("mcp__".length);
125
+ const boundary = rest.indexOf("__");
126
+ if (boundary > 0) {
127
+ return { kind: "mcp", server: rest.slice(0, boundary), tool: rest.slice(boundary + 2) };
128
+ }
129
+ return { kind: "mcp", server: rest, tool: rest };
130
+ }
131
+ if (name === "Agent" || name === "Task")
132
+ return { kind: "agent", tool: name };
133
+ if (name === "Skill")
134
+ return { kind: "skill", tool: name };
135
+ return { kind: "builtin", tool: name };
136
+ }
137
+ /**
138
+ * A session's identity across providers.
139
+ *
140
+ * A session id is unique only within the provider that issued it — two
141
+ * assistants can and do mint the same UUID — so anything counting or grouping
142
+ * sessions while several providers are in scope must qualify it. The separator
143
+ * is a NUL, which cannot occur in either half.
144
+ */
145
+ export function sessionKey(file) {
146
+ return `${file.provider}\u0000${file.sessionId}`;
147
+ }
148
+ /** The UTC calendar day an ISO timestamp falls on, or null when unparseable. */
149
+ export function utcDay(timestamp) {
150
+ const parsed = Date.parse(timestamp);
151
+ if (!Number.isFinite(parsed))
152
+ return null;
153
+ return new Date(parsed).toISOString().slice(0, 10);
154
+ }
155
+ /**
156
+ * Folds an event stream back into day buckets.
157
+ *
158
+ * `observedDays` seeds the result, because a provider opens a bucket for every
159
+ * timestamped record it sees — including records that increment nothing. Those
160
+ * all-zero days are real output: `usage tokens --by day` reports a row for a day
161
+ * a session touched but spent nothing on. Deriving days from events alone would
162
+ * drop them.
163
+ */
164
+ export function foldDays(events, observedDays = []) {
165
+ const days = {};
166
+ for (const day of observedDays)
167
+ days[day] ??= emptyBucket();
168
+ for (const event of events) {
169
+ const day = utcDay(event.ts);
170
+ if (!day)
171
+ continue;
172
+ const bucket = (days[day] ??= emptyBucket());
173
+ switch (event.kind) {
174
+ case "response":
175
+ if (event.model && event.tokens) {
176
+ addTokens((bucket.models[event.model] ??= emptyTokens()), event.tokens);
177
+ }
178
+ break;
179
+ case "tool_use":
180
+ if (event.tool)
181
+ bucket.tools[event.tool] = (bucket.tools[event.tool] ?? 0) + 1;
182
+ break;
183
+ case "agent": {
184
+ if (!event.name)
185
+ break;
186
+ const totals = (bucket.agents[event.name] ??= { count: 0, maxDepth: 0 });
187
+ totals.count += 1;
188
+ if (typeof event.depth === "number") {
189
+ totals.maxDepth = Math.max(totals.maxDepth, event.depth);
190
+ }
191
+ break;
192
+ }
193
+ case "skill":
194
+ if (event.name)
195
+ bucket.skills[event.name] = (bucket.skills[event.name] ?? 0) + 1;
196
+ break;
197
+ case "command":
198
+ if (event.name)
199
+ bucket.commands[event.name] = (bucket.commands[event.name] ?? 0) + 1;
200
+ break;
201
+ case "prompt":
202
+ bucket.prompts += 1;
203
+ break;
204
+ case "error":
205
+ bucket.errors += 1;
206
+ break;
207
+ case "compaction":
208
+ bucket.compactions += 1;
209
+ break;
210
+ case "hook": {
211
+ const totals = (bucket.hooks[event.name ?? "unknown"] ??= {
212
+ count: 0,
213
+ failures: 0,
214
+ cancelled: 0,
215
+ totalMs: 0,
216
+ maxMs: 0,
217
+ });
218
+ totals.count += 1;
219
+ if (event.status === "failed")
220
+ totals.failures += 1;
221
+ if (event.status === "cancelled")
222
+ totals.cancelled += 1;
223
+ const duration = event.durationMs ?? 0;
224
+ totals.totalMs += duration;
225
+ totals.maxMs = Math.max(totals.maxMs, duration);
226
+ break;
227
+ }
228
+ case "hook_error": {
229
+ const totals = (bucket.hooks[event.name ?? "unknown"] ??= {
230
+ count: 0,
231
+ failures: 0,
232
+ cancelled: 0,
233
+ totalMs: 0,
234
+ maxMs: 0,
235
+ });
236
+ totals.failures += 1;
237
+ break;
238
+ }
239
+ }
240
+ }
241
+ return days;
242
+ }
243
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/usage/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { FileAggregate } from "./events.js";
2
+ /**
3
+ * Resolves `--since` / `--until` to a UTC calendar day.
4
+ *
5
+ * Accepts a relative span (`7d`, `2w`, `3m`, `1y`) or an ISO date. Both resolve
6
+ * to a day rather than an instant: the index stores day buckets, so a finer
7
+ * boundary would be a promise the data cannot keep. `m` is 30 days and `y` is
8
+ * 365 — a span, not a calendar month or year.
9
+ */
10
+ export declare function parseDay(value: string, label: string, now?: Date): string;
11
+ export interface Window {
12
+ since: string | null;
13
+ until: string | null;
14
+ }
15
+ export declare function resolveWindow(since: string | undefined, until: string | undefined, now?: Date): Window;
16
+ /** Both bounds are inclusive, which is what a day-granular window should mean. */
17
+ export declare function dayInWindow(day: string, window: Window): boolean;
18
+ /**
19
+ * The earliest file mtime that could still hold a record inside the window.
20
+ *
21
+ * A transcript is append-only, so a file last modified before the start of the
22
+ * window has nothing in it. Pruning by mtime before opening anything is what
23
+ * makes `--since 7d` cheap over a corpus of thousands of files. One day of slack
24
+ * absorbs any timezone or clock skew between the record timestamps and the
25
+ * filesystem.
26
+ */
27
+ export declare function modifiedSinceFor(window: Window): number | undefined;
28
+ /**
29
+ * Normalizes a `--project` selector.
30
+ *
31
+ * `.` and a relative path resolve against the working directory. A bare token
32
+ * with no separator is treated as a directory-name or slug fragment, so
33
+ * `--project cairn` works without spelling out the whole path.
34
+ */
35
+ export interface ProjectSelector {
36
+ raw: string;
37
+ absolute: string | null;
38
+ fragment: string;
39
+ }
40
+ export declare function parseProject(value: string, cwd?: string): ProjectSelector;
41
+ export declare function matchesProject(project: string, selectors: readonly ProjectSelector[]): boolean;
42
+ /** Keeps only the day buckets inside the window; returns null when nothing remains. */
43
+ export declare function clipToWindow(aggregate: FileAggregate, window: Window): FileAggregate | null;
@@ -0,0 +1,97 @@
1
+ import path from "node:path";
2
+ /**
3
+ * Window and scope selection.
4
+ *
5
+ * Everything here is pure: it decides which day buckets and which files a report
6
+ * covers, without touching the filesystem.
7
+ */
8
+ const RELATIVE = /^(\d+)\s*([dwmy])$/i;
9
+ const ISO_DAY = /^(\d{4})-(\d{2})-(\d{2})$/;
10
+ const UNIT_DAYS = { d: 1, w: 7, m: 30, y: 365 };
11
+ /**
12
+ * Resolves `--since` / `--until` to a UTC calendar day.
13
+ *
14
+ * Accepts a relative span (`7d`, `2w`, `3m`, `1y`) or an ISO date. Both resolve
15
+ * to a day rather than an instant: the index stores day buckets, so a finer
16
+ * boundary would be a promise the data cannot keep. `m` is 30 days and `y` is
17
+ * 365 — a span, not a calendar month or year.
18
+ */
19
+ export function parseDay(value, label, now = new Date()) {
20
+ const trimmed = value.trim();
21
+ const relative = RELATIVE.exec(trimmed);
22
+ if (relative) {
23
+ const span = Number(relative[1]) * UNIT_DAYS[relative[2].toLowerCase()];
24
+ const day = new Date(now.getTime() - span * 86_400_000);
25
+ return day.toISOString().slice(0, 10);
26
+ }
27
+ if (ISO_DAY.test(trimmed)) {
28
+ const parsed = Date.parse(`${trimmed}T00:00:00Z`);
29
+ if (Number.isFinite(parsed))
30
+ return trimmed;
31
+ }
32
+ throw new Error(`Invalid ${label} value: ${value} (expected a relative span such as 7d, 2w, 3m, 1y, or an ISO date such as 2026-08-01)`);
33
+ }
34
+ export function resolveWindow(since, until, now = new Date()) {
35
+ const window = {
36
+ since: since === undefined ? null : parseDay(since, "--since", now),
37
+ until: until === undefined ? null : parseDay(until, "--until", now),
38
+ };
39
+ if (window.since && window.until && window.since > window.until) {
40
+ throw new Error(`--since ${window.since} is after --until ${window.until}`);
41
+ }
42
+ return window;
43
+ }
44
+ /** Both bounds are inclusive, which is what a day-granular window should mean. */
45
+ export function dayInWindow(day, window) {
46
+ if (window.since && day < window.since)
47
+ return false;
48
+ if (window.until && day > window.until)
49
+ return false;
50
+ return true;
51
+ }
52
+ /**
53
+ * The earliest file mtime that could still hold a record inside the window.
54
+ *
55
+ * A transcript is append-only, so a file last modified before the start of the
56
+ * window has nothing in it. Pruning by mtime before opening anything is what
57
+ * makes `--since 7d` cheap over a corpus of thousands of files. One day of slack
58
+ * absorbs any timezone or clock skew between the record timestamps and the
59
+ * filesystem.
60
+ */
61
+ export function modifiedSinceFor(window) {
62
+ if (!window.since)
63
+ return undefined;
64
+ return Date.parse(`${window.since}T00:00:00Z`) - 86_400_000;
65
+ }
66
+ export function parseProject(value, cwd = process.cwd()) {
67
+ const raw = value.trim();
68
+ if (raw === "." || raw.startsWith("/") || raw.startsWith("./") || raw.startsWith("~")) {
69
+ const expanded = raw.startsWith("~")
70
+ ? path.join(process.env.HOME ?? "", raw.slice(1))
71
+ : path.resolve(cwd, raw);
72
+ return { raw, absolute: expanded, fragment: path.basename(expanded).toLowerCase() };
73
+ }
74
+ return { raw, absolute: null, fragment: raw.toLowerCase() };
75
+ }
76
+ export function matchesProject(project, selectors) {
77
+ if (selectors.length === 0)
78
+ return true;
79
+ const lower = project.toLowerCase();
80
+ return selectors.some((selector) => {
81
+ if (selector.absolute) {
82
+ return project === selector.absolute || project.startsWith(`${selector.absolute}/`);
83
+ }
84
+ return lower.includes(selector.fragment);
85
+ });
86
+ }
87
+ /** Keeps only the day buckets inside the window; returns null when nothing remains. */
88
+ export function clipToWindow(aggregate, window) {
89
+ if (!window.since && !window.until) {
90
+ return Object.keys(aggregate.days).length > 0 ? aggregate : null;
91
+ }
92
+ const days = Object.fromEntries(Object.entries(aggregate.days).filter(([day]) => dayInWindow(day, window)));
93
+ if (Object.keys(days).length === 0)
94
+ return null;
95
+ return { ...aggregate, days };
96
+ }
97
+ //# sourceMappingURL=filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/usage/filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { UsageProvider } from "./types.js";
2
+ export declare const antigravityProvider: UsageProvider;