limn-review 0.1.123

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 (474) hide show
  1. package/LICENSE +110 -0
  2. package/README.md +133 -0
  3. package/dist/ai/runtime.js +535 -0
  4. package/dist/api/plugins/auth.js +169 -0
  5. package/dist/api/plugins/error-handler.js +114 -0
  6. package/dist/api/plugins/rate-limit.js +855 -0
  7. package/dist/api/plugins/security.js +321 -0
  8. package/dist/api/routes/activity.js +103 -0
  9. package/dist/api/routes/ai-runtime.js +67 -0
  10. package/dist/api/routes/auth.js +194 -0
  11. package/dist/api/routes/billing.js +209 -0
  12. package/dist/api/routes/bot-triage.js +1289 -0
  13. package/dist/api/routes/conflicts.js +730 -0
  14. package/dist/api/routes/contact.js +318 -0
  15. package/dist/api/routes/daily-brief.js +58 -0
  16. package/dist/api/routes/flow.js +71 -0
  17. package/dist/api/routes/health.js +7 -0
  18. package/dist/api/routes/insights.js +200 -0
  19. package/dist/api/routes/me.js +458 -0
  20. package/dist/api/routes/mentions.js +22 -0
  21. package/dist/api/routes/mergers.js +8 -0
  22. package/dist/api/routes/ml-labels.js +109 -0
  23. package/dist/api/routes/open-prs.js +35 -0
  24. package/dist/api/routes/prs.js +1633 -0
  25. package/dist/api/routes/reactions.js +217 -0
  26. package/dist/api/routes/repos.js +563 -0
  27. package/dist/api/routes/search.js +41 -0
  28. package/dist/api/routes/threads.js +118 -0
  29. package/dist/api/routes/timeline.js +150 -0
  30. package/dist/api/routes/users.js +67 -0
  31. package/dist/api/routes/webhooks.js +181 -0
  32. package/dist/api/routes/workspaces.js +322 -0
  33. package/dist/app.js +274 -0
  34. package/dist/ascii.js +19 -0
  35. package/dist/auth/account.js +482 -0
  36. package/dist/auth/crypto.js +46 -0
  37. package/dist/bot-triage/resolve.js +59 -0
  38. package/dist/cli.js +388 -0
  39. package/dist/coding/activity.js +80 -0
  40. package/dist/coding/agent.js +288 -0
  41. package/dist/coding/ai-fix/auto-fix.js +212 -0
  42. package/dist/coding/ai-fix/manager.js +370 -0
  43. package/dist/coding/ai-fix/persist.js +213 -0
  44. package/dist/coding/ai-fix/pr-context.js +58 -0
  45. package/dist/coding/ai-fix/prompts.js +138 -0
  46. package/dist/coding/ai-fix/review-seed.js +357 -0
  47. package/dist/coding/ai-fix/routes.js +425 -0
  48. package/dist/coding/git-ops.js +321 -0
  49. package/dist/coding/git.js +184 -0
  50. package/dist/coding/merge.js +262 -0
  51. package/dist/coding/safe-path.js +75 -0
  52. package/dist/coding/schema.js +43 -0
  53. package/dist/config.js +648 -0
  54. package/dist/conflict/diff.js +304 -0
  55. package/dist/conflict/git.js +118 -0
  56. package/dist/conflict/hash.js +73 -0
  57. package/dist/conflict/janitor.js +218 -0
  58. package/dist/conflict/land.js +675 -0
  59. package/dist/conflict/model-types.js +2 -0
  60. package/dist/conflict/model.js +1081 -0
  61. package/dist/conflict/parse.js +142 -0
  62. package/dist/conflict/seam.js +136 -0
  63. package/dist/conflict/session.js +532 -0
  64. package/dist/conflict/suggestion.js +398 -0
  65. package/dist/conflict/tokens.js +72 -0
  66. package/dist/data-dir.js +112 -0
  67. package/dist/db/actor-lanes.js +213 -0
  68. package/dist/db/automation-ids.js +97 -0
  69. package/dist/db/automation-output.js +349 -0
  70. package/dist/db/blast-radius-query.js +36 -0
  71. package/dist/db/blast-radius.js +226 -0
  72. package/dist/db/bot-dormancy.js +115 -0
  73. package/dist/db/bot-overlap.js +579 -0
  74. package/dist/db/bot-volume.js +722 -0
  75. package/dist/db/bot-window.js +35 -0
  76. package/dist/db/branch-queries.js +310 -0
  77. package/dist/db/change-shape.js +243 -0
  78. package/dist/db/changepoint.js +75 -0
  79. package/dist/db/cleanup.js +36 -0
  80. package/dist/db/client.js +102 -0
  81. package/dist/db/code-loc.js +388 -0
  82. package/dist/db/credits.js +79 -0
  83. package/dist/db/daily-brief.js +406 -0
  84. package/dist/db/dependency-cards.js +145 -0
  85. package/dist/db/erase-account.js +255 -0
  86. package/dist/db/export-account.js +189 -0
  87. package/dist/db/failing-checks.js +124 -0
  88. package/dist/db/file-coupling.js +197 -0
  89. package/dist/db/flow-detail.js +661 -0
  90. package/dist/db/flow-pointers.js +197 -0
  91. package/dist/db/flow-settings.js +67 -0
  92. package/dist/db/forecast.js +114 -0
  93. package/dist/db/line-overlap.js +81 -0
  94. package/dist/db/merge-queue.js +189 -0
  95. package/dist/db/migrate.js +17 -0
  96. package/dist/db/migrations/0000_purple_ben_grimm.sql +155 -0
  97. package/dist/db/migrations/0001_colorful_ozymandias.sql +31 -0
  98. package/dist/db/migrations/0002_famous_sersi.sql +9 -0
  99. package/dist/db/migrations/0003_clever_shinobi_shaw.sql +3 -0
  100. package/dist/db/migrations/0004_pale_scalphunter.sql +1 -0
  101. package/dist/db/migrations/0005_daffy_guardian.sql +2 -0
  102. package/dist/db/migrations/0006_cute_violations.sql +45 -0
  103. package/dist/db/migrations/0007_dark_anthem.sql +2 -0
  104. package/dist/db/migrations/0008_multitenant_accounts.sql +44 -0
  105. package/dist/db/migrations/0009_lean_bodies.sql +13 -0
  106. package/dist/db/migrations/0010_lean_bodies_nullable.sql +56 -0
  107. package/dist/db/migrations/0011_pr_diff_size.sql +10 -0
  108. package/dist/db/migrations/0012_findings_included_default.sql +7 -0
  109. package/dist/db/migrations/0013_review_routing.sql +9 -0
  110. package/dist/db/migrations/0014_account_last_active.sql +6 -0
  111. package/dist/db/migrations/0015_repos_inbox_watch.sql +9 -0
  112. package/dist/db/migrations/0016_repo_viewer_permission.sql +7 -0
  113. package/dist/db/migrations/0017_account_display_name.sql +7 -0
  114. package/dist/db/migrations/0018_finding_comment_kind.sql +7 -0
  115. package/dist/db/migrations/0019_finding_file_in_diff.sql +7 -0
  116. package/dist/db/migrations/0020_claude_review_cost_telemetry.sql +11 -0
  117. package/dist/db/migrations/0021_account_feed_last_seen.sql +7 -0
  118. package/dist/db/migrations/0022_ci_status_events.sql +21 -0
  119. package/dist/db/migrations/0023_ai_usage.sql +21 -0
  120. package/dist/db/migrations/0024_pr_head_ref_name.sql +6 -0
  121. package/dist/db/migrations/0025_account_billing.sql +7 -0
  122. package/dist/db/migrations/0026_ai_credit_allowance.sql +5 -0
  123. package/dist/db/migrations/0027_user_github_type.sql +6 -0
  124. package/dist/db/migrations/0028_bot_review_classification.sql +21 -0
  125. package/dist/db/migrations/0029_bot_mute_rules.sql +19 -0
  126. package/dist/db/migrations/0030_teams.sql +32 -0
  127. package/dist/db/migrations/0031_events_pr_idx.sql +7 -0
  128. package/dist/db/migrations/0032_benchmark_contributions.sql +29 -0
  129. package/dist/db/migrations/0033_thread_addressed_confidence.sql +9 -0
  130. package/dist/db/migrations/0034_thread_resolved_at.sql +6 -0
  131. package/dist/db/migrations/0035_pr_first_review_requested_at.sql +5 -0
  132. package/dist/db/migrations/0036_search_index.sql +25 -0
  133. package/dist/db/migrations/0037_author_indexes.sql +15 -0
  134. package/dist/db/migrations/0038_auto_merge_requests.sql +37 -0
  135. package/dist/db/migrations/0039_branch_status.sql +44 -0
  136. package/dist/db/migrations/0040_pr_review_decision.sql +10 -0
  137. package/dist/db/migrations/0041_branch_commit_detail.sql +38 -0
  138. package/dist/db/migrations/0042_repo_reviewers.sql +176 -0
  139. package/dist/db/migrations/0043_account_reviewers.sql +131 -0
  140. package/dist/db/migrations/0044_workspaces.sql +138 -0
  141. package/dist/db/migrations/0045_workspace_reviewers.sql +180 -0
  142. package/dist/db/migrations/0046_drop_inbox_watch.sql +25 -0
  143. package/dist/db/migrations/0047_ml_comment_labels.sql +40 -0
  144. package/dist/db/migrations/0048_ml_vendor_severity.sql +31 -0
  145. package/dist/db/migrations/0049_seat_pricing_repo_description.sql +21 -0
  146. package/dist/db/migrations/0050_users_app_slug.sql +12 -0
  147. package/dist/db/migrations/0051_auto_merge_queue.sql +17 -0
  148. package/dist/db/migrations/0052_trunk_ci_status_events.sql +43 -0
  149. package/dist/db/migrations/0053_automation_roles.sql +79 -0
  150. package/dist/db/migrations/0054_automation_vendor_kinds.sql +514 -0
  151. package/dist/db/migrations/0055_auto_merge_phase.sql +12 -0
  152. package/dist/db/migrations/0056_pr_mentions.sql +22 -0
  153. package/dist/db/migrations/0057_large_pr_threshold.sql +14 -0
  154. package/dist/db/migrations/0058_pending_mute.sql +53 -0
  155. package/dist/db/migrations/0059_merge_queue_state.sql +33 -0
  156. package/dist/db/migrations/0060_drop_my_turn_dismissals.sql +33 -0
  157. package/dist/db/migrations/0061_auto_merge_durable_anchors.sql +27 -0
  158. package/dist/db/migrations/0062_blast_radius_config.sql +21 -0
  159. package/dist/db/migrations/0063_repo_file_coupling.sql +33 -0
  160. package/dist/db/migrations/0064_pr_content_kind.sql +21 -0
  161. package/dist/db/migrations/0065_workspace_flow_settings.sql +13 -0
  162. package/dist/db/migrations/0066_review_request_events.sql +31 -0
  163. package/dist/db/migrations/0067_pr_security_signals.sql +86 -0
  164. package/dist/db/migrations/0068_my_turn_settings.sql +18 -0
  165. package/dist/db/migrations/0069_my_turn_dismissals.sql +41 -0
  166. package/dist/db/migrations/0070_claude_review_follow_up_ticket.sql +22 -0
  167. package/dist/db/migrations/0071_claude_review_trigger.sql +11 -0
  168. package/dist/db/migrations/0072_commit_message_headline.sql +13 -0
  169. package/dist/db/migrations/0073_claude_review_chat.sql +31 -0
  170. package/dist/db/migrations/0074_adopt_agentic_tables.sql +98 -0
  171. package/dist/db/migrations/0075_review_lens_drop_learnings.sql +15 -0
  172. package/dist/db/migrations/0076_claude_review_threads.sql +17 -0
  173. package/dist/db/migrations/0077_claude_review_ci_failures.sql +10 -0
  174. package/dist/db/migrations/0078_ai_fix_change_report.sql +17 -0
  175. package/dist/db/migrations/0079_claude_finding_story.sql +16 -0
  176. package/dist/db/migrations/meta/0000_snapshot.json +1116 -0
  177. package/dist/db/migrations/meta/0001_snapshot.json +1321 -0
  178. package/dist/db/migrations/meta/0002_snapshot.json +1375 -0
  179. package/dist/db/migrations/meta/0003_snapshot.json +1396 -0
  180. package/dist/db/migrations/meta/0004_snapshot.json +1416 -0
  181. package/dist/db/migrations/meta/0005_snapshot.json +1430 -0
  182. package/dist/db/migrations/meta/0006_snapshot.json +1745 -0
  183. package/dist/db/migrations/meta/0007_snapshot.json +1759 -0
  184. package/dist/db/migrations/meta/_journal.json +566 -0
  185. package/dist/db/migrations-pg/0000_tired_alex_power.sql +268 -0
  186. package/dist/db/migrations-pg/0001_dizzy_mockingbird.sql +3 -0
  187. package/dist/db/migrations-pg/0002_glorious_ikaris.sql +4 -0
  188. package/dist/db/migrations-pg/0003_melted_secret_warriors.sql +2 -0
  189. package/dist/db/migrations-pg/0004_numerous_triton.sql +1 -0
  190. package/dist/db/migrations-pg/0005_thick_blockbuster.sql +2 -0
  191. package/dist/db/migrations-pg/0006_majestic_dracula.sql +1 -0
  192. package/dist/db/migrations-pg/0007_same_human_torch.sql +2 -0
  193. package/dist/db/migrations-pg/0008_slimy_toxin.sql +1 -0
  194. package/dist/db/migrations-pg/0009_fuzzy_jubilee.sql +4 -0
  195. package/dist/db/migrations-pg/0010_late_hammerhead.sql +1 -0
  196. package/dist/db/migrations-pg/0011_happy_leech.sql +16 -0
  197. package/dist/db/migrations-pg/0012_woozy_captain_midlands.sql +16 -0
  198. package/dist/db/migrations-pg/0013_yielding_nicolaos.sql +1 -0
  199. package/dist/db/migrations-pg/0014_wakeful_bill_hollister.sql +2 -0
  200. package/dist/db/migrations-pg/0015_aspiring_black_tom.sql +1 -0
  201. package/dist/db/migrations-pg/0016_cute_ghost_rider.sql +30 -0
  202. package/dist/db/migrations-pg/0017_far_changeling.sql +24 -0
  203. package/dist/db/migrations-pg/0018_fancy_miss_america.sql +1 -0
  204. package/dist/db/migrations-pg/0019_benchmark_contributions.sql +22 -0
  205. package/dist/db/migrations-pg/0020_majestic_edwin_jarvis.sql +3 -0
  206. package/dist/db/migrations-pg/0021_green_salo.sql +1 -0
  207. package/dist/db/migrations-pg/0022_wise_baron_strucker.sql +1 -0
  208. package/dist/db/migrations-pg/0023_search_index.sql +19 -0
  209. package/dist/db/migrations-pg/0024_author_indexes.sql +9 -0
  210. package/dist/db/migrations-pg/0025_auto_merge_requests.sql +26 -0
  211. package/dist/db/migrations-pg/0026_branch_status.sql +32 -0
  212. package/dist/db/migrations-pg/0027_pr_review_decision.sql +5 -0
  213. package/dist/db/migrations-pg/0028_branch_commit_detail.sql +9 -0
  214. package/dist/db/migrations-pg/0029_repo_reviewers.sql +127 -0
  215. package/dist/db/migrations-pg/0030_account_reviewers.sql +77 -0
  216. package/dist/db/migrations-pg/0031_workspaces.sql +131 -0
  217. package/dist/db/migrations-pg/0032_workspace_reviewers.sql +165 -0
  218. package/dist/db/migrations-pg/0033_drop_inbox_watch.sql +14 -0
  219. package/dist/db/migrations-pg/0034_ml_comment_labels.sql +33 -0
  220. package/dist/db/migrations-pg/0035_ml_vendor_severity.sql +16 -0
  221. package/dist/db/migrations-pg/0036_seat_pricing_repo_description.sql +12 -0
  222. package/dist/db/migrations-pg/0037_users_app_slug.sql +9 -0
  223. package/dist/db/migrations-pg/0038_auto_merge_queue.sql +10 -0
  224. package/dist/db/migrations-pg/0039_trunk_ci_status_events.sql +27 -0
  225. package/dist/db/migrations-pg/0040_automation_roles.sql +63 -0
  226. package/dist/db/migrations-pg/0041_automation_vendor_kinds.sql +488 -0
  227. package/dist/db/migrations-pg/0042_auto_merge_phase.sql +8 -0
  228. package/dist/db/migrations-pg/0043_pr_mentions.sql +19 -0
  229. package/dist/db/migrations-pg/0044_large_pr_threshold.sql +6 -0
  230. package/dist/db/migrations-pg/0045_pending_mute.sql +26 -0
  231. package/dist/db/migrations-pg/0046_merge_queue_state.sql +18 -0
  232. package/dist/db/migrations-pg/0047_drop_my_turn_dismissals.sql +21 -0
  233. package/dist/db/migrations-pg/0048_auto_merge_durable_anchors.sql +27 -0
  234. package/dist/db/migrations-pg/0049_blast_radius_config.sql +8 -0
  235. package/dist/db/migrations-pg/0050_repo_file_coupling.sql +13 -0
  236. package/dist/db/migrations-pg/0051_pr_content_kind.sql +6 -0
  237. package/dist/db/migrations-pg/0052_workspace_flow_settings.sql +4 -0
  238. package/dist/db/migrations-pg/0053_review_request_events.sql +18 -0
  239. package/dist/db/migrations-pg/0054_pr_security_signals.sql +59 -0
  240. package/dist/db/migrations-pg/0055_my_turn_settings.sql +6 -0
  241. package/dist/db/migrations-pg/0056_my_turn_dismissals.sql +21 -0
  242. package/dist/db/migrations-pg/0057_claude_review_follow_up_ticket.sql +8 -0
  243. package/dist/db/migrations-pg/0058_claude_review_trigger.sql +4 -0
  244. package/dist/db/migrations-pg/0059_commit_message_headline.sql +3 -0
  245. package/dist/db/migrations-pg/0060_claude_review_chat.sql +24 -0
  246. package/dist/db/migrations-pg/0061_adopt_agentic_tables.sql +79 -0
  247. package/dist/db/migrations-pg/0062_review_lens_drop_learnings.sql +5 -0
  248. package/dist/db/migrations-pg/0063_claude_review_threads.sql +7 -0
  249. package/dist/db/migrations-pg/0064_claude_review_ci_failures.sql +4 -0
  250. package/dist/db/migrations-pg/0065_ai_fix_change_report.sql +9 -0
  251. package/dist/db/migrations-pg/0066_claude_finding_story.sql +7 -0
  252. package/dist/db/migrations-pg/meta/0000_snapshot.json +2137 -0
  253. package/dist/db/migrations-pg/meta/0001_snapshot.json +2143 -0
  254. package/dist/db/migrations-pg/meta/0002_snapshot.json +2170 -0
  255. package/dist/db/migrations-pg/meta/0003_snapshot.json +2182 -0
  256. package/dist/db/migrations-pg/meta/0004_snapshot.json +2188 -0
  257. package/dist/db/migrations-pg/meta/0005_snapshot.json +2201 -0
  258. package/dist/db/migrations-pg/meta/0006_snapshot.json +2207 -0
  259. package/dist/db/migrations-pg/meta/0007_snapshot.json +2219 -0
  260. package/dist/db/migrations-pg/meta/0008_snapshot.json +2226 -0
  261. package/dist/db/migrations-pg/meta/0009_snapshot.json +2250 -0
  262. package/dist/db/migrations-pg/meta/0010_snapshot.json +2256 -0
  263. package/dist/db/migrations-pg/meta/0011_snapshot.json +2412 -0
  264. package/dist/db/migrations-pg/meta/0012_snapshot.json +2528 -0
  265. package/dist/db/migrations-pg/meta/0013_snapshot.json +2534 -0
  266. package/dist/db/migrations-pg/meta/0014_snapshot.json +2547 -0
  267. package/dist/db/migrations-pg/meta/0015_snapshot.json +2553 -0
  268. package/dist/db/migrations-pg/meta/0016_snapshot.json +2774 -0
  269. package/dist/db/migrations-pg/meta/0017_snapshot.json +2999 -0
  270. package/dist/db/migrations-pg/meta/0018_snapshot.json +3020 -0
  271. package/dist/db/migrations-pg/meta/0020_snapshot.json +3228 -0
  272. package/dist/db/migrations-pg/meta/0021_snapshot.json +3234 -0
  273. package/dist/db/migrations-pg/meta/0022_snapshot.json +3240 -0
  274. package/dist/db/migrations-pg/meta/_journal.json +475 -0
  275. package/dist/db/ml-labels.js +1666 -0
  276. package/dist/db/my-turn-dismissals.js +343 -0
  277. package/dist/db/my-turn-settings.js +34 -0
  278. package/dist/db/pending-classify.js +46 -0
  279. package/dist/db/pending-mute.js +171 -0
  280. package/dist/db/pending-tabs.js +238 -0
  281. package/dist/db/period-metrics.js +820 -0
  282. package/dist/db/person-period.js +763 -0
  283. package/dist/db/pr-intervals.js +930 -0
  284. package/dist/db/pr-liveness.js +240 -0
  285. package/dist/db/pr-mentions.js +279 -0
  286. package/dist/db/pr-merge-queue-stamp.js +91 -0
  287. package/dist/db/queries.js +14631 -0
  288. package/dist/db/reaction-targets.js +94 -0
  289. package/dist/db/repo-activity.js +171 -0
  290. package/dist/db/retention.js +138 -0
  291. package/dist/db/review-threads-for-review.js +240 -0
  292. package/dist/db/run-migrations.js +24 -0
  293. package/dist/db/schema.pg.js +1220 -0
  294. package/dist/db/schema.sqlite.js +1801 -0
  295. package/dist/db/search.js +317 -0
  296. package/dist/db/security-alerts.js +218 -0
  297. package/dist/db/synthesis-input.js +565 -0
  298. package/dist/db/triage.js +320 -0
  299. package/dist/db/usage.js +63 -0
  300. package/dist/db/work-plan.js +1086 -0
  301. package/dist/db/working-hours.js +161 -0
  302. package/dist/feed/my-turn.js +122 -0
  303. package/dist/github/actions-logs.js +397 -0
  304. package/dist/github/auth.js +86 -0
  305. package/dist/github/branch-queries.js +229 -0
  306. package/dist/github/client.js +454 -0
  307. package/dist/github/codeowners.js +221 -0
  308. package/dist/github/commit-checks.js +105 -0
  309. package/dist/github/compare.js +110 -0
  310. package/dist/github/diff-anchor.js +227 -0
  311. package/dist/github/mutations.js +706 -0
  312. package/dist/github/pr-file-content.js +254 -0
  313. package/dist/github/pr-liveness.js +161 -0
  314. package/dist/github/queries.js +875 -0
  315. package/dist/github/rate-budget.js +129 -0
  316. package/dist/github/reactions.js +161 -0
  317. package/dist/github/reviewer-suggest.js +104 -0
  318. package/dist/github/team-reviewers.js +96 -0
  319. package/dist/index.js +184 -0
  320. package/dist/merge/auto-merge-runner.js +960 -0
  321. package/dist/ml/severity-client.js +218 -0
  322. package/dist/pr/detail-enricher.js +26 -0
  323. package/dist/pro/bind.js +302 -0
  324. package/dist/pro/contract.js +37 -0
  325. package/dist/pro/migrate.js +64 -0
  326. package/dist/review/agent-context.js +127 -0
  327. package/dist/review/agent.js +385 -0
  328. package/dist/review/agentic.js +59 -0
  329. package/dist/review/auth.js +94 -0
  330. package/dist/review/chat-agent.js +179 -0
  331. package/dist/review/claude-review/ai-ready.js +16 -0
  332. package/dist/review/claude-review/auto-settings.js +139 -0
  333. package/dist/review/claude-review/auto.js +244 -0
  334. package/dist/review/claude-review/chat.js +489 -0
  335. package/dist/review/claude-review/ci-failures.js +350 -0
  336. package/dist/review/claude-review/follow-up.js +310 -0
  337. package/dist/review/claude-review/manager.js +686 -0
  338. package/dist/review/claude-review/persist.js +996 -0
  339. package/dist/review/claude-review/prompts.js +357 -0
  340. package/dist/review/claude-review/routes.js +518 -0
  341. package/dist/review/claude-review/routing.js +61 -0
  342. package/dist/review/claude-review/specialists.js +190 -0
  343. package/dist/review/claude-review/threads.js +265 -0
  344. package/dist/review/claude-review/ticket.js +282 -0
  345. package/dist/review/clone-hygiene.js +380 -0
  346. package/dist/review/clone-manager.js +367 -0
  347. package/dist/review/llm.js +113 -0
  348. package/dist/review/model-options.js +48 -0
  349. package/dist/review/plugin-providers.js +12 -0
  350. package/dist/review/post-review.js +216 -0
  351. package/dist/review/post-seam.js +161 -0
  352. package/dist/review/prepare.js +168 -0
  353. package/dist/review/pricing.js +17 -0
  354. package/dist/review/schema.js +156 -0
  355. package/dist/review/submit-map.js +41 -0
  356. package/dist/review/usage.js +90 -0
  357. package/dist/shared/claude-review.js +335 -0
  358. package/dist/shared/conflict-fold.js +151 -0
  359. package/dist/shared/conflicts.js +30 -0
  360. package/dist/shared/flow-settings.js +191 -0
  361. package/dist/shared/index.js +8 -0
  362. package/dist/shared/my-turn-settings.js +238 -0
  363. package/dist/shared/pending-rules.js +281 -0
  364. package/dist/shared/product.js +54 -0
  365. package/dist/shared/types.js +896 -0
  366. package/dist/status.js +386 -0
  367. package/dist/sync/adaptive.js +185 -0
  368. package/dist/sync/app-attribution.js +66 -0
  369. package/dist/sync/auth-notices.js +36 -0
  370. package/dist/sync/backfill-ci-history.js +315 -0
  371. package/dist/sync/backfill-commit-headlines.js +136 -0
  372. package/dist/sync/backfill-pr-security.js +175 -0
  373. package/dist/sync/backfill-review-requests.js +97 -0
  374. package/dist/sync/benchmark-rollup.js +50 -0
  375. package/dist/sync/bot-detection.js +309 -0
  376. package/dist/sync/bot-resolution-markers.js +30 -0
  377. package/dist/sync/branch-status.js +634 -0
  378. package/dist/sync/classify-change-shape.js +150 -0
  379. package/dist/sync/commit-files.js +74 -0
  380. package/dist/sync/derive-thread-state.js +99 -0
  381. package/dist/sync/drain-review-threads.js +212 -0
  382. package/dist/sync/hydrate-detail.js +482 -0
  383. package/dist/sync/mention-scan.js +89 -0
  384. package/dist/sync/ml-enrichment.js +478 -0
  385. package/dist/sync/pr-change-signal.js +96 -0
  386. package/dist/sync/pr-liveness-sweep.js +139 -0
  387. package/dist/sync/pr-settle.js +381 -0
  388. package/dist/sync/refresh-pr.js +163 -0
  389. package/dist/sync/reparse-vendor-badges.js +495 -0
  390. package/dist/sync/resync-after-write.js +280 -0
  391. package/dist/sync/review-fingerprint.js +117 -0
  392. package/dist/sync/reviewer-behavior.js +103 -0
  393. package/dist/sync/reviewer-classify.js +503 -0
  394. package/dist/sync/routing-files.js +97 -0
  395. package/dist/sync/scheduled-jobs.js +12 -0
  396. package/dist/sync/scheduler.js +159 -0
  397. package/dist/sync/security-detect.js +521 -0
  398. package/dist/sync/sync-manager.js +750 -0
  399. package/dist/sync/sync-one-pr.js +205 -0
  400. package/dist/sync/sync-repo.js +400 -0
  401. package/dist/sync/unsettled-prs.js +506 -0
  402. package/dist/sync/upsert.js +1190 -0
  403. package/package.json +56 -0
  404. package/public/apple-touch-icon.png +0 -0
  405. package/public/assets/AiFixTab-CQP6PT5u.js +2 -0
  406. package/public/assets/ClaudeReviewTab-DQJ-58ZA.js +8 -0
  407. package/public/assets/PrBotBehaviourTab-CCnFrWbC.js +1 -0
  408. package/public/assets/archivo-latin-600-BN-JkNrl.woff2 +0 -0
  409. package/public/assets/highlight-BEHUn5zE.css +10 -0
  410. package/public/assets/highlight-CIIZLa6Z.js +12 -0
  411. package/public/assets/index-BDnYs6zg.js +73 -0
  412. package/public/assets/index-mCuI--RC.css +1 -0
  413. package/public/assets/markdown-I_JLLVAZ.js +32 -0
  414. package/public/assets/perfProbe-Da13EhTE.js +1 -0
  415. package/public/assets/tanstack-5qsxxaLe.js +17 -0
  416. package/public/assets/vis-C3BCkP5U.js +1280 -0
  417. package/public/assets/vis-ziCVehMy.css +1 -0
  418. package/public/favicon-16.png +0 -0
  419. package/public/favicon-32.png +0 -0
  420. package/public/favicon-48.png +0 -0
  421. package/public/favicon.svg +5 -0
  422. package/public/index.html +41 -0
  423. package/public-landing/apple-touch-icon.png +0 -0
  424. package/public-landing/assets/archivo-latin-500-BWmvx2Mg.woff2 +0 -0
  425. package/public-landing/assets/archivo-latin-600-BN-JkNrl.woff2 +0 -0
  426. package/public-landing/assets/index-CA3eEGXO.js +40 -0
  427. package/public-landing/assets/index-naQrQ6Fe.css +1 -0
  428. package/public-landing/assets/jetbrains-mono-latin-400-RruCX7RW.woff2 +0 -0
  429. package/public-landing/assets/newsreader-latin-400-DExrRRrN.woff2 +0 -0
  430. package/public-landing/assets/newsreader-latin-400-italic-b0I-AwbV.woff2 +0 -0
  431. package/public-landing/bots/index.html +156 -0
  432. package/public-landing/contact/index.html +156 -0
  433. package/public-landing/cookies/index.html +156 -0
  434. package/public-landing/demo/limn-walkthrough-poster.jpg +0 -0
  435. package/public-landing/demo/limn-walkthrough.cues.json +44 -0
  436. package/public-landing/demo/limn-walkthrough.mp4 +0 -0
  437. package/public-landing/favicon-16.png +0 -0
  438. package/public-landing/favicon-32.png +0 -0
  439. package/public-landing/favicon-48.png +0 -0
  440. package/public-landing/favicon.svg +5 -0
  441. package/public-landing/features/index.html +156 -0
  442. package/public-landing/for-developers/index.html +156 -0
  443. package/public-landing/for-managers/index.html +156 -0
  444. package/public-landing/how-it-works/index.html +156 -0
  445. package/public-landing/how-we-measure/index.html +156 -0
  446. package/public-landing/icon-192.png +0 -0
  447. package/public-landing/icon-512.png +0 -0
  448. package/public-landing/index.html +156 -0
  449. package/public-landing/insights/index.html +156 -0
  450. package/public-landing/og-image.png +0 -0
  451. package/public-landing/pricing/index.html +156 -0
  452. package/public-landing/privacy/index.html +156 -0
  453. package/public-landing/pro/index.html +156 -0
  454. package/public-landing/reviews/index.html +156 -0
  455. package/public-landing/robots.txt +8 -0
  456. package/public-landing/shots/benchmark.png +0 -0
  457. package/public-landing/shots/bot-roi.png +0 -0
  458. package/public-landing/shots/bot-settings.png +0 -0
  459. package/public-landing/shots/chronology.png +0 -0
  460. package/public-landing/shots/feed.png +0 -0
  461. package/public-landing/shots/flow-metrics.png +0 -0
  462. package/public-landing/shots/free-reports.png +0 -0
  463. package/public-landing/shots/pending-board.png +0 -0
  464. package/public-landing/shots/pending-card.png +0 -0
  465. package/public-landing/shots/period-report.png +0 -0
  466. package/public-landing/shots/pr-detail.png +0 -0
  467. package/public-landing/shots/pr-threads.png +0 -0
  468. package/public-landing/shots/reach.png +0 -0
  469. package/public-landing/shots/repo-rows.png +0 -0
  470. package/public-landing/shots/severity-findings.png +0 -0
  471. package/public-landing/shots/severity-strip.png +0 -0
  472. package/public-landing/site.webmanifest +14 -0
  473. package/public-landing/sitemap.xml +51 -0
  474. package/public-landing/terms/index.html +156 -0
