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.
- package/LICENSE +110 -0
- package/README.md +133 -0
- package/dist/ai/runtime.js +535 -0
- package/dist/api/plugins/auth.js +169 -0
- package/dist/api/plugins/error-handler.js +114 -0
- package/dist/api/plugins/rate-limit.js +855 -0
- package/dist/api/plugins/security.js +321 -0
- package/dist/api/routes/activity.js +103 -0
- package/dist/api/routes/ai-runtime.js +67 -0
- package/dist/api/routes/auth.js +194 -0
- package/dist/api/routes/billing.js +209 -0
- package/dist/api/routes/bot-triage.js +1289 -0
- package/dist/api/routes/conflicts.js +730 -0
- package/dist/api/routes/contact.js +318 -0
- package/dist/api/routes/daily-brief.js +58 -0
- package/dist/api/routes/flow.js +71 -0
- package/dist/api/routes/health.js +7 -0
- package/dist/api/routes/insights.js +200 -0
- package/dist/api/routes/me.js +458 -0
- package/dist/api/routes/mentions.js +22 -0
- package/dist/api/routes/mergers.js +8 -0
- package/dist/api/routes/ml-labels.js +109 -0
- package/dist/api/routes/open-prs.js +35 -0
- package/dist/api/routes/prs.js +1633 -0
- package/dist/api/routes/reactions.js +217 -0
- package/dist/api/routes/repos.js +563 -0
- package/dist/api/routes/search.js +41 -0
- package/dist/api/routes/threads.js +118 -0
- package/dist/api/routes/timeline.js +150 -0
- package/dist/api/routes/users.js +67 -0
- package/dist/api/routes/webhooks.js +181 -0
- package/dist/api/routes/workspaces.js +322 -0
- package/dist/app.js +274 -0
- package/dist/ascii.js +19 -0
- package/dist/auth/account.js +482 -0
- package/dist/auth/crypto.js +46 -0
- package/dist/bot-triage/resolve.js +59 -0
- package/dist/cli.js +388 -0
- package/dist/coding/activity.js +80 -0
- package/dist/coding/agent.js +288 -0
- package/dist/coding/ai-fix/auto-fix.js +212 -0
- package/dist/coding/ai-fix/manager.js +370 -0
- package/dist/coding/ai-fix/persist.js +213 -0
- package/dist/coding/ai-fix/pr-context.js +58 -0
- package/dist/coding/ai-fix/prompts.js +138 -0
- package/dist/coding/ai-fix/review-seed.js +357 -0
- package/dist/coding/ai-fix/routes.js +425 -0
- package/dist/coding/git-ops.js +321 -0
- package/dist/coding/git.js +184 -0
- package/dist/coding/merge.js +262 -0
- package/dist/coding/safe-path.js +75 -0
- package/dist/coding/schema.js +43 -0
- package/dist/config.js +648 -0
- package/dist/conflict/diff.js +304 -0
- package/dist/conflict/git.js +118 -0
- package/dist/conflict/hash.js +73 -0
- package/dist/conflict/janitor.js +218 -0
- package/dist/conflict/land.js +675 -0
- package/dist/conflict/model-types.js +2 -0
- package/dist/conflict/model.js +1081 -0
- package/dist/conflict/parse.js +142 -0
- package/dist/conflict/seam.js +136 -0
- package/dist/conflict/session.js +532 -0
- package/dist/conflict/suggestion.js +398 -0
- package/dist/conflict/tokens.js +72 -0
- package/dist/data-dir.js +112 -0
- package/dist/db/actor-lanes.js +213 -0
- package/dist/db/automation-ids.js +97 -0
- package/dist/db/automation-output.js +349 -0
- package/dist/db/blast-radius-query.js +36 -0
- package/dist/db/blast-radius.js +226 -0
- package/dist/db/bot-dormancy.js +115 -0
- package/dist/db/bot-overlap.js +579 -0
- package/dist/db/bot-volume.js +722 -0
- package/dist/db/bot-window.js +35 -0
- package/dist/db/branch-queries.js +310 -0
- package/dist/db/change-shape.js +243 -0
- package/dist/db/changepoint.js +75 -0
- package/dist/db/cleanup.js +36 -0
- package/dist/db/client.js +102 -0
- package/dist/db/code-loc.js +388 -0
- package/dist/db/credits.js +79 -0
- package/dist/db/daily-brief.js +406 -0
- package/dist/db/dependency-cards.js +145 -0
- package/dist/db/erase-account.js +255 -0
- package/dist/db/export-account.js +189 -0
- package/dist/db/failing-checks.js +124 -0
- package/dist/db/file-coupling.js +197 -0
- package/dist/db/flow-detail.js +661 -0
- package/dist/db/flow-pointers.js +197 -0
- package/dist/db/flow-settings.js +67 -0
- package/dist/db/forecast.js +114 -0
- package/dist/db/line-overlap.js +81 -0
- package/dist/db/merge-queue.js +189 -0
- package/dist/db/migrate.js +17 -0
- package/dist/db/migrations/0000_purple_ben_grimm.sql +155 -0
- package/dist/db/migrations/0001_colorful_ozymandias.sql +31 -0
- package/dist/db/migrations/0002_famous_sersi.sql +9 -0
- package/dist/db/migrations/0003_clever_shinobi_shaw.sql +3 -0
- package/dist/db/migrations/0004_pale_scalphunter.sql +1 -0
- package/dist/db/migrations/0005_daffy_guardian.sql +2 -0
- package/dist/db/migrations/0006_cute_violations.sql +45 -0
- package/dist/db/migrations/0007_dark_anthem.sql +2 -0
- package/dist/db/migrations/0008_multitenant_accounts.sql +44 -0
- package/dist/db/migrations/0009_lean_bodies.sql +13 -0
- package/dist/db/migrations/0010_lean_bodies_nullable.sql +56 -0
- package/dist/db/migrations/0011_pr_diff_size.sql +10 -0
- package/dist/db/migrations/0012_findings_included_default.sql +7 -0
- package/dist/db/migrations/0013_review_routing.sql +9 -0
- package/dist/db/migrations/0014_account_last_active.sql +6 -0
- package/dist/db/migrations/0015_repos_inbox_watch.sql +9 -0
- package/dist/db/migrations/0016_repo_viewer_permission.sql +7 -0
- package/dist/db/migrations/0017_account_display_name.sql +7 -0
- package/dist/db/migrations/0018_finding_comment_kind.sql +7 -0
- package/dist/db/migrations/0019_finding_file_in_diff.sql +7 -0
- package/dist/db/migrations/0020_claude_review_cost_telemetry.sql +11 -0
- package/dist/db/migrations/0021_account_feed_last_seen.sql +7 -0
- package/dist/db/migrations/0022_ci_status_events.sql +21 -0
- package/dist/db/migrations/0023_ai_usage.sql +21 -0
- package/dist/db/migrations/0024_pr_head_ref_name.sql +6 -0
- package/dist/db/migrations/0025_account_billing.sql +7 -0
- package/dist/db/migrations/0026_ai_credit_allowance.sql +5 -0
- package/dist/db/migrations/0027_user_github_type.sql +6 -0
- package/dist/db/migrations/0028_bot_review_classification.sql +21 -0
- package/dist/db/migrations/0029_bot_mute_rules.sql +19 -0
- package/dist/db/migrations/0030_teams.sql +32 -0
- package/dist/db/migrations/0031_events_pr_idx.sql +7 -0
- package/dist/db/migrations/0032_benchmark_contributions.sql +29 -0
- package/dist/db/migrations/0033_thread_addressed_confidence.sql +9 -0
- package/dist/db/migrations/0034_thread_resolved_at.sql +6 -0
- package/dist/db/migrations/0035_pr_first_review_requested_at.sql +5 -0
- package/dist/db/migrations/0036_search_index.sql +25 -0
- package/dist/db/migrations/0037_author_indexes.sql +15 -0
- package/dist/db/migrations/0038_auto_merge_requests.sql +37 -0
- package/dist/db/migrations/0039_branch_status.sql +44 -0
- package/dist/db/migrations/0040_pr_review_decision.sql +10 -0
- package/dist/db/migrations/0041_branch_commit_detail.sql +38 -0
- package/dist/db/migrations/0042_repo_reviewers.sql +176 -0
- package/dist/db/migrations/0043_account_reviewers.sql +131 -0
- package/dist/db/migrations/0044_workspaces.sql +138 -0
- package/dist/db/migrations/0045_workspace_reviewers.sql +180 -0
- package/dist/db/migrations/0046_drop_inbox_watch.sql +25 -0
- package/dist/db/migrations/0047_ml_comment_labels.sql +40 -0
- package/dist/db/migrations/0048_ml_vendor_severity.sql +31 -0
- package/dist/db/migrations/0049_seat_pricing_repo_description.sql +21 -0
- package/dist/db/migrations/0050_users_app_slug.sql +12 -0
- package/dist/db/migrations/0051_auto_merge_queue.sql +17 -0
- package/dist/db/migrations/0052_trunk_ci_status_events.sql +43 -0
- package/dist/db/migrations/0053_automation_roles.sql +79 -0
- package/dist/db/migrations/0054_automation_vendor_kinds.sql +514 -0
- package/dist/db/migrations/0055_auto_merge_phase.sql +12 -0
- package/dist/db/migrations/0056_pr_mentions.sql +22 -0
- package/dist/db/migrations/0057_large_pr_threshold.sql +14 -0
- package/dist/db/migrations/0058_pending_mute.sql +53 -0
- package/dist/db/migrations/0059_merge_queue_state.sql +33 -0
- package/dist/db/migrations/0060_drop_my_turn_dismissals.sql +33 -0
- package/dist/db/migrations/0061_auto_merge_durable_anchors.sql +27 -0
- package/dist/db/migrations/0062_blast_radius_config.sql +21 -0
- package/dist/db/migrations/0063_repo_file_coupling.sql +33 -0
- package/dist/db/migrations/0064_pr_content_kind.sql +21 -0
- package/dist/db/migrations/0065_workspace_flow_settings.sql +13 -0
- package/dist/db/migrations/0066_review_request_events.sql +31 -0
- package/dist/db/migrations/0067_pr_security_signals.sql +86 -0
- package/dist/db/migrations/0068_my_turn_settings.sql +18 -0
- package/dist/db/migrations/0069_my_turn_dismissals.sql +41 -0
- package/dist/db/migrations/0070_claude_review_follow_up_ticket.sql +22 -0
- package/dist/db/migrations/0071_claude_review_trigger.sql +11 -0
- package/dist/db/migrations/0072_commit_message_headline.sql +13 -0
- package/dist/db/migrations/0073_claude_review_chat.sql +31 -0
- package/dist/db/migrations/0074_adopt_agentic_tables.sql +98 -0
- package/dist/db/migrations/0075_review_lens_drop_learnings.sql +15 -0
- package/dist/db/migrations/0076_claude_review_threads.sql +17 -0
- package/dist/db/migrations/0077_claude_review_ci_failures.sql +10 -0
- package/dist/db/migrations/0078_ai_fix_change_report.sql +17 -0
- package/dist/db/migrations/0079_claude_finding_story.sql +16 -0
- package/dist/db/migrations/meta/0000_snapshot.json +1116 -0
- package/dist/db/migrations/meta/0001_snapshot.json +1321 -0
- package/dist/db/migrations/meta/0002_snapshot.json +1375 -0
- package/dist/db/migrations/meta/0003_snapshot.json +1396 -0
- package/dist/db/migrations/meta/0004_snapshot.json +1416 -0
- package/dist/db/migrations/meta/0005_snapshot.json +1430 -0
- package/dist/db/migrations/meta/0006_snapshot.json +1745 -0
- package/dist/db/migrations/meta/0007_snapshot.json +1759 -0
- package/dist/db/migrations/meta/_journal.json +566 -0
- package/dist/db/migrations-pg/0000_tired_alex_power.sql +268 -0
- package/dist/db/migrations-pg/0001_dizzy_mockingbird.sql +3 -0
- package/dist/db/migrations-pg/0002_glorious_ikaris.sql +4 -0
- package/dist/db/migrations-pg/0003_melted_secret_warriors.sql +2 -0
- package/dist/db/migrations-pg/0004_numerous_triton.sql +1 -0
- package/dist/db/migrations-pg/0005_thick_blockbuster.sql +2 -0
- package/dist/db/migrations-pg/0006_majestic_dracula.sql +1 -0
- package/dist/db/migrations-pg/0007_same_human_torch.sql +2 -0
- package/dist/db/migrations-pg/0008_slimy_toxin.sql +1 -0
- package/dist/db/migrations-pg/0009_fuzzy_jubilee.sql +4 -0
- package/dist/db/migrations-pg/0010_late_hammerhead.sql +1 -0
- package/dist/db/migrations-pg/0011_happy_leech.sql +16 -0
- package/dist/db/migrations-pg/0012_woozy_captain_midlands.sql +16 -0
- package/dist/db/migrations-pg/0013_yielding_nicolaos.sql +1 -0
- package/dist/db/migrations-pg/0014_wakeful_bill_hollister.sql +2 -0
- package/dist/db/migrations-pg/0015_aspiring_black_tom.sql +1 -0
- package/dist/db/migrations-pg/0016_cute_ghost_rider.sql +30 -0
- package/dist/db/migrations-pg/0017_far_changeling.sql +24 -0
- package/dist/db/migrations-pg/0018_fancy_miss_america.sql +1 -0
- package/dist/db/migrations-pg/0019_benchmark_contributions.sql +22 -0
- package/dist/db/migrations-pg/0020_majestic_edwin_jarvis.sql +3 -0
- package/dist/db/migrations-pg/0021_green_salo.sql +1 -0
- package/dist/db/migrations-pg/0022_wise_baron_strucker.sql +1 -0
- package/dist/db/migrations-pg/0023_search_index.sql +19 -0
- package/dist/db/migrations-pg/0024_author_indexes.sql +9 -0
- package/dist/db/migrations-pg/0025_auto_merge_requests.sql +26 -0
- package/dist/db/migrations-pg/0026_branch_status.sql +32 -0
- package/dist/db/migrations-pg/0027_pr_review_decision.sql +5 -0
- package/dist/db/migrations-pg/0028_branch_commit_detail.sql +9 -0
- package/dist/db/migrations-pg/0029_repo_reviewers.sql +127 -0
- package/dist/db/migrations-pg/0030_account_reviewers.sql +77 -0
- package/dist/db/migrations-pg/0031_workspaces.sql +131 -0
- package/dist/db/migrations-pg/0032_workspace_reviewers.sql +165 -0
- package/dist/db/migrations-pg/0033_drop_inbox_watch.sql +14 -0
- package/dist/db/migrations-pg/0034_ml_comment_labels.sql +33 -0
- package/dist/db/migrations-pg/0035_ml_vendor_severity.sql +16 -0
- package/dist/db/migrations-pg/0036_seat_pricing_repo_description.sql +12 -0
- package/dist/db/migrations-pg/0037_users_app_slug.sql +9 -0
- package/dist/db/migrations-pg/0038_auto_merge_queue.sql +10 -0
- package/dist/db/migrations-pg/0039_trunk_ci_status_events.sql +27 -0
- package/dist/db/migrations-pg/0040_automation_roles.sql +63 -0
- package/dist/db/migrations-pg/0041_automation_vendor_kinds.sql +488 -0
- package/dist/db/migrations-pg/0042_auto_merge_phase.sql +8 -0
- package/dist/db/migrations-pg/0043_pr_mentions.sql +19 -0
- package/dist/db/migrations-pg/0044_large_pr_threshold.sql +6 -0
- package/dist/db/migrations-pg/0045_pending_mute.sql +26 -0
- package/dist/db/migrations-pg/0046_merge_queue_state.sql +18 -0
- package/dist/db/migrations-pg/0047_drop_my_turn_dismissals.sql +21 -0
- package/dist/db/migrations-pg/0048_auto_merge_durable_anchors.sql +27 -0
- package/dist/db/migrations-pg/0049_blast_radius_config.sql +8 -0
- package/dist/db/migrations-pg/0050_repo_file_coupling.sql +13 -0
- package/dist/db/migrations-pg/0051_pr_content_kind.sql +6 -0
- package/dist/db/migrations-pg/0052_workspace_flow_settings.sql +4 -0
- package/dist/db/migrations-pg/0053_review_request_events.sql +18 -0
- package/dist/db/migrations-pg/0054_pr_security_signals.sql +59 -0
- package/dist/db/migrations-pg/0055_my_turn_settings.sql +6 -0
- package/dist/db/migrations-pg/0056_my_turn_dismissals.sql +21 -0
- package/dist/db/migrations-pg/0057_claude_review_follow_up_ticket.sql +8 -0
- package/dist/db/migrations-pg/0058_claude_review_trigger.sql +4 -0
- package/dist/db/migrations-pg/0059_commit_message_headline.sql +3 -0
- package/dist/db/migrations-pg/0060_claude_review_chat.sql +24 -0
- package/dist/db/migrations-pg/0061_adopt_agentic_tables.sql +79 -0
- package/dist/db/migrations-pg/0062_review_lens_drop_learnings.sql +5 -0
- package/dist/db/migrations-pg/0063_claude_review_threads.sql +7 -0
- package/dist/db/migrations-pg/0064_claude_review_ci_failures.sql +4 -0
- package/dist/db/migrations-pg/0065_ai_fix_change_report.sql +9 -0
- package/dist/db/migrations-pg/0066_claude_finding_story.sql +7 -0
- package/dist/db/migrations-pg/meta/0000_snapshot.json +2137 -0
- package/dist/db/migrations-pg/meta/0001_snapshot.json +2143 -0
- package/dist/db/migrations-pg/meta/0002_snapshot.json +2170 -0
- package/dist/db/migrations-pg/meta/0003_snapshot.json +2182 -0
- package/dist/db/migrations-pg/meta/0004_snapshot.json +2188 -0
- package/dist/db/migrations-pg/meta/0005_snapshot.json +2201 -0
- package/dist/db/migrations-pg/meta/0006_snapshot.json +2207 -0
- package/dist/db/migrations-pg/meta/0007_snapshot.json +2219 -0
- package/dist/db/migrations-pg/meta/0008_snapshot.json +2226 -0
- package/dist/db/migrations-pg/meta/0009_snapshot.json +2250 -0
- package/dist/db/migrations-pg/meta/0010_snapshot.json +2256 -0
- package/dist/db/migrations-pg/meta/0011_snapshot.json +2412 -0
- package/dist/db/migrations-pg/meta/0012_snapshot.json +2528 -0
- package/dist/db/migrations-pg/meta/0013_snapshot.json +2534 -0
- package/dist/db/migrations-pg/meta/0014_snapshot.json +2547 -0
- package/dist/db/migrations-pg/meta/0015_snapshot.json +2553 -0
- package/dist/db/migrations-pg/meta/0016_snapshot.json +2774 -0
- package/dist/db/migrations-pg/meta/0017_snapshot.json +2999 -0
- package/dist/db/migrations-pg/meta/0018_snapshot.json +3020 -0
- package/dist/db/migrations-pg/meta/0020_snapshot.json +3228 -0
- package/dist/db/migrations-pg/meta/0021_snapshot.json +3234 -0
- package/dist/db/migrations-pg/meta/0022_snapshot.json +3240 -0
- package/dist/db/migrations-pg/meta/_journal.json +475 -0
- package/dist/db/ml-labels.js +1666 -0
- package/dist/db/my-turn-dismissals.js +343 -0
- package/dist/db/my-turn-settings.js +34 -0
- package/dist/db/pending-classify.js +46 -0
- package/dist/db/pending-mute.js +171 -0
- package/dist/db/pending-tabs.js +238 -0
- package/dist/db/period-metrics.js +820 -0
- package/dist/db/person-period.js +763 -0
- package/dist/db/pr-intervals.js +930 -0
- package/dist/db/pr-liveness.js +240 -0
- package/dist/db/pr-mentions.js +279 -0
- package/dist/db/pr-merge-queue-stamp.js +91 -0
- package/dist/db/queries.js +14631 -0
- package/dist/db/reaction-targets.js +94 -0
- package/dist/db/repo-activity.js +171 -0
- package/dist/db/retention.js +138 -0
- package/dist/db/review-threads-for-review.js +240 -0
- package/dist/db/run-migrations.js +24 -0
- package/dist/db/schema.pg.js +1220 -0
- package/dist/db/schema.sqlite.js +1801 -0
- package/dist/db/search.js +317 -0
- package/dist/db/security-alerts.js +218 -0
- package/dist/db/synthesis-input.js +565 -0
- package/dist/db/triage.js +320 -0
- package/dist/db/usage.js +63 -0
- package/dist/db/work-plan.js +1086 -0
- package/dist/db/working-hours.js +161 -0
- package/dist/feed/my-turn.js +122 -0
- package/dist/github/actions-logs.js +397 -0
- package/dist/github/auth.js +86 -0
- package/dist/github/branch-queries.js +229 -0
- package/dist/github/client.js +454 -0
- package/dist/github/codeowners.js +221 -0
- package/dist/github/commit-checks.js +105 -0
- package/dist/github/compare.js +110 -0
- package/dist/github/diff-anchor.js +227 -0
- package/dist/github/mutations.js +706 -0
- package/dist/github/pr-file-content.js +254 -0
- package/dist/github/pr-liveness.js +161 -0
- package/dist/github/queries.js +875 -0
- package/dist/github/rate-budget.js +129 -0
- package/dist/github/reactions.js +161 -0
- package/dist/github/reviewer-suggest.js +104 -0
- package/dist/github/team-reviewers.js +96 -0
- package/dist/index.js +184 -0
- package/dist/merge/auto-merge-runner.js +960 -0
- package/dist/ml/severity-client.js +218 -0
- package/dist/pr/detail-enricher.js +26 -0
- package/dist/pro/bind.js +302 -0
- package/dist/pro/contract.js +37 -0
- package/dist/pro/migrate.js +64 -0
- package/dist/review/agent-context.js +127 -0
- package/dist/review/agent.js +385 -0
- package/dist/review/agentic.js +59 -0
- package/dist/review/auth.js +94 -0
- package/dist/review/chat-agent.js +179 -0
- package/dist/review/claude-review/ai-ready.js +16 -0
- package/dist/review/claude-review/auto-settings.js +139 -0
- package/dist/review/claude-review/auto.js +244 -0
- package/dist/review/claude-review/chat.js +489 -0
- package/dist/review/claude-review/ci-failures.js +350 -0
- package/dist/review/claude-review/follow-up.js +310 -0
- package/dist/review/claude-review/manager.js +686 -0
- package/dist/review/claude-review/persist.js +996 -0
- package/dist/review/claude-review/prompts.js +357 -0
- package/dist/review/claude-review/routes.js +518 -0
- package/dist/review/claude-review/routing.js +61 -0
- package/dist/review/claude-review/specialists.js +190 -0
- package/dist/review/claude-review/threads.js +265 -0
- package/dist/review/claude-review/ticket.js +282 -0
- package/dist/review/clone-hygiene.js +380 -0
- package/dist/review/clone-manager.js +367 -0
- package/dist/review/llm.js +113 -0
- package/dist/review/model-options.js +48 -0
- package/dist/review/plugin-providers.js +12 -0
- package/dist/review/post-review.js +216 -0
- package/dist/review/post-seam.js +161 -0
- package/dist/review/prepare.js +168 -0
- package/dist/review/pricing.js +17 -0
- package/dist/review/schema.js +156 -0
- package/dist/review/submit-map.js +41 -0
- package/dist/review/usage.js +90 -0
- package/dist/shared/claude-review.js +335 -0
- package/dist/shared/conflict-fold.js +151 -0
- package/dist/shared/conflicts.js +30 -0
- package/dist/shared/flow-settings.js +191 -0
- package/dist/shared/index.js +8 -0
- package/dist/shared/my-turn-settings.js +238 -0
- package/dist/shared/pending-rules.js +281 -0
- package/dist/shared/product.js +54 -0
- package/dist/shared/types.js +896 -0
- package/dist/status.js +386 -0
- package/dist/sync/adaptive.js +185 -0
- package/dist/sync/app-attribution.js +66 -0
- package/dist/sync/auth-notices.js +36 -0
- package/dist/sync/backfill-ci-history.js +315 -0
- package/dist/sync/backfill-commit-headlines.js +136 -0
- package/dist/sync/backfill-pr-security.js +175 -0
- package/dist/sync/backfill-review-requests.js +97 -0
- package/dist/sync/benchmark-rollup.js +50 -0
- package/dist/sync/bot-detection.js +309 -0
- package/dist/sync/bot-resolution-markers.js +30 -0
- package/dist/sync/branch-status.js +634 -0
- package/dist/sync/classify-change-shape.js +150 -0
- package/dist/sync/commit-files.js +74 -0
- package/dist/sync/derive-thread-state.js +99 -0
- package/dist/sync/drain-review-threads.js +212 -0
- package/dist/sync/hydrate-detail.js +482 -0
- package/dist/sync/mention-scan.js +89 -0
- package/dist/sync/ml-enrichment.js +478 -0
- package/dist/sync/pr-change-signal.js +96 -0
- package/dist/sync/pr-liveness-sweep.js +139 -0
- package/dist/sync/pr-settle.js +381 -0
- package/dist/sync/refresh-pr.js +163 -0
- package/dist/sync/reparse-vendor-badges.js +495 -0
- package/dist/sync/resync-after-write.js +280 -0
- package/dist/sync/review-fingerprint.js +117 -0
- package/dist/sync/reviewer-behavior.js +103 -0
- package/dist/sync/reviewer-classify.js +503 -0
- package/dist/sync/routing-files.js +97 -0
- package/dist/sync/scheduled-jobs.js +12 -0
- package/dist/sync/scheduler.js +159 -0
- package/dist/sync/security-detect.js +521 -0
- package/dist/sync/sync-manager.js +750 -0
- package/dist/sync/sync-one-pr.js +205 -0
- package/dist/sync/sync-repo.js +400 -0
- package/dist/sync/unsettled-prs.js +506 -0
- package/dist/sync/upsert.js +1190 -0
- package/package.json +56 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/assets/AiFixTab-CQP6PT5u.js +2 -0
- package/public/assets/ClaudeReviewTab-DQJ-58ZA.js +8 -0
- package/public/assets/PrBotBehaviourTab-CCnFrWbC.js +1 -0
- package/public/assets/archivo-latin-600-BN-JkNrl.woff2 +0 -0
- package/public/assets/highlight-BEHUn5zE.css +10 -0
- package/public/assets/highlight-CIIZLa6Z.js +12 -0
- package/public/assets/index-BDnYs6zg.js +73 -0
- package/public/assets/index-mCuI--RC.css +1 -0
- package/public/assets/markdown-I_JLLVAZ.js +32 -0
- package/public/assets/perfProbe-Da13EhTE.js +1 -0
- package/public/assets/tanstack-5qsxxaLe.js +17 -0
- package/public/assets/vis-C3BCkP5U.js +1280 -0
- package/public/assets/vis-ziCVehMy.css +1 -0
- package/public/favicon-16.png +0 -0
- package/public/favicon-32.png +0 -0
- package/public/favicon-48.png +0 -0
- package/public/favicon.svg +5 -0
- package/public/index.html +41 -0
- package/public-landing/apple-touch-icon.png +0 -0
- package/public-landing/assets/archivo-latin-500-BWmvx2Mg.woff2 +0 -0
- package/public-landing/assets/archivo-latin-600-BN-JkNrl.woff2 +0 -0
- package/public-landing/assets/index-CA3eEGXO.js +40 -0
- package/public-landing/assets/index-naQrQ6Fe.css +1 -0
- package/public-landing/assets/jetbrains-mono-latin-400-RruCX7RW.woff2 +0 -0
- package/public-landing/assets/newsreader-latin-400-DExrRRrN.woff2 +0 -0
- package/public-landing/assets/newsreader-latin-400-italic-b0I-AwbV.woff2 +0 -0
- package/public-landing/bots/index.html +156 -0
- package/public-landing/contact/index.html +156 -0
- package/public-landing/cookies/index.html +156 -0
- package/public-landing/demo/limn-walkthrough-poster.jpg +0 -0
- package/public-landing/demo/limn-walkthrough.cues.json +44 -0
- package/public-landing/demo/limn-walkthrough.mp4 +0 -0
- package/public-landing/favicon-16.png +0 -0
- package/public-landing/favicon-32.png +0 -0
- package/public-landing/favicon-48.png +0 -0
- package/public-landing/favicon.svg +5 -0
- package/public-landing/features/index.html +156 -0
- package/public-landing/for-developers/index.html +156 -0
- package/public-landing/for-managers/index.html +156 -0
- package/public-landing/how-it-works/index.html +156 -0
- package/public-landing/how-we-measure/index.html +156 -0
- package/public-landing/icon-192.png +0 -0
- package/public-landing/icon-512.png +0 -0
- package/public-landing/index.html +156 -0
- package/public-landing/insights/index.html +156 -0
- package/public-landing/og-image.png +0 -0
- package/public-landing/pricing/index.html +156 -0
- package/public-landing/privacy/index.html +156 -0
- package/public-landing/pro/index.html +156 -0
- package/public-landing/reviews/index.html +156 -0
- package/public-landing/robots.txt +8 -0
- package/public-landing/shots/benchmark.png +0 -0
- package/public-landing/shots/bot-roi.png +0 -0
- package/public-landing/shots/bot-settings.png +0 -0
- package/public-landing/shots/chronology.png +0 -0
- package/public-landing/shots/feed.png +0 -0
- package/public-landing/shots/flow-metrics.png +0 -0
- package/public-landing/shots/free-reports.png +0 -0
- package/public-landing/shots/pending-board.png +0 -0
- package/public-landing/shots/pending-card.png +0 -0
- package/public-landing/shots/period-report.png +0 -0
- package/public-landing/shots/pr-detail.png +0 -0
- package/public-landing/shots/pr-threads.png +0 -0
- package/public-landing/shots/reach.png +0 -0
- package/public-landing/shots/repo-rows.png +0 -0
- package/public-landing/shots/severity-findings.png +0 -0
- package/public-landing/shots/severity-strip.png +0 -0
- package/public-landing/site.webmanifest +14 -0
- package/public-landing/sitemap.xml +51 -0
- package/public-landing/terms/index.html +156 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
CREATE TABLE `commit_files` (
|
|
2
|
+
`sha` text PRIMARY KEY NOT NULL,
|
|
3
|
+
`paths` text NOT NULL,
|
|
4
|
+
`fetched_at` integer DEFAULT (unixepoch()) NOT NULL
|
|
5
|
+
);
|
|
6
|
+
--> statement-breakpoint
|
|
7
|
+
CREATE TABLE `commits` (
|
|
8
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
9
|
+
`sha` text NOT NULL,
|
|
10
|
+
`pr_id` integer NOT NULL,
|
|
11
|
+
`author_id` integer,
|
|
12
|
+
`committer_id` integer,
|
|
13
|
+
`message` text,
|
|
14
|
+
`committed_at` integer NOT NULL,
|
|
15
|
+
FOREIGN KEY (`pr_id`) REFERENCES `pull_requests`(`id`) ON UPDATE no action ON DELETE no action,
|
|
16
|
+
FOREIGN KEY (`author_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
|
|
17
|
+
FOREIGN KEY (`committer_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
|
|
18
|
+
);
|
|
19
|
+
--> statement-breakpoint
|
|
20
|
+
CREATE INDEX `commit_pr_idx` ON `commits` (`pr_id`);--> statement-breakpoint
|
|
21
|
+
CREATE UNIQUE INDEX `commit_sha_pr_ux` ON `commits` (`sha`,`pr_id`);--> statement-breakpoint
|
|
22
|
+
CREATE TABLE `events` (
|
|
23
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
24
|
+
`repo_id` integer NOT NULL,
|
|
25
|
+
`actor_id` integer,
|
|
26
|
+
`pr_id` integer,
|
|
27
|
+
`type` text NOT NULL,
|
|
28
|
+
`occurred_at` integer NOT NULL,
|
|
29
|
+
`ref_table` text,
|
|
30
|
+
`ref_id` integer,
|
|
31
|
+
`dedupe_key` text NOT NULL,
|
|
32
|
+
FOREIGN KEY (`repo_id`) REFERENCES `repos`(`id`) ON UPDATE no action ON DELETE no action,
|
|
33
|
+
FOREIGN KEY (`actor_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
|
|
34
|
+
FOREIGN KEY (`pr_id`) REFERENCES `pull_requests`(`id`) ON UPDATE no action ON DELETE no action
|
|
35
|
+
);
|
|
36
|
+
--> statement-breakpoint
|
|
37
|
+
CREATE UNIQUE INDEX `events_dedupe_key_unique` ON `events` (`dedupe_key`);--> statement-breakpoint
|
|
38
|
+
CREATE INDEX `events_time_idx` ON `events` (`occurred_at`);--> statement-breakpoint
|
|
39
|
+
CREATE INDEX `events_repo_time_idx` ON `events` (`repo_id`,`occurred_at`);--> statement-breakpoint
|
|
40
|
+
CREATE INDEX `events_actor_idx` ON `events` (`actor_id`);--> statement-breakpoint
|
|
41
|
+
CREATE TABLE `pr_comments` (
|
|
42
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
43
|
+
`github_node_id` text NOT NULL,
|
|
44
|
+
`pr_id` integer NOT NULL,
|
|
45
|
+
`author_id` integer,
|
|
46
|
+
`body` text NOT NULL,
|
|
47
|
+
`created_at` integer NOT NULL,
|
|
48
|
+
FOREIGN KEY (`pr_id`) REFERENCES `pull_requests`(`id`) ON UPDATE no action ON DELETE no action,
|
|
49
|
+
FOREIGN KEY (`author_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
|
|
50
|
+
);
|
|
51
|
+
--> statement-breakpoint
|
|
52
|
+
CREATE UNIQUE INDEX `pr_comments_github_node_id_unique` ON `pr_comments` (`github_node_id`);--> statement-breakpoint
|
|
53
|
+
CREATE INDEX `prc_pr_idx` ON `pr_comments` (`pr_id`);--> statement-breakpoint
|
|
54
|
+
CREATE TABLE `pull_requests` (
|
|
55
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
56
|
+
`github_node_id` text NOT NULL,
|
|
57
|
+
`repo_id` integer NOT NULL,
|
|
58
|
+
`number` integer NOT NULL,
|
|
59
|
+
`title` text NOT NULL,
|
|
60
|
+
`body` text,
|
|
61
|
+
`author_id` integer,
|
|
62
|
+
`state` text NOT NULL,
|
|
63
|
+
`is_draft` integer DEFAULT false NOT NULL,
|
|
64
|
+
`opened_at` integer NOT NULL,
|
|
65
|
+
`first_review_at` integer,
|
|
66
|
+
`last_commit_at` integer,
|
|
67
|
+
`merged_at` integer,
|
|
68
|
+
`closed_at` integer,
|
|
69
|
+
`updated_at` integer NOT NULL,
|
|
70
|
+
FOREIGN KEY (`repo_id`) REFERENCES `repos`(`id`) ON UPDATE no action ON DELETE no action,
|
|
71
|
+
FOREIGN KEY (`author_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
|
|
72
|
+
);
|
|
73
|
+
--> statement-breakpoint
|
|
74
|
+
CREATE UNIQUE INDEX `pull_requests_github_node_id_unique` ON `pull_requests` (`github_node_id`);--> statement-breakpoint
|
|
75
|
+
CREATE INDEX `pr_repo_idx` ON `pull_requests` (`repo_id`);--> statement-breakpoint
|
|
76
|
+
CREATE INDEX `pr_opened_idx` ON `pull_requests` (`opened_at`);--> statement-breakpoint
|
|
77
|
+
CREATE TABLE `repos` (
|
|
78
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
79
|
+
`owner` text NOT NULL,
|
|
80
|
+
`name` text NOT NULL,
|
|
81
|
+
`github_node_id` text NOT NULL,
|
|
82
|
+
`backfill_until` integer,
|
|
83
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL
|
|
84
|
+
);
|
|
85
|
+
--> statement-breakpoint
|
|
86
|
+
CREATE UNIQUE INDEX `repos_github_node_id_unique` ON `repos` (`github_node_id`);--> statement-breakpoint
|
|
87
|
+
CREATE UNIQUE INDEX `repos_owner_name` ON `repos` (`owner`,`name`);--> statement-breakpoint
|
|
88
|
+
CREATE TABLE `review_comments` (
|
|
89
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
90
|
+
`github_node_id` text NOT NULL,
|
|
91
|
+
`thread_id` integer NOT NULL,
|
|
92
|
+
`pr_id` integer NOT NULL,
|
|
93
|
+
`author_id` integer,
|
|
94
|
+
`body` text NOT NULL,
|
|
95
|
+
`diff_hunk` text,
|
|
96
|
+
`created_at` integer NOT NULL,
|
|
97
|
+
FOREIGN KEY (`thread_id`) REFERENCES `review_threads`(`id`) ON UPDATE no action ON DELETE no action,
|
|
98
|
+
FOREIGN KEY (`pr_id`) REFERENCES `pull_requests`(`id`) ON UPDATE no action ON DELETE no action,
|
|
99
|
+
FOREIGN KEY (`author_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
|
|
100
|
+
);
|
|
101
|
+
--> statement-breakpoint
|
|
102
|
+
CREATE UNIQUE INDEX `review_comments_github_node_id_unique` ON `review_comments` (`github_node_id`);--> statement-breakpoint
|
|
103
|
+
CREATE INDEX `rc_thread_idx` ON `review_comments` (`thread_id`);--> statement-breakpoint
|
|
104
|
+
CREATE TABLE `review_threads` (
|
|
105
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
106
|
+
`github_node_id` text NOT NULL,
|
|
107
|
+
`pr_id` integer NOT NULL,
|
|
108
|
+
`path` text NOT NULL,
|
|
109
|
+
`line` integer,
|
|
110
|
+
`is_resolved` integer NOT NULL,
|
|
111
|
+
`is_outdated` integer DEFAULT false NOT NULL,
|
|
112
|
+
`derived_state` text NOT NULL,
|
|
113
|
+
`original_commenter_id` integer,
|
|
114
|
+
`created_at` integer NOT NULL,
|
|
115
|
+
FOREIGN KEY (`pr_id`) REFERENCES `pull_requests`(`id`) ON UPDATE no action ON DELETE no action,
|
|
116
|
+
FOREIGN KEY (`original_commenter_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
|
|
117
|
+
);
|
|
118
|
+
--> statement-breakpoint
|
|
119
|
+
CREATE UNIQUE INDEX `review_threads_github_node_id_unique` ON `review_threads` (`github_node_id`);--> statement-breakpoint
|
|
120
|
+
CREATE INDEX `thread_pr_idx` ON `review_threads` (`pr_id`);--> statement-breakpoint
|
|
121
|
+
CREATE TABLE `reviews` (
|
|
122
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
123
|
+
`github_node_id` text NOT NULL,
|
|
124
|
+
`pr_id` integer NOT NULL,
|
|
125
|
+
`author_id` integer,
|
|
126
|
+
`state` text NOT NULL,
|
|
127
|
+
`body` text,
|
|
128
|
+
`submitted_at` integer NOT NULL,
|
|
129
|
+
FOREIGN KEY (`pr_id`) REFERENCES `pull_requests`(`id`) ON UPDATE no action ON DELETE no action,
|
|
130
|
+
FOREIGN KEY (`author_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
|
|
131
|
+
);
|
|
132
|
+
--> statement-breakpoint
|
|
133
|
+
CREATE UNIQUE INDEX `reviews_github_node_id_unique` ON `reviews` (`github_node_id`);--> statement-breakpoint
|
|
134
|
+
CREATE INDEX `rv_pr_idx` ON `reviews` (`pr_id`);--> statement-breakpoint
|
|
135
|
+
CREATE TABLE `sync_state` (
|
|
136
|
+
`repo_id` integer PRIMARY KEY NOT NULL,
|
|
137
|
+
`last_full_sync_at` integer,
|
|
138
|
+
`last_incremental_sync_at` integer,
|
|
139
|
+
`last_sync_status` text,
|
|
140
|
+
`last_sync_error` text,
|
|
141
|
+
FOREIGN KEY (`repo_id`) REFERENCES `repos`(`id`) ON UPDATE no action ON DELETE no action
|
|
142
|
+
);
|
|
143
|
+
--> statement-breakpoint
|
|
144
|
+
CREATE TABLE `users` (
|
|
145
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
146
|
+
`github_login` text NOT NULL,
|
|
147
|
+
`github_node_id` text,
|
|
148
|
+
`display_name` text,
|
|
149
|
+
`avatar_url` text,
|
|
150
|
+
`is_bot` integer DEFAULT false NOT NULL,
|
|
151
|
+
`is_bot_overridden` integer DEFAULT false NOT NULL
|
|
152
|
+
);
|
|
153
|
+
--> statement-breakpoint
|
|
154
|
+
CREATE UNIQUE INDEX `users_github_login_unique` ON `users` (`github_login`);--> statement-breakpoint
|
|
155
|
+
CREATE UNIQUE INDEX `users_github_node_id_unique` ON `users` (`github_node_id`);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
CREATE TABLE `local_user` (
|
|
2
|
+
`id` integer PRIMARY KEY NOT NULL,
|
|
3
|
+
`github_login` text NOT NULL,
|
|
4
|
+
`github_id` text NOT NULL,
|
|
5
|
+
`avatar_url` text,
|
|
6
|
+
`cached_at` integer NOT NULL
|
|
7
|
+
);
|
|
8
|
+
--> statement-breakpoint
|
|
9
|
+
CREATE TABLE `pr_views` (
|
|
10
|
+
`pr_id` integer PRIMARY KEY NOT NULL,
|
|
11
|
+
`last_viewed_sha` text,
|
|
12
|
+
`last_viewed_at` integer NOT NULL,
|
|
13
|
+
FOREIGN KEY (`pr_id`) REFERENCES `pull_requests`(`id`) ON UPDATE no action ON DELETE no action
|
|
14
|
+
);
|
|
15
|
+
--> statement-breakpoint
|
|
16
|
+
CREATE TABLE `review_requests` (
|
|
17
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
18
|
+
`pr_id` integer NOT NULL,
|
|
19
|
+
`user_id` integer,
|
|
20
|
+
`team_name` text,
|
|
21
|
+
FOREIGN KEY (`pr_id`) REFERENCES `pull_requests`(`id`) ON UPDATE no action ON DELETE no action,
|
|
22
|
+
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
|
|
23
|
+
);
|
|
24
|
+
--> statement-breakpoint
|
|
25
|
+
CREATE INDEX `rr_pr_idx` ON `review_requests` (`pr_id`);--> statement-breakpoint
|
|
26
|
+
CREATE INDEX `rr_user_idx` ON `review_requests` (`user_id`);--> statement-breakpoint
|
|
27
|
+
ALTER TABLE `pull_requests` ADD `head_sha` text;--> statement-breakpoint
|
|
28
|
+
ALTER TABLE `pull_requests` ADD `ci_status` text;--> statement-breakpoint
|
|
29
|
+
ALTER TABLE `pull_requests` ADD `mergeable` text;--> statement-breakpoint
|
|
30
|
+
ALTER TABLE `pull_requests` ADD `merge_state_status` text;--> statement-breakpoint
|
|
31
|
+
ALTER TABLE `pull_requests` ADD `labels` text;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
CREATE TABLE `my_turn_dismissals` (
|
|
2
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
3
|
+
`kind` text NOT NULL,
|
|
4
|
+
`ref_id` integer NOT NULL,
|
|
5
|
+
`dismissed_at` integer NOT NULL
|
|
6
|
+
);
|
|
7
|
+
--> statement-breakpoint
|
|
8
|
+
CREATE UNIQUE INDEX `mtd_kind_ref_ux` ON `my_turn_dismissals` (`kind`,`ref_id`);--> statement-breakpoint
|
|
9
|
+
ALTER TABLE `pull_requests` ADD `check_runs` text;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE `pull_requests` ADD `merged_by_id` integer REFERENCES users(id);
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
CREATE TABLE `claude_review_findings` (
|
|
2
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
3
|
+
`review_id` integer NOT NULL,
|
|
4
|
+
`path` text NOT NULL,
|
|
5
|
+
`line` integer,
|
|
6
|
+
`side` text DEFAULT 'RIGHT' NOT NULL,
|
|
7
|
+
`severity` text NOT NULL,
|
|
8
|
+
`title` text NOT NULL,
|
|
9
|
+
`body` text NOT NULL,
|
|
10
|
+
`suggestion` text,
|
|
11
|
+
`anchored` integer DEFAULT true NOT NULL,
|
|
12
|
+
`included` integer DEFAULT false NOT NULL,
|
|
13
|
+
`posted_at` integer,
|
|
14
|
+
`github_comment_id` text,
|
|
15
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
16
|
+
FOREIGN KEY (`review_id`) REFERENCES `claude_reviews`(`id`) ON UPDATE no action ON DELETE no action
|
|
17
|
+
);
|
|
18
|
+
--> statement-breakpoint
|
|
19
|
+
CREATE INDEX `crf_review_idx` ON `claude_review_findings` (`review_id`);--> statement-breakpoint
|
|
20
|
+
CREATE TABLE `claude_reviews` (
|
|
21
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
22
|
+
`pr_id` integer NOT NULL,
|
|
23
|
+
`head_sha` text NOT NULL,
|
|
24
|
+
`status` text NOT NULL,
|
|
25
|
+
`model` text NOT NULL,
|
|
26
|
+
`scope` text,
|
|
27
|
+
`summary` text,
|
|
28
|
+
`verdict` text,
|
|
29
|
+
`user_body` text,
|
|
30
|
+
`user_verdict` text,
|
|
31
|
+
`cost_usd` real,
|
|
32
|
+
`input_tokens` integer,
|
|
33
|
+
`output_tokens` integer,
|
|
34
|
+
`num_turns` integer,
|
|
35
|
+
`error` text,
|
|
36
|
+
`excluded_files` text,
|
|
37
|
+
`posted_review_id` text,
|
|
38
|
+
`posted_at` integer,
|
|
39
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
40
|
+
`finished_at` integer,
|
|
41
|
+
FOREIGN KEY (`pr_id`) REFERENCES `pull_requests`(`id`) ON UPDATE no action ON DELETE no action
|
|
42
|
+
);
|
|
43
|
+
--> statement-breakpoint
|
|
44
|
+
CREATE INDEX `cr_pr_idx` ON `claude_reviews` (`pr_id`);--> statement-breakpoint
|
|
45
|
+
CREATE INDEX `cr_pr_sha_idx` ON `claude_reviews` (`pr_id`,`head_sha`);
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
CREATE TABLE `accounts` (
|
|
2
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
3
|
+
`github_user_id` text NOT NULL,
|
|
4
|
+
`github_login` text NOT NULL,
|
|
5
|
+
`avatar_url` text,
|
|
6
|
+
`access_token_enc` text,
|
|
7
|
+
`is_local` integer DEFAULT false NOT NULL,
|
|
8
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
9
|
+
`last_login_at` integer
|
|
10
|
+
);
|
|
11
|
+
--> statement-breakpoint
|
|
12
|
+
CREATE UNIQUE INDEX `accounts_github_user_id_unique` ON `accounts` (`github_user_id`);--> statement-breakpoint
|
|
13
|
+
INSERT INTO `accounts` (`id`, `github_user_id`, `github_login`, `avatar_url`, `is_local`, `created_at`, `last_login_at`)
|
|
14
|
+
SELECT 1, COALESCE(`github_id`, ''), COALESCE(`github_login`, ''), `avatar_url`, 1, COALESCE(`cached_at`, unixepoch()), `cached_at`
|
|
15
|
+
FROM `local_user` WHERE `id` = 1;--> statement-breakpoint
|
|
16
|
+
INSERT OR IGNORE INTO `accounts` (`id`, `github_user_id`, `github_login`, `is_local`, `created_at`)
|
|
17
|
+
VALUES (1, '', '', 1, unixepoch());--> statement-breakpoint
|
|
18
|
+
ALTER TABLE `repos` ADD `account_id` integer DEFAULT 1 NOT NULL;--> statement-breakpoint
|
|
19
|
+
ALTER TABLE `pull_requests` ADD `account_id` integer DEFAULT 1 NOT NULL;--> statement-breakpoint
|
|
20
|
+
ALTER TABLE `events` ADD `account_id` integer DEFAULT 1 NOT NULL;--> statement-breakpoint
|
|
21
|
+
ALTER TABLE `claude_reviews` ADD `account_id` integer DEFAULT 1 NOT NULL;--> statement-breakpoint
|
|
22
|
+
ALTER TABLE `my_turn_dismissals` ADD `account_id` integer DEFAULT 1 NOT NULL;--> statement-breakpoint
|
|
23
|
+
DROP INDEX `repos_github_node_id_unique`;--> statement-breakpoint
|
|
24
|
+
DROP INDEX `repos_owner_name`;--> statement-breakpoint
|
|
25
|
+
DROP INDEX `pull_requests_github_node_id_unique`;--> statement-breakpoint
|
|
26
|
+
DROP INDEX `reviews_github_node_id_unique`;--> statement-breakpoint
|
|
27
|
+
DROP INDEX `review_threads_github_node_id_unique`;--> statement-breakpoint
|
|
28
|
+
DROP INDEX `review_comments_github_node_id_unique`;--> statement-breakpoint
|
|
29
|
+
DROP INDEX `pr_comments_github_node_id_unique`;--> statement-breakpoint
|
|
30
|
+
DROP INDEX `events_dedupe_key_unique`;--> statement-breakpoint
|
|
31
|
+
CREATE UNIQUE INDEX `repos_account_owner_name` ON `repos` (`account_id`,`owner`,`name`);--> statement-breakpoint
|
|
32
|
+
CREATE UNIQUE INDEX `repos_account_node` ON `repos` (`account_id`,`github_node_id`);--> statement-breakpoint
|
|
33
|
+
CREATE INDEX `repos_account_idx` ON `repos` (`account_id`);--> statement-breakpoint
|
|
34
|
+
CREATE UNIQUE INDEX `pr_account_node` ON `pull_requests` (`account_id`,`github_node_id`);--> statement-breakpoint
|
|
35
|
+
CREATE INDEX `pr_account_idx` ON `pull_requests` (`account_id`);--> statement-breakpoint
|
|
36
|
+
CREATE UNIQUE INDEX `reviews_pr_node` ON `reviews` (`pr_id`,`github_node_id`);--> statement-breakpoint
|
|
37
|
+
CREATE UNIQUE INDEX `thread_pr_node` ON `review_threads` (`pr_id`,`github_node_id`);--> statement-breakpoint
|
|
38
|
+
CREATE UNIQUE INDEX `rc_pr_node` ON `review_comments` (`pr_id`,`github_node_id`);--> statement-breakpoint
|
|
39
|
+
CREATE UNIQUE INDEX `prc_pr_node` ON `pr_comments` (`pr_id`,`github_node_id`);--> statement-breakpoint
|
|
40
|
+
CREATE UNIQUE INDEX `events_account_dedupe` ON `events` (`account_id`,`dedupe_key`);--> statement-breakpoint
|
|
41
|
+
CREATE INDEX `events_account_idx` ON `events` (`account_id`);--> statement-breakpoint
|
|
42
|
+
CREATE INDEX `cr_account_idx` ON `claude_reviews` (`account_id`);--> statement-breakpoint
|
|
43
|
+
CREATE INDEX `mtd_account_idx` ON `my_turn_dismissals` (`account_id`);--> statement-breakpoint
|
|
44
|
+
DROP TABLE `local_user`;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
-- Lean cloud storage groundwork (additive).
|
|
2
|
+
--
|
|
3
|
+
-- Adds review_comments.excerpt: a short (~160 char) preview of the comment body,
|
|
4
|
+
-- kept even when the full body is dropped in cloud "lean storage" mode so the
|
|
5
|
+
-- triage path (getMyTurn / getThreadsAwaiting) and graceful UI degradation work
|
|
6
|
+
-- without a network round trip. Local mode still stores the full body.
|
|
7
|
+
--
|
|
8
|
+
-- Note: in the Drizzle schema review_comments.body / pr_comments.body are now
|
|
9
|
+
-- nullable (to allow cloud's lean Postgres rows to omit them). SQLite cannot drop
|
|
10
|
+
-- a NOT NULL via ALTER, but local mode always persists bodies (config.persistBodies
|
|
11
|
+
-- is true whenever the driver is sqlite), so the live NOT NULL constraint is never
|
|
12
|
+
-- exercised — only the additive column below is needed here.
|
|
13
|
+
ALTER TABLE `review_comments` ADD `excerpt` text;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
-- Make review_comments.body and pr_comments.body NULLABLE for lean storage
|
|
2
|
+
-- (config.persistBodies false, now the default in both modes): the full body is
|
|
3
|
+
-- dropped from storage and hydrated on demand, leaving review_comments.excerpt
|
|
4
|
+
-- (from 0009) as the kept preview. SQLite can't drop a NOT NULL via ALTER, so the
|
|
5
|
+
-- two tables are rebuilt. This is safe: no other table has a foreign key pointing
|
|
6
|
+
-- at them, and the copied data already satisfies their own (unchanged) outbound
|
|
7
|
+
-- FKs. The rebuilt tables keep the excerpt column and every current index.
|
|
8
|
+
CREATE TABLE `__new_review_comments` (
|
|
9
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
10
|
+
`github_node_id` text NOT NULL,
|
|
11
|
+
`thread_id` integer NOT NULL,
|
|
12
|
+
`pr_id` integer NOT NULL,
|
|
13
|
+
`author_id` integer,
|
|
14
|
+
`body` text,
|
|
15
|
+
`excerpt` text,
|
|
16
|
+
`diff_hunk` text,
|
|
17
|
+
`database_id` text,
|
|
18
|
+
`created_at` integer NOT NULL,
|
|
19
|
+
FOREIGN KEY (`thread_id`) REFERENCES `review_threads`(`id`) ON UPDATE no action ON DELETE no action,
|
|
20
|
+
FOREIGN KEY (`pr_id`) REFERENCES `pull_requests`(`id`) ON UPDATE no action ON DELETE no action,
|
|
21
|
+
FOREIGN KEY (`author_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
|
|
22
|
+
);
|
|
23
|
+
--> statement-breakpoint
|
|
24
|
+
INSERT INTO `__new_review_comments` (`id`, `github_node_id`, `thread_id`, `pr_id`, `author_id`, `body`, `excerpt`, `diff_hunk`, `database_id`, `created_at`)
|
|
25
|
+
SELECT `id`, `github_node_id`, `thread_id`, `pr_id`, `author_id`, `body`, `excerpt`, `diff_hunk`, `database_id`, `created_at` FROM `review_comments`;
|
|
26
|
+
--> statement-breakpoint
|
|
27
|
+
DROP TABLE `review_comments`;
|
|
28
|
+
--> statement-breakpoint
|
|
29
|
+
ALTER TABLE `__new_review_comments` RENAME TO `review_comments`;
|
|
30
|
+
--> statement-breakpoint
|
|
31
|
+
CREATE INDEX `rc_thread_idx` ON `review_comments` (`thread_id`);
|
|
32
|
+
--> statement-breakpoint
|
|
33
|
+
CREATE UNIQUE INDEX `rc_pr_node` ON `review_comments` (`pr_id`,`github_node_id`);
|
|
34
|
+
--> statement-breakpoint
|
|
35
|
+
CREATE TABLE `__new_pr_comments` (
|
|
36
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
37
|
+
`github_node_id` text NOT NULL,
|
|
38
|
+
`pr_id` integer NOT NULL,
|
|
39
|
+
`author_id` integer,
|
|
40
|
+
`body` text,
|
|
41
|
+
`database_id` text,
|
|
42
|
+
`created_at` integer NOT NULL,
|
|
43
|
+
FOREIGN KEY (`pr_id`) REFERENCES `pull_requests`(`id`) ON UPDATE no action ON DELETE no action,
|
|
44
|
+
FOREIGN KEY (`author_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
|
|
45
|
+
);
|
|
46
|
+
--> statement-breakpoint
|
|
47
|
+
INSERT INTO `__new_pr_comments` (`id`, `github_node_id`, `pr_id`, `author_id`, `body`, `database_id`, `created_at`)
|
|
48
|
+
SELECT `id`, `github_node_id`, `pr_id`, `author_id`, `body`, `database_id`, `created_at` FROM `pr_comments`;
|
|
49
|
+
--> statement-breakpoint
|
|
50
|
+
DROP TABLE `pr_comments`;
|
|
51
|
+
--> statement-breakpoint
|
|
52
|
+
ALTER TABLE `__new_pr_comments` RENAME TO `pr_comments`;
|
|
53
|
+
--> statement-breakpoint
|
|
54
|
+
CREATE INDEX `prc_pr_idx` ON `pr_comments` (`pr_id`);
|
|
55
|
+
--> statement-breakpoint
|
|
56
|
+
CREATE UNIQUE INDEX `prc_pr_node` ON `pr_comments` (`pr_id`,`github_node_id`);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
-- PR diff-size metadata (additive). Adds the GraphQL additions/deletions/
|
|
2
|
+
-- changedFiles totals and the per-file breakdown (files JSON) to pull_requests,
|
|
3
|
+
-- powering the PR-detail LOC summary label and the new "Changes" tab. This is
|
|
4
|
+
-- small metadata (not bulky user text), so it's stored in BOTH modes regardless
|
|
5
|
+
-- of lean storage. Existing rows get the 0 defaults / NULL files until the next
|
|
6
|
+
-- sync backfills real values.
|
|
7
|
+
ALTER TABLE `pull_requests` ADD `additions` integer DEFAULT 0 NOT NULL;--> statement-breakpoint
|
|
8
|
+
ALTER TABLE `pull_requests` ADD `deletions` integer DEFAULT 0 NOT NULL;--> statement-breakpoint
|
|
9
|
+
ALTER TABLE `pull_requests` ADD `changed_files` integer DEFAULT 0 NOT NULL;--> statement-breakpoint
|
|
10
|
+
ALTER TABLE `pull_requests` ADD `files` text;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
-- Claude Review findings are now INCLUDED by default (the UI is opt-OUT via an
|
|
2
|
+
-- "Ignore" button, replacing the old opt-IN "include" checkbox). New findings are
|
|
3
|
+
-- inserted with included=1 (see review/persist.ts); this backfills existing rows so
|
|
4
|
+
-- already-generated reviews show their findings as included rather than ignored.
|
|
5
|
+
-- SQLite-only: Claude Review is force-disabled in cloud, so the Postgres
|
|
6
|
+
-- claude_review_findings table is never populated.
|
|
7
|
+
UPDATE `claude_review_findings` SET `included` = 1 WHERE `included` = 0;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
-- Claude Review routing (additive). Records the deterministic skip/diff_only/
|
|
2
|
+
-- worktree decision (review_mode) and its decision inputs (route_reason JSON) made
|
|
3
|
+
-- BEFORE the agent runs — so the diff-only fast path can be enforced and the
|
|
4
|
+
-- thresholds calibrated against the agent's own scopeUsed self-report. Both columns
|
|
5
|
+
-- are nullable; existing rows stay NULL until re-reviewed. SQLite-only: Claude
|
|
6
|
+
-- Review is force-disabled in cloud, so the Postgres claude_reviews table is never
|
|
7
|
+
-- populated (its baseline is regenerated separately via db:generate:pg).
|
|
8
|
+
ALTER TABLE `claude_reviews` ADD `review_mode` text;--> statement-breakpoint
|
|
9
|
+
ALTER TABLE `claude_reviews` ADD `route_reason` text;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
-- Activity gating for the scheduler (additive). `last_active_at` records the last
|
|
2
|
+
-- time a loaded frontend for this account talked to the backend; the periodic sync
|
|
3
|
+
-- skips accounts not active within config.syncActiveWindowMinutes so a tenant with no
|
|
4
|
+
-- open tab stops being re-synced. Nullable; existing rows stay NULL (eligible only
|
|
5
|
+
-- once they next show activity). Cloud-relevant; local has one always-on account.
|
|
6
|
+
ALTER TABLE `accounts` ADD `last_active_at` integer;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
-- "Watch for inbox" per repo (additive). When `inbox_watch` is true, new open PRs by
|
|
2
|
+
-- others (opened on/after `inbox_watch_started_at`) surface in the My Turn inbox —
|
|
3
|
+
-- independent of timeline visibility and of removing the repo. `inbox_watch_started_at`
|
|
4
|
+
-- is set on the first watch and preserved across unwatch, so re-watching restores the
|
|
5
|
+
-- same window. Existing repos default to NOT watched (opt-in); new "yours" repos are
|
|
6
|
+
-- watched on add by the picker. Postgres baseline is regenerated separately via
|
|
7
|
+
-- db:generate:pg.
|
|
8
|
+
ALTER TABLE `repos` ADD `inbox_watch` integer DEFAULT false NOT NULL;--> statement-breakpoint
|
|
9
|
+
ALTER TABLE `repos` ADD `inbox_watch_started_at` integer;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
-- Viewer's repo permission (additive). `viewer_permission` records the GraphQL
|
|
2
|
+
-- Repository.viewerPermission enum (ADMIN/MAINTAIN/WRITE/TRIAGE/READ) captured each
|
|
3
|
+
-- activity sync. It drives whether the viewer may approve a PR (WRITE+ and not the
|
|
4
|
+
-- author) — surfaced as PrDetail.viewerCanApprove. Nullable; existing rows stay NULL
|
|
5
|
+
-- until the next sync repopulates them. Postgres baseline is regenerated separately
|
|
6
|
+
-- via db:generate:pg.
|
|
7
|
+
ALTER TABLE `repos` ADD `viewer_permission` text;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
-- The signed-in user's GitHub display name (additive). `display_name` captures the
|
|
2
|
+
-- `name` field from `gh api user` (local) / OAuth `GET /user` (cloud), shown wherever
|
|
3
|
+
-- the logged-in identity appears (header, greeting) in place of the @login. Nullable;
|
|
4
|
+
-- existing rows stay NULL until the next identity refresh repopulates them (local:
|
|
5
|
+
-- ensureLocalAccount refetches when display_name is NULL; cloud: on next sign-in).
|
|
6
|
+
-- Postgres baseline is regenerated separately via db:generate:pg.
|
|
7
|
+
ALTER TABLE `accounts` ADD `display_name` text;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
-- Records how a posted Claude-review finding was attached to the PR (additive):
|
|
2
|
+
-- 'inline' = a review comment on a diff line, 'pr_comment' = a standalone PR-level
|
|
3
|
+
-- issue comment (used when the user posts an UNANCHORED finding individually rather
|
|
4
|
+
-- than forcing it onto a diff line). Null until posted; the UI uses it to build the
|
|
5
|
+
-- correct GitHub permalink (#discussion_r vs #issuecomment). SQLite-only — Claude
|
|
6
|
+
-- Review is force-disabled in cloud, so the Postgres table is never populated.
|
|
7
|
+
ALTER TABLE `claude_review_findings` ADD `posted_comment_kind` text;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
-- Whether a Claude-review finding's file is part of the PR's diff (additive). true ⇒
|
|
2
|
+
-- an unanchored finding posts inline on the file's first change; false ⇒ the file is
|
|
3
|
+
-- outside the PR's diff (e.g. a deep review on an unchanged file) so it posts as a
|
|
4
|
+
-- standalone PR-level comment instead of being forced onto a diff line. NOT NULL
|
|
5
|
+
-- DEFAULT 1 so pre-existing findings keep the inline-on-first-change behavior.
|
|
6
|
+
-- SQLite-only — Claude Review is force-disabled in cloud.
|
|
7
|
+
ALTER TABLE `claude_review_findings` ADD `file_in_diff` integer NOT NULL DEFAULT 1;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
-- Claude Review cost telemetry (additive). Records the cache-token split (a
|
|
2
|
+
-- multi-turn run's input is mostly cache reads — the dominant cost the plain
|
|
3
|
+
-- input_tokens column hid) plus the full noise-stripped diff size and whether the
|
|
4
|
+
-- feature-flagged diff-size cap truncated the prompt (so capped vs uncapped runs can
|
|
5
|
+
-- be cost-compared). All nullable; existing rows stay NULL. SQLite-only: Claude
|
|
6
|
+
-- Review is force-disabled in cloud, so the Postgres claude_reviews table is never
|
|
7
|
+
-- populated (its baseline is regenerated separately via db:generate:pg).
|
|
8
|
+
ALTER TABLE `claude_reviews` ADD `cache_read_tokens` integer;--> statement-breakpoint
|
|
9
|
+
ALTER TABLE `claude_reviews` ADD `cache_creation_tokens` integer;--> statement-breakpoint
|
|
10
|
+
ALTER TABLE `claude_reviews` ADD `diff_bytes` integer;--> statement-breakpoint
|
|
11
|
+
ALTER TABLE `claude_reviews` ADD `diff_capped` integer;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
-- Server-side Activity-Feed "seen" marker (additive). `feed_last_seen_at` records the
|
|
2
|
+
-- last time this account viewed the consolidated feed, so "new FYI since you were last
|
|
3
|
+
-- here" is server-truth (consistent across devices) instead of a client localStorage
|
|
4
|
+
-- heuristic — the successor to the removed per-item "Done". Nullable; existing rows stay
|
|
5
|
+
-- NULL (no baseline yet → nothing counts as new until the first feed view sets it).
|
|
6
|
+
-- The Postgres baseline is regenerated separately via `pnpm db:generate:pg`.
|
|
7
|
+
ALTER TABLE `accounts` ADD `feed_last_seen_at` integer;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
-- CI status transition history (additive). Append-only log of a PR head's CI-state
|
|
2
|
+
-- transitions, recorded during sync when the CI rollup / failing-check set / head SHA
|
|
3
|
+
-- changes. Powers real CI failure-resolution time + failure-reason-by-stage metrics
|
|
4
|
+
-- (the current pull_requests.ci_status is only a snapshot; check_runs is lean-gated).
|
|
5
|
+
-- The Postgres baseline is regenerated separately via `pnpm db:generate:pg`.
|
|
6
|
+
CREATE TABLE `ci_status_events` (
|
|
7
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
8
|
+
`account_id` integer NOT NULL,
|
|
9
|
+
`repo_id` integer NOT NULL,
|
|
10
|
+
`pr_id` integer NOT NULL,
|
|
11
|
+
`head_sha` text NOT NULL,
|
|
12
|
+
`status` text NOT NULL,
|
|
13
|
+
`failing_checks` text,
|
|
14
|
+
`observed_at` integer NOT NULL,
|
|
15
|
+
FOREIGN KEY (`account_id`) REFERENCES `accounts`(`id`) ON UPDATE no action ON DELETE no action,
|
|
16
|
+
FOREIGN KEY (`repo_id`) REFERENCES `repos`(`id`) ON UPDATE no action ON DELETE no action,
|
|
17
|
+
FOREIGN KEY (`pr_id`) REFERENCES `pull_requests`(`id`) ON UPDATE no action ON DELETE no action
|
|
18
|
+
);
|
|
19
|
+
--> statement-breakpoint
|
|
20
|
+
CREATE INDEX `cse_account_pr_observed` ON `ci_status_events` (`account_id`,`pr_id`,`observed_at`);--> statement-breakpoint
|
|
21
|
+
CREATE INDEX `cse_account_repo_observed` ON `ci_status_events` (`account_id`,`repo_id`,`observed_at`);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
-- AI-spend ledger (additive). Append-only: one row per billable AI operation (LLM
|
|
2
|
+
-- completion or Agent-SDK run) so month-to-date usage is summable across features (the
|
|
3
|
+
-- per-feature cost columns upsert-overwrite). Surfaced only as credits, never dollars.
|
|
4
|
+
-- `seam` = summary (cheap completions) | agent (Agent-SDK runs). No FK on pr_id/repo_id
|
|
5
|
+
-- so the ledger survives PR/repo pruning. Postgres baseline regenerated via `db:generate:pg`.
|
|
6
|
+
CREATE TABLE `ai_usage` (
|
|
7
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
8
|
+
`account_id` integer NOT NULL,
|
|
9
|
+
`seam` text NOT NULL,
|
|
10
|
+
`feature` text NOT NULL,
|
|
11
|
+
`model` text NOT NULL,
|
|
12
|
+
`cost_usd` real NOT NULL,
|
|
13
|
+
`input_tokens` integer,
|
|
14
|
+
`output_tokens` integer,
|
|
15
|
+
`pr_id` integer,
|
|
16
|
+
`repo_id` integer,
|
|
17
|
+
`occurred_at` integer NOT NULL DEFAULT (unixepoch()),
|
|
18
|
+
FOREIGN KEY (`account_id`) REFERENCES `accounts`(`id`) ON UPDATE no action ON DELETE no action
|
|
19
|
+
);
|
|
20
|
+
--> statement-breakpoint
|
|
21
|
+
CREATE INDEX `au_account_occurred` ON `ai_usage` (`account_id`,`occurred_at`);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
-- The PR's SOURCE branch name (GraphQL `headRefName`), e.g. `feature/PROJ-123-foo` (additive).
|
|
2
|
+
-- The standard carrier of a Jira/Linear ticket key; read by the Pro ticket-link enricher
|
|
3
|
+
-- (compute-on-read) to render deep links in PR detail. Distinct from `base_ref_name` (the
|
|
4
|
+
-- TARGET branch). Nullable; existing rows stay NULL until a sync backfills them.
|
|
5
|
+
-- The Postgres baseline is regenerated separately via `pnpm db:generate:pg`.
|
|
6
|
+
ALTER TABLE `pull_requests` ADD `head_ref_name` text;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
-- Stripe billing seam (additive). `plan` ('free' | 'pro', default 'free') is set ONLY by
|
|
2
|
+
-- the Stripe webhook (api/routes/billing.ts) — the OAuth upsert never touches it, so a
|
|
3
|
+
-- re-login can't reset a paid plan. `stripe_customer_id` (cus_…) is captured from
|
|
4
|
+
-- checkout.session.completed so subscription webhooks can resolve the account.
|
|
5
|
+
-- The Postgres baseline is regenerated separately via `pnpm db:generate:pg`.
|
|
6
|
+
ALTER TABLE `accounts` ADD `plan` text NOT NULL DEFAULT 'free';--> statement-breakpoint
|
|
7
|
+
ALTER TABLE `accounts` ADD `stripe_customer_id` text;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
-- Per-account monthly SUMMARY-AI credit allowance override (metered cloud plan). Nullable,
|
|
2
|
+
-- no default: null = use the plan default (2,500 for a paid cloud account); local/unlimited
|
|
3
|
+
-- accounts ignore it. A forward hook for top-ups / alternate plans without another migration.
|
|
4
|
+
-- The Postgres baseline is regenerated separately via `pnpm db:generate:pg`.
|
|
5
|
+
ALTER TABLE `accounts` ADD `ai_credit_allowance` integer;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
-- Bot-Triage Platform (WS1): capture the GitHub GraphQL __typename of an actor
|
|
2
|
+
-- ('Bot' | 'User' | 'Organization' | …) on the global users table. Plain text (no
|
|
3
|
+
-- enum — the __typename set varies), nullable. A 'Bot' typename is a hard
|
|
4
|
+
-- automated-reviewer signal for the classifier. users stays GLOBAL (no account_id).
|
|
5
|
+
-- The Postgres baseline is regenerated separately via `pnpm db:generate:pg`.
|
|
6
|
+
ALTER TABLE `users` ADD `github_type` text;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
-- Bot-Triage Platform (WS1): account-scoped classification cache for automated
|
|
2
|
+
-- reviewers. One row per (account, author); AUTO rows written by the layered resolver,
|
|
3
|
+
-- MANUAL rows (source='manual') by the override route and never overwritten by auto.
|
|
4
|
+
-- Merged with the global vendor login map on read. Account-scoped isolation.
|
|
5
|
+
-- The Postgres baseline is regenerated separately via `pnpm db:generate:pg`.
|
|
6
|
+
CREATE TABLE `bot_review_classification` (
|
|
7
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
8
|
+
`account_id` integer NOT NULL,
|
|
9
|
+
`author_user_id` integer NOT NULL,
|
|
10
|
+
`automated` integer NOT NULL,
|
|
11
|
+
`kind` text,
|
|
12
|
+
`label` text,
|
|
13
|
+
`confidence` text NOT NULL,
|
|
14
|
+
`source` text NOT NULL,
|
|
15
|
+
`reasons_json` text,
|
|
16
|
+
`updated_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
17
|
+
FOREIGN KEY (`account_id`) REFERENCES `accounts`(`id`) ON UPDATE no action ON DELETE no action,
|
|
18
|
+
FOREIGN KEY (`author_user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
|
|
19
|
+
);
|
|
20
|
+
--> statement-breakpoint
|
|
21
|
+
CREATE UNIQUE INDEX `brc_account_author` ON `bot_review_classification` (`account_id`,`author_user_id`);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
-- Bot-Triage Platform (WS6): account-scoped mute / auto-triage rules. A rule matches
|
|
2
|
+
-- automated-reviewer threads by vendor_kind × path_glob × severity (null = any) and
|
|
3
|
+
-- either 'hide's them from the noise counts/feed or (with auto_resolve_days) marks
|
|
4
|
+
-- likely_addressed threads older than N days for the standing auto-resolve job.
|
|
5
|
+
-- Account-scoped isolation. The Postgres baseline is regenerated separately via
|
|
6
|
+
-- `pnpm db:generate:pg`.
|
|
7
|
+
CREATE TABLE `bot_mute_rules` (
|
|
8
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
9
|
+
`account_id` integer NOT NULL,
|
|
10
|
+
`vendor_kind` text,
|
|
11
|
+
`path_glob` text,
|
|
12
|
+
`severity` text,
|
|
13
|
+
`action` text NOT NULL,
|
|
14
|
+
`auto_resolve_days` integer,
|
|
15
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
16
|
+
FOREIGN KEY (`account_id`) REFERENCES `accounts`(`id`) ON UPDATE no action ON DELETE no action
|
|
17
|
+
);
|
|
18
|
+
--> statement-breakpoint
|
|
19
|
+
CREATE INDEX `bmr_account_idx` ON `bot_mute_rules` (`account_id`);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
-- Teams (CORE): a named grouping of an account's repos, plus the many-to-many join
|
|
2
|
+
-- (team_repos; overlap allowed). Account-scoped isolation (accountId denormalized onto
|
|
3
|
+
-- the join). FKs cascade so deleting an account/team/repo cleans up membership rows.
|
|
4
|
+
-- The Postgres baseline is regenerated separately via `pnpm db:generate:pg`.
|
|
5
|
+
CREATE TABLE `teams` (
|
|
6
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
7
|
+
`account_id` integer NOT NULL,
|
|
8
|
+
`name` text NOT NULL,
|
|
9
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
10
|
+
FOREIGN KEY (`account_id`) REFERENCES `accounts`(`id`) ON UPDATE no action ON DELETE cascade
|
|
11
|
+
);
|
|
12
|
+
--> statement-breakpoint
|
|
13
|
+
CREATE UNIQUE INDEX `teams_account_name` ON `teams` (`account_id`,`name`);
|
|
14
|
+
--> statement-breakpoint
|
|
15
|
+
CREATE INDEX `teams_account_idx` ON `teams` (`account_id`);
|
|
16
|
+
--> statement-breakpoint
|
|
17
|
+
CREATE TABLE `team_repos` (
|
|
18
|
+
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
|
|
19
|
+
`account_id` integer NOT NULL,
|
|
20
|
+
`team_id` integer NOT NULL,
|
|
21
|
+
`repo_id` integer NOT NULL,
|
|
22
|
+
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
|
23
|
+
FOREIGN KEY (`account_id`) REFERENCES `accounts`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
24
|
+
FOREIGN KEY (`team_id`) REFERENCES `teams`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
25
|
+
FOREIGN KEY (`repo_id`) REFERENCES `repos`(`id`) ON UPDATE no action ON DELETE cascade
|
|
26
|
+
);
|
|
27
|
+
--> statement-breakpoint
|
|
28
|
+
CREATE UNIQUE INDEX `team_repos_team_repo` ON `team_repos` (`team_id`,`repo_id`);
|
|
29
|
+
--> statement-breakpoint
|
|
30
|
+
CREATE INDEX `team_repos_account_idx` ON `team_repos` (`account_id`);
|
|
31
|
+
--> statement-breakpoint
|
|
32
|
+
CREATE INDEX `team_repos_repo_idx` ON `team_repos` (`repo_id`);
|