pulls.review 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +5 -0
  2. package/dist/client/assets/ActionButton-V4dY2wPS.js +1 -0
  3. package/dist/client/assets/ActionIconButton-4b5xelMn.js +1 -0
  4. package/dist/client/assets/ChatMessage-Ccffh_8Z.js +80 -0
  5. package/dist/client/assets/ChatWidget-BFjNWi3R.js +1 -0
  6. package/dist/client/assets/DisplayFileIcon-DIcJdZir.js +151 -0
  7. package/dist/client/assets/GithubAvatar-DGJrpCsX.js +1 -0
  8. package/dist/client/assets/LandingHero-CS9lP7Qs.js +1 -0
  9. package/dist/client/assets/LocalAgentSettings-C4AeYCZ0.js +1 -0
  10. package/dist/client/assets/ModelPicker-CDTiUMZ3.js +3 -0
  11. package/dist/client/assets/SelectViewport-DF4P4Akh.js +1 -0
  12. package/dist/client/assets/_repo_-DtGh1V5_.js +22 -0
  13. package/dist/client/assets/analyze-CTcNbJBk.js +1 -0
  14. package/dist/client/assets/anthropic-messages-Btz8sjqp.js +41 -0
  15. package/dist/client/assets/browser-agent-rpc-BXhoSh1z-DrvKG05N.js +1 -0
  16. package/dist/client/assets/core-messages-CsAgH4H9.js +1 -0
  17. package/dist/client/assets/de-DQCc3irO.js +1 -0
  18. package/dist/client/assets/diagnostics-CrG4-M7r.js +1 -0
  19. package/dist/client/assets/{diff-BKQFn0my.js → diff-Bq6jHPox.js} +3 -3
  20. package/dist/client/assets/diff-BsZcYqbE.js +1 -0
  21. package/dist/client/assets/diffs-store-CzecLzBW.js +1431 -0
  22. package/dist/client/assets/en-CBwAorrh.js +1 -0
  23. package/dist/client/assets/{es-QcvEBShr.js → es-hetdr90_.js} +1 -1
  24. package/dist/client/assets/floating-ui.dom-CfpSQvPs.js +1 -0
  25. package/dist/client/assets/fr-Cayf6fbk.js +1 -0
  26. package/dist/client/assets/i18n-CgsK6PK3.js +2 -0
  27. package/dist/client/assets/{id-NIGs9Xhn.js → id-lw2zLhUO.js} +1 -1
  28. package/dist/client/assets/index-DP4XBqUv.js +2 -0
  29. package/dist/client/assets/index-DSHKSKKf.css +1 -0
  30. package/dist/client/assets/install-DKy8VRs5.js +4 -0
  31. package/dist/client/assets/{it-DjRuurmk.js → it-BfFzmCsC.js} +1 -1
  32. package/dist/client/assets/{ja-BAKkDsQ5.js → ja-DxaV4C1r.js} +1 -1
  33. package/dist/client/assets/ko-D93r2P2k.js +1 -0
  34. package/dist/client/assets/llm-XBWohzAo.js +87 -0
  35. package/dist/client/assets/llm-store-7CdL0d74.js +1 -0
  36. package/dist/client/assets/local-agents-BQLn-Ppw.js +1 -0
  37. package/dist/client/assets/models-D651LTTp.js +8 -0
  38. package/dist/client/assets/nanoid-Cya-tyvy.js +1 -0
  39. package/dist/client/assets/node.browser-C0q8i5sA.js +1 -0
  40. package/dist/client/assets/{openai-completions-CSvY9IVo.js → openai-completions-DvmbMyzl.js} +5 -5
  41. package/dist/client/assets/pages-Tf2MYsp8.js +1 -0
  42. package/dist/client/assets/pages-local-iBHcLWBK.js +1 -0
  43. package/dist/client/assets/pages-web-Bmq8l7JI.js +21 -0
  44. package/dist/client/assets/portalTarget-DQg8GgWm.js +1 -0
  45. package/dist/client/assets/pt-BR-Isafy_5V.js +1 -0
  46. package/dist/client/assets/rpc-backends-CLzNPIWN.js +1 -0
  47. package/dist/client/assets/ru-Bx9Wj7Aa.js +1 -0
  48. package/dist/client/assets/runtime-dom.esm-bundler-Du_ZCcVN.js +2 -0
  49. package/dist/client/assets/{source-hSji-yvG.js → source-Dk1PNoY7.js} +1 -1
  50. package/dist/client/assets/sync-interval-oKvsW-lT.js +1 -0
  51. package/dist/client/assets/{transform-messages-C8U1xonk.js → transform-messages-Cg_2u7I2.js} +1 -1
  52. package/dist/client/assets/upload-CFwsDMhO.js +1 -0
  53. package/dist/client/assets/useDocumentTitle-ByFCALbG.js +92 -0
  54. package/dist/client/assets/useNonce-CwUrgryd.js +1 -0
  55. package/dist/client/assets/{vue-i18n-DVI_S4Q5.js → vue-i18n-CGHHpbTP.js} +3 -3
  56. package/dist/client/assets/zh-CN-CgGEKuLF.js +1 -0
  57. package/dist/client/assets/zh-TW-DzNR26_1.js +1 -0
  58. package/dist/client/index.html +9 -8
  59. package/dist/devframe-D66W-pHy.mjs +1002 -0
  60. package/dist/devframe.mjs +1 -1
  61. package/dist/index.mjs +28 -8
  62. package/package.json +7 -3
  63. package/dist/client/assets/ChatWidget-BsnoQ6oS.js +0 -1
  64. package/dist/client/assets/DisplayFileIcon-DzBo3Ez5.js +0 -151
  65. package/dist/client/assets/GithubAvatar-CSsUV5vf.js +0 -1
  66. package/dist/client/assets/LandingHero-BkTBSu71.js +0 -1
  67. package/dist/client/assets/_repo_-Dcgj3PGg.js +0 -22
  68. package/dist/client/assets/analyze-509KQQBC.js +0 -1
  69. package/dist/client/assets/anthropic-messages-Cd2DkgOC.js +0 -41
  70. package/dist/client/assets/browser-agent-rpc-BXhoSh1z-DrxWeI3_.js +0 -1
  71. package/dist/client/assets/de-Bq9RfdAn.js +0 -1
  72. package/dist/client/assets/diff-Bx6SazPw.js +0 -1
  73. package/dist/client/assets/diffs-store-ncE62OUU.js +0 -1510
  74. package/dist/client/assets/dist-Dh0a8u-Y.js +0 -1
  75. package/dist/client/assets/en-8hQdak1X.js +0 -1
  76. package/dist/client/assets/fr-DAWKVvDP.js +0 -1
  77. package/dist/client/assets/i18n-CGV_MDS8.js +0 -2
  78. package/dist/client/assets/index-BCCy9wJJ.js +0 -2
  79. package/dist/client/assets/index-BDPZiDIt.css +0 -1
  80. package/dist/client/assets/install-B-q5w2uE.js +0 -4
  81. package/dist/client/assets/ko-DHculY2W.js +0 -1
  82. package/dist/client/assets/llm-DYDmh8Ki.js +0 -2
  83. package/dist/client/assets/llm-store-CVM33nlB.js +0 -2
  84. package/dist/client/assets/node.browser-BX-QLlU2.js +0 -1
  85. package/dist/client/assets/pages-B5mEqsbn.js +0 -1
  86. package/dist/client/assets/pages-local-x_ACBinc.js +0 -1
  87. package/dist/client/assets/pages-web-DitAPN6U.js +0 -21
  88. package/dist/client/assets/portalTarget-C60SzJiK.js +0 -1
  89. package/dist/client/assets/pt-BR-LLtJ99P6.js +0 -1
  90. package/dist/client/assets/ru-DvkrOLxc.js +0 -1
  91. package/dist/client/assets/runtime-dom.esm-bundler-CqL7__VR.js +0 -2
  92. package/dist/client/assets/upload-GnI9kmJu.js +0 -1
  93. package/dist/client/assets/useDocumentTitle-nuqxXiNo.js +0 -185
  94. package/dist/client/assets/zh-CN-BIibd6kG.js +0 -1
  95. package/dist/client/assets/zh-TW-3FtUHjoZ.js +0 -1
  96. package/dist/devframe-CX5butdC.mjs +0 -493
