comprehende 0.1.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 (471) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +94 -0
  3. package/dist/cli/args.d.ts +20 -0
  4. package/dist/cli/args.js +89 -0
  5. package/dist/cli/args.js.map +1 -0
  6. package/dist/cli/commands.d.ts +12 -0
  7. package/dist/cli/commands.js +40 -0
  8. package/dist/cli/commands.js.map +1 -0
  9. package/dist/cli/main.d.ts +2 -0
  10. package/dist/cli/main.js +102 -0
  11. package/dist/cli/main.js.map +1 -0
  12. package/dist/git/blame.d.ts +8 -0
  13. package/dist/git/blame.js +36 -0
  14. package/dist/git/blame.js.map +1 -0
  15. package/dist/git/diff.d.ts +13 -0
  16. package/dist/git/diff.js +332 -0
  17. package/dist/git/diff.js.map +1 -0
  18. package/dist/git/exec.d.ts +10 -0
  19. package/dist/git/exec.js +53 -0
  20. package/dist/git/exec.js.map +1 -0
  21. package/dist/git/log.d.ts +8 -0
  22. package/dist/git/log.js +26 -0
  23. package/dist/git/log.js.map +1 -0
  24. package/dist/git/repo.d.ts +7 -0
  25. package/dist/git/repo.js +45 -0
  26. package/dist/git/repo.js.map +1 -0
  27. package/dist/git/show.d.ts +2 -0
  28. package/dist/git/show.js +18 -0
  29. package/dist/git/show.js.map +1 -0
  30. package/dist/package-root.d.ts +2 -0
  31. package/dist/package-root.js +25 -0
  32. package/dist/package-root.js.map +1 -0
  33. package/dist/review/coverage.d.ts +20 -0
  34. package/dist/review/coverage.js +56 -0
  35. package/dist/review/coverage.js.map +1 -0
  36. package/dist/review/effort.d.ts +1 -0
  37. package/dist/review/effort.js +17 -0
  38. package/dist/review/effort.js.map +1 -0
  39. package/dist/review/generate.d.ts +20 -0
  40. package/dist/review/generate.js +290 -0
  41. package/dist/review/generate.js.map +1 -0
  42. package/dist/schema/blame-runs.d.ts +14 -0
  43. package/dist/schema/blame-runs.js +18 -0
  44. package/dist/schema/blame-runs.js.map +1 -0
  45. package/dist/schema/hunk-meta.d.ts +26 -0
  46. package/dist/schema/hunk-meta.js +107 -0
  47. package/dist/schema/hunk-meta.js.map +1 -0
  48. package/dist/schema/hunk-patch.d.ts +2 -0
  49. package/dist/schema/hunk-patch.js +49 -0
  50. package/dist/schema/hunk-patch.js.map +1 -0
  51. package/dist/schema/identity.d.ts +3 -0
  52. package/dist/schema/identity.js +7 -0
  53. package/dist/schema/identity.js.map +1 -0
  54. package/dist/schema/parse.d.ts +13 -0
  55. package/dist/schema/parse.js +258 -0
  56. package/dist/schema/parse.js.map +1 -0
  57. package/dist/schema/skill-paths.d.ts +7 -0
  58. package/dist/schema/skill-paths.js +11 -0
  59. package/dist/schema/skill-paths.js.map +1 -0
  60. package/dist/schema/types.d.ts +73 -0
  61. package/dist/schema/types.js +4 -0
  62. package/dist/schema/types.js.map +1 -0
  63. package/dist/server/http.d.ts +12 -0
  64. package/dist/server/http.js +270 -0
  65. package/dist/server/http.js.map +1 -0
  66. package/dist/ui/assets/abap-BdImnpbu.js +1 -0
  67. package/dist/ui/assets/actionscript-3-B3316cI-.js +1 -0
  68. package/dist/ui/assets/ada-bCR0ucgS.js +1 -0
  69. package/dist/ui/assets/ahk-CsyLZFj1.js +1 -0
  70. package/dist/ui/assets/ahk2-8Zs4aa1G.js +1 -0
  71. package/dist/ui/assets/andromeeda-C4gqWexZ.js +1 -0
  72. package/dist/ui/assets/angular-html-DA-rfuFy.js +1 -0
  73. package/dist/ui/assets/angular-ts-BrjP3tb8.js +1 -0
  74. package/dist/ui/assets/apache-Pmp26Uib.js +1 -0
  75. package/dist/ui/assets/apex-DhZFqWV2.js +1 -0
  76. package/dist/ui/assets/apl-CORt7UWP.js +1 -0
  77. package/dist/ui/assets/applescript-Co6uUVPk.js +1 -0
  78. package/dist/ui/assets/ara-BRHolxvo.js +1 -0
  79. package/dist/ui/assets/asciidoc-CSVQ5wI8.js +1 -0
  80. package/dist/ui/assets/asm-D_Q5rh1f.js +1 -0
  81. package/dist/ui/assets/astro-HNnZUWAn.js +1 -0
  82. package/dist/ui/assets/aurora-x-D-2ljcwZ.js +1 -0
  83. package/dist/ui/assets/awk-DMzUqQB5.js +1 -0
  84. package/dist/ui/assets/ayu-dark-DYE7WIF3.js +1 -0
  85. package/dist/ui/assets/ayu-light-BA47KaF1.js +1 -0
  86. package/dist/ui/assets/ayu-mirage-32ctXXKs.js +1 -0
  87. package/dist/ui/assets/ballerina-BFfxhgS-.js +1 -0
  88. package/dist/ui/assets/bat-CickPsom.js +1 -0
  89. package/dist/ui/assets/beancount-k_qm7-4y.js +1 -0
  90. package/dist/ui/assets/berry-uYugtg8r.js +1 -0
  91. package/dist/ui/assets/bibtex-CHM0blh-.js +1 -0
  92. package/dist/ui/assets/bicep-Bmn6On1c.js +1 -0
  93. package/dist/ui/assets/bird2-Bx8U0n9b.js +1 -0
  94. package/dist/ui/assets/blade-2xfisSek.js +1 -0
  95. package/dist/ui/assets/bsl-DlhNcFeZ.js +1 -0
  96. package/dist/ui/assets/c-BIGW1oBm.js +1 -0
  97. package/dist/ui/assets/c3-Dp5svz6Z.js +1 -0
  98. package/dist/ui/assets/cadence-Bv_4Rxtq.js +1 -0
  99. package/dist/ui/assets/cairo-KRGpt6FW.js +1 -0
  100. package/dist/ui/assets/catppuccin-frappe-CZL1YF0i.js +1 -0
  101. package/dist/ui/assets/catppuccin-latte-DH-8KZSZ.js +1 -0
  102. package/dist/ui/assets/catppuccin-macchiato-B7yYVSCf.js +1 -0
  103. package/dist/ui/assets/catppuccin-mocha-Ct7hS0mc.js +1 -0
  104. package/dist/ui/assets/chapel-DTp_pixX.js +1 -0
  105. package/dist/ui/assets/clarity-Dn5IMItf.js +1 -0
  106. package/dist/ui/assets/clojure-P80f7IUj.js +1 -0
  107. package/dist/ui/assets/cmake-D1j8_8rp.js +1 -0
  108. package/dist/ui/assets/cobol-nBiQ_Alo.js +1 -0
  109. package/dist/ui/assets/codeowners-Bp6g37R7.js +1 -0
  110. package/dist/ui/assets/codeql-DsOJ9woJ.js +1 -0
  111. package/dist/ui/assets/coffee-Ch7k5sss.js +1 -0
  112. package/dist/ui/assets/common-lisp-Cg-RD9OK.js +1 -0
  113. package/dist/ui/assets/coq-C7JzOVbR.js +1 -0
  114. package/dist/ui/assets/cpp-BMRokrvK.js +1 -0
  115. package/dist/ui/assets/crystal-DGywbUpC.js +1 -0
  116. package/dist/ui/assets/csharp-DSvCPggb.js +1 -0
  117. package/dist/ui/assets/css-CLj8gQPS.js +1 -0
  118. package/dist/ui/assets/csv-fuZLfV_i.js +1 -0
  119. package/dist/ui/assets/cue-D82EKSYY.js +1 -0
  120. package/dist/ui/assets/cypher-COkxafJQ.js +1 -0
  121. package/dist/ui/assets/d-85-TOEBH.js +1 -0
  122. package/dist/ui/assets/dark-plus-C3mMm8J8.js +1 -0
  123. package/dist/ui/assets/dart-bE4Kk8sk.js +1 -0
  124. package/dist/ui/assets/dax-CEL-wOlO.js +1 -0
  125. package/dist/ui/assets/desktop-BmXAJ9_W.js +1 -0
  126. package/dist/ui/assets/diff-D97Zzqfu.js +1 -0
  127. package/dist/ui/assets/docker-BcOcwvcX.js +1 -0
  128. package/dist/ui/assets/dotenv-Da5cRb03.js +1 -0
  129. package/dist/ui/assets/dracula-BzJJZx-M.js +1 -0
  130. package/dist/ui/assets/dracula-soft-BXkSAIEj.js +1 -0
  131. package/dist/ui/assets/dream-maker-BtqSS_iP.js +1 -0
  132. package/dist/ui/assets/edge-FbVlp4U3.js +1 -0
  133. package/dist/ui/assets/elixir-CkH2-t6x.js +1 -0
  134. package/dist/ui/assets/elm-DbKCFpqz.js +1 -0
  135. package/dist/ui/assets/emacs-lisp-C_m_b--Z.js +1 -0
  136. package/dist/ui/assets/erb-DXfck5VN.js +1 -0
  137. package/dist/ui/assets/erlang-DsQrWhSR.js +1 -0
  138. package/dist/ui/assets/everforest-dark-BgDCqdQA.js +1 -0
  139. package/dist/ui/assets/everforest-light-C8M2exoo.js +1 -0
  140. package/dist/ui/assets/fennel-BYunw83y.js +1 -0
  141. package/dist/ui/assets/fish-BvzEVeQv.js +1 -0
  142. package/dist/ui/assets/fluent-C4IJs8-o.js +1 -0
  143. package/dist/ui/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
  144. package/dist/ui/assets/fortran-free-form-BxgE0vQu.js +1 -0
  145. package/dist/ui/assets/fsharp-CXgrBDvD.js +1 -0
  146. package/dist/ui/assets/gdresource-TyuKm33G.js +1 -0
  147. package/dist/ui/assets/gdscript-DqcFQ5yU.js +1 -0
  148. package/dist/ui/assets/gdshader-DkwncUOv.js +1 -0
  149. package/dist/ui/assets/genie-D0YGMca9.js +1 -0
  150. package/dist/ui/assets/gherkin-DyxjwDmM.js +1 -0
  151. package/dist/ui/assets/git-commit-F4YmCXRG.js +1 -0
  152. package/dist/ui/assets/git-rebase-r7XF79zn.js +1 -0
  153. package/dist/ui/assets/github-dark-DHJKELXO.js +1 -0
  154. package/dist/ui/assets/github-dark-default-Cuk6v7N8.js +1 -0
  155. package/dist/ui/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  156. package/dist/ui/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  157. package/dist/ui/assets/github-light-DAi9KRSo.js +1 -0
  158. package/dist/ui/assets/github-light-default-D7oLnXFd.js +1 -0
  159. package/dist/ui/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  160. package/dist/ui/assets/gleam-BspZqrRM.js +1 -0
  161. package/dist/ui/assets/glimmer-js-ByusRIyA.js +1 -0
  162. package/dist/ui/assets/glimmer-ts-BfAWNZQY.js +1 -0
  163. package/dist/ui/assets/glsl-DplSGwfg.js +1 -0
  164. package/dist/ui/assets/gn-n2N0HUVH.js +1 -0
  165. package/dist/ui/assets/gnuplot-DdkO51Og.js +1 -0
  166. package/dist/ui/assets/go-C27-OAKa.js +1 -0
  167. package/dist/ui/assets/graphql-ChdNCCLP.js +1 -0
  168. package/dist/ui/assets/groovy-gcz8RCvz.js +1 -0
  169. package/dist/ui/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  170. package/dist/ui/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  171. package/dist/ui/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  172. package/dist/ui/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  173. package/dist/ui/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  174. package/dist/ui/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  175. package/dist/ui/assets/hack-BWmVpMyf.js +1 -0
  176. package/dist/ui/assets/haml-D5jkg6IW.js +1 -0
  177. package/dist/ui/assets/handlebars-BpdQsYii.js +1 -0
  178. package/dist/ui/assets/haskell-Df6bDoY_.js +1 -0
  179. package/dist/ui/assets/haxe-CfZj7gIn.js +1 -0
  180. package/dist/ui/assets/hcl-BWvSN4gD.js +1 -0
  181. package/dist/ui/assets/hjson-D5-asLiD.js +1 -0
  182. package/dist/ui/assets/hlsl-D3lLCCz7.js +1 -0
  183. package/dist/ui/assets/horizon-BUw7H-hv.js +1 -0
  184. package/dist/ui/assets/horizon-bright-CUuTKBJd.js +1 -0
  185. package/dist/ui/assets/houston-DnULxvSX.js +1 -0
  186. package/dist/ui/assets/html-derivative-DlHx6ybY.js +1 -0
  187. package/dist/ui/assets/html-pp8916En.js +1 -0
  188. package/dist/ui/assets/http-jrhK8wxY.js +1 -0
  189. package/dist/ui/assets/hurl-irOxFIW8.js +1 -0
  190. package/dist/ui/assets/hxml-2-FPmUDs.js +1 -0
  191. package/dist/ui/assets/hy-DFXneXwc.js +1 -0
  192. package/dist/ui/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2 +0 -0
  193. package/dist/ui/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff +0 -0
  194. package/dist/ui/assets/ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff +0 -0
  195. package/dist/ui/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2 +0 -0
  196. package/dist/ui/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff +0 -0
  197. package/dist/ui/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2 +0 -0
  198. package/dist/ui/assets/ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff +0 -0
  199. package/dist/ui/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2 +0 -0
  200. package/dist/ui/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  201. package/dist/ui/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  202. package/dist/ui/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
  203. package/dist/ui/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  204. package/dist/ui/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2 +0 -0
  205. package/dist/ui/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff +0 -0
  206. package/dist/ui/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2 +0 -0
  207. package/dist/ui/assets/ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.woff +0 -0
  208. package/dist/ui/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2 +0 -0
  209. package/dist/ui/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff +0 -0
  210. package/dist/ui/assets/ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.woff +0 -0
  211. package/dist/ui/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2 +0 -0
  212. package/dist/ui/assets/ibm-plex-sans-cyrillic-400-normal-BTotfTJu.woff +0 -0
  213. package/dist/ui/assets/ibm-plex-sans-cyrillic-400-normal-DZqxrq2p.woff2 +0 -0
  214. package/dist/ui/assets/ibm-plex-sans-cyrillic-500-normal-ByOcLdNv.woff +0 -0
  215. package/dist/ui/assets/ibm-plex-sans-cyrillic-500-normal-CocWQlwt.woff2 +0 -0
  216. package/dist/ui/assets/ibm-plex-sans-cyrillic-600-normal-71GNu3SW.woff2 +0 -0
  217. package/dist/ui/assets/ibm-plex-sans-cyrillic-600-normal-BGq0mW3O.woff +0 -0
  218. package/dist/ui/assets/ibm-plex-sans-cyrillic-ext-400-normal-Dsrv2Tcn.woff +0 -0
  219. package/dist/ui/assets/ibm-plex-sans-cyrillic-ext-400-normal-g30qAdWV.woff2 +0 -0
  220. package/dist/ui/assets/ibm-plex-sans-cyrillic-ext-500-normal-Cs5J6C77.woff2 +0 -0
  221. package/dist/ui/assets/ibm-plex-sans-cyrillic-ext-500-normal-DB5PtV2g.woff +0 -0
  222. package/dist/ui/assets/ibm-plex-sans-cyrillic-ext-600-normal-Bz0x94Yp.woff +0 -0
  223. package/dist/ui/assets/ibm-plex-sans-cyrillic-ext-600-normal-DUMzJB7m.woff2 +0 -0
  224. package/dist/ui/assets/ibm-plex-sans-greek-400-normal-D9ESIMu3.woff +0 -0
  225. package/dist/ui/assets/ibm-plex-sans-greek-400-normal-_efipK4i.woff2 +0 -0
  226. package/dist/ui/assets/ibm-plex-sans-greek-500-normal-CuWXN6rf.woff +0 -0
  227. package/dist/ui/assets/ibm-plex-sans-greek-500-normal-JMMifIXV.woff2 +0 -0
  228. package/dist/ui/assets/ibm-plex-sans-greek-600-normal-D-CqTdkO.woff +0 -0
  229. package/dist/ui/assets/ibm-plex-sans-greek-600-normal-DzTrcv_p.woff2 +0 -0
  230. package/dist/ui/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
  231. package/dist/ui/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
  232. package/dist/ui/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
  233. package/dist/ui/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
  234. package/dist/ui/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
  235. package/dist/ui/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
  236. package/dist/ui/assets/ibm-plex-sans-latin-ext-400-normal-C5H60-Va.woff2 +0 -0
  237. package/dist/ui/assets/ibm-plex-sans-latin-ext-400-normal-RBey6euL.woff +0 -0
  238. package/dist/ui/assets/ibm-plex-sans-latin-ext-500-normal-D0aIdm-b.woff +0 -0
  239. package/dist/ui/assets/ibm-plex-sans-latin-ext-500-normal-DakdToA3.woff2 +0 -0
  240. package/dist/ui/assets/ibm-plex-sans-latin-ext-600-normal-DIrixKbi.woff +0 -0
  241. package/dist/ui/assets/ibm-plex-sans-latin-ext-600-normal-DOrvGEcy.woff2 +0 -0
  242. package/dist/ui/assets/ibm-plex-sans-vietnamese-400-normal-DG4YqDda.woff2 +0 -0
  243. package/dist/ui/assets/ibm-plex-sans-vietnamese-400-normal-fK1oJ5dG.woff +0 -0
  244. package/dist/ui/assets/ibm-plex-sans-vietnamese-500-normal-BEb3_waV.woff +0 -0
  245. package/dist/ui/assets/ibm-plex-sans-vietnamese-500-normal-e4dixQRQ.woff2 +0 -0
  246. package/dist/ui/assets/ibm-plex-sans-vietnamese-600-normal-DgdngZtN.woff +0 -0
  247. package/dist/ui/assets/ibm-plex-sans-vietnamese-600-normal-DpPYBSTl.woff2 +0 -0
  248. package/dist/ui/assets/imba-DGztddWO.js +1 -0
  249. package/dist/ui/assets/index-BCZwzr3E.js +1585 -0
  250. package/dist/ui/assets/index-DsGDgUsX.css +1 -0
  251. package/dist/ui/assets/ini-BEwlwnbL.js +1 -0
  252. package/dist/ui/assets/java-CylS5w8V.js +1 -0
  253. package/dist/ui/assets/javascript-wDzz0qaB.js +1 -0
  254. package/dist/ui/assets/jinja-f2NsQr07.js +1 -0
  255. package/dist/ui/assets/jison-wvAkD_A8.js +1 -0
  256. package/dist/ui/assets/json-Cp-IABpG.js +1 -0
  257. package/dist/ui/assets/json5-C9tS-k6U.js +1 -0
  258. package/dist/ui/assets/jsonc-Des-eS-w.js +1 -0
  259. package/dist/ui/assets/jsonl-DcaNXYhu.js +1 -0
  260. package/dist/ui/assets/jsonnet-DFQXde-d.js +1 -0
  261. package/dist/ui/assets/jssm-C2t-YnRu.js +1 -0
  262. package/dist/ui/assets/jsx-g9-lgVsj.js +1 -0
  263. package/dist/ui/assets/julia-5Bft2YPA.js +1 -0
  264. package/dist/ui/assets/just-Cwhn7H3k.js +1 -0
  265. package/dist/ui/assets/kanagawa-dragon-BuwD2xS4.js +1 -0
  266. package/dist/ui/assets/kanagawa-lotus-C3DzagqV.js +1 -0
  267. package/dist/ui/assets/kanagawa-wave-DFGoQZhC.js +1 -0
  268. package/dist/ui/assets/kdl-DV7GczEv.js +1 -0
  269. package/dist/ui/assets/kotlin-BdnUsdx6.js +1 -0
  270. package/dist/ui/assets/kusto-wEQ09or8.js +1 -0
  271. package/dist/ui/assets/laserwave-DUszq2jm.js +1 -0
  272. package/dist/ui/assets/latex-D5pSuvFb.js +1 -0
  273. package/dist/ui/assets/lean-BZvkOJ9d.js +1 -0
  274. package/dist/ui/assets/less-B1dDrJ26.js +1 -0
  275. package/dist/ui/assets/light-plus-B7mTdjB0.js +1 -0
  276. package/dist/ui/assets/liquid-C0sCDyMI.js +1 -0
  277. package/dist/ui/assets/llvm-BZoOZj88.js +1 -0
  278. package/dist/ui/assets/log-2UxHyX5q.js +1 -0
  279. package/dist/ui/assets/logo-BtOb2qkB.js +1 -0
  280. package/dist/ui/assets/lua-BaeVxFsk.js +1 -0
  281. package/dist/ui/assets/luau-BnpPk5vE.js +1 -0
  282. package/dist/ui/assets/make-CHLpvVh8.js +1 -0
  283. package/dist/ui/assets/markdown-Cvjx9yec.js +1 -0
  284. package/dist/ui/assets/marko-DjSrsDqO.js +1 -0
  285. package/dist/ui/assets/material-theme-D5KoaKCx.js +1 -0
  286. package/dist/ui/assets/material-theme-darker-BfHTSMKl.js +1 -0
  287. package/dist/ui/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  288. package/dist/ui/assets/material-theme-ocean-CyktbL80.js +1 -0
  289. package/dist/ui/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  290. package/dist/ui/assets/matlab-D7o27uSR.js +1 -0
  291. package/dist/ui/assets/mdc-D1_yUvq7.js +1 -0
  292. package/dist/ui/assets/mdx-Cmh6b_Ma.js +1 -0
  293. package/dist/ui/assets/mermaid-CQcHuHx7.js +1 -0
  294. package/dist/ui/assets/min-dark-CafNBF8u.js +1 -0
  295. package/dist/ui/assets/min-light-CTRr51gU.js +1 -0
  296. package/dist/ui/assets/mipsasm-CKIfxQSi.js +1 -0
  297. package/dist/ui/assets/mojo-DJz3ZmWd.js +1 -0
  298. package/dist/ui/assets/monokai-BRVnQi9A.js +1 -0
  299. package/dist/ui/assets/moonbit-CHtswR0a.js +1 -0
  300. package/dist/ui/assets/move-el3G9tDJ.js +1 -0
  301. package/dist/ui/assets/narrat-DRg8JJMk.js +1 -0
  302. package/dist/ui/assets/nextflow-C-mBbutL.js +1 -0
  303. package/dist/ui/assets/nextflow-groovy-vE_lwT2v.js +1 -0
  304. package/dist/ui/assets/nginx-BpAMiNFr.js +1 -0
  305. package/dist/ui/assets/night-owl-C39BiMTA.js +1 -0
  306. package/dist/ui/assets/night-owl-light-CMTm3GFP.js +1 -0
  307. package/dist/ui/assets/nim-BIad80T-.js +1 -0
  308. package/dist/ui/assets/nix-CwoSXNpI.js +1 -0
  309. package/dist/ui/assets/nord-Ddv68eIx.js +1 -0
  310. package/dist/ui/assets/nsis-BlV79W_Q.js +1 -0
  311. package/dist/ui/assets/nushell-D3jzshHO.js +1 -0
  312. package/dist/ui/assets/objective-c-DXmwc3jG.js +1 -0
  313. package/dist/ui/assets/objective-cpp-CLxacb5B.js +1 -0
  314. package/dist/ui/assets/ocaml-C0hk2d4L.js +1 -0
  315. package/dist/ui/assets/odin-BBf5iR-q.js +1 -0
  316. package/dist/ui/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  317. package/dist/ui/assets/one-light-C3Wv6jpd.js +1 -0
  318. package/dist/ui/assets/openscad-C4EeE6gA.js +1 -0
  319. package/dist/ui/assets/org-DM6o9KBp.js +1 -0
  320. package/dist/ui/assets/pascal-D93ZcfNL.js +1 -0
  321. package/dist/ui/assets/perl-B9cMNwum.js +1 -0
  322. package/dist/ui/assets/php-Csjmro_R.js +1 -0
  323. package/dist/ui/assets/pierre-dark-CyvmCCZW.js +1 -0
  324. package/dist/ui/assets/pierre-dark-protanopia-deuteranopia-Rgc0TwpF.js +1 -0
  325. package/dist/ui/assets/pierre-dark-soft-BHGpRqa4.js +1 -0
  326. package/dist/ui/assets/pierre-dark-tritanopia-Beq2gCRQ.js +1 -0
  327. package/dist/ui/assets/pierre-dark-vibrant-BWBVywrn.js +1 -0
  328. package/dist/ui/assets/pierre-light-480U9XYS.js +1 -0
  329. package/dist/ui/assets/pierre-light-protanopia-deuteranopia-CaVOBURG.js +1 -0
  330. package/dist/ui/assets/pierre-light-soft-CVdyfjmI.js +1 -0
  331. package/dist/ui/assets/pierre-light-tritanopia-B4_gpKOM.js +1 -0
  332. package/dist/ui/assets/pierre-light-vibrant-DdTDNdfJ.js +1 -0
  333. package/dist/ui/assets/pkl-u5AG7uiY.js +1 -0
  334. package/dist/ui/assets/plastic-3e1v2bzS.js +1 -0
  335. package/dist/ui/assets/plsql-ChMvpjG-.js +1 -0
  336. package/dist/ui/assets/po-BTJTHyun.js +1 -0
  337. package/dist/ui/assets/poimandres-CS3Unz2-.js +1 -0
  338. package/dist/ui/assets/polar-C0HS_06l.js +1 -0
  339. package/dist/ui/assets/postcss-CXtECtnM.js +1 -0
  340. package/dist/ui/assets/powerquery-CEu0bR-o.js +1 -0
  341. package/dist/ui/assets/powershell-BmBUJMz7.js +1 -0
  342. package/dist/ui/assets/prisma-Vru482bI.js +1 -0
  343. package/dist/ui/assets/prolog-CbFg5uaA.js +1 -0
  344. package/dist/ui/assets/proto-C7zT0LnQ.js +1 -0
  345. package/dist/ui/assets/pug-DKIMFp6K.js +1 -0
  346. package/dist/ui/assets/puppet-BMWR74SV.js +1 -0
  347. package/dist/ui/assets/purescript-CklMAg4u.js +1 -0
  348. package/dist/ui/assets/python-B6aJPvgy.js +1 -0
  349. package/dist/ui/assets/qml-3beO22l8.js +1 -0
  350. package/dist/ui/assets/qmldir-C8lEn-DE.js +1 -0
  351. package/dist/ui/assets/qss-IeuSbFQv.js +1 -0
  352. package/dist/ui/assets/r-Cf5RLm7j.js +1 -0
  353. package/dist/ui/assets/racket-BqYA7rlc.js +1 -0
  354. package/dist/ui/assets/raku-DXvB9xmW.js +1 -0
  355. package/dist/ui/assets/razor-BjBPvh-w.js +1 -0
  356. package/dist/ui/assets/rbs-CpoqiR4B.js +1 -0
  357. package/dist/ui/assets/red-hvxz__6c.js +1 -0
  358. package/dist/ui/assets/reg-C-SQnVFl.js +1 -0
  359. package/dist/ui/assets/regexp-CDVJQ6XC.js +1 -0
  360. package/dist/ui/assets/rel-C3B-1QV4.js +1 -0
  361. package/dist/ui/assets/riscv-BM1_JUlF.js +1 -0
  362. package/dist/ui/assets/ron-D8l8udqQ.js +1 -0
  363. package/dist/ui/assets/rose-pine-5qJOZa0Y.js +1 -0
  364. package/dist/ui/assets/rose-pine-dawn-zx0QlTCp.js +1 -0
  365. package/dist/ui/assets/rose-pine-moon-C9pEdX9L.js +1 -0
  366. package/dist/ui/assets/rosmsg-BJDFO7_C.js +1 -0
  367. package/dist/ui/assets/rst-bs7f0vWN.js +1 -0
  368. package/dist/ui/assets/ruby-C0TQ7zu5.js +1 -0
  369. package/dist/ui/assets/rust-B1yitclQ.js +1 -0
  370. package/dist/ui/assets/sas-DEy46yEz.js +1 -0
  371. package/dist/ui/assets/sass-Cj5Yp3dK.js +1 -0
  372. package/dist/ui/assets/scala-CqE71os6.js +1 -0
  373. package/dist/ui/assets/scheme-C98Dy4si.js +1 -0
  374. package/dist/ui/assets/scss-D5BDwBP9.js +1 -0
  375. package/dist/ui/assets/sdbl-DVxCFoDh.js +1 -0
  376. package/dist/ui/assets/shaderlab-Dg9Lc6iA.js +1 -0
  377. package/dist/ui/assets/shellscript-Yzrsuije.js +1 -0
  378. package/dist/ui/assets/shellsession-BADoaaVG.js +1 -0
  379. package/dist/ui/assets/slack-dark-BthQWCQV.js +1 -0
  380. package/dist/ui/assets/slack-ochin-DqwNpetd.js +1 -0
  381. package/dist/ui/assets/smalltalk-BOQMe2GC.js +1 -0
  382. package/dist/ui/assets/smithy-cds9vsN8.js +1 -0
  383. package/dist/ui/assets/snazzy-light-Bw305WKR.js +1 -0
  384. package/dist/ui/assets/solarized-dark-CpvCGNkr.js +1 -0
  385. package/dist/ui/assets/solarized-light-Dlz6yCKv.js +1 -0
  386. package/dist/ui/assets/solidity-DijEV5ha.js +1 -0
  387. package/dist/ui/assets/source-serif-4-cyrillic-400-normal-B8Z6Jvzv.woff +0 -0
  388. package/dist/ui/assets/source-serif-4-cyrillic-400-normal-C44pakCn.woff2 +0 -0
  389. package/dist/ui/assets/source-serif-4-cyrillic-600-normal-BDP5YDHD.woff2 +0 -0
  390. package/dist/ui/assets/source-serif-4-cyrillic-600-normal-DFnC3vAY.woff +0 -0
  391. package/dist/ui/assets/source-serif-4-cyrillic-ext-400-normal-CWV284fw.woff2 +0 -0
  392. package/dist/ui/assets/source-serif-4-cyrillic-ext-400-normal-DLkyKLvH.woff +0 -0
  393. package/dist/ui/assets/source-serif-4-cyrillic-ext-600-normal-D_E8FDgP.woff2 +0 -0
  394. package/dist/ui/assets/source-serif-4-cyrillic-ext-600-normal-DiT2IGQm.woff +0 -0
  395. package/dist/ui/assets/source-serif-4-greek-400-normal-BccYJ-vZ.woff +0 -0
  396. package/dist/ui/assets/source-serif-4-greek-400-normal-Cw5-AHNN.woff2 +0 -0
  397. package/dist/ui/assets/source-serif-4-greek-600-normal-DdRkKr-1.woff2 +0 -0
  398. package/dist/ui/assets/source-serif-4-greek-600-normal-DhXQw1Kl.woff +0 -0
  399. package/dist/ui/assets/source-serif-4-latin-400-normal-DJ5YJwmz.woff2 +0 -0
  400. package/dist/ui/assets/source-serif-4-latin-400-normal-Dn3IlU-Z.woff +0 -0
  401. package/dist/ui/assets/source-serif-4-latin-600-normal-DMD1h6_f.woff +0 -0
  402. package/dist/ui/assets/source-serif-4-latin-600-normal-DouSKlru.woff2 +0 -0
  403. package/dist/ui/assets/source-serif-4-latin-ext-400-normal-CEpydyUl.woff +0 -0
  404. package/dist/ui/assets/source-serif-4-latin-ext-400-normal-Cp7z-ARB.woff2 +0 -0
  405. package/dist/ui/assets/source-serif-4-latin-ext-600-normal-0sIUyHMO.woff2 +0 -0
  406. package/dist/ui/assets/source-serif-4-latin-ext-600-normal-C6NNqpJh.woff +0 -0
  407. package/dist/ui/assets/source-serif-4-vietnamese-400-normal-BbG3LG1A.woff2 +0 -0
  408. package/dist/ui/assets/source-serif-4-vietnamese-400-normal-DR1UuFon.woff +0 -0
  409. package/dist/ui/assets/source-serif-4-vietnamese-600-normal-B0WJbuqT.woff +0 -0
  410. package/dist/ui/assets/source-serif-4-vietnamese-600-normal-CznyfUKR.woff2 +0 -0
  411. package/dist/ui/assets/soy-8wufbnw4.js +1 -0
  412. package/dist/ui/assets/sparql-rVzFXLq3.js +1 -0
  413. package/dist/ui/assets/splunk-BtCnVYZw.js +1 -0
  414. package/dist/ui/assets/sql-CRqJ_cUM.js +1 -0
  415. package/dist/ui/assets/ssh-config-_ykCGR6B.js +1 -0
  416. package/dist/ui/assets/stata-DI20mbqo.js +1 -0
  417. package/dist/ui/assets/stylus-BEDo0Tqx.js +1 -0
  418. package/dist/ui/assets/surrealql-Cjom0U5J.js +1 -0
  419. package/dist/ui/assets/svelte-Cy7k_4gC.js +1 -0
  420. package/dist/ui/assets/swift-C2oV4EkX.js +1 -0
  421. package/dist/ui/assets/synthwave-84-CbfX1IO0.js +1 -0
  422. package/dist/ui/assets/system-verilog-0hqHdDBg.js +1 -0
  423. package/dist/ui/assets/systemd-4A_iFExJ.js +1 -0
  424. package/dist/ui/assets/talonscript-CkByrt1z.js +1 -0
  425. package/dist/ui/assets/tasl-QIJgUcNo.js +1 -0
  426. package/dist/ui/assets/tcl-dwOrl1Do.js +1 -0
  427. package/dist/ui/assets/templ-DhtptRzy.js +1 -0
  428. package/dist/ui/assets/terraform-BETggiCN.js +1 -0
  429. package/dist/ui/assets/tex-D96PA37w.js +1 -0
  430. package/dist/ui/assets/tokyo-night-hegEt444.js +1 -0
  431. package/dist/ui/assets/toml-vGWfd6FD.js +1 -0
  432. package/dist/ui/assets/ts-tags-D351s5mN.js +1 -0
  433. package/dist/ui/assets/tsv-B_m7g4N7.js +1 -0
  434. package/dist/ui/assets/tsx-COt5Ahok.js +1 -0
  435. package/dist/ui/assets/turtle-BsS91CYL.js +1 -0
  436. package/dist/ui/assets/twig-27uCiNez.js +1 -0
  437. package/dist/ui/assets/typescript-BPQ3VLAy.js +1 -0
  438. package/dist/ui/assets/typespec-CAFt9gP4.js +1 -0
  439. package/dist/ui/assets/typst-BUadGCkm.js +1 -0
  440. package/dist/ui/assets/v-BGw2Nkan.js +1 -0
  441. package/dist/ui/assets/vala-CsfeWuGM.js +1 -0
  442. package/dist/ui/assets/vb-Cu-pLBUe.js +1 -0
  443. package/dist/ui/assets/verilog-nZwndyjY.js +1 -0
  444. package/dist/ui/assets/vesper-DRje8inN.js +1 -0
  445. package/dist/ui/assets/vhdl-CeAyd5Ju.js +1 -0
  446. package/dist/ui/assets/viml-CJc9bBzg.js +1 -0
  447. package/dist/ui/assets/vitesse-black-Bkuqu6BP.js +1 -0
  448. package/dist/ui/assets/vitesse-dark-D0r3Knsf.js +1 -0
  449. package/dist/ui/assets/vitesse-light-CVO1_9PV.js +1 -0
  450. package/dist/ui/assets/vue-BqiEGhQt.js +1 -0
  451. package/dist/ui/assets/vue-html-AaS7Mt5G.js +1 -0
  452. package/dist/ui/assets/vue-vine-BoDAl6tE.js +1 -0
  453. package/dist/ui/assets/vyper-CDx5xZoG.js +1 -0
  454. package/dist/ui/assets/wasm-CG6Dc4jp.js +1 -0
  455. package/dist/ui/assets/wasm-MzD3tlZU.js +1 -0
  456. package/dist/ui/assets/wenyan-BV7otONQ.js +1 -0
  457. package/dist/ui/assets/wgsl-Dx-B1_4e.js +1 -0
  458. package/dist/ui/assets/wikitext-BhOHFoWU.js +1 -0
  459. package/dist/ui/assets/wit-5i3qLPDT.js +1 -0
  460. package/dist/ui/assets/wolfram-lXgVvXCa.js +1 -0
  461. package/dist/ui/assets/worker-DsKBD11i.js +156 -0
  462. package/dist/ui/assets/xml-sdJ4AIDG.js +1 -0
  463. package/dist/ui/assets/xsl-CtQFsRM5.js +1 -0
  464. package/dist/ui/assets/yaml-Buea-lGh.js +1 -0
  465. package/dist/ui/assets/zenscript-DVFEvuxE.js +1 -0
  466. package/dist/ui/assets/zig-VOosw3JB.js +1 -0
  467. package/dist/ui/index.html +13 -0
  468. package/package.json +74 -0
  469. package/skills/comprehende/SKILL.md +68 -0
  470. package/skills/comprehende/references/example.md +55 -0
  471. package/skills/comprehende/references/review.schema.json +92 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/review/coverage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function reviewEffort(fileCount: number, hunkCount: number): 1 | 2 | 3 | 4 | 5;
