@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,422 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { addTokens, emptyBucket, emptyTokens, utcDay } from "../events.js";
4
+ import { loadSqlite } from "../../sqlite.js";
5
+ /**
6
+ * OpenCode's session store.
7
+ *
8
+ * Everything lives in one SQLite database, `opencode.db`, alongside the CLI
9
+ * logs and per-session diffs:
10
+ *
11
+ * ```
12
+ * session(id, project_id, parent_id, directory, title, version, agent, model,
13
+ * cost, tokens_*, time_created, time_updated)
14
+ * message(id, session_id, time_created, time_updated, data) -- JSON
15
+ * part(id, message_id, session_id, time_created, time_updated, data) -- JSON
16
+ * ```
17
+ *
18
+ * **The same usage is recorded three times**: on the assistant `message`, again
19
+ * on that message's `step-finish` `part`, and rolled up on the `session` row.
20
+ * Measured against a real store, all three agree exactly and match OpenCode's
21
+ * own `opencode stats`. Only the **message** grain is read. Summing message
22
+ * tokens and step-finish tokens double-counts every figure precisely; the
23
+ * session rollup is a cross-check rather than a source, and `part` rows are read
24
+ * only for tool calls.
25
+ *
26
+ * The message grain is the right one twice over: a message that produced no
27
+ * step-finish part still carries usage, and `message.id` is a primary key --
28
+ * the same reason `claude-code.ts` deduplicates on `message.id` rather than on
29
+ * anything anonymous.
30
+ *
31
+ * This is the second provider reading somebody else's live database, so it
32
+ * follows the antigravity rules: open read-only through the **shared**
33
+ * `loadSqlite()`, never a second loader, and treat every failure -- a missing
34
+ * column, a renamed table, a runtime with no `node:sqlite` -- as an empty store
35
+ * rather than an exception.
36
+ */
37
+ const DATABASE = "opencode.db";
38
+ /** The synthetic shard every session is filed under; there is only one store. */
39
+ const SHARD = "session";
40
+ function text(value) {
41
+ return typeof value === "string" && value ? value : null;
42
+ }
43
+ function count(value) {
44
+ if (typeof value === "number" && Number.isFinite(value))
45
+ return value;
46
+ if (typeof value === "bigint")
47
+ return Number(value);
48
+ return 0;
49
+ }
50
+ /** An epoch-millisecond column as the ISO string every event carries. */
51
+ function isoAt(value) {
52
+ const ms = count(value);
53
+ if (!ms)
54
+ return null;
55
+ const at = new Date(ms);
56
+ return Number.isNaN(at.getTime()) ? null : at.toISOString();
57
+ }
58
+ function parseJson(value) {
59
+ const raw = text(value);
60
+ if (!raw)
61
+ return null;
62
+ try {
63
+ const parsed = JSON.parse(raw);
64
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed)
65
+ ? parsed
66
+ : null;
67
+ }
68
+ catch {
69
+ return null;
70
+ }
71
+ }
72
+ function openDatabase(file) {
73
+ const sqlite = loadSqlite();
74
+ if (!sqlite)
75
+ return null;
76
+ try {
77
+ // The URI form, because the store has live `-wal`/`-shm` sidecars and this
78
+ // is somebody else's database: it is never opened for writing.
79
+ return new sqlite.DatabaseSync(`file:${file}?mode=ro`, { readOnly: true });
80
+ }
81
+ catch {
82
+ return null;
83
+ }
84
+ }
85
+ function closeQuietly(db) {
86
+ try {
87
+ db.close();
88
+ }
89
+ catch {
90
+ // Closing a read-only handle cannot lose anything.
91
+ }
92
+ }
93
+ function query(db, sql) {
94
+ try {
95
+ return db.prepare(sql).all();
96
+ }
97
+ catch {
98
+ // A renamed column, or a table this version of OpenCode does not have,
99
+ // costs exactly what it names rather than the whole provider.
100
+ return [];
101
+ }
102
+ }
103
+ /**
104
+ * Every session, with a freshness key derived from its own rows.
105
+ *
106
+ * The store's file mtime is a single value shared by every session, so using it
107
+ * would invalidate all of them on any write and force a full re-parse on every
108
+ * scan. `session.time_updated` alone is not enough either -- it is measurably
109
+ * stale against the messages beneath it -- so the key is the latest timestamp
110
+ * anywhere in the session. `size` fingerprints the row counts, because
111
+ * `isFresh` compares exactly the pair `(size, mtimeMs)` and neither half alone
112
+ * catches every edit.
113
+ */
114
+ function readSessions(db) {
115
+ const updates = new Map();
116
+ const bump = (id, ms, kind) => {
117
+ const entry = updates.get(id) ?? { ms: 0, messages: 0, parts: 0 };
118
+ entry.ms = Math.max(entry.ms, ms);
119
+ entry[kind] += 1;
120
+ updates.set(id, entry);
121
+ };
122
+ for (const row of query(db, "SELECT session_id, time_updated FROM message"))
123
+ bump(String(row.session_id), count(row.time_updated), "messages");
124
+ for (const row of query(db, "SELECT session_id, time_updated FROM part"))
125
+ bump(String(row.session_id), count(row.time_updated), "parts");
126
+ const sessions = [];
127
+ for (const row of query(db, "SELECT * FROM session")) {
128
+ const id = text(row.id);
129
+ if (!id)
130
+ continue;
131
+ const counts = updates.get(id) ?? { ms: 0, messages: 0, parts: 0 };
132
+ sessions.push({
133
+ id,
134
+ parentId: text(row.parent_id),
135
+ directory: text(row.directory) ?? "",
136
+ title: text(row.title) ?? "",
137
+ version: text(row.version) ?? "",
138
+ mtimeMs: Math.max(count(row.time_updated), counts.ms),
139
+ size: counts.messages * 1_000_000 + counts.parts,
140
+ });
141
+ }
142
+ // Byte comparison, never localeCompare: the order must not depend on the ICU
143
+ // build of the machine that ran the scan.
144
+ sessions.sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));
145
+ return sessions;
146
+ }
147
+ /**
148
+ * The whole store, parsed once and memoized.
149
+ *
150
+ * `scan.ts` calls `parse` through a worker pool, and SQLite declares no index
151
+ * for these foreign keys, so a per-session `WHERE session_id = ?` would be a
152
+ * full scan of `message` and `part` for every session. One pass builds every
153
+ * aggregate instead. The memo holds a single entry, so a `--provider all` run
154
+ * does not pin two stores in memory.
155
+ */
156
+ let store = null;
157
+ function storeKey(file) {
158
+ try {
159
+ const stats = fs.statSync(file);
160
+ // The path is part of the key, not just the stat: two stores can share a
161
+ // size and an mtime, and the memo holds only one entry.
162
+ return `${file}\u0000${stats.mtimeMs}\u0000${stats.size}`;
163
+ }
164
+ catch {
165
+ return "";
166
+ }
167
+ }
168
+ function bucketFor(building, timestamp) {
169
+ if (!timestamp)
170
+ return null;
171
+ const day = utcDay(timestamp);
172
+ if (!day)
173
+ return null;
174
+ const aggregate = building.aggregate;
175
+ if (!aggregate.firstTs || timestamp < aggregate.firstTs)
176
+ aggregate.firstTs = timestamp;
177
+ if (!aggregate.lastTs || timestamp > aggregate.lastTs)
178
+ aggregate.lastTs = timestamp;
179
+ return (aggregate.days[day] ??= emptyBucket());
180
+ }
181
+ /**
182
+ * One assistant message's usage.
183
+ *
184
+ * Unlike Codex and Gemini CLI, `cache.read` is a field of its own rather than
185
+ * part of `input`, so nothing is subtracted here. `cost` is dropped: neither
186
+ * `TokenTotals` nor `FileAggregate` has a place for it, and adding one is a
187
+ * usage-store migration plus a contract change.
188
+ */
189
+ function readUsage(tokens) {
190
+ const cache = (tokens.cache ?? {});
191
+ return {
192
+ input: count(tokens.input),
193
+ output: count(tokens.output),
194
+ cacheRead: count(cache.read),
195
+ cacheWrite: count(cache.write),
196
+ cacheWrite5m: 0,
197
+ cacheWrite1h: 0,
198
+ thinking: count(tokens.reasoning),
199
+ webSearch: 0,
200
+ webFetch: 0,
201
+ requests: 1,
202
+ };
203
+ }
204
+ function applyMessages(db, building) {
205
+ for (const row of query(db, "SELECT session_id, data FROM message ORDER BY id")) {
206
+ const target = building.get(String(row.session_id));
207
+ const data = parseJson(row.data);
208
+ if (!target || !data)
209
+ continue;
210
+ const time = data.time;
211
+ const ts = isoAt(time?.created);
212
+ const bucket = bucketFor(target, ts);
213
+ if (!bucket || !ts)
214
+ continue;
215
+ if (data.role === "user") {
216
+ bucket.prompts += 1;
217
+ target.events.push({ ts, kind: "prompt" });
218
+ continue;
219
+ }
220
+ if (data.role !== "assistant")
221
+ continue;
222
+ // A subagent session names its role on its own messages, which agrees with
223
+ // the parent's `task` call and needs no cross-session join.
224
+ const agent = text(data.agent);
225
+ if (agent && target.aggregate.kind === "subagent" && !target.aggregate.agentType)
226
+ target.aggregate.agentType = agent;
227
+ const tokens = data.tokens;
228
+ if (!tokens)
229
+ continue;
230
+ const provider = text(data.providerID);
231
+ const model = text(data.modelID);
232
+ // Two-part, because a bare model id collides across providers and the
233
+ // rollup keys on this string.
234
+ const name = provider && model ? `${provider}/${model}` : (model ?? "(unknown)");
235
+ const totals = readUsage(tokens);
236
+ addTokens((bucket.models[name] ??= emptyTokens()), totals);
237
+ target.events.push({ ts, kind: "response", model: name, tokens: totals });
238
+ }
239
+ }
240
+ function applyParts(db, building) {
241
+ for (const row of query(db, "SELECT session_id, time_created, data FROM part ORDER BY id")) {
242
+ const target = building.get(String(row.session_id));
243
+ const data = parseJson(row.data);
244
+ // `step-finish` carries a copy of the message's usage and is deliberately
245
+ // not read; see the note at the top of this module.
246
+ if (!target || !data || data.type !== "tool")
247
+ continue;
248
+ const tool = text(data.tool);
249
+ if (!tool)
250
+ continue;
251
+ const ts = isoAt(row.time_created) ?? target.aggregate.firstTs;
252
+ const bucket = bucketFor(target, ts || null);
253
+ if (!bucket)
254
+ continue;
255
+ bucket.tools[tool] = (bucket.tools[tool] ?? 0) + 1;
256
+ target.events.push({ ts, kind: "tool_use", tool });
257
+ const state = (data.state ?? {});
258
+ if (tool === "task") {
259
+ const input = (state.input ?? {});
260
+ const role = text(input.subagent_type) ?? "(unrecorded)";
261
+ const totals = (bucket.agents[role] ??= { count: 0, maxDepth: 0 });
262
+ totals.count += 1;
263
+ target.events.push({ ts, kind: "agent", name: role });
264
+ }
265
+ if (text(state.status) === "error") {
266
+ bucket.errors += 1;
267
+ target.events.push({ ts, kind: "error" });
268
+ }
269
+ }
270
+ }
271
+ function buildStore(file) {
272
+ const parsed = new Map();
273
+ const key = storeKey(file);
274
+ const db = openDatabase(file);
275
+ if (!db)
276
+ return { key, parsed };
277
+ try {
278
+ const building = new Map();
279
+ for (const session of readSessions(db)) {
280
+ const aggregate = {
281
+ file,
282
+ size: session.size,
283
+ mtimeMs: session.mtimeMs,
284
+ provider: opencodeProvider.name,
285
+ sessionId: session.id,
286
+ kind: session.parentId ? "subagent" : "main",
287
+ project: session.directory,
288
+ firstTs: "",
289
+ lastTs: "",
290
+ days: {},
291
+ malformedLines: 0,
292
+ };
293
+ if (session.parentId)
294
+ aggregate.parentSessionId = session.parentId;
295
+ if (session.title)
296
+ aggregate.title = session.title;
297
+ if (session.version)
298
+ aggregate.toolVersion = session.version;
299
+ building.set(session.id, { aggregate, events: [] });
300
+ }
301
+ applyMessages(db, building);
302
+ applyParts(db, building);
303
+ for (const [id, target] of building)
304
+ parsed.set(id, { aggregate: target.aggregate, events: target.events });
305
+ }
306
+ finally {
307
+ closeQuietly(db);
308
+ }
309
+ return { key, parsed };
310
+ }
311
+ function loadStore(file) {
312
+ const key = storeKey(file);
313
+ if (store && store.key === key)
314
+ return store;
315
+ store = buildStore(file);
316
+ return store;
317
+ }
318
+ export const opencodeProvider = {
319
+ name: "opencode",
320
+ title: "OpenCode",
321
+ source: "The session store at $XDG_DATA_HOME/opencode/opencode.db (default ~/.local/share)",
322
+ capabilities: {
323
+ tokens: true,
324
+ // `tokens.cache.{read,write}` are named fields on every assistant message,
325
+ // disjoint from `input` rather than contained in it.
326
+ cacheTokens: true,
327
+ tools: true,
328
+ // OpenCode records no skill in the store: the part types are text,
329
+ // reasoning, step-start, step-finish and tool, and none names one.
330
+ skills: false,
331
+ subagents: true,
332
+ // Plugins can hook the session lifecycle, but no execution of one is
333
+ // written to any table.
334
+ hooks: false,
335
+ // A tool part records a bare name with no server, so an MCP call cannot be
336
+ // told from a builtin.
337
+ mcp: false,
338
+ // A command reaches the store only as the prompt text it expanded to.
339
+ slashCommands: false,
340
+ projects: true,
341
+ },
342
+ root(context) {
343
+ const xdg = context.env.XDG_DATA_HOME?.trim();
344
+ const candidate = context.override?.trim() ||
345
+ (xdg ? path.join(xdg, "opencode") : path.join(context.home, ".local", "share", "opencode"));
346
+ try {
347
+ return fs.statSync(path.join(candidate, DATABASE)).isFile() ? candidate : null;
348
+ }
349
+ catch {
350
+ return null;
351
+ }
352
+ },
353
+ /**
354
+ * One entry per session, out of a store with no filesystem unit below itself.
355
+ *
356
+ * `FileAggregate` carries exactly one session id, kind, project and time
357
+ * span, so collapsing the store into a single entry would destroy
358
+ * `usage sessions`, `--last`, `--project`, and the main/subagent split. The
359
+ * unit therefore has to be synthesized, and once it is, so does its freshness
360
+ * key -- see {@link readSessions}.
361
+ */
362
+ discover(root, options) {
363
+ const file = path.join(root, DATABASE);
364
+ const db = openDatabase(file);
365
+ if (!db)
366
+ return [];
367
+ let sessions;
368
+ try {
369
+ sessions = readSessions(db);
370
+ }
371
+ finally {
372
+ closeQuietly(db);
373
+ }
374
+ const found = [];
375
+ for (const session of sessions) {
376
+ // `parent_id` is on the row, so subagents are pruned before anything is
377
+ // parsed -- the third provider that can, after claude-code and gemini-cli.
378
+ if (!options.subagents && session.parentId)
379
+ continue;
380
+ if (options.modifiedSince !== undefined && session.mtimeMs < options.modifiedSince)
381
+ continue;
382
+ found.push({
383
+ file,
384
+ relative: `${SHARD}/${session.id}`,
385
+ shard: SHARD,
386
+ kind: session.parentId ? "subagent" : "main",
387
+ size: session.size,
388
+ mtimeMs: session.mtimeMs,
389
+ });
390
+ }
391
+ found.sort((a, b) => (a.relative < b.relative ? -1 : a.relative > b.relative ? 1 : 0));
392
+ return found;
393
+ },
394
+ async read(file) {
395
+ return (await opencodeProvider.parse(file)).aggregate;
396
+ },
397
+ async parse(file) {
398
+ const sessionId = file.relative.slice(`${SHARD}/`.length);
399
+ const found = loadStore(file.file).parsed.get(sessionId);
400
+ if (found)
401
+ return found;
402
+ // A session that vanished between discovery and parsing, or a store that
403
+ // would not open. Neither is fatal: it reports as an empty transcript.
404
+ return {
405
+ aggregate: {
406
+ file: file.file,
407
+ size: file.size,
408
+ mtimeMs: file.mtimeMs,
409
+ provider: opencodeProvider.name,
410
+ sessionId,
411
+ kind: file.kind,
412
+ project: "",
413
+ firstTs: "",
414
+ lastTs: "",
415
+ days: {},
416
+ malformedLines: 0,
417
+ },
418
+ events: [],
419
+ };
420
+ },
421
+ };
422
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/usage/providers/opencode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * A minimal protobuf wire-format reader.
3
+ *
4
+ * Antigravity stores its per-request token usage as unencrypted protobuf blobs
5
+ * inside SQLite columns, and ships no `.proto` — so the field *numbers* are all
6
+ * there is to go on. A protobuf dependency would buy nothing here: there is no
7
+ * schema to compile against, and the wire format itself is four cases.
8
+ *
9
+ * Reading is deliberately total rather than strict: an unknown wire type stops
10
+ * the scan and returns what was read so far, because a partial decode that the
11
+ * caller can validate is more useful than an exception from a format nobody
12
+ * published. Every consumer must treat a missing field as absent, never assume.
13
+ */
14
+ /** Decoded fields, keyed by field number. Protobuf allows repeats, hence arrays. */
15
+ export type ProtoFields = Record<number, ProtoValue[]>;
16
+ export type ProtoValue = number | Buffer;
17
+ /** Decodes one message into its fields. Never throws. */
18
+ export declare function decode(buffer: Buffer): ProtoFields;
19
+ /** The first value of a field as a number, or undefined when absent or not one. */
20
+ export declare function num(fields: ProtoFields, field: number): number | undefined;
21
+ /** A numeric field, defaulting to 0 — protobuf omits zero-valued scalars. */
22
+ export declare function int(fields: ProtoFields, field: number): number;
23
+ /** The first value of a field as a UTF-8 string, or undefined. */
24
+ export declare function str(fields: ProtoFields, field: number): string | undefined;
25
+ /** The first value of a field decoded as a nested message, or undefined. */
26
+ export declare function sub(fields: ProtoFields, field: number): ProtoFields | undefined;
27
+ /** Follows a chain of nested message fields, e.g. `path(root, 5, 9)`. */
28
+ export declare function path(fields: ProtoFields, ...route: number[]): ProtoFields | undefined;
29
+ /**
30
+ * A `google.protobuf.Timestamp` as an ISO instant.
31
+ *
32
+ * Field 1 is seconds since the epoch, field 2 nanoseconds. Returns null for a
33
+ * zero or implausible value so a missing timestamp cannot become 1970.
34
+ */
35
+ export declare function timestamp(fields: ProtoFields | undefined): string | null;
@@ -0,0 +1,125 @@
1
+ /**
2
+ * A minimal protobuf wire-format reader.
3
+ *
4
+ * Antigravity stores its per-request token usage as unencrypted protobuf blobs
5
+ * inside SQLite columns, and ships no `.proto` — so the field *numbers* are all
6
+ * there is to go on. A protobuf dependency would buy nothing here: there is no
7
+ * schema to compile against, and the wire format itself is four cases.
8
+ *
9
+ * Reading is deliberately total rather than strict: an unknown wire type stops
10
+ * the scan and returns what was read so far, because a partial decode that the
11
+ * caller can validate is more useful than an exception from a format nobody
12
+ * published. Every consumer must treat a missing field as absent, never assume.
13
+ */
14
+ const VARINT = 0;
15
+ const FIXED64 = 1;
16
+ const LENGTH = 2;
17
+ const FIXED32 = 5;
18
+ /** Bounds the scan so a corrupt length prefix cannot spin. */
19
+ const MAX_FIELDS = 4096;
20
+ function readVarint(buffer, cursor) {
21
+ let result = 0n;
22
+ let shift = 0n;
23
+ while (cursor.offset < buffer.length) {
24
+ const byte = buffer[cursor.offset++];
25
+ result |= BigInt(byte & 0x7f) << shift;
26
+ if ((byte & 0x80) === 0)
27
+ break;
28
+ shift += 7n;
29
+ // A varint longer than 10 bytes is malformed; stop rather than loop.
30
+ if (shift > 63n)
31
+ break;
32
+ }
33
+ return Number(result);
34
+ }
35
+ /** Decodes one message into its fields. Never throws. */
36
+ export function decode(buffer) {
37
+ const fields = {};
38
+ const cursor = { offset: 0 };
39
+ let seen = 0;
40
+ while (cursor.offset < buffer.length && seen++ < MAX_FIELDS) {
41
+ const tag = readVarint(buffer, cursor);
42
+ const field = tag >> 3;
43
+ const wire = tag & 0x07;
44
+ if (field === 0)
45
+ break;
46
+ let value;
47
+ switch (wire) {
48
+ case VARINT:
49
+ value = readVarint(buffer, cursor);
50
+ break;
51
+ case LENGTH: {
52
+ const length = readVarint(buffer, cursor);
53
+ if (length < 0 || cursor.offset + length > buffer.length)
54
+ return fields;
55
+ value = buffer.subarray(cursor.offset, cursor.offset + length);
56
+ cursor.offset += length;
57
+ break;
58
+ }
59
+ case FIXED32:
60
+ if (cursor.offset + 4 > buffer.length)
61
+ return fields;
62
+ value = buffer.readUInt32LE(cursor.offset);
63
+ cursor.offset += 4;
64
+ break;
65
+ case FIXED64:
66
+ if (cursor.offset + 8 > buffer.length)
67
+ return fields;
68
+ value = Number(buffer.readBigUInt64LE(cursor.offset));
69
+ cursor.offset += 8;
70
+ break;
71
+ default:
72
+ // Groups (3 and 4) are deprecated and absent here; anything else is a
73
+ // desync. Return what was read rather than guessing at a resync point.
74
+ return fields;
75
+ }
76
+ (fields[field] ??= []).push(value);
77
+ }
78
+ return fields;
79
+ }
80
+ /** The first value of a field as a number, or undefined when absent or not one. */
81
+ export function num(fields, field) {
82
+ const value = fields[field]?.[0];
83
+ return typeof value === "number" ? value : undefined;
84
+ }
85
+ /** A numeric field, defaulting to 0 — protobuf omits zero-valued scalars. */
86
+ export function int(fields, field) {
87
+ return num(fields, field) ?? 0;
88
+ }
89
+ /** The first value of a field as a UTF-8 string, or undefined. */
90
+ export function str(fields, field) {
91
+ const value = fields[field]?.[0];
92
+ return Buffer.isBuffer(value) ? value.toString("utf-8") : undefined;
93
+ }
94
+ /** The first value of a field decoded as a nested message, or undefined. */
95
+ export function sub(fields, field) {
96
+ const value = fields[field]?.[0];
97
+ return Buffer.isBuffer(value) ? decode(value) : undefined;
98
+ }
99
+ /** Follows a chain of nested message fields, e.g. `path(root, 5, 9)`. */
100
+ export function path(fields, ...route) {
101
+ let current = fields;
102
+ for (const field of route) {
103
+ if (!current)
104
+ return undefined;
105
+ current = sub(current, field);
106
+ }
107
+ return current;
108
+ }
109
+ /**
110
+ * A `google.protobuf.Timestamp` as an ISO instant.
111
+ *
112
+ * Field 1 is seconds since the epoch, field 2 nanoseconds. Returns null for a
113
+ * zero or implausible value so a missing timestamp cannot become 1970.
114
+ */
115
+ export function timestamp(fields) {
116
+ if (!fields)
117
+ return null;
118
+ const seconds = int(fields, 1);
119
+ if (seconds <= 0)
120
+ return null;
121
+ const millis = seconds * 1000 + Math.floor(int(fields, 2) / 1_000_000);
122
+ const date = new Date(millis);
123
+ return Number.isFinite(date.getTime()) ? date.toISOString() : null;
124
+ }
125
+ //# sourceMappingURL=protobuf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protobuf.js","sourceRoot":"","sources":["../../../src/usage/providers/protobuf.ts"],"names":[],"mappings":"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"}