@@ -0,0 +1,86 @@
1
+ import { execFile, execFileSync } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ const execFileAsync = promisify(execFile);
4
+ const NOT_AUTHED_MESSAGE = 'gh CLI not authenticated. Run `gh auth login` first, then restart the app.\n' +
5
+ 'For org repos behind SSO you may also need:\n' +
6
+ ' gh auth refresh -h github.com -s read:org';
7
+ // ---- Token cache ----
8
+ // `gh auth token` shells out to a child process that takes 50–300ms (longer when the OS
9
+ // keyring prompts or the token is being refreshed), and getAccessToken() calls it for the
10
+ // local account on EVERY request that needs a token: every PR-detail hydration, every repo
11
+ // search, every write action. Uncached and synchronous, that both forked a process per
12
+ // request and BLOCKED the event loop for its whole duration — so a burst of requests pinned
13
+ // the server at 100% CPU behind a queue of `gh` processes and the dashboard stopped
14
+ // responding.
15
+ //
16
+ // Caching is safe: local mode has exactly one account and one ambient gh session. The TTL is
17
+ // short so a `gh auth refresh` / re-login is picked up without restarting, and the in-flight
18
+ // promise collapses a concurrent burst into a single child process.
19
+ const TOKEN_TTL_MS = 5 * 60 * 1000;
20
+ let cached = null;
21
+ let inFlight = null;
22
+ /**
23
+ * The gh CLI token, cached with a short TTL. Prefer this everywhere on a request path — it
24
+ * never blocks the event loop.
25
+ */
26
+ export async function getGithubTokenAsync() {
27
+ const now = Date.now();
28
+ if (cached && now - cached.at < TOKEN_TTL_MS)
29
+ return cached.token;
30
+ // A concurrent burst (e.g. the SPA opening several PRs at once) shares one `gh` invocation
31
+ // rather than forking one process each.
32
+ inFlight ??= (async () => {
33
+ try {
34
+ const { stdout } = await execFileAsync('gh', ['auth', 'token'], {
35
+ encoding: 'utf-8',
36
+ });
37
+ const token = stdout.trim();
38
+ if (!token)
39
+ throw new Error('empty token');
40
+ cached = { token, at: Date.now() };
41
+ return token;
42
+ }
43
+ catch {
44
+ throw new Error(NOT_AUTHED_MESSAGE);
45
+ }
46
+ finally {
47
+ inFlight = null;
48
+ }
49
+ })();
50
+ return inFlight;
51
+ }
52
+ /**
53
+ * Synchronous variant. Kept for the STARTUP path (`cli.ts`'s pre-flight check and
54
+ * `ensureLocalAccount`) and for the few local-only helpers that are not on a request path,
55
+ * where blocking once is fine and threading async through would be churn for no gain.
56
+ * Shares the cache with the async form, so a request path that has already warmed it never
57
+ * forks a process here either.
58
+ *
59
+ * Do NOT call this from a request handler — use `getGithubTokenAsync`.
60
+ */
61
+ export function getGithubToken() {
62
+ const now = Date.now();
63
+ if (cached && now - cached.at < TOKEN_TTL_MS)
64
+ return cached.token;
65
+ try {
66
+ const token = execFileSync('gh', ['auth', 'token'], {
67
+ encoding: 'utf-8',
68
+ }).trim();
69
+ if (!token)
70
+ throw new Error('empty token');
71
+ cached = { token, at: Date.now() };
72
+ return token;
73
+ }
74
+ catch {
75
+ throw new Error(NOT_AUTHED_MESSAGE);
76
+ }
77
+ }
78
+ /**
79
+ * Drop the cached token. Call after GitHub rejects it with a 401 so the next request
80
+ * re-reads it from `gh` (which may have refreshed it) instead of retrying a dead token for
81
+ * up to the TTL.
82
+ */
83
+ export function invalidateGithubToken() {
84
+ cached = null;
85
+ }
86
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1,229 @@
1
+ // Default-branch ("is trunk green?") GraphQL.
2
+ //
3
+ // Deliberately its OWN file rather than an addition to `github/queries.ts`: that module is the
4
+ // PR-shaped activity walk (one fat query, lean-gated field interpolation, shared PR node
5
+ // fields), and this query shares none of it. Keeping them apart means a change to the trunk
6
+ // snapshot can never perturb the backfill's page shape.
7
+ //
8
+ // Cost: ~4 rate-limit points per repo per sync at the 100-commit window — still the whole point
9
+ // of asking for the commit history AND its per-commit rollup in a single round trip.
10
+ //
11
+ // Nullability, verified field-by-field against GitHub's published SDL (every one of these is a
12
+ // real runtime case, not defensive noise):
13
+ // • `Repository.defaultBranchRef` is nullable — an empty repo has no default branch.
14
+ // • `Ref.target` is nullable AND an interface (`GitObject`), so the `... on Commit` inline
15
+ // fragment is MANDATORY; a branch pointing at a tag object yields `{}` here.
16
+ // • `Commit.statusCheckRollup` is nullable — a commit no CI ever ran on. It IS defined on
17
+ // Commit directly (not only reachable via a PR).
18
+ // • `Commit.author` is a nullable `GitActor`, and its `user` is null whenever the commit's
19
+ // email maps to no GitHub account (the classic "committed from a laptop with a personal
20
+ // email" case) — so `author.name` is the only identity such a commit carries.
21
+ // • `Commit.associatedPullRequests` is a NON-NULL connection in the SDL, and so are its
22
+ // nodes' `number` / `merged` / `baseRefName` / `repository`. They are nonetheless typed
23
+ // optional below for one specific reason: `graphqlTolerant` (github/client.ts) hands back
24
+ // `err.data` on a PARTIAL GraphQL error, where forbidden fields arrive NULLED regardless of
25
+ // their declared nullability. Everything a partial response can null must be optional here,
26
+ // or the mapper would trust a field TypeScript merely believes is present. The connection's
27
+ // `nodes` elements are `[PullRequest]` — genuinely nullable even on a clean response.
28
+ //
29
+ // COST, and why this file is structured in two phases:
30
+ // GitHub scores a GraphQL call from the nodes its connection arguments request (multiply nested
31
+ // first/last down each path, sum, then ceil(total/100), min 1). Phase 1 below asks for
32
+ // history(first: 100) × associatedPullRequests(first: 3) = 100 + 300 = 400 nodes ⇒ FOUR points,
33
+ // which is what the "~4 points per repo per sync" promise above means (the widening from 20 to
34
+ // 100 — 80 nodes, one point — is an accepted cost; it feeds the branch-trends charts). Nesting
35
+ // `statusCheckRollup.contexts(first: 100)` under that history would be 100 + 100×100 = 10100
36
+ // nodes ⇒ ~102 points on EVERY walk of EVERY repo, green or red, on a call adaptive polling
37
+ // re-fires every 120s for a hot repo. So the failing-check DETAIL is a SECOND query
38
+ // (`buildCommitChecksQuery`) issued only for the commits whose rollup phase 1 already reported
39
+ // as failure/error/pending. A green trunk therefore costs exactly the phase-1 walk.
40
+ // One trunk-commit node, shared VERBATIM between the live snapshot query and the history
41
+ // backfill below — the two walks must store identical rows, so the selection is written once.
42
+ //
43
+ // On `associatedPullRequests`: first:3 rather than 1 because the connection has NO documented
44
+ // ordering, so first:1 would be a non-deterministic pick that could FLIP between syncs; and
45
+ // rather than 10 because 3 keeps the node budget described above at N + 3N (4 points at the
46
+ // 100-commit window, vs 11 for first:10). merged + baseRefName are the ranking inputs (see
47
+ // pickAssociatedPrNumber in sync/branch-status.ts); repository.nameWithOwner exists because
48
+ // this connection spans the repo NETWORK, so a fork's own PR can appear and its number would
49
+ // resolve against the WRONG repo at read time.
50
+ const BRANCH_COMMIT_FIELDS = /* GraphQL */ `
51
+ oid
52
+ messageHeadline
53
+ committedDate
54
+ statusCheckRollup {
55
+ state
56
+ }
57
+ author {
58
+ name
59
+ avatarUrl
60
+ user {
61
+ login
62
+ }
63
+ }
64
+ associatedPullRequests(first: 3) {
65
+ nodes {
66
+ number
67
+ merged
68
+ baseRefName
69
+ repository {
70
+ nameWithOwner
71
+ }
72
+ }
73
+ }
74
+ `;
75
+ // `StatusState` (SUCCESS | FAILURE | PENDING | ERROR | EXPECTED) is exactly the enum the
76
+ // existing PR rollup mapper already switches on, so the persist layer reuses that mapping
77
+ // rather than inventing a second vocabulary.
78
+ export const DEFAULT_BRANCH_QUERY = /* GraphQL */ `
79
+ query DefaultBranchStatus($owner: String!, $name: String!, $first: Int!) {
80
+ rateLimit {
81
+ cost
82
+ remaining
83
+ }
84
+ repository(owner: $owner, name: $name) {
85
+ defaultBranchRef {
86
+ name
87
+ target {
88
+ ... on Commit {
89
+ oid
90
+ statusCheckRollup {
91
+ state
92
+ }
93
+ history(first: $first) {
94
+ nodes {
95
+ ${BRANCH_COMMIT_FIELDS}
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
101
+ }
102
+ }
103
+ `;
104
+ // The one-time HISTORY BACKFILL twin of the snapshot query: the same commit nodes, but
105
+ // paginated (`after`) and server-bounded to the trend window (`since` — GitTimestamp, filters
106
+ // on committer date). Same 4-points-per-page cost as the snapshot; the caller caps pages.
107
+ // `since` means an exhausted walk ends at the window edge with hasNextPage:false rather than
108
+ // crawling into ancient history.
109
+ export const DEFAULT_BRANCH_HISTORY_QUERY = /* GraphQL */ `
110
+ query DefaultBranchHistory(
111
+ $owner: String!
112
+ $name: String!
113
+ $first: Int!
114
+ $since: GitTimestamp!
115
+ $after: String
116
+ ) {
117
+ rateLimit {
118
+ cost
119
+ remaining
120
+ }
121
+ repository(owner: $owner, name: $name) {
122
+ defaultBranchRef {
123
+ name
124
+ target {
125
+ ... on Commit {
126
+ history(first: $first, since: $since, after: $after) {
127
+ pageInfo {
128
+ hasNextPage
129
+ endCursor
130
+ }
131
+ nodes {
132
+ ${BRANCH_COMMIT_FIELDS}
133
+ }
134
+ }
135
+ }
136
+ }
137
+ }
138
+ }
139
+ }
140
+ `;
141
+ // The failure-detail selection. `contexts` is a UNION (CheckRun | StatusContext), so both inline
142
+ // fragments are MANDATORY and `__typename` is what the mapper switches on — byte-identical to
143
+ // the PR walk's headCommit selection plus the workflow name.
144
+ //
145
+ // `first: 100` deliberately matches the PR walk. Do NOT lower it: `contexts` has no documented
146
+ // ordering that puts failures first, so a smaller page can return 100 green contexts on a commit
147
+ // whose rollup says FAILURE — i.e. an empty failures array on a red commit, a caret with nothing
148
+ // behind it. checkSuite/workflowRun/workflow are plain OBJECTS, not connections, so they add zero
149
+ // nodes and therefore zero rate-limit cost.
150
+ const COMMIT_CHECKS_SELECTION = /* GraphQL */ `
151
+ oid
152
+ statusCheckRollup {
153
+ state
154
+ contexts(first: 100) {
155
+ nodes {
156
+ __typename
157
+ ... on CheckRun {
158
+ name
159
+ status
160
+ conclusion
161
+ detailsUrl
162
+ checkSuite {
163
+ workflowRun {
164
+ workflow {
165
+ name
166
+ }
167
+ }
168
+ }
169
+ }
170
+ ... on StatusContext {
171
+ context
172
+ state
173
+ targetUrl
174
+ }
175
+ }
176
+ }
177
+ }
178
+ `;
179
+ // How many commits one phase-2 call will ask about. Most commits anyone ever expands are the
180
+ // newest few, and capping the alias count caps the worst case (a 100-commit all-red window) at
181
+ // ~10 points instead of ~100 — the pathological case is precisely the one where you don't need
182
+ // 100 carets to know trunk is broken.
183
+ export const COMMIT_CHECKS_ALIAS_CAP = 10;
184
+ /**
185
+ * One query with `count` aliased `repository.object(oid:)` lookups, each selecting that commit's
186
+ * check contexts.
187
+ *
188
+ * The shas ride as GraphQL VARIABLES (`$s0`…`$sN` of type `GitObjectID!`), never interpolated
189
+ * into the query text: the only generated part is the alias names, and those are INDEX-derived
190
+ * (`c0`, `c1`, …), never data-derived. Cost is `count` nodes for the objects plus 100 contexts
191
+ * each ⇒ ceil((count × 101)/100) ≈ `count` points, which is why the caller only ever passes the
192
+ * commits phase 1 already reported as non-green.
193
+ */
194
+ export function buildCommitChecksQuery(count) {
195
+ const vars = Array.from({ length: count }, (_, i) => `$s${i}: GitObjectID!`).join(', ');
196
+ const aliases = Array.from({ length: count }, (_, i) => ` c${i}: object(oid: $s${i}) { ... on Commit { ${COMMIT_CHECKS_SELECTION} } }`).join('\n');
197
+ return `query CommitChecks($owner: String!, $name: String!, ${vars}) {
198
+ rateLimit {
199
+ cost
200
+ remaining
201
+ }
202
+ repository(owner: $owner, name: $name) {
203
+ ${aliases}
204
+ }
205
+ }`;
206
+ }
207
+ // ---- Per-commit rollup STATE, in bulk (the PR CI-history backfill) ------------------------
208
+ //
209
+ // The state-only sibling of `buildCommitChecksQuery`: one aliased `object(oid:)` per sha,
210
+ // selecting nothing but the rollup state. No connection arguments anywhere in the selection, so
211
+ // the whole call costs ~1 rate-limit point regardless of alias count — which is what makes a
212
+ // 100-per-call cap affordable where the contexts query must stop at 10.
213
+ export const COMMIT_STATES_ALIAS_CAP = 100;
214
+ /** Same alias/variable discipline as `buildCommitChecksQuery`: index-derived alias names, shas as
215
+ * `GitObjectID!` variables, never interpolated into the query text. */
216
+ export function buildCommitStatesQuery(count) {
217
+ const vars = Array.from({ length: count }, (_, i) => `$s${i}: GitObjectID!`).join(', ');
218
+ const aliases = Array.from({ length: count }, (_, i) => ` c${i}: object(oid: $s${i}) { ... on Commit { oid statusCheckRollup { state } } }`).join('\n');
219
+ return `query CommitStates($owner: String!, $name: String!, ${vars}) {
220
+ rateLimit {
221
+ cost
222
+ remaining
223
+ }
224
+ repository(owner: $owner, name: $name) {
225
+ ${aliases}
226
+ }
227
+ }`;
228
+ }
229
+ //# sourceMappingURL=branch-queries.js.map