@@ -0,0 +1,17 @@
1
+ export function reviewEffort(fileCount, hunkCount) {
2
+ const score = fileCount + hunkCount / 3;
3
+ if (score <= 3) {
4
+ return 1;
5
+ }
6
+ if (score <= 8) {
7
+ return 2;
8
+ }
9
+ if (score <= 20) {
10
+ return 3;
11
+ }
12
+ if (score <= 40) {
13
+ return 4;
14
+ }
15
+ return 5;
16
+ }
17
+ //# sourceMappingURL=effort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effort.js","sourceRoot":"","sources":["../../src/review/effort.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,SAAiB,EAAE,SAAiB;IAC/D,MAAM,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;IACxC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type CommitInfo } from "../git/log.ts";
2
+ import type { HunkIndex, HunkRef, ReviewDocument, ReviewGroup } from "../schema/types.ts";
3
+ export type Kind = "contracts" | "feature" | "tests" | "docs" | "chores";
4
+ export type Cluster = {
5
+ id: string;
6
+ kind: Kind;
7
+ title: string;
8
+ hunks: HunkRef[];
9
+ };
10
+ export declare function generateReviewDocument(cwd: string, index: HunkIndex): Promise<ReviewDocument>;
11
+ export declare function clusterHunks(hunks: HunkRef[]): Cluster[];
12
+ export type GroupBrief = {
13
+ summary: string;
14
+ lookFor: string[];
15
+ };
16
+ export declare function briefGroup(cluster: Cluster, paths: string[], commits: CommitInfo[]): GroupBrief;
17
+ export declare function assignDependsOn(drafts: {
18
+ group: ReviewGroup;
19
+ kind: Kind;
20
+ }[]): void;
@@ -0,0 +1,290 @@
1
+ import { toHunkRef } from "../git/diff.js";
2
+ import { commitsTouching, listCommits } from "../git/log.js";
3
+ import { hunkKey } from "../schema/identity.js";
4
+ const CHORE_FILES = new Set([
5
+ "package.json",
6
+ "package-lock.json",
7
+ "pnpm-lock.yaml",
8
+ "yarn.lock",
9
+ "Cargo.lock",
10
+ "go.sum",
11
+ "composer.lock",
12
+ ".gitignore",
13
+ ".gitattributes",
14
+ ".editorconfig",
15
+ ".nvmrc",
16
+ "LICENSE",
17
+ "LICENSE.md",
18
+ ]);
19
+ export async function generateReviewDocument(cwd, index) {
20
+ const clusters = clusterHunks(index.hunks);
21
+ const drafts = [];
22
+ let order = 0;
23
+ for (const cluster of clusters) {
24
+ const paths = unique(cluster.hunks.flatMap((hunk) => (hunk.oldPath !== undefined ? [hunk.oldPath, hunk.path] : [hunk.path])));
25
+ const commits = await commitsTouching(cwd, index.source.baseRef, index.source.headRef, paths);
26
+ const brief = briefGroup(cluster, paths, commits);
27
+ const group = {
28
+ id: cluster.id,
29
+ title: cluster.title,
30
+ summary: brief.summary,
31
+ suggestedOrder: order,
32
+ hunkRefs: cluster.hunks.map(toHunkRef),
33
+ };
34
+ if (brief.lookFor.length > 0) {
35
+ group.lookFor = brief.lookFor;
36
+ }
37
+ drafts.push({ group, kind: cluster.kind });
38
+ order += 1;
39
+ }
40
+ assignDependsOn(drafts);
41
+ const allCommits = await listCommits(cwd, index.source.baseRef, index.source.headRef);
42
+ const tickets = ticketsFromCommits(allCommits);
43
+ const walkthrough = walkthroughFrom(allCommits);
44
+ const document = {
45
+ version: 1,
46
+ source: index.source,
47
+ groups: drafts.map((draft) => draft.group),
48
+ };
49
+ if (walkthrough !== undefined) {
50
+ document.walkthrough = walkthrough;
51
+ }
52
+ if (tickets.length > 0) {
53
+ document.tickets = tickets;
54
+ }
55
+ return document;
56
+ }
57
+ export function clusterHunks(hunks) {
58
+ const buckets = new Map();
59
+ const take = (id, kind, title) => {
60
+ const existing = buckets.get(id);
61
+ if (existing !== undefined) {
62
+ return existing;
63
+ }
64
+ const cluster = { id, kind, title, hunks: [] };
65
+ buckets.set(id, cluster);
66
+ return cluster;
67
+ };
68
+ for (const hunk of hunks) {
69
+ const kind = classify(hunk.path);
70
+ if (kind === "chores") {
71
+ take("chores", "chores", "Chores and lockfiles").hunks.push(hunk);
72
+ continue;
73
+ }
74
+ if (kind === "docs") {
75
+ take("docs", "docs", "Documentation").hunks.push(hunk);
76
+ continue;
77
+ }
78
+ if (kind === "contracts") {
79
+ take("contracts", "contracts", "Contracts and types").hunks.push(hunk);
80
+ continue;
81
+ }
82
+ if (kind === "tests") {
83
+ const partner = partnerKey(hunk.path);
84
+ const feature = buckets.get(`feature:${partner}`);
85
+ if (feature !== undefined) {
86
+ feature.hunks.push(hunk);
87
+ continue;
88
+ }
89
+ take(`tests:${partner}`, "tests", testTitle(hunk.path)).hunks.push(hunk);
90
+ continue;
91
+ }
92
+ const key = featureKey(hunk.path);
93
+ take(`feature:${key}`, "feature", featureTitle(key)).hunks.push(hunk);
94
+ }
95
+ for (const hunk of hunks) {
96
+ if (classify(hunk.path) !== "tests") {
97
+ continue;
98
+ }
99
+ const partner = partnerKey(hunk.path);
100
+ const tests = buckets.get(`tests:${partner}`);
101
+ const feature = buckets.get(`feature:${partner}`);
102
+ if (tests !== undefined && feature !== undefined) {
103
+ feature.hunks.push(...tests.hunks);
104
+ buckets.delete(`tests:${partner}`);
105
+ }
106
+ }
107
+ const clusters = [...buckets.values()];
108
+ const order = new Map(hunks.map((hunk, index) => [hunkKey(hunk), index]));
109
+ for (const cluster of clusters) {
110
+ cluster.hunks.sort((a, b) => (order.get(hunkKey(a)) ?? 0) - (order.get(hunkKey(b)) ?? 0));
111
+ if (cluster.kind === "feature" && cluster.hunks.some((hunk) => classify(hunk.path) === "tests")) {
112
+ cluster.title = `${cluster.title} and tests`;
113
+ }
114
+ }
115
+ const kindOrder = ["contracts", "feature", "tests", "docs", "chores"];
116
+ clusters.sort((a, b) => {
117
+ const kindDiff = kindOrder.indexOf(a.kind) - kindOrder.indexOf(b.kind);
118
+ if (kindDiff !== 0) {
119
+ return kindDiff;
120
+ }
121
+ return a.title.localeCompare(b.title);
122
+ });
123
+ return clusters;
124
+ }
125
+ function classify(path) {
126
+ const base = basename(path);
127
+ if (CHORE_FILES.has(base) || /^\.(prettier|eslint|npmrc|yarnrc)/.test(base)) {
128
+ return "chores";
129
+ }
130
+ if (/\.(md|rst|adoc)$/i.test(base) || /(^|\/)docs\//.test(path) || /(^|\/)changelog/i.test(base)) {
131
+ return "docs";
132
+ }
133
+ if (/\.d\.ts$/.test(base) ||
134
+ /\.schema\.json$/.test(base) ||
135
+ /(^|\/)(schema|types|contracts|typings)\//.test(path) ||
136
+ /(^|\/)types\.[cm]?[jt]sx?$/.test(path)) {
137
+ return "contracts";
138
+ }
139
+ if (/\.(test|spec)\.[cm]?[jt]sx?$/.test(base) || /(^|\/)(__tests__|tests?)\//.test(path)) {
140
+ return "tests";
141
+ }
142
+ return "feature";
143
+ }
144
+ function featureKey(path) {
145
+ const parts = path.split("/").filter((part) => part !== "." && part !== "");
146
+ const stripped = parts.filter((part) => !["src", "lib", "pkg", "packages", "app"].includes(part));
147
+ if (stripped.length >= 2) {
148
+ return stripped[0] ?? stem(path);
149
+ }
150
+ return stem(path);
151
+ }
152
+ function partnerKey(path) {
153
+ return featureKey(path.replace(/\.(test|spec)\./, "."));
154
+ }
155
+ function featureTitle(key) {
156
+ const named = {
157
+ cli: "CLI",
158
+ ui: "UI",
159
+ git: "Git",
160
+ schema: "Schema",
161
+ server: "Server",
162
+ review: "Review grouping",
163
+ api: "API",
164
+ core: "Core",
165
+ };
166
+ return named[key.toLowerCase()] ?? titleCase(key.replace(/[-_.]/g, " "));
167
+ }
168
+ function testTitle(path) {
169
+ const key = featureKey(path);
170
+ if (key === "test" || key === "tests") {
171
+ return "Tests";
172
+ }
173
+ return `Tests for ${featureTitle(key)}`;
174
+ }
175
+ export function briefGroup(cluster, paths, commits) {
176
+ const subjects = unique(commits.map((commit) => commit.subject.trim()).filter((subject) => subject.length > 0));
177
+ const summary = subjects[0] ?? fallbackSummary(cluster);
178
+ const lookFor = [];
179
+ for (const extra of subjects.slice(1, 5)) {
180
+ lookFor.push(extra);
181
+ }
182
+ for (const hunk of cluster.hunks) {
183
+ if (hunk.oldPath !== undefined) {
184
+ lookFor.push(`Rename ${hunk.oldPath} → ${hunk.path}`);
185
+ }
186
+ }
187
+ const added = unique(cluster.hunks.filter((hunk) => hunk.oldStart === 0 && hunk.oldLines === 0 && hunk.oldPath === undefined).map((hunk) => hunk.path));
188
+ for (const path of added.slice(0, 4)) {
189
+ lookFor.push(`New file ${path}`);
190
+ }
191
+ const deleted = unique(cluster.hunks.filter((hunk) => hunk.newStart === 0 && hunk.newLines === 0).map((hunk) => hunk.path));
192
+ for (const path of deleted.slice(0, 3)) {
193
+ lookFor.push(`Deleted ${path}`);
194
+ }
195
+ const hasTests = paths.some((path) => classify(path) === "tests");
196
+ const hasImpl = paths.some((path) => classify(path) === "feature" || classify(path) === "contracts");
197
+ if (hasTests && hasImpl) {
198
+ lookFor.push("Paired tests are in this layer — check they pin the new behavior.");
199
+ }
200
+ else if (cluster.kind === "tests") {
201
+ lookFor.push("Read after the implementation layer.");
202
+ }
203
+ else if (cluster.kind === "contracts") {
204
+ lookFor.push("Foundation: later layers depend on these shapes.");
205
+ }
206
+ else if (cluster.kind === "chores") {
207
+ lookFor.push("Confirm the manifest matches the code layers, then move on.");
208
+ }
209
+ else if (cluster.kind === "docs") {
210
+ lookFor.push("Confirm the prose matches what the code layers actually do.");
211
+ }
212
+ return { summary, lookFor: unique(lookFor).slice(0, 8) };
213
+ }
214
+ export function assignDependsOn(drafts) {
215
+ const ids = (kind) => drafts.filter((draft) => draft.kind === kind).map((draft) => draft.group.id);
216
+ const contracts = ids("contracts");
217
+ const features = ids("feature");
218
+ const implementation = [...contracts, ...features];
219
+ for (const draft of drafts) {
220
+ let deps = [];
221
+ if (draft.kind === "feature") {
222
+ deps = contracts;
223
+ }
224
+ else if (draft.kind === "tests") {
225
+ deps = implementation;
226
+ }
227
+ else if (draft.kind === "docs" || draft.kind === "chores") {
228
+ deps = implementation;
229
+ }
230
+ deps = deps.filter((id) => id !== draft.group.id);
231
+ if (deps.length > 0) {
232
+ draft.group.dependsOn = deps;
233
+ }
234
+ }
235
+ }
236
+ function fallbackSummary(cluster) {
237
+ switch (cluster.kind) {
238
+ case "contracts":
239
+ return "Types and contracts that later layers consume.";
240
+ case "tests":
241
+ return "Tests for the behavior in earlier layers.";
242
+ case "docs":
243
+ return "Documentation for this change.";
244
+ case "chores":
245
+ return "Manifest and lockfile updates.";
246
+ default:
247
+ return `${cluster.title} implementation.`;
248
+ }
249
+ }
250
+ function walkthroughFrom(commits) {
251
+ const subjects = unique(commits.map((commit) => commit.subject.trim()).filter((subject) => subject.length > 0)).slice(0, 2);
252
+ if (subjects.length === 0) {
253
+ return undefined;
254
+ }
255
+ return subjects.join(" · ");
256
+ }
257
+ function ticketsFromCommits(commits) {
258
+ const seen = new Set();
259
+ const tickets = [];
260
+ const pattern = /#(\d+)/g;
261
+ for (const commit of commits) {
262
+ for (const match of commit.subject.matchAll(pattern)) {
263
+ const id = match[1];
264
+ if (id === undefined || seen.has(id)) {
265
+ continue;
266
+ }
267
+ seen.add(id);
268
+ tickets.push({ id: `#${id}` });
269
+ }
270
+ }
271
+ return tickets;
272
+ }
273
+ function basename(path) {
274
+ const parts = path.split("/");
275
+ return parts[parts.length - 1] ?? path;
276
+ }
277
+ function stem(path) {
278
+ return basename(path).replace(/\.(test|spec)\./, ".").replace(/\.[^.]+$/, "");
279
+ }
280
+ function titleCase(value) {
281
+ return value
282
+ .split(/\s+/)
283
+ .filter(Boolean)
284
+ .map((word) => word.slice(0, 1).toUpperCase() + word.slice(1))
285
+ .join(" ");
286
+ }
287
+ function unique(values) {
288
+ return [...new Set(values)];
289
+ }
290
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/review/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type BlameRunLine = {
2
+ sha: string;
3
+ author: string;
4
+ timestamp: number;
5
+ line: number;
6
+ };
7
+ export type BlameRun = {
8
+ lineNumber: number;
9
+ sha: string;
10
+ author: string;
11
+ timestamp: number;
12
+ lines: number;
13
+ };
14
+ export declare function groupBlameRuns(lines: BlameRunLine[]): BlameRun[];
@@ -0,0 +1,18 @@
1
+ export function groupBlameRuns(lines) {
2
+ const runs = [];
3
+ for (const line of lines) {
4
+ const last = runs[runs.length - 1];
5
+ if (last !== undefined && last.sha === line.sha && last.author === line.author) {
6
+ last.lines += 1;
7
+ continue;
8
+ }
9
+ runs.push({
10
+ lineNumber: line.line,
11
+ sha: line.sha,
12
+ author: line.author,
13
+ timestamp: line.timestamp,
14
+ lines: 1,
15
+ });
16
+ }
17
+ return runs;
18
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blame-runs.js","sourceRoot":"","sources":["../../src/schema/blame-runs.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,cAAc,CAAC,KAAqB;IAClD,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/E,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;YAChB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC;YACR,UAAU,EAAE,IAAI,CAAC,IAAI;YACrB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,26 @@
1
+ export declare function hunkRangeLabel(header: string): string;
2
+ export declare function hunkContext(header: string): string | undefined;
3
+ export declare function addedSymbols(addedLines: string[]): string[];
4
+ export type HunkLineKind = "ctx" | "add" | "del";
5
+ export type HunkLine = {
6
+ kind: HunkLineKind;
7
+ oldNumber: number | null;
8
+ newNumber: number | null;
9
+ text: string;
10
+ };
11
+ export type SplitSide = {
12
+ kind: HunkLineKind;
13
+ number: number | null;
14
+ text: string;
15
+ };
16
+ export type SplitRow = {
17
+ left: SplitSide | null;
18
+ right: SplitSide | null;
19
+ };
20
+ export declare function lineDelta(lines: {
21
+ kind: HunkLineKind;
22
+ }[]): {
23
+ added: number;
24
+ removed: number;
25
+ };
26
+ export declare function splitDiffRows(lines: HunkLine[]): SplitRow[];
@@ -0,0 +1,107 @@
1
+ export function hunkRangeLabel(header) {
2
+ const match = /^(@@ -\d+(?:,\d+)? \+\d+(?:,\d+)? @@)/.exec(header);
3
+ return match?.[1] ?? header;
4
+ }
5
+ export function hunkContext(header) {
6
+ const match = /^@@ -\d+(?:,\d+)? \+\d+(?:,\d+)? @@\s*(.*)$/.exec(header);
7
+ const ctx = match?.[1]?.trim();
8
+ if (ctx === undefined || ctx === "") {
9
+ return undefined;
10
+ }
11
+ return looksLikeCodeAnchor(ctx) ? ctx : undefined;
12
+ }
13
+ function looksLikeCodeAnchor(line) {
14
+ if (line.startsWith("#")) {
15
+ return false;
16
+ }
17
+ const hasCodeToken = /[(){};=<>]|=>/.test(line) || /[a-zA-Z_][\w]*\(/.test(line);
18
+ const hasKeyword = /\b(function|class|const|let|var|type|interface|enum|export|import|def|fn|async|return|struct|impl|pub)\b/.test(line);
19
+ if (/^[A-Z]/.test(line) && line.includes(": ") && !hasCodeToken && !hasKeyword) {
20
+ return false;
21
+ }
22
+ if (/[.!?]$/.test(line) && !hasCodeToken) {
23
+ return false;
24
+ }
25
+ return hasCodeToken || hasKeyword || /^[A-Za-z_][\w.]*$/.test(line);
26
+ }
27
+ export function addedSymbols(addedLines) {
28
+ const names = [];
29
+ const pattern = /^(?:export\s+)?(?:async\s+)?(?:function|class|type|interface|enum)\s+([A-Za-z_][\w]*)/;
30
+ for (const line of addedLines) {
31
+ const match = pattern.exec(line.trim());
32
+ const name = match?.[1];
33
+ if (name !== undefined && !names.includes(name)) {
34
+ names.push(name);
35
+ }
36
+ }
37
+ return names;
38
+ }
39
+ export function lineDelta(lines) {
40
+ let added = 0;
41
+ let removed = 0;
42
+ for (const line of lines) {
43
+ if (line.kind === "add") {
44
+ added += 1;
45
+ }
46
+ else if (line.kind === "del") {
47
+ removed += 1;
48
+ }
49
+ }
50
+ return { added, removed };
51
+ }
52
+ export function splitDiffRows(lines) {
53
+ const rows = [];
54
+ let index = 0;
55
+ while (index < lines.length) {
56
+ const line = lines[index];
57
+ if (line === undefined) {
58
+ break;
59
+ }
60
+ if (line.kind === "ctx") {
61
+ rows.push({
62
+ left: { kind: "ctx", number: line.oldNumber, text: line.text },
63
+ right: { kind: "ctx", number: line.newNumber, text: line.text },
64
+ });
65
+ index += 1;
66
+ continue;
67
+ }
68
+ if (line.kind === "del") {
69
+ const removed = [];
70
+ while (index < lines.length && lines[index]?.kind === "del") {
71
+ const next = lines[index];
72
+ if (next !== undefined) {
73
+ removed.push(next);
74
+ }
75
+ index += 1;
76
+ }
77
+ const added = [];
78
+ while (index < lines.length && lines[index]?.kind === "add") {
79
+ const next = lines[index];
80
+ if (next !== undefined) {
81
+ added.push(next);
82
+ }
83
+ index += 1;
84
+ }
85
+ const count = Math.max(removed.length, added.length);
86
+ for (let offset = 0; offset < count; offset += 1) {
87
+ const leftLine = removed[offset];
88
+ const rightLine = added[offset];
89
+ rows.push({
90
+ left: leftLine === undefined
91
+ ? null
92
+ : { kind: leftLine.kind, number: leftLine.oldNumber, text: leftLine.text },
93
+ right: rightLine === undefined
94
+ ? null
95
+ : { kind: rightLine.kind, number: rightLine.newNumber, text: rightLine.text },
96
+ });
97
+ }
98
+ continue;
99
+ }
100
+ rows.push({
101
+ left: null,
102
+ right: { kind: "add", number: line.newNumber, text: line.text },
103
+ });
104
+ index += 1;
105
+ }
106
+ return rows;
107
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hunk-meta.js","sourceRoot":"","sources":["../../src/schema/hunk-meta.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { LiveHunk } from "./types.ts";
2
+ export declare function hunksToUnifiedPatch(hunks: LiveHunk[]): string;
@@ -0,0 +1,49 @@
1
+ export function hunksToUnifiedPatch(hunks) {
2
+ const groups = [];
3
+ for (const hunk of hunks) {
4
+ const existing = groups.find((group) => group.path === hunk.path);
5
+ if (existing === undefined) {
6
+ groups.push({ path: hunk.path, oldPath: hunk.oldPath, hunks: [hunk] });
7
+ }
8
+ else {
9
+ existing.hunks.push(hunk);
10
+ }
11
+ }
12
+ return groups.map(filePatch).join("");
13
+ }
14
+ function filePatch(group) {
15
+ const oldPath = group.oldPath ?? group.path;
16
+ const added = group.hunks.every((hunk) => hunk.oldStart === 0 && hunk.oldLines === 0);
17
+ const deleted = group.hunks.every((hunk) => hunk.newStart === 0 && hunk.newLines === 0);
18
+ const lines = [`diff --git a/${oldPath} b/${group.path}`];
19
+ if (added) {
20
+ lines.push("new file mode 100644");
21
+ lines.push("--- /dev/null");
22
+ lines.push(`+++ b/${group.path}`);
23
+ }
24
+ else if (deleted) {
25
+ lines.push("deleted file mode 100644");
26
+ lines.push(`--- a/${oldPath}`);
27
+ lines.push("+++ /dev/null");
28
+ }
29
+ else {
30
+ if (group.oldPath !== undefined) {
31
+ lines.push(`rename from ${oldPath}`);
32
+ lines.push(`rename to ${group.path}`);
33
+ }
34
+ lines.push(`--- a/${oldPath}`);
35
+ lines.push(`+++ b/${group.path}`);
36
+ }
37
+ for (const hunk of group.hunks) {
38
+ lines.push(hunk.header.startsWith("@@") ? hunk.header : hunkRangeFallback(hunk));
39
+ for (const line of hunk.lines) {
40
+ const prefix = line.kind === "add" ? "+" : line.kind === "del" ? "-" : " ";
41
+ lines.push(`${prefix}${line.text}`);
42
+ }
43
+ }
44
+ return `${lines.join("\n")}\n`;
45
+ }
46
+ function hunkRangeFallback(hunk) {
47
+ return `@@ -${hunk.oldStart},${hunk.oldLines} +${hunk.newStart},${hunk.newLines} @@`;
48
+ }
49
+ //# sourceMappingURL=hunk-patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hunk-patch.js","sourceRoot":"","sources":["../../src/schema/hunk-patch.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAAC,KAAiB;IACnD,MAAM,MAAM,GAA4D,EAAE,CAAC;IAC3E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,SAAS,CAAC,KAA4D;IAC7E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC;IACtF,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC;IACxF,MAAM,KAAK,GAAa,CAAC,gBAAgB,OAAO,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACpE,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;SAAM,IAAI,OAAO,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QACjF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3E,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAc;IACvC,OAAO,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC;AACvF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { HunkRef } from "./types.ts";
2
+ export declare function hunkKey(ref: Pick<HunkRef, "path" | "oldPath" | "oldStart" | "newStart">): string;
3
+ export declare function sameHunk(a: HunkRef, b: HunkRef): boolean;
@@ -0,0 +1,7 @@
1
+ export function hunkKey(ref) {
2
+ const oldPath = ref.oldPath ?? "";
3
+ return `${oldPath}\0${ref.path}\0${ref.oldStart}\0${ref.newStart}`;
4
+ }
5
+ export function sameHunk(a, b) {
6
+ return hunkKey(a) === hunkKey(b);
7
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/schema/identity.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,OAAO,CAAC,GAAgE;IACtF,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,OAAO,GAAG,OAAO,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,CAAU,EAAE,CAAU;IAC7C,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type HunkRef, type ReviewDocument } from "./types.ts";
2
+ export type ParseFailure = {
3
+ ok: false;
4
+ errors: string[];
5
+ };
6
+ export type ParseSuccess = {
7
+ ok: true;
8
+ document: ReviewDocument;
9
+ };
10
+ export type ParseResult = ParseSuccess | ParseFailure;
11
+ export declare function parseReviewDocument(input: unknown): ParseResult;
12
+ export declare function parseReviewJson(text: string): ParseResult;
13
+ export declare function parseHunkRef(value: unknown, label: string, errors: string[]): HunkRef | undefined;