@@ -1 +0,0 @@
1
- import{G as e,Kt as t,Sr as n,Tr as r,U as i,V as a,W as o,Yt as s,et as c,vn as l,zt as u}from"./vue-i18n-DVI_S4Q5.js";var d=c({__name:`FeedbackSpinner`,props:{size:{default:`1em`}},setup(t){let n=t,i=a(()=>typeof n.size==`number`?`${n.size}px`:n.size);return(t,n)=>(u(),e(`span`,{class:`border-2 border-current border-t-transparent rounded-full inline-block animate-spin`,style:r({width:i.value,height:i.value}),role:`status`,"aria-label":`Loading`},null,4))}}),f=c({__name:`ActionButton`,props:{as:{},to:{},href:{},icon:{},variant:{default:`action`},size:{default:`md`},loading:{type:Boolean},disabled:{type:Boolean}},setup(r){let c=r,f=a(()=>c.as?c.as:c.href!=null||c.to!=null?`a`:`button`),p=a(()=>f.value===`a`),m=a(()=>f.value===`button`),h=a(()=>c.size===`sm`),g=a(()=>c.variant===`primary`?h.value?`btn-primary text-sm`:`btn-primary`:c.variant===`text`?h.value?`btn-text text-sm`:`btn-text`:h.value?`btn-action-sm`:`btn-action`),_=a(()=>c.disabled||c.loading);return(a,c)=>(u(),i(s(f.value),{class:n([g.value,{"pointer-events-none op-mute":_.value&&!m.value}]),href:p.value?r.href??r.to:void 0,to:r.as&&r.to!=null?r.to:void 0,disabled:m.value?_.value:void 0,"aria-disabled":_.value||void 0,"aria-busy":r.loading||void 0},{default:l(()=>[r.loading?(u(),i(d,{key:0,size:`1em`})):r.icon?(u(),e(`span`,{key:1,class:n(r.icon),"aria-hidden":`true`},null,2)):o(``,!0),t(a.$slots,`default`)]),_:3},8,[`class`,`href`,`to`,`disabled`,`aria-disabled`,`aria-busy`]))}});function p(e,...t){return typeof e==`function`?e(...t):e}var m=Error.captureStackTrace,h=class e extends Error{name;code;docs;fix;sources;data;get why(){return this.message}constructor(t,n=e){super(t.why,{cause:t.cause}),this.code=this.name=t.code,this.fix=t.fix,this.docs=t.docs,this.sources=t.sources,this.data=t.data,m?.(this,n)}toJSON(){return{name:this.name,why:this.why,fix:this.fix,docs:this.docs,sources:this.sources,cause:this.cause,data:this.data,stack:this.stack}}};function g(e,t){return typeof e==`string`?`${e}/${t.toLowerCase()}`:e?.(t)}function _(e){let t=e.reporters??[],n={},{docsBase:r}=e;for(let i of Object.keys(e.codes)){let a=e.codes[i],o=a.docs===!1?void 0:a.docs||g(r,i),s=(e={},n={})=>{let r=new h({code:i,why:p(a.why,e),fix:p(a.fix,e),docs:o,cause:e.cause,sources:e.sources,data:p(a.data,e)},s);for(let e of t)e(r,n);return r};n[i]=s}return n}export{d as i,_ as n,f as r,h as t};
@@ -1 +0,0 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";var t=e({analyze:()=>l,category:()=>g,chat:()=>v,common:()=>n,default:()=>C,embed:()=>s,errors:()=>x,file:()=>f,fileStatus:()=>m,group:()=>d,guide:()=>i,landing:()=>r,load:()=>a,local:()=>S,pr:()=>o,prState:()=>h,pulls:()=>c,review:()=>_,reviewProgress:()=>p,rules:()=>b,settings:()=>y,share:()=>u}),n={cancel:`Cancel`,save:`Save`,remove:`Remove`,retry:`Retry`,close:`Close`,dismiss:`Dismiss`,refresh:`Refresh`,settings:`Settings`,you:`you`,loading:`Loading…`,send:`Send`,stop:`Stop`,clear:`Clear`,reply:`Reply`,submit:`Submit`,abort:`Abort`,rerun:`Rerun`,files:`{n} file | {n} files`,subgroups:`{n} subgroup | {n} subgroups`,githubRepository:`GitHub repository`,avatar:`{login}'s avatar`},r={dropHint:`Drop to load your diff / .patch file`,tagline:`Groups changed files, summarizes what matters, review them one scope at a time. Everything works locally in your browser.`,documentTitle:`Pull reviews made clear and organized`,open:`Open`,pasteHint:`Paste any GitHub pull request URL, or pick a demo below.`,recentlyViewed:`// recently viewed`,recentRepositories:`// recently viewed repositories`,tryDemos:`// try some demos`,demoBefore:`// before`,demoAfter:`// after`,moreFiles:`... {n} more files`,demoTitle:`feat: share an AI analysis as a PR comment and load shared results`,demoSummary:`One reviewer with an API key posts their analysis to the PR; everyone else loads it without a token.`,demoGroups:{store:`Shared analysis store & comment contract`,ui:`Share result UI`,refactor:`Store refactor: result to root`,tests:`Tests`,docs:`Docs & deps`},uploadTitle:`Review a diff without a PR`,uploadDescription:`Upload or paste a unified diff, or drop a {diff} / {patch} file anywhere on this page.`,uploadButton:`Upload a diff`,embedTitle:`Use it embedded on github.com`,embedDescription:`With {tampermonkey} or {violentmonkey} installed, a pulls.review drawer appears on every pull request page.`,installUserscript:`Install userscript`,bookmarkletTitle:`Jump between github.com and pulls.review`,bookmarkletDescription:`Can't install extensions? Drag this bookmarklet to your bookmarks bar to open the current pull request on pulls.review, and back.`,bookmarkletDrag:`Drag me to your bookmarks bar`,actionsTitle:`Set up auto analyze with GitHub Actions`,actionsDescription:`Analyze every pull request once in CI and post the result as a PR comment, so reviewers don't each need a model key.`,cliTitle:`Run on local git changes with the CLI`,cliDescription:`Review your working tree, a commit or a branch before you push, grouped and summarized like a PR.`,viewGuide:`View guide`},i={userscript:{title:`Use pulls.review embedded on github.com`,intro:`The userscript adds a pulls.review drawer directly to pull request pages on github.com, with grouped files and summaries, so you don't have to switch tabs.`,manager:`Install a userscript manager: {tampermonkey} or {violentmonkey}.`,install:`Install the pulls.review userscript. Your manager asks you to confirm.`,open:`Open any pull request on github.com and click the {tab} tab next to "Files changed".`,ai:`github.com blocks the requests AI analysis needs, so the drawer shows analyses shared as PR comments. Open the PR on pulls.review to run a new one.`},bookmarklet:{title:`Jump between github.com and pulls.review`,intro:`A bookmarklet is a bookmark that runs a small script. It works in any browser, with no extension to install, and opens the page you are on in the other site.`,bar:`Show your bookmarks bar, for example with {shortcut}.`,drag:`Drag this button onto the bookmarks bar:`,use:`On a pull request, commit or compare page on github.com, click the bookmark to open it on pulls.review. Click it again to go back.`},actions:{title:`Auto analyze with GitHub Actions`,intro:`Let CI analyze each pull request once, as soon as it's opened or updated. Everyone who opens the PR, here or in the github.com drawer, sees the same grouped summary right away. Nobody needs their own model key, and pull requests from forks get it too.`,secret:`Add your model key as a repository secret, for example {name}.`,workflow:`Add this workflow to the repository:`,result:`Open or update a pull request to try it. The analysis arrives as a comment, and re-runs on an unchanged PR skip the model call.`,options:`The {provider} is inferred from the key. Set {provider}, {model} or {locale} to override it. See the {readme} for every option.`},cli:{title:`Review local git changes with the CLI`,intro:`Review your own change before anyone else does. The CLI opens your branch, a commit or your uncommitted work in pulls.review, so you can see how the change reads, grouped and summarized, before you push or open a PR.`,branch:`In a git repository, run this to review your current branch against the default branch:`,target:`Or choose what to review:`,browser:`It opens {url} in your browser to visualize your local changes. Confirm the tab with the one-time code printed in your terminal. From there, you can also pick other branches or commits to compare.`}},a={title:`Load a diff`,description:`Paste or drop a unified diff / .patch file to review it.`,pasteLabel:`Paste a unified diff / .patch`,chooseFile:`Or choose a .diff/.patch file`,loadButton:`Load diff`,parsing:`Parsing diff…`,parseFailed:`Couldn't parse this diff`,noDiff:`No diff loaded`,noDiffHint:`Go to the home page and use the upload button to paste or drop a diff.`,goHome:`Go home`},o={loading:`Loading pull request…`,loadFailed:`Couldn't load this pull request`,somethingWrong:`Something went wrong`,newCommits:`This pull request has new commits since it was cached.`,autoRefreshNextTime:`Auto refresh next time`,endOfDiff:`You have reached the end of the diff.`,analyzeBy:`Analyze by`,rules:`Rules`,ai:`AI`,by:`by`,sharedBy:`Viewing AI analysis shared by`,sharedAnalysis:`Viewing Shared Analysis`,reviewedOf:`/ {total} reviewed`,openInSite:`Open in pulls.review`},s={reviewChanges:`Review Changes`,updateUserscript:`Update userscript`},c={loading:`Loading pull requests…`,loadFailed:`Couldn't load pull requests`,open:`{n} open`,search:`Filter pull requests`,empty:`There aren't any open pull requests`,noMatches:`No pull requests match your search`,searchingAll:`Searching all {n} open pull requests…`,loadingMore:`Loading more…`,openedBy:`opened {time} by {author}`,milestone:`Milestone`,comments:`{n} comment | {n} comments`,linkedIssues:`{n} linked issue | {n} linked issues`,assignedTo:`Assigned to {login}`,groups:`{n} group | {n} groups`,viewedHint:`Viewed in this browser`,aiAvailable:`AI analysis available`,sort:{label:`Sort`,"recently-updated":`Recently updated`,"least-recently-updated":`Least recently updated`,newest:`Newest`,oldest:`Oldest`,"most-commented":`Most commented`,"least-commented":`Least commented`},review:{approved:`Approved`,changes_requested:`Changes requested`,review_required:`Review required`},checks:{success:`All checks have passed`,failure:`Some checks were not successful`,pending:`Some checks haven't completed yet`}},l={setupKeys:`Setup API Keys`,analyzing:`Analyzing…`,failed:`Analysis failed`,failedTitle:`AI analysis failed: {message}`,reanalyze:`Re-analyze`,withAi:`Analyze with AI`,statusTitle:`AI analysis`,starting:`Starting…`,thinking:`Thinking… (step {step})`,reading:`Reading {n} file: {first} | Reading {n} files: {first}`,organizing:`Organizing groups…`,notConfigured:`AI analysis is not configured: add a gateway token or a vendor API key in Settings`,chatFailed:`Chat request failed`},u={button:`Share result`,updateButton:`Update shared comment`,sharing:`Sharing…`,tooltip:`Post this analysis as a comment on the pull request so others can load it`,needsToken:`A GitHub token with write access is required to share`,failed:`Sharing failed: {message}`,titleUpdate:`Update your shared analysis`,titleShare:`Share this analysis on GitHub`,willUpdate:`Your existing {comment} on this pull request will be updated as {user} with your GitHub token.`,willPost:`A public comment will be posted on this pull request as {user} with your GitHub token.`,commentLink:`comment`,contains:`The comment contains:`,containsLink:`a link to open this review on {site}`,containsJson:`the grouping and summaries of this AI analysis as JSON inside a collapsed block`,excludes:`Your chat messages, API keys, or anything else from your settings will not be included.`,anyoneCanLoad:`Anyone viewing the pull request can load the shared analysis.`,englishRecommended:`If you are working on a public project, we recommend sharing the result in English to make it helpful to the community.`,share:`Share`,update:`Update`,shareAnyway:`Share anyway`,updateAnyway:`Update anyway`,loadReplaces:`Load a shared AI analysis? It replaces yours:`,available:`Shared AI analyses of this pull request available:`,staleTitle:`Analyzed before the latest commits`,outdated:`(outdated)`,inLanguage:`Analyzed in {language}`,notShared:`{login} has not shared an analysis of this pull request.`},d={toggle:`Toggle group`,filesReviewed:`{reviewed} / {total} files reviewed`,subgroupsOf:`subgroups of`,hideSubgroups:`Hide subgroups`,showSubgroups:`Show subgroups`,navTabs:`Show groups as tabs`,navSidebar:`Show groups as sidebar`,uncategorized:`Uncategorized`,uncategorizedSummary:`Files not covered by the current analysis.`},f={markReviewed:`Mark as reviewed`,markFolderReviewed:`Mark all files in {name} as reviewed`,changedSinceReviewed:`This file was previously reviewed but changed in later commits`,resolved:`{n} resolved`,binary:`Binary file`,binaryNotShown:`Binary file not shown.`,tooLarge:`Diff too large to show.`,loadFailed:`Failed to load`,loadFull:`Load full file content`,expand:`Expand file`,collapse:`Collapse file`,noLongerInDiff:`No longer in this diff`,removed:`removed`},p={title:`Review progress`,markAll:`Mark all as reviewed`,reset:`Reset review state`,invert:`Invert review state`,status:{reviewed:`Reviewed`,changed:`Changed since review`,unreviewed:`Not reviewed`}},m={added:`added`,removed:`removed`,modified:`modified`,renamed:`renamed`,copied:`copied`},h={open:`open`,draft:`draft`,closed:`closed`,merged:`merged`},g={ui:`UI`,api:`API`,core:`core`,data:`data`,cli:`CLI`,security:`security`,tests:`tests`,docs:`docs`,examples:`examples`,deps:`dependencies`,build:`build`,scripts:`scripts`,config:`config`,i18n:`i18n`,assets:`assets`,other:`other`},_={addReview:`Add Review`,hideComments:`Hide review comments`,showComments:`Show review comments`,reviews:`Reviews`,approved:`approved`,changesRequested:`requested changes`,commented:`commented`,dismissed:`review dismissed`,reviewChanges:`Review changes`,includesPending:`Submitting includes your {n} pending comment. | Submitting includes your {n} pending comments.`,summaryPlaceholder:`Leave a summary (optional for Approve)`,comment:`Comment`,approve:`Approve`,requestChanges:`Request changes`,discard:`Discard review`,leaveComment:`Leave a comment`,addSingle:`Add single comment`,addToReview:`Add review comment`,startReview:`Start a review`,pending:`Pending`,editComment:`Edit comment`,deleteComment:`Delete comment`,replyPlaceholder:`Reply…`,resolve:`Resolve`},v={title:`Ask about this PR`,collapse:`Collapse`,reanalyzeToEnable:`Re-analyze to enable chat`,thinking:`Thinking…`,placeholder:`Ask about this PR…`,updatedGrouping:`Updated grouping: {n} groups`,readFiles:`Read {n} file | Read {n} files`,updatingGrouping:`Updating grouping…`,submittingGrouping:`Submitting grouping…`,requestFailed:`Request failed`,stopped:`stopped`},y={layout:`Diff layout`,unified:`Unified`,split:`Split`,syntaxTheme:{label:`Syntax theme`,light:`Light mode`,dark:`Dark mode`},cached:`Cached pull requests`,autoRefresh:`Auto refresh when new commits are found`,language:`Language`,token:{label:`GitHub Personal Access Token`,optional:`Optional for public repos; required for private repos, or leaving reviews.`,scopes:`Reviews need the {repo} scope (classic token) or {fineGrained} (fine-grained token)`,storedLocally:`Stored only in this browser.`,generate:`Generate one on GitHub →`,fineGrained:`Fine-grained token (no classic scopes)`,updated:`Updated`,expires:`Expires`,neverExpires:`Never expires`,change:`Change token`,checking:`Checking token…`,couldNotVerify:`Could not verify this token.`},llm:{title:`AI Analysis`,description:`Configure a model provider to enable AI-generated summaries. Stored only in this browser and sent only to the provider you select.`,provider:`Provider`,baseUrl:`Base URL`,baseUrlDescription:`Any OpenAI-compatible chat completions endpoint (OpenAI itself, a local server, etc.).`,apiKey:`API key`,gatewayHint:`A {link} token, reaching any of its supported vendors with a single token.`,anthropicHint:`An {link}, called directly from this browser (no gateway).`,anthropicLink:`Anthropic API key`,openaiHint:`The API key for the endpoint above.`,createKey:`Create one on {provider} →`,configured:`Configured`,changeKey:`Change key`,model:`Model`,modelListFailed:`Could not load the model list ({error}). Enter a model id manually.`,embedUnavailable:`AI features aren't available in embedded mode`,embedReason:`github.com's strict Content Security Policy blocks the requests AI features need here. {link} to use them.`,goToWebsite:`Go to the website`},models:{placeholder:`model id`,loading:`Loading models…`,search:`Search models…`,noMatch:`No matching model`,useCustom:`Use “{id}”`,free:`Free`,priceTitle:`Input {input}/M · Output {output}/M tokens`}},b={allFiles:`All files`,code:{label:`Code`,summary:`Source changes.`},other:{label:`Other`,summary:`Other changes that don't fit an existing category.`},docs:{label:`Docs`,summary:`Documentation updates.`},tests:{label:`Tests`,summary:`Test coverage for the change.`},config:{label:`Config`,summary:`Configuration changes.`},deps:{label:`Dependencies`,summary:`Dependency version changes.`},generated:{label:`Generated`,summary:`Generated or build output changes.`}},x={tokenRequired:`A GitHub token is required to write to this pull request.`,diffNotLoaded:`The diff has not finished loading yet.`,noViewer:`Could not determine the GitHub user of this token.`,tokenRejected:`GitHub rejected this token (401). Check that it was pasted completely and has not been revoked.`,tooLarge:`The analysis is too large to share as a comment ({n} characters).`},S={loading:`Loading local changes…`,loadFailed:`Couldn't load these changes`,auth:{title:`Enter the code from your terminal`,hint:`pulls.review printed a 6-digit code in the terminal it runs in.`,invalid:`That code didn't work. Check the terminal and try again.`,submit:`Continue`},picker:{tagline:`Review your local branches, ranges and uncommitted changes like a pull request: grouped, summarized, one scope at a time.`,title:`Review local changes`,base:`Base`,head:`Head`,compare:`Compare`,shortcuts:`Shortcuts`,worktree:`Uncommitted changes`,recentCommits:`Recent commits`,branches:`Branches`,against:`against {base}`,current:`Checked out`}},C={common:n,landing:r,guide:i,load:a,pr:o,embed:s,pulls:c,analyze:l,share:u,group:d,file:f,reviewProgress:p,fileStatus:m,prState:h,category:g,review:_,chat:v,settings:y,rules:b,errors:x,local:S};export{t as n,C as t};
@@ -1 +0,0 @@
1
- var e={cancel:`Annuler`,save:`Enregistrer`,remove:`Supprimer`,retry:`Réessayer`,close:`Fermer`,dismiss:`Ignorer`,refresh:`Actualiser`,settings:`Paramètres`,you:`vous`,loading:`Chargement…`,send:`Envoyer`,stop:`Arrêter`,clear:`Effacer`,reply:`Répondre`,submit:`Envoyer`,abort:`Interrompre`,rerun:`Relancer`,files:`{n} fichier | {n} fichiers`,subgroups:`{n} sous-groupe | {n} sous-groupes`,githubRepository:`Dépôt GitHub`,avatar:`Avatar de {login}`},t={dropHint:`Déposez pour charger votre fichier diff / .patch`,tagline:`Regroupe les fichiers modifiés, résume l'essentiel, et vous les fait relire un périmètre à la fois. Tout fonctionne localement dans votre navigateur.`,documentTitle:`Des revues de pull requests claires et organisées`,open:`Ouvrir`,pasteHint:`Collez l'URL d'une pull request GitHub, ou choisissez une démo ci-dessous.`,recentlyViewed:`// vus récemment`,recentRepositories:`// dépôts consultés récemment`,tryDemos:`// essayez des démos`,demoBefore:`// avant`,demoAfter:`// après`,moreFiles:`... {n} fichiers de plus`,demoTitle:`feat: partager une analyse IA en commentaire de PR et charger les résultats partagés`,demoSummary:`Un relecteur avec une API key publie son analyse sur la PR ; tous les autres la chargent sans token.`,demoGroups:{store:`Store d'analyses partagées et contrat du commentaire`,ui:`UI de partage du résultat`,refactor:`Refactor du store : résultat à la racine`,tests:`Tests`,docs:`Docs et dépendances`},uploadTitle:`Relire un diff sans PR`,uploadDescription:`Importez ou collez un unified diff, ou déposez un fichier {diff} / {patch} n'importe où sur cette page.`,uploadButton:`Importer un diff`,embedTitle:`Utilisez-le intégré à github.com`,embedDescription:`Avec {tampermonkey} ou {violentmonkey} installé, un panneau pulls.review apparaît sur chaque page de pull request.`,installUserscript:`Installer le userscript`,bookmarkletTitle:`Passer de github.com à pulls.review`,bookmarkletDescription:`Impossible d'installer des extensions ? Glissez ce bookmarklet dans votre barre de favoris pour ouvrir la pull request actuelle sur pulls.review, et revenir.`,bookmarkletDrag:`Glissez-moi dans votre barre de favoris`,actionsTitle:`Configurer l'analyse automatique avec GitHub Actions`,actionsDescription:`Analysez chaque pull request une fois en CI et publiez le résultat en commentaire, pour que chaque relecteur n'ait pas besoin de sa propre clé de modèle.`,cliTitle:`Lancez-le sur vos modifications git locales avec la CLI`,cliDescription:`Relisez votre arbre de travail, un commit ou une branche avant de pousser, groupés et résumés comme une PR.`,viewGuide:`Voir le guide`},n={userscript:{title:`Utiliser pulls.review intégré à github.com`,intro:`Le userscript ajoute un panneau pulls.review directement aux pages de pull request sur github.com, avec fichiers groupés et résumés, pour que vous n'ayez pas à changer d'onglet.`,manager:`Installez un gestionnaire de userscripts : {tampermonkey} ou {violentmonkey}.`,install:`Installez le userscript pulls.review. Votre gestionnaire vous demande de confirmer.`,open:`Ouvrez n'importe quelle pull request sur github.com et cliquez sur l'onglet {tab} à côté de "Files changed".`,ai:`github.com bloque les requêtes nécessaires à l'analyse IA : le panneau affiche donc les analyses partagées en commentaire. Ouvrez la PR sur pulls.review pour en lancer une nouvelle.`},bookmarklet:{title:`Passer de github.com à pulls.review`,intro:`Un bookmarklet est un favori qui exécute un petit script. Il fonctionne dans tous les navigateurs, sans extension à installer, et ouvre la page actuelle sur l'autre site.`,bar:`Affichez votre barre de favoris, par exemple avec {shortcut}.`,drag:`Glissez ce bouton dans la barre de favoris :`,use:`Sur une page de pull request, de commit ou de comparaison sur github.com, cliquez sur le favori pour l'ouvrir sur pulls.review. Cliquez à nouveau pour revenir.`},actions:{title:`Analyse automatique avec GitHub Actions`,intro:`Laissez la CI analyser chaque pull request une fois, dès qu'elle est ouverte ou mise à jour. Toute personne qui ouvre la PR, ici ou dans le panneau sur github.com, voit aussitôt le même résumé groupé. Personne n'a besoin de sa propre clé de modèle, et les pull requests venant de forks en profitent aussi.`,secret:`Ajoutez votre clé de modèle comme secret du dépôt, par exemple {name}.`,workflow:`Ajoutez ce workflow au dépôt :`,result:`Ouvrez ou mettez à jour une pull request pour essayer. L'analyse arrive en commentaire, et les relances sur une PR inchangée sautent l'appel au modèle.`,options:`Le {provider} est déduit de la clé. Définissez {provider}, {model} ou {locale} pour le remplacer. Toutes les options sont dans le {readme}.`},cli:{title:`Relire des modifications git locales avec la CLI`,intro:`Relisez votre propre modification avant les autres. La CLI ouvre votre branche, un commit ou votre travail non commité dans pulls.review, pour voir comment la modification se lit, groupée et résumée, avant de pousser ou d'ouvrir une PR.`,branch:`Dans un dépôt git, lancez ceci pour relire votre branche actuelle par rapport à la branche par défaut :`,target:`Ou choisissez quoi relire :`,browser:`Elle ouvre {url} dans votre navigateur pour visualiser vos modifications locales. Confirmez l'onglet avec le code à usage unique affiché dans votre terminal. Vous pouvez aussi y choisir d'autres branches ou commits à comparer.`}},r={title:`Charger un diff`,description:`Collez ou déposez un fichier unified diff / .patch pour le relire.`,pasteLabel:`Collez un unified diff / .patch`,chooseFile:`Ou choisissez un fichier .diff/.patch`,loadButton:`Charger le diff`,parsing:`Analyse du diff…`,parseFailed:`Impossible d'analyser ce diff`,noDiff:`Aucun diff chargé`,noDiffHint:`Retournez à l'accueil et utilisez le bouton d'import pour coller ou déposer un diff.`,goHome:`Accueil`},i={loading:`Chargement de la pull request…`,loadFailed:`Impossible de charger cette pull request`,somethingWrong:`Une erreur est survenue`,newCommits:`Cette pull request a de nouveaux commits depuis sa mise en cache.`,autoRefreshNextTime:`Actualiser automatiquement la prochaine fois`,endOfDiff:`Vous avez atteint la fin du diff.`,analyzeBy:`Analyser par`,rules:`Règles`,ai:`IA`,by:`par`,sharedBy:`Analyse IA partagée par`,sharedAnalysis:`Analyse partagée`,reviewedOf:`/ {total} relus`,openInSite:`Ouvrir dans pulls.review`},a={reviewChanges:`Relire les modifications`,updateUserscript:`Mettre à jour le userscript`},o={loading:`Chargement des pull requests…`,loadFailed:`Impossible de charger les pull requests`,open:`{n} ouvertes`,search:`Filtrer les pull requests`,empty:`Aucune pull request ouverte`,noMatches:`Aucune pull request ne correspond à votre recherche`,searchingAll:`Recherche parmi les {n} pull requests ouvertes…`,loadingMore:`Chargement…`,openedBy:`ouverte {time} par {author}`,milestone:`Jalon`,comments:`{n} commentaire | {n} commentaires`,linkedIssues:`{n} issue liée | {n} issues liées`,assignedTo:`Assignée à {login}`,groups:`{n} groupe | {n} groupes`,viewedHint:`Consultée dans ce navigateur`,aiAvailable:`Analyse IA disponible`,sort:{label:`Trier`,"recently-updated":`Mises à jour récemment`,"least-recently-updated":`Mises à jour le moins récemment`,newest:`Plus récentes`,oldest:`Plus anciennes`,"most-commented":`Plus commentées`,"least-commented":`Moins commentées`},review:{approved:`Approuvée`,changes_requested:`Modifications demandées`,review_required:`Revue requise`},checks:{success:`Toutes les vérifications ont réussi`,failure:`Certaines vérifications ont échoué`,pending:`Certaines vérifications ne sont pas terminées`}},s={setupKeys:`Configurer les clés API`,analyzing:`Analyse…`,failed:`Échec de l'analyse`,failedTitle:`Échec de l'analyse IA : {message}`,reanalyze:`Réanalyser`,withAi:`Analyser avec l'IA`,statusTitle:`Analyse IA`,starting:`Démarrage…`,thinking:`Réflexion… (étape {step})`,reading:`Lecture de {n} fichier : {first} | Lecture de {n} fichiers : {first}`,organizing:`Organisation des groupes…`,notConfigured:`L'analyse IA n'est pas configurée : ajoutez un token gateway ou une API key de fournisseur dans les Paramètres`,chatFailed:`La requête du chat a échoué`},c={button:`Partager le résultat`,updateButton:`Mettre à jour le commentaire partagé`,sharing:`Partage…`,tooltip:`Publie cette analyse en commentaire de la pull request pour que d'autres puissent la charger`,needsToken:`Un token GitHub avec accès en écriture est requis pour partager`,failed:`Échec du partage : {message}`,titleUpdate:`Mettre à jour votre analyse partagée`,titleShare:`Partager cette analyse sur GitHub`,willUpdate:`Votre {comment} existant sur cette pull request sera mis à jour en tant que {user} avec votre token GitHub.`,willPost:`Un commentaire public sera publié sur cette pull request en tant que {user} avec votre token GitHub.`,commentLink:`commentaire`,contains:`Le commentaire contient :`,containsLink:`un lien pour ouvrir cette revue sur {site}`,containsJson:`le regroupement et les résumés de cette analyse IA en JSON dans un bloc replié`,excludes:`Vos messages de chat, clés API ou toute autre donnée de vos paramètres ne seront pas inclus.`,anyoneCanLoad:`Toute personne consultant la pull request peut charger l'analyse partagée.`,englishRecommended:`Si vous travaillez sur un projet public, nous recommandons de partager le résultat en anglais pour qu'il soit utile à la communauté.`,share:`Partager`,update:`Mettre à jour`,shareAnyway:`Partager quand même`,updateAnyway:`Mettre à jour quand même`,loadReplaces:`Charger une analyse IA partagée ? Elle remplacera la vôtre :`,available:`Analyses IA partagées disponibles pour cette pull request :`,staleTitle:`Analysée avant les derniers commits`,outdated:`(obsolète)`,inLanguage:`Analysée en {language}`,notShared:`{login} n'a pas partagé d'analyse de cette pull request.`},l={toggle:`Replier ou déplier le groupe`,filesReviewed:`{reviewed} / {total} fichiers relus`,subgroupsOf:`sous-groupes de`,hideSubgroups:`Masquer les sous-groupes`,showSubgroups:`Afficher les sous-groupes`,navTabs:`Afficher les groupes en onglets`,navSidebar:`Afficher les groupes en barre latérale`,uncategorized:`Non classés`,uncategorizedSummary:`Fichiers non couverts par l'analyse actuelle.`},u={markReviewed:`Marquer comme relu`,markFolderReviewed:`Marquer tous les fichiers de {name} comme relus`,changedSinceReviewed:`Ce fichier avait été relu, mais a changé dans des commits ultérieurs`,resolved:`{n} résolus`,binary:`Fichier binaire`,binaryNotShown:`Fichier binaire non affiché.`,tooLarge:`Diff trop volumineux pour être affiché.`,loadFailed:`Échec du chargement`,loadFull:`Charger le contenu complet du fichier`,expand:`Déplier le fichier`,collapse:`Replier le fichier`,noLongerInDiff:`N'est plus dans ce diff`,removed:`supprimé`},d={title:`Avancement de la relecture`,markAll:`Tout marquer comme relu`,reset:`Réinitialiser l'état de relecture`,invert:`Inverser l'état de relecture`,status:{reviewed:`Relu`,changed:`Modifié depuis la relecture`,unreviewed:`Non relu`}},f={added:`ajouté`,removed:`supprimé`,modified:`modifié`,renamed:`renommé`,copied:`copié`},p={open:`ouverte`,draft:`brouillon`,closed:`fermée`,merged:`fusionnée`},m={ui:`UI`,api:`API`,core:`cœur`,data:`données`,cli:`CLI`,security:`sécurité`,tests:`tests`,docs:`documentation`,examples:`exemples`,deps:`dépendances`,build:`build`,scripts:`scripts`,config:`configuration`,i18n:`i18n`,assets:`ressources`,other:`autre`},h={addReview:`Ajouter une revue`,hideComments:`Masquer les commentaires de revue`,showComments:`Afficher les commentaires de revue`,reviews:`Revues`,approved:`a approuvé`,changesRequested:`a demandé des modifications`,commented:`a commenté`,dismissed:`revue rejetée`,reviewChanges:`Relire les modifications`,includesPending:`L'envoi inclut votre {n} commentaire en attente. | L'envoi inclut vos {n} commentaires en attente.`,summaryPlaceholder:`Laissez un résumé (facultatif pour approuver)`,comment:`Commenter`,approve:`Approuver`,requestChanges:`Demander des modifications`,discard:`Abandonner la revue`,leaveComment:`Laissez un commentaire`,addSingle:`Ajouter un commentaire seul`,addToReview:`Ajouter un commentaire de revue`,startReview:`Commencer une revue`,pending:`En attente`,editComment:`Modifier le commentaire`,deleteComment:`Supprimer le commentaire`,replyPlaceholder:`Répondre…`,resolve:`Résoudre`},g={title:`Poser une question sur cette PR`,collapse:`Réduire`,reanalyzeToEnable:`Réanalysez pour activer le chat`,thinking:`Réflexion…`,placeholder:`Posez une question sur cette PR…`,updatedGrouping:`Regroupement mis à jour : {n} groupes`,readFiles:`{n} fichier lu | {n} fichiers lus`,updatingGrouping:`Mise à jour du regroupement…`,submittingGrouping:`Envoi du regroupement…`,requestFailed:`La requête a échoué`,stopped:`arrêté`},_={layout:`Disposition du diff`,unified:`Unifiée`,split:`Côte à côte`,syntaxTheme:{label:`Thème de syntaxe`,light:`Mode clair`,dark:`Mode sombre`},cached:`Pull requests en cache`,autoRefresh:`Actualiser automatiquement quand de nouveaux commits sont trouvés`,language:`Langue`,token:{label:`Personal Access Token GitHub`,optional:`Facultatif pour les dépôts publics ; requis pour les dépôts privés ou pour laisser des revues.`,scopes:`Les revues nécessitent le scope {repo} (classic token) ou {fineGrained} (fine-grained token)`,storedLocally:`Stocké uniquement dans ce navigateur.`,generate:`En générer un sur GitHub →`,fineGrained:`Fine-grained token (sans scopes classiques)`,updated:`Mis à jour`,expires:`Expire`,neverExpires:`N'expire jamais`,change:`Changer le token`,checking:`Vérification du token…`,couldNotVerify:`Impossible de vérifier ce token.`},llm:{title:`Analyse IA`,description:`Configurez un fournisseur de modèles pour activer les résumés générés par l'IA. Stocké uniquement dans ce navigateur et envoyé seulement au fournisseur que vous choisissez.`,provider:`Fournisseur`,baseUrl:`URL de base`,baseUrlDescription:`N'importe quel endpoint de chat completions compatible OpenAI (OpenAI, un serveur local, etc.).`,apiKey:`API key`,gatewayHint:`Un token {link}, donnant accès à tous ses fournisseurs pris en charge avec un seul token.`,anthropicHint:`Une {link}, appelée directement depuis ce navigateur (sans gateway).`,anthropicLink:`API key Anthropic`,openaiHint:`L'API key de l'endpoint ci-dessus.`,createKey:`En créer une sur {provider} →`,configured:`Configurée`,changeKey:`Changer la clé`,model:`Modèle`,modelListFailed:`Impossible de charger la liste des modèles ({error}). Saisissez un id de modèle manuellement.`,embedUnavailable:`Les fonctions IA ne sont pas disponibles en mode intégré`,embedReason:`La CSP stricte de github.com bloque les requêtes nécessaires aux fonctions IA. {link} pour les utiliser.`,goToWebsite:`Rendez-vous sur le site`},models:{placeholder:`id du modèle`,loading:`Chargement des modèles…`,search:`Rechercher des modèles…`,noMatch:`Aucun modèle correspondant`,useCustom:`Utiliser « {id} »`,free:`Gratuit`,priceTitle:`Entrée {input}/M · Sortie {output}/M tokens`}},v={allFiles:`Tous les fichiers`,code:{label:`Code`,summary:`Modifications du code source.`},other:{label:`Autre`,summary:`Autres modifications ne correspondant à aucune catégorie existante.`},docs:{label:`Docs`,summary:`Mises à jour de la documentation.`},tests:{label:`Tests`,summary:`Couverture de tests de la modification.`},config:{label:`Config`,summary:`Modifications de configuration.`},deps:{label:`Dépendances`,summary:`Changements de version des dépendances.`},generated:{label:`Générés`,summary:`Modifications de fichiers générés ou de build.`}},y={tokenRequired:`Un token GitHub est requis pour écrire sur cette pull request.`,diffNotLoaded:`Le diff n'a pas fini de se charger.`,noViewer:`Impossible de déterminer l'utilisateur GitHub de ce token.`,tokenRejected:`GitHub a refusé ce token (401). Vérifiez qu'il a été collé en entier et qu'il n'a pas été révoqué.`,tooLarge:`L'analyse est trop volumineuse pour être partagée en commentaire ({n} caractères).`},b={loading:`Chargement des modifications locales…`,loadFailed:`Impossible de charger ces modifications`,auth:{title:`Saisissez le code affiché dans votre terminal`,hint:`pulls.review a affiché un code à 6 chiffres dans le terminal où il s'exécute.`,invalid:`Ce code n'a pas fonctionné. Vérifiez le terminal et réessayez.`,submit:`Continuer`},picker:{tagline:`Relisez vos branches locales, plages et modifications non commitées comme une pull request : regroupées, résumées, un périmètre à la fois.`,title:`Relire les modifications locales`,base:`Base`,head:`Head`,compare:`Comparer`,shortcuts:`Raccourcis`,worktree:`Modifications non commitées`,recentCommits:`Commits récents`,branches:`Branches`,against:`par rapport à {base}`,current:`Branche actuelle`}},x={common:e,landing:t,guide:n,load:r,pr:i,embed:a,pulls:o,analyze:s,share:c,group:l,file:u,reviewProgress:d,fileStatus:f,prState:p,category:m,review:h,chat:g,settings:_,rules:v,errors:y,local:b};export{s as analyze,m as category,g as chat,e as common,x as default,a as embed,y as errors,u as file,f as fileStatus,l as group,n as guide,t as landing,r as load,b as local,i as pr,p as prState,o as pulls,h as review,d as reviewProgress,v as rules,_ as settings,c as share};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./en-8hQdak1X.js","./rolldown-runtime-Dd_uD5pT.js"])))=>i.map(i=>d[i]);
2
- import{d as e,pn as t,t as n}from"./vue-i18n-DVI_S4Q5.js";import{n as r,r as i}from"./locales-SpkpwNqX.js";import{t as a}from"./en-8hQdak1X.js";import{t as o}from"./preload-helper-BaNbYf_w.js";var s={provider:`gateway`,gatewayToken:``,gatewayModel:`anthropic/claude-sonnet-5`,anthropicApiKey:``,anthropicModel:`claude-sonnet-5`,openaiApiKey:``,openaiBaseUrl:`https://api.openai.com/v1`,openaiModel:`gpt-5.1`};function c(e){return e.gatewayToken?`gateway`:e.anthropicApiKey?`anthropic`:e.openaiApiKey?`openai-compatible`:`gateway`}var l={githubToken:``,llm:s,locale:r()},u=e(`diffs:settings`,l,{mergeDefaults:(e,t)=>{let n={...t.llm,...e?.llm};e?.llm?.provider||(n.provider=c(n));let r=i(e?.locale)?e.locale:t.locale;return{...t,...e,llm:n,locale:r}}});function d(e,t){if(e===0)return 0;let n=e>10&&e<20,r=e%10==1;return t<4?!n&&r?1:2:!n&&r?1:!n&&e%10>=2&&e%10<=4?2:3}var f=n({legacy:!1,locale:`en`,fallbackLocale:`en`,messages:{en:a},pluralizationRules:{ru:d}}),p=Object.assign({"./locales/de.json":()=>o(()=>import(`./de-Bq9RfdAn.js`),[],import.meta.url),"./locales/en.json":()=>o(()=>import(`./en-8hQdak1X.js`).then(e=>e.n),__vite__mapDeps([0,1]),import.meta.url),"./locales/es.json":()=>o(()=>import(`./es-QcvEBShr.js`),[],import.meta.url),"./locales/fr.json":()=>o(()=>import(`./fr-DAWKVvDP.js`),[],import.meta.url),"./locales/id.json":()=>o(()=>import(`./id-NIGs9Xhn.js`),[],import.meta.url),"./locales/it.json":()=>o(()=>import(`./it-DjRuurmk.js`),[],import.meta.url),"./locales/ja.json":()=>o(()=>import(`./ja-BAKkDsQ5.js`),[],import.meta.url),"./locales/ko.json":()=>o(()=>import(`./ko-DHculY2W.js`),[],import.meta.url),"./locales/pt-BR.json":()=>o(()=>import(`./pt-BR-LLtJ99P6.js`),[],import.meta.url),"./locales/ru.json":()=>o(()=>import(`./ru-DvkrOLxc.js`),[],import.meta.url),"./locales/zh-CN.json":()=>o(()=>import(`./zh-CN-BIibd6kG.js`),[],import.meta.url),"./locales/zh-TW.json":()=>o(()=>import(`./zh-TW-3FtUHjoZ.js`),[],import.meta.url)});async function m(e){if(!f.global.availableLocales.includes(e)){let t=await p[`./locales/${e}.json`]();f.global.setLocaleMessage(e,t.default)}f.global.locale.value=e,document.documentElement.lang=e}t(()=>u.value.locale,e=>void m(e),{immediate:!0});var h=f.global.t;export{h as n,u as r,f as t};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./pages-web-DitAPN6U.js","./vue-i18n-DVI_S4Q5.js","./runtime-dom.esm-bundler-CqL7__VR.js","./useDocumentTitle-nuqxXiNo.js","./rolldown-runtime-Dd_uD5pT.js","./source-hSji-yvG.js","./i18n-CGV_MDS8.js","./locales-SpkpwNqX.js","./en-8hQdak1X.js","./preload-helper-BaNbYf_w.js","./dist-Dh0a8u-Y.js","./DisplayFileIcon-DzBo3Ez5.js","./GithubAvatar-CSsUV5vf.js","./LandingHero-BkTBSu71.js","./time-ago-Bdao9Hh1.js","./uploadSession-BUj4FNau.js","./upload-GnI9kmJu.js","./analyze-509KQQBC.js","./llm-DYDmh8Ki.js","./diffs-store-ncE62OUU.js","./patch-parser-k3Vbbmi0.js","./_repo_-Dcgj3PGg.js","./portalTarget-C60SzJiK.js","./diff-BKQFn0my.js","./install-B-q5w2uE.js","./pages-B5mEqsbn.js"])))=>i.map(i=>d[i]);
2
- import{$n as e,Et as t,Kn as n,U as r,Un as i,V as a,Vn as o,Vt as s,Wn as c,Yt as l,dt as u,et as d,pn as f,qt as p,vn as m,yt as h,zt as ee}from"./vue-i18n-DVI_S4Q5.js";import{i as te}from"./runtime-dom.esm-bundler-CqL7__VR.js";import{b as g,c as _,d as ne,f as v,g as y,h as b,i as x,l as S,m as C,t as w,v as T,x as E}from"./source-hSji-yvG.js";import{r as re,t as ie}from"./i18n-CGV_MDS8.js";import{t as D}from"./preload-helper-BaNbYf_w.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var O=T([`additions`,`deletions`]),k=b({login:E(),avatarUrl:y(E())}),ae=b({id:C(),author:y(k),body:E(),createdAt:E(),url:y(E()),pending:S()}),oe=b({rootId:C(),path:E(),side:O,line:y(C()),startLine:y(C()),startSide:y(O),outdated:S(),resolved:y(S()),threadId:y(E()),pending:S(),comments:_(ae)}),A=T([`approved`,`changes_requested`,`commented`,`dismissed`]),se=b({id:C(),author:y(k),state:A,body:E(),submittedAt:y(E()),url:y(E())}),ce=b({id:C(),nodeId:E(),body:E()}),le=b({threads:_(oe),summaries:_(se),pendingReview:y(ce)}),ue=T([`added`,`removed`,`modified`,`renamed`,`copied`]),de=b({header:E(),oldStart:C(),oldLines:C(),newStart:C(),newLines:C(),patch:E()}),fe=b({path:E(),previousPath:y(E()),status:ue,additions:C(),deletions:C(),isBinary:S(),sha:E(),hunks:_(de),truncated:y(ne(!0))}),j=T([`open`,`closed`,`merged`,`draft`]),M=b({state:y(j)}),N=b({sha:E(),message:E()}),pe=b({sha:E(),ref:E()}),me=b({ref:w,title:E(),label:y(E()),author:y(b({name:E(),avatarUrl:y(E())})),description:y(E()),url:y(E()),base:y(pe),head:y(pe),createdAt:y(E()),updatedAt:y(E()),pullRequest:y(M),commits:y(_(N)),files:_(fe)}),he=b({name:E(),color:E(),description:y(E())}),ge=T([`approved`,`changes_requested`,`review_required`]),_e=T([`success`,`failure`,`pending`]),ve=b({number:C(),title:E(),url:E(),state:T([`open`,`draft`]),author:y(k),labels:_(he),assignees:_(k),milestone:y(E()),createdAt:E(),updatedAt:E(),comments:C(),reviewDecision:y(ge),checks:y(_e),linkedIssues:y(C()),additions:y(C()),deletions:y(C()),changedFiles:y(C())}),ye=b({totalCount:C(),items:_(ve),next:y(E())}),be=b({llm:y(x),"web-llm":y(x)}),xe=b({messages:_(v({role:E()})),chatStartIndex:C()}),Se=b({key:E(),ref:w,headSha:E(),title:E(),label:y(E()),url:y(E()),pullRequestState:y(j),additions:C(),deletions:C(),fileShas:_(E()),lastViewedAt:C(),sizeBytes:C(),sharedComment:y(b({id:C(),url:E()})),changedSinceReviewed:y(_(E()))}),Ce=b({diff:me,analyzedBy:be,reviews:y(le),llmSession:y(xe)}),we=b({sha:E(),reviewedAt:C()}),Te=b({owner:E(),repo:E(),page:ye,lastViewedAt:C()}),P=`pr-meta:`,Ee=`pr-body:`,De=`pr:`;function Oe(e,t,n){return new TextEncoder().encode(JSON.stringify({diff:e,analyzedBy:t,llmSession:n})).length}function ke(e){let{diff:t,analyzedBy:n,reviews:r,llmSession:i,...a}=e;return{meta:{...a,ref:t.ref,title:t.title,label:t.label,url:t.url,pullRequestState:t.pullRequest?.state,additions:t.files.reduce((e,t)=>e+t.additions,0),deletions:t.files.reduce((e,t)=>e+t.deletions,0),fileShas:t.files.map(e=>e.sha)},body:{diff:t,analyzedBy:n,reviews:r,llmSession:i}}}function Ae(e,t){let{key:n,headSha:r,lastViewedAt:i,sizeBytes:a,sharedComment:o,changedSinceReviewed:s}=e;return{key:n,headSha:r,lastViewedAt:i,sizeBytes:a,sharedComment:o,changedSinceReviewed:s,...t}}function je(e,t,n={}){let r=n.maxBytes??52428800,i=n.maxEntries??50,a=new Map;function o(e,t){let n=(a.get(e)??Promise.resolve()).then(t,t),r=n.catch(()=>{});return a.set(e,r),r.then(()=>{a.get(e)===r&&a.delete(e)}),n}async function s(t){let n=g(Se,await e.getItem(`${P}${t}`));return n.success?n.output:void 0}async function c(t){let n=g(Ce,await e.getItem(`${Ee}${t}`));return n.success?n.output:void 0}async function l(e){let[t,n]=await Promise.all([s(e),c(e)]);return t&&n?Ae(t,n):void 0}async function u(t){let{meta:n,body:r}=ke(t);await Promise.all([e.setItem(`${P}${t.key}`,n),e.setItem(`${Ee}${t.key}`,r)])}function d(t,n){return o(t,async()=>{let r=await s(t);r&&await e.setItem(`${P}${t}`,n(r))})}function f(t,n){return o(t,async()=>{let r=await c(t);r&&await e.setItem(`${Ee}${t}`,n(r))})}async function p(){let t=await e.getKeys(P),n=[];for(let{value:r}of await e.getItems(t)){let e=g(Se,r);e.success&&n.push(e.output)}return n}async function m(){let n=await e.getKeys(De);await Promise.all(n.map(t=>e.removeItem(t)));let a=(await p()).sort((e,t)=>t.lastViewedAt-e.lastViewedAt),o=0,s=[],c=[];for(let[e,t]of a.entries())o+=t.sizeBytes,e<i&&o<=r?s.push(t):c.push(t);c.length!==0&&(await Promise.all(c.flatMap(t=>[e.removeItem(`${P}${t.key}`),e.removeItem(`${Ee}${t.key}`)])),await t.prune(new Set(s.flatMap(e=>e.fileShas))))}async function h(e,n){let r=new Map(e.diff.files.map(e=>[e.path,e.sha])),i=await t.get([...r.values()]),a=new Set(e.changedSinceReviewed);return n.files.filter(e=>{let t=r.get(e.path);return a.has(e.path)||t!==void 0&&t!==e.sha&&i.has(t)}).map(e=>e.path)}return{get:l,async put(e){await o(e.key,()=>u(e)),await m()},async putDiff(e,t,n){let r=await o(e,async()=>{let r=await l(e),i=r?.analyzedBy??{},a={...r,key:e,diff:t,headSha:n,analyzedBy:i,lastViewedAt:Date.now(),sizeBytes:Oe(t,i,r?.llmSession),changedSinceReviewed:r?await h(r,t):[]};return await u(a),a});return await m(),r},touch:e=>d(e,e=>({...e,lastViewedAt:Date.now()})),setChangedSinceReviewed:(e,t)=>d(e,e=>({...e,changedSinceReviewed:t})),setSharedComment:(e,t)=>d(e,e=>({...e,sharedComment:t})),setAnalyzedResult:(e,t,n)=>f(e,e=>({...e,analyzedBy:{...e.analyzedBy,[t]:n}})),setReviewData:(e,t)=>f(e,e=>({...e,reviews:t})),async setLlmSession(e,t){await o(e,async()=>{let n=await l(e);if(!n)return;let r=t;await u({...n,llmSession:r,sizeBytes:Oe(n.diff,n.analyzedBy,r)})}),await m()},async listRecent(e){return(await p()).sort((e,t)=>t.lastViewedAt-e.lastViewedAt).slice(0,e)},async listMatching(e){let t=(await p()).filter(e);return(await Promise.all(t.map(async e=>{let t=await c(e.key);return t&&Ae(e,t)}))).filter(e=>e!==void 0)}}}var Me=`file-content:`;function Ne(e,t,n){return`${Me}${e}:${t}:${n}`}function Pe(e){return{async get(t,n,r){let i=await e.getItem(Ne(t,n,r));return typeof i==`string`?i:void 0},async set(t,n,r,i){await e.setItem(Ne(t,n,r),i)}}}var Fe=`pulls:`;function Ie(e,t){return`${Fe}${e}/${t}`}function Le(e,t=30){async function n(t,n){let r=await e.getItem(Ie(t,n));if(r==null)return;let i=g(Te,r);return i.success?i.output:void 0}async function r(t=1/0){let n=await e.getKeys(Fe),r=[];for(let{value:t}of await e.getItems(n)){let e=g(Te,t);e.success&&r.push(e.output)}return r.sort((e,t)=>t.lastViewedAt-e.lastViewedAt).slice(0,t)}return{get:n,listRecent:r,async set(n,i,a){await e.setItem(Ie(n,i),{owner:n,repo:i,page:a,lastViewedAt:Date.now()});let o=(await r()).slice(t);await Promise.all(o.map(t=>e.removeItem(Ie(t.owner,t.repo))))},async touch(t,r){let i=await n(t,r);i&&await e.setItem(Ie(t,r),{...i,lastViewedAt:Date.now()})}}}var Re=`review:`;function ze(e){return`${Re}${e}`}function Be(e){return{async get(t){if(t.length===0)return new Set;let n=new Set;for(let{value:r}of await e.getItems(t.map(ze))){let e=g(we,r);e.success&&n.add(e.output.sha)}return n},async set(t,n){let r=Date.now();await Promise.all(t.map(t=>n?e.setItem(ze(t),{sha:t,reviewedAt:r}):e.removeItem(ze(t))))},async prune(t){let n=(await e.getKeys(Re)).filter(e=>!t.has(e.slice(7)));await Promise.all(n.map(t=>e.removeItem(t)))}}}function Ve(e,t){let n=Be(e);return{diffs:je(e,n,t),reviewMarks:n,fileContents:Pe(e),pullRequestLists:Le(e)}}var He=/"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/,Ue=/"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/,We=/^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/;function Ge(e,t){if(e===`__proto__`||e===`constructor`&&t&&typeof t==`object`&&`prototype`in t){Ke(e);return}return t}function Ke(e){console.warn(`[destr] Dropping "${e}" key to prevent prototype pollution.`)}function qe(e,t={}){if(typeof e!=`string`)return e;if(e[0]===`"`&&e[e.length-1]===`"`&&e.indexOf(`\\`)===-1)return e.slice(1,-1);let n=e.trim();if(n.length<=9)switch(n.toLowerCase()){case`true`:return!0;case`false`:return!1;case`undefined`:return;case`null`:return null;case`nan`:return NaN;case`infinity`:return 1/0;case`-infinity`:return-1/0}if(!We.test(e)){if(t.strict)throw SyntaxError(`[destr] Invalid JSON`);return e}try{if(He.test(e)||Ue.test(e)){if(t.strict)throw Error(`[destr] Possible prototype pollution`);return JSON.parse(e,Ge)}return JSON.parse(e)}catch(n){if(t.strict)throw n;return e}}function Je(e){return!e||typeof e.then!=`function`?Promise.resolve(e):e}function F(e,...t){try{return Je(e(...t))}catch(e){return Promise.reject(e)}}function Ye(e){let t=typeof e;return e===null||t!==`object`&&t!==`function`}function Xe(e){let t=Object.getPrototypeOf(e);return!t||t.isPrototypeOf(Object)}function Ze(e){if(Ye(e))return String(e);if(Xe(e)||Array.isArray(e))return JSON.stringify(e);if(typeof e.toJSON==`function`)return Ze(e.toJSON());throw Error(`[unstorage] Cannot stringify value!`)}var Qe=`base64:`;function $e(e){return typeof e==`string`?e:Qe+nt(e)}function et(e){return typeof e!=`string`||!e.startsWith(Qe)?e:tt(e.slice(7))}function tt(e){return globalThis.Buffer?Buffer.from(e,`base64`):Uint8Array.from(globalThis.atob(e),e=>e.codePointAt(0))}function nt(e){return globalThis.Buffer?Buffer.from(e).toString(`base64`):globalThis.btoa(String.fromCodePoint(...e))}function I(e){return e&&e.split(`?`)[0]?.replace(/[/\\]/g,`:`).replace(/:+/g,`:`).replace(/^:|:$/g,``)||``}function rt(...e){return I(e.join(`:`))}function it(e){return e=I(e),e?e+`:`:``}function at(e,t){if(t===void 0)return!0;let n=0,r=e.indexOf(`:`);for(;r>-1;)n++,r=e.indexOf(`:`,r+1);return n<=t}function ot(e,t){return t?e.startsWith(t)&&e[e.length-1]!==`$`:e[e.length-1]!==`$`}function st(e){return e}var ct=`memory`,lt=st(()=>{let e=new Map;return{name:ct,getInstance:()=>e,hasItem(t){return e.has(t)},getItem(t){return e.get(t)??null},getItemRaw(t){return e.get(t)??null},setItem(t,n){e.set(t,n)},setItemRaw(t,n){e.set(t,n)},removeItem(t){e.delete(t)},getKeys(){return[...e.keys()]},clear(){e.clear()},dispose(){e.clear()}}});function ut(e={}){let t={mounts:{"":e.driver||lt()},mountpoints:[``],watching:!1,watchListeners:[],unwatch:{}},n=e=>{for(let n of t.mountpoints)if(e.startsWith(n))return{base:n,relativeKey:e.slice(n.length),driver:t.mounts[n]};return{base:``,relativeKey:e,driver:t.mounts[``]}},r=(e,n)=>t.mountpoints.filter(t=>t.startsWith(e)||n&&e.startsWith(t)).map(n=>({relativeBase:e.length>n.length?e.slice(n.length):void 0,mountpoint:n,driver:t.mounts[n]})),i=(e,n)=>{if(t.watching){n=I(n);for(let r of t.watchListeners)r(e,n)}},a=async()=>{if(!t.watching){t.watching=!0;for(let e in t.mounts)t.unwatch[e]=await dt(t.mounts[e],i,e)}},o=async()=>{if(t.watching){for(let e in t.unwatch)await t.unwatch[e]();t.unwatch={},t.watching=!1}},s=(e,t,r)=>{let i=new Map,a=e=>{let t=i.get(e.base);return t||(t={driver:e.driver,base:e.base,items:[]},i.set(e.base,t)),t};for(let r of e){let e=typeof r==`string`,i=I(e?r:r.key),o=e?void 0:r.value,s=e||!r.options?t:{...t,...r.options},c=n(i);a(c).items.push({key:i,value:o,relativeKey:c.relativeKey,options:s})}return Promise.all([...i.values()].map(e=>r(e))).then(e=>e.flat())},c={hasItem(e,t={}){e=I(e);let{relativeKey:r,driver:i}=n(e);return F(i.hasItem,r,t)},getItem(e,t={}){e=I(e);let{relativeKey:r,driver:i}=n(e);return F(i.getItem,r,t).then(e=>qe(e))},getItems(e,t={}){return s(e,t,e=>e.driver.getItems?F(e.driver.getItems,e.items.map(e=>({key:e.relativeKey,options:e.options})),t).then(t=>t.map(t=>({key:rt(e.base,t.key),value:qe(t.value)}))):Promise.all(e.items.map(t=>F(e.driver.getItem,t.relativeKey,t.options).then(e=>({key:t.key,value:qe(e)})))))},getItemRaw(e,t={}){e=I(e);let{relativeKey:r,driver:i}=n(e);return i.getItemRaw?F(i.getItemRaw,r,t):F(i.getItem,r,t).then(e=>et(e))},async setItem(e,t,r={}){if(t===void 0)return c.removeItem(e);e=I(e);let{relativeKey:a,driver:o}=n(e);o.setItem&&(await F(o.setItem,a,Ze(t),r),o.watch||i(`update`,e))},async setItems(e,t){await s(e,t,async e=>{if(e.driver.setItems)return F(e.driver.setItems,e.items.map(e=>({key:e.relativeKey,value:Ze(e.value),options:e.options})),t);e.driver.setItem&&await Promise.all(e.items.map(t=>F(e.driver.setItem,t.relativeKey,Ze(t.value),t.options)))})},async setItemRaw(e,t,r={}){if(t===void 0)return c.removeItem(e,r);e=I(e);let{relativeKey:a,driver:o}=n(e);if(o.setItemRaw)await F(o.setItemRaw,a,t,r);else if(o.setItem)await F(o.setItem,a,$e(t),r);else return;o.watch||i(`update`,e)},async removeItem(e,t={}){typeof t==`boolean`&&(t={removeMeta:t}),e=I(e);let{relativeKey:r,driver:a}=n(e);a.removeItem&&(await F(a.removeItem,r,t),(t.removeMeta||t.removeMata)&&await F(a.removeItem,r+`$`,t),a.watch||i(`remove`,e))},async getMeta(e,t={}){typeof t==`boolean`&&(t={nativeOnly:t}),e=I(e);let{relativeKey:r,driver:i}=n(e),a=Object.create(null);if(i.getMeta&&Object.assign(a,await F(i.getMeta,r,t)),!t.nativeOnly){let e=await F(i.getItem,r+`$`,t).then(e=>qe(e));e&&typeof e==`object`&&(typeof e.atime==`string`&&(e.atime=new Date(e.atime)),typeof e.mtime==`string`&&(e.mtime=new Date(e.mtime)),Object.assign(a,e))}return a},setMeta(e,t,n={}){return this.setItem(e+`$`,t,n)},removeMeta(e,t={}){return this.removeItem(e+`$`,t)},async getKeys(e,t={}){e=it(e);let n=r(e,!0),i=[],a=[],o=!0;for(let e of n){e.driver.flags?.maxDepth||(o=!1);let n=await F(e.driver.getKeys,e.relativeBase,t);for(let t of n){let n=e.mountpoint+I(t);i.some(e=>n.startsWith(e))||a.push(n)}i=[e.mountpoint,...i.filter(t=>!t.startsWith(e.mountpoint))]}let s=t.maxDepth!==void 0&&!o;return a.filter(n=>(!s||at(n,t.maxDepth))&&ot(n,e))},async clear(e,t={}){e=it(e),await Promise.all(r(e,!1).map(async e=>{if(e.driver.clear)return F(e.driver.clear,e.relativeBase,t);if(e.driver.removeItem){let n=await e.driver.getKeys(e.relativeBase||``,t);return Promise.all(n.map(n=>e.driver.removeItem(n,t)))}}))},async dispose(){await Promise.all(Object.values(t.mounts).map(e=>ft(e)))},async watch(e){return await a(),t.watchListeners.push(e),async()=>{t.watchListeners=t.watchListeners.filter(t=>t!==e),t.watchListeners.length===0&&await o()}},async unwatch(){t.watchListeners=[],await o()},mount(e,n){if(e=it(e),e&&t.mounts[e])throw Error(`already mounted at ${e}`);return e&&(t.mountpoints.push(e),t.mountpoints.sort((e,t)=>t.length-e.length)),t.mounts[e]=n,t.watching&&Promise.resolve(dt(n,i,e)).then(n=>{t.unwatch[e]=n}).catch(console.error),c},async unmount(e,n=!0){e=it(e),e&&t.mounts[e]&&(t.watching&&e in t.unwatch&&(t.unwatch[e]?.(),delete t.unwatch[e]),n&&await ft(t.mounts[e]),t.mountpoints=t.mountpoints.filter(t=>t!==e),delete t.mounts[e])},getMount(e=``){e=I(e)+`:`;let t=n(e);return{driver:t.driver,base:t.base}},getMounts(e=``,t={}){return e=I(e),r(e,t.parents).map(e=>({driver:e.driver,base:e.mountpoint}))},keys:(e,t={})=>c.getKeys(e,t),get:(e,t={})=>c.getItem(e,t),set:(e,t,n={})=>c.setItem(e,t,n),has:(e,t={})=>c.hasItem(e,t),del:(e,t={})=>c.removeItem(e,t),remove:(e,t={})=>c.removeItem(e,t)};return c}function dt(e,t,n){return e.watch?e.watch((e,r)=>t(e,n+r)):()=>{}}async function ft(e){typeof e.dispose==`function`&&await F(e.dispose)}function pt(e){return e}function L(e){return new Promise((t,n)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>n(e.error)})}function mt(e,t){let n,r=()=>{if(n)return n;let r=indexedDB.open(e);return r.onupgradeneeded=()=>r.result.createObjectStore(t),n=L(r),n.then(e=>{e.onclose=()=>n=void 0},()=>{n=void 0}),n};return(e,n)=>r().then(r=>n(r.transaction(t,e).objectStore(t)))}var ht;function R(){return ht||=mt(`keyval-store`,`keyval`),ht}function gt(e,t=R()){return t(`readonly`,t=>L(t.get(e)))}function _t(e,t,n=R()){return n(`readwrite`,n=>(n.put(t,e),L(n.transaction)))}function vt(e,t=R()){return t(`readwrite`,t=>(t.delete(e),L(t.transaction)))}function yt(e=R()){return e(`readwrite`,e=>(e.clear(),L(e.transaction)))}function bt(e,t){return e.openCursor().onsuccess=function(){this.result&&(t(this.result),this.result.continue())},L(e.transaction)}function xt(e=R()){return e(`readonly`,e=>{if(e.getAllKeys)return L(e.getAllKeys());let t=[];return bt(e,e=>t.push(e.key)).then(()=>t)})}var St=`idb-keyval`,Ct=pt((e={})=>{let t=e.base&&e.base.length>0?`${e.base}:`:``,n=e=>t+e,r;return e.dbName&&e.storeName&&(r=mt(e.dbName,e.storeName)),{name:St,options:e,async hasItem(e){return await gt(n(e),r)!==void 0},async getItem(e){return await gt(n(e),r)??null},async getItemRaw(e){return await gt(n(e),r)??null},setItem(e,t){return _t(n(e),t,r)},setItemRaw(e,t){return _t(n(e),t,r)},removeItem(e){return vt(n(e),r)},getKeys(){return xt(r)},clear(){return yt(r)}}});function wt(){return Ve(ut({driver:Ct({dbName:`diffs-cache`,storeName:`cache`})}))}var Tt=Symbol(`app-context`),Et={githubToken:async()=>re.value.githubToken||void 0};function Dt(e,t={cache:wt(),credentials:Et}){e.provide(Tt,t)}function Ot(){let e=h(Tt);if(!e)throw Error(`useAppContext() called outside an app with installAppContext()`);return e}var kt=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},At={};function jt(e,t){let n=p(`RouterView`);return ee(),r(n,null,{default:m(({Component:e,route:t})=>[(ee(),r(l(e),{key:t.path}))]),_:1})}var Mt=kt(At,[[`render`,jt]]),z=typeof document<`u`;function Nt(e){return typeof e==`object`||`displayName`in e||`props`in e||`__vccOpts`in e}function Pt(e){return e.__esModule||e[Symbol.toStringTag]===`Module`||e.default&&Nt(e.default)}var B=Object.assign;function Ft(e,t){let n={};for(let r in t){let i=t[r];n[r]=H(i)?i.map(e):e(i)}return n}var V=()=>{},H=Array.isArray;function It(e,t){let n={};for(let r in e)n[r]=r in t?t[r]:e[r];return n}var Lt=/#/g,Rt=/&/g,zt=/\//g,Bt=/=/g,Vt=/\?/g,Ht=/\+/g,Ut=/%5B/g,Wt=/%5D/g,Gt=/%5E/g,Kt=/%60/g,qt=/%7B/g,Jt=/%7C/g,Yt=/%7D/g,Xt=/%20/g;function Zt(e){return e==null?``:encodeURI(``+e).replace(Jt,`|`).replace(Ut,`[`).replace(Wt,`]`)}function Qt(e){return Zt(e).replace(qt,`{`).replace(Yt,`}`).replace(Gt,`^`)}function $t(e){return Zt(e).replace(Ht,`%2B`).replace(Xt,`+`).replace(Lt,`%23`).replace(Rt,`%26`).replace(Kt,"`").replace(qt,`{`).replace(Yt,`}`).replace(Gt,`^`)}function en(e){return $t(e).replace(Bt,`%3D`)}function tn(e){return Zt(e).replace(Lt,`%23`).replace(Vt,`%3F`)}function nn(e){return tn(e).replace(zt,`%2F`)}function U(e){if(e==null)return null;try{return decodeURIComponent(``+e)}catch{}return``+e}var rn=/\/$/,an=e=>e.replace(rn,``);function on(e,t,n=`/`){let r,i={},a=``,o=``,s=t.indexOf(`#`),c=t.indexOf(`?`);return c=s>=0&&c>s?-1:c,c>=0&&(r=t.slice(0,c),a=t.slice(c,s>0?s:t.length),i=e(a.slice(1))),s>=0&&(r||=t.slice(0,s),o=t.slice(s,t.length)),r=pn(r??t,n),{fullPath:r+a+o,path:r,query:i,hash:U(o)}}function sn(e,t){let n=t.query?e(t.query):``;return t.path+(n&&`?`)+n+(t.hash||``)}function cn(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||`/`}function ln(e,t,n){let r=t.matched.length-1,i=n.matched.length-1;return r>-1&&r===i&&W(t.matched[r],n.matched[i])&&un(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function W(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function un(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!dn(e[n],t[n]))return!1;return!0}function dn(e,t){return H(e)?fn(e,t):H(t)?fn(t,e):e?.valueOf()===t?.valueOf()}function fn(e,t){return H(t)?e.length===t.length&&e.every((e,n)=>e===t[n]):e.length===1&&e[0]===t}function pn(e,t){if(e.startsWith(`/`))return e;if(!e)return t;let n=t.split(`/`),r=e.split(`/`),i=r[r.length-1];(i===`..`||i===`.`)&&r.push(``);let a=n.length-1,o,s;for(o=0;o<r.length;o++)if(s=r[o],s!==`.`){if(s===`..`)a>1&&a--;else break}return n.slice(0,a).join(`/`)+`/`+r.slice(o).join(`/`)}var G={path:`/`,name:void 0,params:{},query:{},hash:``,fullPath:`/`,matched:[],meta:{},redirectedFrom:void 0},mn=function(e){return e.pop=`pop`,e.push=`push`,e}({}),hn=function(e){return e.back=`back`,e.forward=`forward`,e.unknown=``,e}({});function gn(e){if(!e){if(z){let t=document.querySelector(`base`);e=t&&t.getAttribute(`href`)||`/`,e=e.replace(/^\w+:\/\/[^\/]+/,``)}else e=`/`}return e[0]!==`/`&&e[0]!==`#`&&(e=`/`+e),an(e)}var _n=/^[^#]+#/;function vn(e,t){return e.replace(_n,`#`)+t}function yn(e,t){let n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}var bn=()=>({left:window.scrollX,top:window.scrollY});function xn(e){let t;if(`el`in e){let n=e.el,r=typeof n==`string`&&n.startsWith(`#`),i=typeof n==`string`?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!i)return;t=yn(i,e)}else t=e;`scrollBehavior`in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left==null?window.scrollX:t.left,t.top==null?window.scrollY:t.top)}function Sn(e,t){return(history.state?history.state.position-t:-1)+e}var Cn=new Map;function wn(e,t){Cn.set(e,t)}function Tn(e){let t=Cn.get(e);return Cn.delete(e),t}function En(e){return typeof e==`string`||e&&typeof e==`object`}function Dn(e){return typeof e==`string`||typeof e==`symbol`}var K=function(e){return e[e.MATCHER_NOT_FOUND=1]=`MATCHER_NOT_FOUND`,e[e.NAVIGATION_GUARD_REDIRECT=2]=`NAVIGATION_GUARD_REDIRECT`,e[e.NAVIGATION_ABORTED=4]=`NAVIGATION_ABORTED`,e[e.NAVIGATION_CANCELLED=8]=`NAVIGATION_CANCELLED`,e[e.NAVIGATION_DUPLICATED=16]=`NAVIGATION_DUPLICATED`,e}({}),On=Symbol(``);K.MATCHER_NOT_FOUND,K.NAVIGATION_GUARD_REDIRECT,K.NAVIGATION_ABORTED,K.NAVIGATION_CANCELLED,K.NAVIGATION_DUPLICATED;function q(e,t){return B(Error(),{type:e,[On]:!0},t)}function J(e,t){return e instanceof Error&&On in e&&(t==null||!!(e.type&t))}function kn(e){let t={};if(e===``||e===`?`)return t;let n=(e[0]===`?`?e.slice(1):e).split(`&`);for(let e=0;e<n.length;++e){let r=n[e].replace(Ht,` `),i=r.indexOf(`=`),a=U(i<0?r:r.slice(0,i)),o=i<0?null:U(r.slice(i+1));if(a in t){let e=t[a];H(e)||(e=t[a]=[e]),e.push(o)}else t[a]=o}return t}function An(e){let t=``;for(let n in e){let r=e[n];if(n=en(n),r==null){r!==void 0&&(t+=(t.length?`&`:``)+n);continue}(H(r)?r.map(e=>e&&$t(e)):[r&&$t(r)]).forEach(e=>{e!==void 0&&(t+=(t.length?`&`:``)+n,e!=null&&(t+=`=`+e))})}return t}function jn(e){let t={};for(let n in e){let r=e[n];r!==void 0&&(t[n]=H(r)?r.map(e=>e==null?null:``+e):r==null?r:``+r)}return t}var Mn=Symbol(``),Nn=Symbol(``),Pn=Symbol(``),Fn=Symbol(``),In=Symbol(``);function Y(){let e=[];function t(t){return e.push(t),()=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function X(e,t,n,r,i,a=e=>e()){let o=r&&(r.enterCallbacks[i]=r.enterCallbacks[i]||[]);return()=>new Promise((s,c)=>{let l=e=>{e===!1?c(q(K.NAVIGATION_ABORTED,{from:n,to:t})):e instanceof Error?c(e):En(e)?c(q(K.NAVIGATION_GUARD_REDIRECT,{from:t,to:e})):(o&&r.enterCallbacks[i]===o&&typeof e==`function`&&o.push(e),s())},u=a(()=>e.call(r&&r.instances[i],t,n,l)),d=Promise.resolve(u);e.length<3&&(d=d.then(l)),d.catch(e=>c(e))})}function Ln(e,t,n,r,i=e=>e()){let a=[];for(let o of e)for(let e in o.components){let s=o.components[e];if(t===`beforeRouteEnter`||o.instances[e]){if(Nt(s)){let c=(s.__vccOpts||s)[t];c&&a.push(X(c,n,r,o,e,i))}else{let c=s();a.push(()=>c.then(a=>{if(!a)throw Error(`Couldn't resolve component "${e}" at "${o.path}"`);let s=Pt(a)?a.default:a;o.mods[e]=a,o.components[e]=s;let c=(s.__vccOpts||s)[t];return c&&X(c,n,r,o,e,i)()}))}}}return a}function Rn(e,t){let n=[],r=[],i=[],a=Math.max(t.matched.length,e.matched.length);for(let o=0;o<a;o++){let a=t.matched[o];a&&(e.matched.find(e=>W(e,a))?r.push(a):n.push(a));let s=e.matched[o];s&&(t.matched.find(e=>W(e,s))||i.push(s))}return[n,r,i]}var zn=()=>location.protocol+`//`+location.host;function Bn(e,t){let{pathname:n,search:r,hash:i}=t,a=e.indexOf(`#`);if(a>-1){let t=i.includes(e.slice(a))?e.slice(a).length:1,n=i.slice(t);return n[0]!==`/`&&(n=`/`+n),cn(n,``)}return cn(n,e)+r+i}function Vn(e,t,n,r){let i=[],a=[],o=null,s=({state:a})=>{let s=Bn(e,location),c=n.value,l=t.value,u=0;if(a){if(n.value=s,t.value=a,o&&o===c){o=null;return}u=l?a.position-l.position:0}else r(s);i.forEach(e=>{e(n.value,c,{delta:u,type:mn.pop,direction:u?u>0?hn.forward:hn.back:hn.unknown})})};function c(){o=n.value}function l(e){i.push(e);let t=()=>{let t=i.indexOf(e);t>-1&&i.splice(t,1)};return a.push(t),t}function u(){if(document.visibilityState===`hidden`){let{history:e}=window;if(!e.state)return;e.replaceState(B({},e.state,{scroll:bn()}),``)}}function d(){for(let e of a)e();a=[],window.removeEventListener(`popstate`,s),window.removeEventListener(`pagehide`,u),document.removeEventListener(`visibilitychange`,u)}return window.addEventListener(`popstate`,s),window.addEventListener(`pagehide`,u),document.addEventListener(`visibilitychange`,u),{pauseListeners:c,listen:l,destroy:d}}function Hn(e,t,n,r=!1,i=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:i?bn():null}}function Un(e){let{history:t,location:n}=window,r={value:Bn(e,n)},i={value:t.state};i.value||a(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(r,a,o){let s=e.indexOf(`#`),c=s>-1?(n.host&&document.querySelector(`base`)?e:e.slice(s))+r:zn()+e+r;try{t[o?`replaceState`:`pushState`](a,``,c),i.value=a}catch(e){console.error(e),n[o?`replace`:`assign`](c)}}function o(e,n){a(e,B({},t.state,Hn(i.value.back,e,i.value.forward,!0),n,{position:i.value.position}),!0),r.value=e}function s(e,n){let o=B({},i.value,t.state,{forward:e,scroll:bn()});a(o.current,o,!0),a(e,B({},Hn(r.value,e,null),{position:o.position+1},n),!1),r.value=e}return{location:r,state:i,push:s,replace:o}}function Wn(e){e=gn(e);let t=Un(e),n=Vn(e,t.state,t.location,t.replace);function r(e,t=!0){t||n.pauseListeners(),history.go(e)}let i=B({location:``,base:e,go:r,createHref:vn.bind(null,e)},t,n);return Object.defineProperty(i,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,"state",{enumerable:!0,get:()=>t.state.value}),i}var Z=function(e){return e[e.Static=0]=`Static`,e[e.Param=1]=`Param`,e[e.Group=2]=`Group`,e}({}),Q=function(e){return e[e.Static=0]=`Static`,e[e.Param=1]=`Param`,e[e.ParamRegExp=2]=`ParamRegExp`,e[e.ParamRegExpEnd=3]=`ParamRegExpEnd`,e[e.EscapeNext=4]=`EscapeNext`,e}(Q||{}),Gn={type:Z.Static,value:``},Kn=/[a-zA-Z0-9_]/;function qn(e){if(!e)return[[]];if(e===`/`)return[[Gn]];if(!e.startsWith(`/`))throw Error(`Invalid path "${e}"`);function t(e){throw Error(`ERR (${n})/"${l}": ${e}`)}let n=Q.Static,r=n,i=[],a;function o(){a&&i.push(a),a=[]}let s=0,c,l=``,u=``;function d(){l&&=(n===Q.Static?a.push({type:Z.Static,value:l}):n===Q.Param||n===Q.ParamRegExp||n===Q.ParamRegExpEnd?(a.length>1&&(c===`*`||c===`+`)&&t(`A repeatable param (${l}) must be alone in its segment. eg: '/:ids+.`),a.push({type:Z.Param,value:l,regexp:u,repeatable:c===`*`||c===`+`,optional:c===`*`||c===`?`})):t(`Invalid state to consume buffer`),``)}function f(){l+=c}for(;s<e.length;){if(c=e[s++],c===`\\`&&n!==Q.ParamRegExp){r=n,n=Q.EscapeNext;continue}switch(n){case Q.Static:c===`/`?(l&&d(),o()):c===`:`?(d(),n=Q.Param):f();break;case Q.EscapeNext:f(),n=r;break;case Q.Param:c===`(`?n=Q.ParamRegExp:Kn.test(c)?f():(d(),n=Q.Static,c!==`*`&&c!==`?`&&c!==`+`&&s--);break;case Q.ParamRegExp:c===`)`?u[u.length-1]==`\\`?u=u.slice(0,-1)+c:n=Q.ParamRegExpEnd:u+=c;break;case Q.ParamRegExpEnd:d(),n=Q.Static,c!==`*`&&c!==`?`&&c!==`+`&&s--,u=``;break;default:t(`Unknown state`)}}return n===Q.ParamRegExp&&t(`Unfinished custom RegExp for param "${l}"`),d(),o(),i}var Jn=`[^/]+?`,Yn={sensitive:!1,strict:!1,start:!0,end:!0},$=function(e){return e[e._multiplier=10]=`_multiplier`,e[e.Root=90]=`Root`,e[e.Segment=40]=`Segment`,e[e.SubSegment=30]=`SubSegment`,e[e.Static=40]=`Static`,e[e.Dynamic=20]=`Dynamic`,e[e.BonusCustomRegExp=10]=`BonusCustomRegExp`,e[e.BonusWildcard=-50]=`BonusWildcard`,e[e.BonusRepeatable=-20]=`BonusRepeatable`,e[e.BonusOptional=-8]=`BonusOptional`,e[e.BonusStrict=.7000000000000001]=`BonusStrict`,e[e.BonusCaseSensitive=.25]=`BonusCaseSensitive`,e}($||{}),Xn=/[.+*?^${}()[\]/\\]/g;function Zn(e,t){let n=B({},Yn,t),r=[],i=n.start?`^`:``,a=[];for(let t of e){let e=t.length?[]:[$.Root];n.strict&&!t.length&&(i+=`/`);for(let r=0;r<t.length;r++){let o=t[r],s=$.Segment+(n.sensitive?$.BonusCaseSensitive:0);if(o.type===Z.Static)r||(i+=`/`),i+=o.value.replace(Xn,`\\$&`),s+=$.Static;else if(o.type===Z.Param){let{value:e,repeatable:n,optional:c,regexp:l}=o;a.push({name:e,repeatable:n,optional:c});let u=l||Jn;if(u!==Jn){s+=$.BonusCustomRegExp;try{`${u}`}catch(t){throw Error(`Invalid custom RegExp for param "${e}" (${u}): `+t.message)}}let d=n?`((?:${u})(?:/(?:${u}))*)`:`(${u})`;r||(d=c&&t.length<2?`(?:/${d})`:`/`+d),c&&(d+=`?`),i+=d,s+=$.Dynamic,c&&(s+=$.BonusOptional),n&&(s+=$.BonusRepeatable),u===`.*`&&(s+=$.BonusWildcard)}e.push(s)}r.push(e)}if(n.strict&&n.end){let e=r.length-1;r[e][r[e].length-1]+=$.BonusStrict}n.strict||(i+=`/?`),n.end?i+=`$`:n.strict&&!i.endsWith(`/`)&&(i+=`(?:/|$)`);let o=new RegExp(i,n.sensitive?``:`i`);function s(e){let t=e.match(o),n={};if(!t)return null;for(let e=1;e<t.length;e++){let r=t[e]||``,i=a[e-1];n[i.name]=r&&i.repeatable?r.split(`/`):r}return n}function c(t){let n=``,r=!1;for(let i of e){(!r||!n.endsWith(`/`))&&(n+=`/`),r=!1;for(let e of i)if(e.type===Z.Static)n+=e.value;else if(e.type===Z.Param){let{value:a,repeatable:o,optional:s}=e,c=a in t?t[a]:``;if(H(c)&&!o)throw Error(`Provided param "${a}" is an array but it is not repeatable (* or + modifiers)`);let l=H(c)?c.join(`/`):c;if(!l){if(s)i.length<2&&(n.endsWith(`/`)?n=n.slice(0,-1):r=!0);else throw Error(`Missing required param "${a}"`)}n+=l}}return n||`/`}return{re:o,score:r,keys:a,parse:s,stringify:c}}function Qn(e,t){let n=0;for(;n<e.length&&n<t.length;){let r=t[n]-e[n];if(r)return r;n++}return e.length<t.length?e.length===1&&e[0]===$.Static+$.Segment?-1:1:e.length>t.length?t.length===1&&t[0]===$.Static+$.Segment?1:-1:0}function $n(e,t){let n=0,r=e.score,i=t.score;for(;n<r.length&&n<i.length;){let e=Qn(r[n],i[n]);if(e)return e;n++}if(Math.abs(i.length-r.length)===1){if(er(r))return 1;if(er(i))return-1}return i.length-r.length}function er(e){let t=e[e.length-1];return e.length>0&&t[t.length-1]<0}var tr={strict:!1,end:!0,sensitive:!1};function nr(e,t,n){let r=B(Zn(qn(e.path),n),{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function rr(e,t){let n=[],r=new Map;t=It(tr,t);function i(e){return r.get(e)}function a(e,n,r){let i=!r,s=ar(e);s.aliasOf=r&&r.record;let l=It(t,e),u=[s];if(`alias`in e){let t=typeof e.alias==`string`?[e.alias]:e.alias;for(let e of t)u.push(ar(B({},s,{components:r?r.record.components:s.components,path:e,aliasOf:r?r.record:s})))}let d,f;for(let t of u){let{path:u}=t;if(n&&u[0]!==`/`){let e=n.record.path,r=e[e.length-1]===`/`?``:`/`;t.path=n.record.path+(u&&r+u)}if(d=nr(t,n,l),r?r.alias.push(d):(f||=d,f!==d&&f.alias.push(d),i&&e.name&&!sr(d)&&o(e.name)),dr(d)&&c(d),s.children){let e=s.children;for(let t=0;t<e.length;t++)a(e[t],d,r&&r.children[t])}r||=d}return f?()=>{o(f)}:V}function o(e){if(Dn(e)){let t=r.get(e);t&&(r.delete(e),n.splice(n.indexOf(t),1),t.children.forEach(o),t.alias.forEach(o))}else{let t=n.indexOf(e);t>-1&&(n.splice(t,1),e.record.name&&r.delete(e.record.name),e.children.forEach(o),e.alias.forEach(o))}}function s(){return n}function c(e){let t=lr(e,n);n.splice(t,0,e),e.record.name&&!sr(e)&&r.set(e.record.name,e)}function l(e,t){let i,a={},o,s;if(`name`in e&&e.name){if(i=r.get(e.name),!i)throw q(K.MATCHER_NOT_FOUND,{location:e});s=i.record.name,a=B(ir(t.params,i.keys.filter(e=>!e.optional).concat(i.parent?i.parent.keys.filter(e=>e.optional):[]).map(e=>e.name)),e.params&&ir(e.params,i.keys.map(e=>e.name))),o=i.stringify(a)}else if(e.path!=null)o=e.path,i=n.find(e=>e.re.test(o)),i&&(a=i.parse(o),s=i.record.name);else{if(i=t.name?r.get(t.name):n.find(e=>e.re.test(t.path)),!i)throw q(K.MATCHER_NOT_FOUND,{location:e,currentLocation:t});s=i.record.name,a=B({},t.params,e.params),o=i.stringify(a)}let c=[],l=i;for(;l;)c.unshift(l.record),l=l.parent;return{name:s,path:o,params:a,matched:c,meta:cr(c)}}e.forEach(e=>a(e));function u(){n.length=0,r.clear()}return{addRoute:a,resolve:l,removeRoute:o,clearRoutes:u,getRoutes:s,getRecordMatcher:i}}function ir(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function ar(e){let t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:or(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:`components`in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function or(e){let t={},n=e.props||!1;if(`component`in e)t.default=n;else for(let r in e.components)t[r]=typeof n==`object`?n[r]:n;return t}function sr(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function cr(e){return e.reduce((e,t)=>B(e,t.meta),{})}function lr(e,t){let n=0,r=t.length;for(;n!==r;){let i=n+r>>1;$n(e,t[i])<0?r=i:n=i+1}let i=ur(e);return i&&(r=t.lastIndexOf(i,r-1)),r}function ur(e){let t=e;for(;t=t.parent;)if(dr(t)&&$n(e,t)===0)return t}function dr({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function fr(t){let n=h(Pn),r=h(Fn),i=a(()=>{let r=e(t.to);return n.resolve(r)}),o=a(()=>{let{matched:e}=i.value,{length:t}=e,n=e[t-1],a=r.matched;if(!n||!a.length)return-1;let o=a.findIndex(W.bind(null,n));if(o>-1)return o;let s=_r(e[t-2]);return t>1&&_r(n)===s&&a[a.length-1].path!==s?a.findIndex(W.bind(null,e[t-2])):o}),s=a(()=>o.value>-1&&gr(r.params,i.value.params)),c=a(()=>o.value>-1&&o.value===r.matched.length-1&&un(r.params,i.value.params));function l(r={}){if(hr(r)){let r=n[e(t.replace)?`replace`:`push`](e(t.to)).catch(V);return t.viewTransition&&typeof document<`u`&&`startViewTransition`in document&&document.startViewTransition(()=>r),r}return Promise.resolve()}return{route:i,href:a(()=>i.value.href),isActive:s,isExactActive:c,navigate:l}}function pr(e){return e.length===1?e[0]:e}var mr=d({name:`RouterLink`,compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:`page`},viewTransition:Boolean},useLink:fr,setup(e,{slots:t}){let n=o(fr(e)),{options:r}=h(Pn),i=a(()=>({[vr(e.activeClass,r.linkActiveClass,`router-link-active`)]:n.isActive,[vr(e.exactActiveClass,r.linkExactActiveClass,`router-link-exact-active`)]:n.isExactActive}));return()=>{let r=t.default&&pr(t.default(n));return e.custom?r:u(`a`,{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:i.value},r)}}});function hr(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&(e.button===void 0||e.button===0)){if(e.currentTarget&&e.currentTarget.getAttribute){let t=e.currentTarget.getAttribute(`target`);if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function gr(e,t){for(let n in t){let r=t[n],i=e[n];if(typeof r==`string`){if(r!==i)return!1}else if(!H(i)||i.length!==r.length||r.some((e,t)=>e.valueOf()!==i[t].valueOf()))return!1}return!0}function _r(e){return e?e.aliasOf?e.aliasOf.path:e.path:``}var vr=(e,t,n)=>e??t??n,yr=d({name:`RouterView`,inheritAttrs:!1,props:{name:{type:String,default:`default`},route:Object},compatConfig:{MODE:3},setup(t,{attrs:n,slots:r}){let o=h(In),c=a(()=>t.route||o.value),l=h(Nn,0),d=a(()=>{let t=e(l),{matched:n}=c.value,r;for(;(r=n[t])&&!r.components;)t++;return t}),p=a(()=>c.value.matched[d.value]);s(Nn,a(()=>d.value+1)),s(Mn,p),s(In,c);let m=i();return f(()=>[m.value,p.value,t.name],([e,t,n],[r,i,a])=>{t&&(t.instances[n]=e,i&&i!==t&&e&&e===r&&(t.leaveGuards.size||(t.leaveGuards=i.leaveGuards),t.updateGuards.size||(t.updateGuards=i.updateGuards))),e&&t&&(!i||!W(t,i)||!r)&&(t.enterCallbacks[n]||[]).forEach(t=>t(e))},{flush:`post`}),()=>{let e=c.value,i=t.name,a=p.value,o=a&&a.components[i];if(!o)return br(r.default,{Component:o,route:e});let s=a.props[i],l=s?s===!0?e.params:typeof s==`function`?s(e):s:null,d=u(o,B({},l,n,{onVnodeUnmounted:e=>{e.component.isUnmounted&&(a.instances[i]=null)},ref:m}));return br(r.default,{Component:d,route:e})||d}}});function br(e,t){if(!e)return null;let n=e(t);return n.length===1?n[0]:n}var xr=yr;function Sr(r){let i=rr(r.routes,r),a=r.parseQuery||kn,o=r.stringifyQuery||An,s=r.history,l=Y(),u=Y(),d=Y(),f=n(G),p=G;z&&r.scrollBehavior&&`scrollRestoration`in history&&(history.scrollRestoration=`manual`);let m=Ft.bind(null,e=>``+e),h=Ft.bind(null,nn),ee=Ft.bind(null,U);function te(e,t){let n,r;return Dn(e)?(n=i.getRecordMatcher(e),r=t):r=e,i.addRoute(r,n)}function g(e){let t=i.getRecordMatcher(e);t&&i.removeRoute(t)}function _(){return i.getRoutes().map(e=>e.record)}function ne(e){return!!i.getRecordMatcher(e)}function v(e,t){if(t=B({},t||f.value),typeof e==`string`){let n=on(a,e,t.path),r=i.resolve({path:n.path},t),o=s.createHref(n.fullPath);return B(n,r,{params:ee(r.params),hash:U(n.hash),redirectedFrom:void 0,href:o})}let n;if(e.path!=null)n=B({},e,{path:on(a,e.path,t.path).path});else{let r=B({},e.params);for(let e in r)r[e]??delete r[e];n=B({},e,{params:h(r)}),t.params=h(t.params)}let r=i.resolve(n,t),c=e.hash||``;r.params=m(ee(r.params));let l=sn(o,B({},e,{hash:Qt(c),path:r.path})),u=s.createHref(l);return B({fullPath:l,hash:c,query:o===An?jn(e.query):e.query||{}},r,{redirectedFrom:void 0,href:u})}function y(e){return typeof e==`string`?on(a,e,f.value.path):B({},e)}function b(e,t){if(p!==e)return q(K.NAVIGATION_CANCELLED,{from:t,to:e})}function x(e){return w(e)}function S(e){return x(B(y(e),{replace:!0}))}function C(e,t){let n=e.matched[e.matched.length-1];if(n&&n.redirect){let{redirect:r}=n,i=typeof r==`function`?r(e,t):r;return typeof i==`string`&&(i=i.includes(`?`)||i.includes(`#`)?i=y(i):{path:i},i.params={}),B({query:e.query,hash:e.hash,params:i.path==null?e.params:{}},i)}}function w(e,t){let n=p=v(e),r=f.value,i=e.state,a=e.force,s=e.replace===!0,c=C(n,r);if(c)return w(B(y(c),{state:typeof c==`object`?B({},i,c.state):i,force:a,replace:s}),t||n);let l=n;l.redirectedFrom=t;let u;return!a&&ln(o,r,n)&&(u=q(K.NAVIGATION_DUPLICATED,{to:l,from:r}),ue(r,r,!0,!1)),(u?Promise.resolve(u):re(l,r)).catch(e=>J(e)?J(e,K.NAVIGATION_GUARD_REDIRECT)?e:le(e):se(e,l,r)).then(e=>{if(e){if(J(e,K.NAVIGATION_GUARD_REDIRECT))return w(B({replace:s},y(e.to),{state:typeof e.to==`object`?B({},i,e.to.state):i,force:a}),t||l)}else e=D(l,r,!0,s,i);return ie(l,r,e),e})}function T(e,t){let n=b(e,t);return n?Promise.reject(n):Promise.resolve()}function E(e){let t=j.values().next().value;return t&&typeof t.runWithContext==`function`?t.runWithContext(e):e()}function re(e,t){let n,[r,i,a]=Rn(e,t);n=Ln(r.reverse(),`beforeRouteLeave`,e,t);for(let i of r)i.leaveGuards.forEach(r=>{n.push(X(r,e,t))});let o=T.bind(null,e,t);return n.push(o),N(n).then(()=>{n=[];for(let r of l.list())n.push(X(r,e,t));return n.push(o),N(n)}).then(()=>{n=Ln(i,`beforeRouteUpdate`,e,t);for(let r of i)r.updateGuards.forEach(r=>{n.push(X(r,e,t))});return n.push(o),N(n)}).then(()=>{n=[];for(let r of a)if(r.beforeEnter){if(H(r.beforeEnter))for(let i of r.beforeEnter)n.push(X(i,e,t));else n.push(X(r.beforeEnter,e,t))}return n.push(o),N(n)}).then(()=>(e.matched.forEach(e=>e.enterCallbacks={}),n=Ln(a,`beforeRouteEnter`,e,t,E),n.push(o),N(n))).then(()=>{n=[];for(let r of u.list())n.push(X(r,e,t));return n.push(o),N(n)}).catch(e=>J(e,K.NAVIGATION_CANCELLED)?e:Promise.reject(e))}function ie(e,t,n){d.list().forEach(r=>E(()=>r(e,t,n)))}function D(e,t,n,r,i){let a=b(e,t);if(a)return a;let o=t===G,c=z?history.state:{};n&&(r||o?s.replace(e.fullPath,B({scroll:o&&c&&c.scroll},i)):s.push(e.fullPath,i)),f.value=e,ue(e,t,n,o),le()}let O;function k(){O||=s.listen((e,t,n)=>{if(!M.listening)return;let r=v(e),i=C(r,M.currentRoute.value);if(i){w(B(i,{replace:!0,force:!0}),r).catch(V);return}p=r;let a=f.value;z&&wn(Sn(a.fullPath,n.delta),bn()),re(r,a).catch(e=>J(e,K.NAVIGATION_ABORTED|K.NAVIGATION_CANCELLED)?e:J(e,K.NAVIGATION_GUARD_REDIRECT)?(w(B(y(e.to),{force:!0}),r).then(e=>{J(e,K.NAVIGATION_ABORTED|K.NAVIGATION_DUPLICATED)&&!n.delta&&n.type===mn.pop&&s.go(-1,!1)}).catch(V),Promise.reject()):(n.delta&&s.go(-n.delta,!1),se(e,r,a))).then(e=>{e||=D(r,a,!1),e&&(n.delta&&!J(e,K.NAVIGATION_CANCELLED)?s.go(-n.delta,!1):n.type===mn.pop&&J(e,K.NAVIGATION_ABORTED|K.NAVIGATION_DUPLICATED)&&s.go(-1,!1)),ie(r,a,e)}).catch(V)})}let ae=Y(),oe=Y(),A;function se(e,t,n){le(e);let r=oe.list();return r.length?r.forEach(r=>r(e,t,n)):console.error(e),Promise.reject(e)}function ce(){return A&&f.value!==G?Promise.resolve():new Promise((e,t)=>{ae.add([e,t])})}function le(e){return A||(A=!e,k(),ae.list().forEach(([t,n])=>e?n(e):t()),ae.reset()),e}function ue(e,n,i,a){let{scrollBehavior:o}=r;if(!z||!o)return Promise.resolve();let s=!i&&Tn(Sn(e.fullPath,0))||(a||!i)&&history.state&&history.state.scroll||null;return t().then(()=>o(e,n,s)).then(e=>e&&xn(e)).catch(t=>se(t,e,n))}let de=e=>s.go(e),fe,j=new Set,M={currentRoute:f,listening:!0,addRoute:te,removeRoute:g,clearRoutes:i.clearRoutes,hasRoute:ne,getRoutes:_,resolve:v,options:r,push:x,replace:S,go:de,back:()=>de(-1),forward:()=>de(1),beforeEach:l.add,beforeResolve:u.add,afterEach:d.add,onError:oe.add,isReady:ce,install(t){t.component(`RouterLink`,mr),t.component(`RouterView`,xr),t.config.globalProperties.$router=M,Object.defineProperty(t.config.globalProperties,"$route",{enumerable:!0,get:()=>e(f)}),z&&!fe&&f.value===G&&(fe=!0,x(s.location).catch(e=>{}));let n={};for(let e in G)Object.defineProperty(n,e,{get:()=>f.value[e],enumerable:!0});t.provide(Pn,M),t.provide(Fn,c(n)),t.provide(In,f);let r=t.unmount;j.add(t),t.unmount=function(){j.delete(t),j.size<1&&(p=G,O&&O(),O=null,f.value=G,fe=!1,A=!1),r()}}};function N(e){return e.reduce((e,t)=>e.then(()=>E(t)),Promise.resolve())}return M}function Cr(){return h(Pn)}function wr(e){return h(Fn)}function Tr(e){let t=e=>({sourceRef:Or(e)});return[{name:`github-pr`,path:`/gh/:owner/:repo/:number(\\d+)`,component:e,props:t},{name:`github-compare`,path:`/gh/:owner/:repo/compare/:range(.+\\.\\.\\..+)`,component:e,props:t},{name:`github-commit`,path:`/gh/:owner/:repo/commit/:sha`,component:e,props:t}]}function Er(e){switch(e.kind){case`github-pr`:return`/gh/${e.owner}/${e.repo}/${e.number}`;case`github-compare`:return`/gh/${e.owner}/${e.repo}/compare/${e.base}...${e.head}`;case`github-commit`:return`/gh/${e.owner}/${e.repo}/commit/${e.sha}`;case`paste`:return;case`local`:return}}function Dr(e){let t=e.indexOf(`...`);return t>0&&t+3<e.length?{base:e.slice(0,t),head:e.slice(t+3)}:void 0}function Or(e){let t=t=>String(e.params[t]),n=t(`owner`),r=t(`repo`);switch(e.name){case`github-pr`:return{kind:`github-pr`,owner:n,repo:r,number:t(`number`)};case`github-compare`:{let e=Dr(t(`range`));return e&&{kind:`github-compare`,owner:n,repo:r,...e}}case`github-commit`:return{kind:`github-commit`,owner:n,repo:r,sha:t(`sha`)}}}function kr(e,t){return`/gh/${e}/${t}`}function Ar(e){return e.kind===`paste`||e.kind===`local`?void 0:{route:kr(e.owner,e.repo),label:`${e.owner}/${e.repo}`}}function jr(e){let t=e.trim().match(/github\.com\/([^/\s]+)\/([^/\s#?]+)(?:\/(pull|commit|compare)\/([^\s#?]+)|\/pulls\/?)?(?:[/?#]|$)/);if(!t)return;let[,n=``,r=``,i,a=``]=t;if(i===`pull`){let e=a.match(/^\d+/)?.[0];return e?Er({kind:`github-pr`,owner:n,repo:r,number:e}):void 0}if(i===`commit`)return Er({kind:`github-commit`,owner:n,repo:r,sha:a.replace(/\/.*$/,``)});if(i===`compare`){let e=Dr(a);return e&&Er({kind:`github-compare`,owner:n,repo:r,...e})}return kr(n,r)}var Mr=Sr({history:Wn(new URL(document.baseURI).pathname),routes:[{name:`home`,path:`/`,component:()=>D(()=>import(`./pages-web-DitAPN6U.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),import.meta.url)},{path:`/upload`,component:()=>D(()=>import(`./upload-GnI9kmJu.js`),__vite__mapDeps([16,1,3,4,2,5,6,7,8,9,10,17,18,19,11,12,20,15]),import.meta.url)},{path:`/gh/:owner/:repo`,component:()=>D(()=>import(`./_repo_-Dcgj3PGg.js`),__vite__mapDeps([21,4,1,2,3,5,6,7,8,9,10,17,18,22,12,14]),import.meta.url)},...Tr(()=>D(()=>import(`./diff-BKQFn0my.js`),__vite__mapDeps([23,1,3,4,2,5,6,7,8,9,10,17,18,19,11,12,20]),import.meta.url))]});async function Nr(){let e=te(Mt).use(ie);await D(async()=>{let{installLocal:e}=await import(`./install-B-q5w2uE.js`);return{installLocal:e}},__vite__mapDeps([24,1,2,5,6,7,8,4,9,10,25]),import.meta.url).then(({installLocal:t})=>t(e,Mr)),e.use(Mr).mount(`#app`)}Nr();export{mr as a,kt as c,Ot as d,ut as f,jr as i,Dt as l,me as m,kr as n,wr as o,Ve as p,Er as r,Cr as s,Ar as t,Et as u};