pulls.review 0.0.0 → 0.2.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.
- package/README.md +11 -10
- package/bin.mjs +2 -0
- package/package.json +34 -65
- package/dist/assets/ChatWidget-BD4etTSI.css +0 -1
- package/dist/assets/ChatWidget-BXmVT9ns.js +0 -2
- package/dist/assets/_number_-ByKh-CJ7.js +0 -1
- package/dist/assets/agent-SYDXCLiI.js +0 -90
- package/dist/assets/andromeeda-vGVdxbeo.js +0 -1
- package/dist/assets/anthropic-messages-XptRMkpJ.js +0 -41
- package/dist/assets/aurora-x-CDeNXAV0.js +0 -1
- package/dist/assets/ayu-dark-DluEY0Gj.js +0 -1
- package/dist/assets/ayu-light-C3h-C4tm.js +0 -1
- package/dist/assets/ayu-mirage-Bqwy1Gya.js +0 -1
- package/dist/assets/c-BWgYNV7i.js +0 -1
- package/dist/assets/catppuccin-frappe-C9Q5zVZY.js +0 -1
- package/dist/assets/catppuccin-latte-CtsyrtPq.js +0 -1
- package/dist/assets/catppuccin-macchiato-R8nAf1vR.js +0 -1
- package/dist/assets/catppuccin-mocha-DjuaAJKi.js +0 -1
- package/dist/assets/chat-CP0CZKJo.js +0 -1
- package/dist/assets/clojure-DqKBuwfJ.js +0 -1
- package/dist/assets/cpp-BBcYm61y.js +0 -1
- package/dist/assets/csharp-oqKa8noW.js +0 -1
- package/dist/assets/css-dNRduEa-.js +0 -1
- package/dist/assets/dark-plus-Cs2F2srj.js +0 -1
- package/dist/assets/diff-woXpYk--.js +0 -1
- package/dist/assets/diffs-store-B1RXognA.js +0 -1696
- package/dist/assets/dist-hXdF5ZNr.js +0 -1
- package/dist/assets/docker-IyjqRm3v.js +0 -1
- package/dist/assets/dracula-BHWKrbxM.js +0 -1
- package/dist/assets/dracula-soft-5eyTD99u.js +0 -1
- package/dist/assets/elixir-BMAS0SZ2.js +0 -1
- package/dist/assets/error-CJ3RHG07.js +0 -1
- package/dist/assets/everforest-dark-sB-x3p7T.js +0 -1
- package/dist/assets/everforest-light-Df2xbC6M.js +0 -1
- package/dist/assets/fonts/dmmono-53a90e28.woff2 +0 -0
- package/dist/assets/fonts/dmmono-cd6ed524.woff2 +0 -0
- package/dist/assets/fonts/dmsans-56778fc7.woff2 +0 -0
- package/dist/assets/fonts/dmsans-7c37c8a6.woff2 +0 -0
- package/dist/assets/fonts/dmserifdisplay-1f997542.woff2 +0 -0
- package/dist/assets/fonts/dmserifdisplay-b6206db2.woff2 +0 -0
- package/dist/assets/github-dark-C-LZuMrd.js +0 -1
- package/dist/assets/github-dark-default-DXG-b-1a.js +0 -1
- package/dist/assets/github-dark-dimmed-Bx1FflLF.js +0 -1
- package/dist/assets/github-dark-high-contrast-B_tTalzw.js +0 -1
- package/dist/assets/github-light-EUqPIrTm.js +0 -1
- package/dist/assets/github-light-default-BXViO-2h.js +0 -1
- package/dist/assets/github-light-high-contrast-B68TUdTA.js +0 -1
- package/dist/assets/go-rLFTqkRN.js +0 -1
- package/dist/assets/graphql-DC6gMr7C.js +0 -1
- package/dist/assets/groovy-CacY0gHj.js +0 -1
- package/dist/assets/gruvbox-dark-hard-C820rvS2.js +0 -1
- package/dist/assets/gruvbox-dark-medium-BPjhmG05.js +0 -1
- package/dist/assets/gruvbox-dark-soft-MrdJrrXF.js +0 -1
- package/dist/assets/gruvbox-light-hard-BC_s9l72.js +0 -1
- package/dist/assets/gruvbox-light-medium-BAWPOn9u.js +0 -1
- package/dist/assets/gruvbox-light-soft-BSMLrYjP.js +0 -1
- package/dist/assets/haskell-D8IpX4py.js +0 -1
- package/dist/assets/horizon-CE9ld1lL.js +0 -1
- package/dist/assets/horizon-bright-DSNQnXHK.js +0 -1
- package/dist/assets/houston-CsvMBhTu.js +0 -1
- package/dist/assets/html-9bR0RcZU.js +0 -1
- package/dist/assets/index-BD_DzwAn.js +0 -3
- package/dist/assets/index-Yd4-oLpR.css +0 -1
- package/dist/assets/indexedb-Cu6ZJjpB.js +0 -1
- package/dist/assets/ini-B5eOa1yu.js +0 -1
- package/dist/assets/java-C0DRq53f.js +0 -1
- package/dist/assets/javascript-UWfzLVwt.js +0 -1
- package/dist/assets/json-qhed-kSA.js +0 -1
- package/dist/assets/jsonc-CYpm1nAK.js +0 -1
- package/dist/assets/jsx-B85L4NBR.js +0 -1
- package/dist/assets/kanagawa-dragon-Bozd7klA.js +0 -1
- package/dist/assets/kanagawa-lotus-BmuOG9ZW.js +0 -1
- package/dist/assets/kanagawa-wave-BML5mF2J.js +0 -1
- package/dist/assets/kotlin-DhhofPvG.js +0 -1
- package/dist/assets/laserwave-C_8bwKvT.js +0 -1
- package/dist/assets/less-DVTAwKKz.js +0 -1
- package/dist/assets/light-plus-DVQuIRkW.js +0 -1
- package/dist/assets/lua-ByOrBoZ-.js +0 -1
- package/dist/assets/make-Dixweg8N.js +0 -1
- package/dist/assets/markdown-BYOwaDjH.js +0 -1
- package/dist/assets/material-theme-Bm3Qr25_.js +0 -1
- package/dist/assets/material-theme-darker-2IIEA8gg.js +0 -1
- package/dist/assets/material-theme-lighter-uhdI0v04.js +0 -1
- package/dist/assets/material-theme-ocean-CHQ94UKr.js +0 -1
- package/dist/assets/material-theme-palenight-B5W6OYN7.js +0 -1
- package/dist/assets/mdx-DQZ5AkYe.js +0 -1
- package/dist/assets/min-dark-BSWPekZh.js +0 -1
- package/dist/assets/min-light-DDpmG2fV.js +0 -1
- package/dist/assets/monokai-B_bV9PQ9.js +0 -1
- package/dist/assets/nginx-DBTb8aIg.js +0 -1
- package/dist/assets/night-owl-DhmEMT88.js +0 -1
- package/dist/assets/night-owl-light-eJ-hLW7d.js +0 -1
- package/dist/assets/node.browser-C40HpO0s.js +0 -1
- package/dist/assets/node.browser-DFtqp6Hr.js +0 -1
- package/dist/assets/nord-Cb4Vim4T.js +0 -1
- package/dist/assets/objective-c-D1A_Heim.js +0 -1
- package/dist/assets/objective-cpp-BsSzOQcm.js +0 -1
- package/dist/assets/one-dark-pro-CLwyXe_n.js +0 -1
- package/dist/assets/one-light-D7Lr4KcI.js +0 -1
- package/dist/assets/openai-completions-Cb_BwZvN.js +0 -21
- package/dist/assets/pages-KWcQcyk5.js +0 -1
- package/dist/assets/perl-Bk6ijEF5.js +0 -1
- package/dist/assets/php-CwqKKdmW.js +0 -1
- package/dist/assets/pierre-dark-CpLgRqie.js +0 -1
- package/dist/assets/pierre-dark-protanopia-deuteranopia-B35FxJx-.js +0 -1
- package/dist/assets/pierre-dark-soft-kZQmAZld.js +0 -1
- package/dist/assets/pierre-dark-tritanopia-CpjhbsIL.js +0 -1
- package/dist/assets/pierre-dark-vibrant-CpQYzh95.js +0 -1
- package/dist/assets/pierre-light-CoaEpmwp.js +0 -1
- package/dist/assets/pierre-light-protanopia-deuteranopia-0fSaH845.js +0 -1
- package/dist/assets/pierre-light-soft-lWLdNTOI.js +0 -1
- package/dist/assets/pierre-light-tritanopia-CEbqgOJL.js +0 -1
- package/dist/assets/pierre-light-vibrant-D80Fkn33.js +0 -1
- package/dist/assets/plastic-DQwYfKfQ.js +0 -1
- package/dist/assets/poimandres-DRFjx7u4.js +0 -1
- package/dist/assets/pr-cache-DNR7E646.js +0 -94
- package/dist/assets/proto-DB4EqR-F.js +0 -1
- package/dist/assets/python-gzcpVVnB.js +0 -1
- package/dist/assets/r-C5FwQflr.js +0 -1
- package/dist/assets/red-DX1BQOs8.js +0 -1
- package/dist/assets/rose-pine-aMsaMD1D.js +0 -1
- package/dist/assets/rose-pine-dawn-8PwUyIlP.js +0 -1
- package/dist/assets/rose-pine-moon-DO-qXg-I.js +0 -1
- package/dist/assets/ruby-Cf2R6w0b.js +0 -1
- package/dist/assets/runtime-core.esm-bundler-B8D2lM98.js +0 -3
- package/dist/assets/rust-Cfkwpbl8.js +0 -1
- package/dist/assets/scala-BiFt_7mu.js +0 -1
- package/dist/assets/scss-Dl-NjxyA.js +0 -1
- package/dist/assets/shellscript-CLZ0U2zV.js +0 -1
- package/dist/assets/shiki-wasm-noop-Gxv9UHE7.js +0 -1
- package/dist/assets/slack-dark-DnToyrRv.js +0 -1
- package/dist/assets/slack-ochin-B2OO5cIa.js +0 -1
- package/dist/assets/snazzy-light-4G7pJPwS.js +0 -1
- package/dist/assets/solarized-dark-UdsmMDCL.js +0 -1
- package/dist/assets/solarized-light-C1IUL_tW.js +0 -1
- package/dist/assets/sql-BsFa4tDR.js +0 -1
- package/dist/assets/swift-CyEgAFGc.js +0 -1
- package/dist/assets/synthwave-84-nFMaYfgc.js +0 -1
- package/dist/assets/terraform-DswuEJGm.js +0 -1
- package/dist/assets/tokyo-night-oM2G3aXe.js +0 -1
- package/dist/assets/toml-CcmNWLt0.js +0 -1
- package/dist/assets/transform-messages-DOewMBlN.js +0 -3
- package/dist/assets/tsx-CssvfOw5.js +0 -1
- package/dist/assets/typescript-CttGnwgr.js +0 -1
- package/dist/assets/upload-D7N53Rri.js +0 -1
- package/dist/assets/uploadSession-BUj4FNau.js +0 -1
- package/dist/assets/vesper-DdrHHSXu.js +0 -1
- package/dist/assets/vitesse-black-fwtXNY1n.js +0 -1
- package/dist/assets/vitesse-dark-BZCL-v6S.js +0 -1
- package/dist/assets/vitesse-light-VbXTXTou.js +0 -1
- package/dist/assets/vue-BeqRp0z0.js +0 -1
- package/dist/assets/vue-html-E9GYf_6s.js +0 -1
- package/dist/assets/xml-Dz7PSrBs.js +0 -1
- package/dist/assets/yaml-rwi0_p6S.js +0 -1
- package/dist/diffs-github.user.js +0 -23
- package/dist/embed/diffs-embed.js +0 -1948
- package/dist/index.html +0 -24
- package/dist/pulls-review-github.user.js +0 -23
- package/dist/robots.txt +0 -2
package/README.md
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
# pulls.review
|
|
2
2
|
|
|
3
|
-
[pulls.review](https://pulls.review)
|
|
3
|
+
Review local git changes in the browser, grouped and summarized like a pull request on [pulls.review](https://pulls.review).
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
```sh
|
|
6
|
+
npx pulls.review # the current branch against the default branch (or a ref picker on main)
|
|
7
|
+
npx pulls.review main...feat # what feat adds since it forked from main
|
|
8
|
+
npx pulls.review v1..v2 # the tree diff between two revisions
|
|
9
|
+
npx pulls.review feat # a branch against the default branch
|
|
10
|
+
npx pulls.review HEAD # one commit against its parent
|
|
11
|
+
npx pulls.review --worktree # uncommitted changes against HEAD, untracked files included
|
|
12
|
+
```
|
|
7
13
|
|
|
8
|
-
|
|
14
|
+
Run it inside a git repository. It serves on `localhost` through [devframe](https://github.com/devframes/devframe) and opens the page for the argument; any other branch, range or commit can be picked from `/`. The tab is trusted with a one-time code printed in the terminal. Reviewed marks and AI results are cached in `.git/pulls-review`.
|
|
9
15
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
1. Install [Tampermonkey](https://www.tampermonkey.net/) or [Violentmonkey](https://violentmonkey.github.io/).
|
|
13
|
-
2. Open [`pulls-review-github.user.js`](https://pulls.review/pulls-review-github.user.js) and let your extension pick it up (or create a new script and paste its contents in).
|
|
14
|
-
3. Visit any `github.com/{owner}/{repo}/pull/{number}` page - a "pulls.review" tab appears on the right edge; click it to open the drawer.
|
|
15
|
-
4. Drag the drawer's left edge to resize it - the width is remembered (`localStorage`, per-browser) for next time.
|
|
16
|
+
To analyze a GitHub pull request in CI, use [`@pulls.review/actions`](../actions).
|
package/bin.mjs
ADDED
package/package.json
CHANGED
|
@@ -1,85 +1,54 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pulls.review",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
5
|
-
"description": "Review
|
|
4
|
+
"version": "0.2.0",
|
|
5
|
+
"description": "Review local git changes - the working tree, a commit or any range - grouped and summarized in the browser.",
|
|
6
6
|
"author": "Anthony Fu <hi@antfu.me>",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"funding": "https://github.com/sponsors/antfu",
|
|
9
9
|
"homepage": "https://pulls.review",
|
|
10
10
|
"repository": {
|
|
11
11
|
"type": "git",
|
|
12
|
-
"url": "git+https://github.com/antfu/pulls.review.git"
|
|
12
|
+
"url": "git+https://github.com/antfu/pulls.review.git",
|
|
13
|
+
"directory": "packages/cli"
|
|
13
14
|
},
|
|
14
15
|
"bugs": "https://github.com/antfu/pulls.review/issues",
|
|
16
|
+
"keywords": [
|
|
17
|
+
"pull-request",
|
|
18
|
+
"code-review",
|
|
19
|
+
"git",
|
|
20
|
+
"devframe"
|
|
21
|
+
],
|
|
22
|
+
"exports": {
|
|
23
|
+
"./devframe": "./dist/devframe.mjs"
|
|
24
|
+
},
|
|
25
|
+
"bin": {
|
|
26
|
+
"pulls.review": "./bin.mjs",
|
|
27
|
+
"pulls-review": "./bin.mjs"
|
|
28
|
+
},
|
|
15
29
|
"files": [
|
|
30
|
+
"bin.mjs",
|
|
16
31
|
"dist"
|
|
17
32
|
],
|
|
18
|
-
"
|
|
33
|
+
"engines": {
|
|
34
|
+
"node": ">=20"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@pulls.review/core": "^0.2.0",
|
|
38
|
+
"devframe": "^1.2.0",
|
|
39
|
+
"h3": "^2.0.1-rc.32",
|
|
40
|
+
"unstorage": "^1.17.5"
|
|
41
|
+
},
|
|
19
42
|
"devDependencies": {
|
|
20
|
-
"@
|
|
21
|
-
"
|
|
22
|
-
"@ai-sdk/openai-compatible": "^3.0.57",
|
|
23
|
-
"@antfu/design": "^0.5.3",
|
|
24
|
-
"@antfu/eslint-config": "^9.5.1",
|
|
25
|
-
"@antfu/utils": "^9.3.0",
|
|
26
|
-
"@comark/vue": "^0.7.0",
|
|
27
|
-
"@earendil-works/pi-agent-core": "^0.87.1",
|
|
28
|
-
"@earendil-works/pi-ai": "^0.87.1",
|
|
29
|
-
"@iconify-json/carbon": "^1.2.28",
|
|
30
|
-
"@iconify-json/catppuccin": "^1.2.17",
|
|
31
|
-
"@iconify-json/ph": "^1.2.2",
|
|
32
|
-
"@iconify-json/twemoji": "^1.2.5",
|
|
33
|
-
"@pierre/diffs": "^1.5.1",
|
|
34
|
-
"@shikijs/engine-javascript": "^4.4.3",
|
|
35
|
-
"@storybook/vue3-vite": "^10.6.0",
|
|
36
|
-
"@tanstack/vue-virtual": "^3.13.39",
|
|
37
|
-
"@types/node": "^26.6.3",
|
|
38
|
-
"@types/picomatch": "^4.0.3",
|
|
39
|
-
"@unocss/eslint-config": "^66.10.5",
|
|
40
|
-
"@unocss/reset": "^66.10.5",
|
|
41
|
-
"@valibot/to-json-schema": "^1.8.0",
|
|
42
|
-
"@vitejs/plugin-vue": "^6.0.9",
|
|
43
|
-
"@vue/test-utils": "^2.5.1",
|
|
44
|
-
"@vueuse/core": "^14.4.0",
|
|
45
|
-
"ai": "^7.0.118",
|
|
46
|
-
"colorjs.io": "^0.7.1",
|
|
47
|
-
"eslint": "^10.11.0",
|
|
48
|
-
"eslint-plugin-format": "^2.0.1",
|
|
49
|
-
"eslint-plugin-slop": "^0.1.3",
|
|
50
|
-
"eslint-plugin-sonarjs": "^4.2.1",
|
|
51
|
-
"fake-indexeddb": "^6.2.5",
|
|
52
|
-
"happy-dom": "^20.14.5",
|
|
53
|
-
"idb-keyval": "^6.3.0",
|
|
54
|
-
"jiti": "^2.7.0",
|
|
55
|
-
"lightningcss": "^1.33.0",
|
|
56
|
-
"picomatch": "^4.0.7",
|
|
57
|
-
"reka-ui": "^2.10.5",
|
|
58
|
-
"storybook": "^10.6.0",
|
|
59
|
-
"tinyglobby": "^0.2.17",
|
|
43
|
+
"@types/node": "^26.6.4",
|
|
44
|
+
"tsdown": "^0.23.0",
|
|
60
45
|
"typescript": "^6.0.3",
|
|
61
|
-
"
|
|
62
|
-
"unstorage": "^1.17.5",
|
|
63
|
-
"valibot": "^1.5.0",
|
|
64
|
-
"vite": "^8.3.1",
|
|
65
|
-
"vitest": "^5.0.2",
|
|
66
|
-
"vue": "^3.5.43",
|
|
67
|
-
"vue-afloat": "^0.1.1",
|
|
68
|
-
"vue-router": "^4.6.4",
|
|
69
|
-
"vue-tsc": "^3.3.11"
|
|
46
|
+
"vitest": "^5.0.3"
|
|
70
47
|
},
|
|
71
48
|
"scripts": {
|
|
72
|
-
"build": "pnpm run build:
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"preview": "vite preview",
|
|
77
|
-
"start:generate": "npx serve dist",
|
|
78
|
-
"lint": "eslint .",
|
|
79
|
-
"typecheck": "vue-tsc --noEmit",
|
|
80
|
-
"test": "vitest run",
|
|
81
|
-
"test:watch": "vitest",
|
|
82
|
-
"storybook": "storybook dev -p 6006",
|
|
83
|
-
"storybook:build": "storybook build"
|
|
49
|
+
"build": "tsdown && pnpm -F @pulls.review/app run build:local",
|
|
50
|
+
"dev": "node bin.mjs",
|
|
51
|
+
"typecheck": "tsc --noEmit",
|
|
52
|
+
"test": "vitest run"
|
|
84
53
|
}
|
|
85
54
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@property --un-leading{syntax:"*";inherits:false}@property --un-bg-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}@property --un-border-opacity{syntax:"<percentage>";inherits:false;initial-value:100%}.chat-md[data-v-b78b767b]{font-size:var(--text-sm-fontSize);line-height:var(--un-leading,var(--text-sm-lineHeight));--un-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);overflow-wrap:break-word}.chat-md[data-v-b78b767b] :is(p,ul,ol,pre,blockquote,table,hr,h1,h2,h3,h4)+:is(p,ul,ol,pre,blockquote,table,hr,h1,h2,h3,h4){margin-top:calc(var(--spacing) * 2.5)}.chat-md[data-v-b78b767b] :is(h1,h2,h3,h4){--un-leading:var(--leading-snug);line-height:var(--leading-snug);--un-font-weight:var(--fontWeight-semibold);font-weight:var(--fontWeight-semibold)}.chat-md[data-v-b78b767b] :is(h1,h2){font-size:var(--text-base-fontSize);line-height:var(--un-leading,var(--text-base-lineHeight))}.chat-md[data-v-b78b767b] :is(h3,h4){font-size:var(--text-sm-fontSize);line-height:var(--un-leading,var(--text-sm-lineHeight))}.chat-md[data-v-b78b767b] *+:is(h1,h2,h3,h4){margin-top:calc(var(--spacing) * 4)}.chat-md[data-v-b78b767b] :is(ul,ol){padding-left:calc(var(--spacing) * 5)}.chat-md[data-v-b78b767b] ul{list-style-type:disc}.chat-md[data-v-b78b767b] ol{list-style-type:decimal}.chat-md[data-v-b78b767b] li+li{margin-top:calc(var(--spacing) * 1)}.chat-md[data-v-b78b767b] :not(pre)>code{padding-inline:calc(var(--spacing) * 1);padding-block:calc(var(--spacing) * .5);border-radius:var(--radius-DEFAULT);background-color:color-mix(in srgb, var(--colors-gray-500) 5%, transparent);font-size:.85em}@supports (color:color-mix(in lab, red, red)){.chat-md[data-v-b78b767b] :not(pre)>code{background-color:color-mix(in oklab, var(--colors-gray-500) 5%, transparent)}}.chat-md[data-v-b78b767b] pre{font-size:var(--text-xs-fontSize);line-height:var(--un-leading,var(--text-xs-lineHeight));--un-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);padding:calc(var(--spacing) * 3);border-width:1px;border-color:color-mix(in oklab, #9992 var(--un-border-opacity), transparent);border-radius:var(--radius-md);background-color:color-mix(in srgb, var(--colors-gray-500) 5%, transparent);max-width:100%;overflow-x:auto}@supports (color:color-mix(in lab, red, red)){.chat-md[data-v-b78b767b] pre{background-color:color-mix(in oklab, var(--colors-gray-500) 5%, transparent)}}.chat-md[data-v-b78b767b] pre code{white-space:pre}.chat-md[data-v-b78b767b] blockquote{padding-left:calc(var(--spacing) * 3);border-color:color-mix(in oklab, #9992 var(--un-border-opacity), transparent);opacity:.65;border-left-width:2px}.dark .chat-md[data-v-b78b767b] blockquote{opacity:.55}.chat-md[data-v-b78b767b] table{font-size:var(--text-xs-fontSize);line-height:var(--un-leading,var(--text-xs-lineHeight));border-collapse:collapse;max-width:100%;display:block;overflow-x:auto}.chat-md[data-v-b78b767b] :is(th,td){padding-inline:calc(var(--spacing) * 2);padding-block:calc(var(--spacing) * 1);text-align:left;border-width:1px;border-color:color-mix(in oklab, #9992 var(--un-border-opacity), transparent)}.chat-md[data-v-b78b767b] a{text-underline-offset:2px;text-decoration-line:underline}.chat-md[data-v-b78b767b] a:hover{opacity:.8}.chat-md[data-v-b78b767b] hr{border-color:color-mix(in oklab, #9992 var(--un-border-opacity), transparent)}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{U as e,V as t}from"./pr-cache-DNR7E646.js";import{$ as n,D as r,E as i,Ft as a,On as o,Rt as s,Yt as c,_ as l,b as u,bt as d,g as f,k as p,l as m,mt as h,o as g,qt as _,tr as v,v as y,vn as b,y as x}from"./runtime-core.esm-bundler-B8D2lM98.js";import{T as S,i as C}from"./index-BD_DzwAn.js";import{a as w}from"./diffs-store-B1RXognA.js";import{c as T}from"./dist-hXdF5ZNr.js";var E={key:0,class:`flex justify-end`},D={class:`text-sm px-3 py-2 rounded-lg bg-active max-w-[85%] whitespace-pre-wrap break-words`},O={key:1,class:`flex flex-col gap-1.5 max-w-full items-start`},k={key:1,class:`text-xs op-mute flex gap-1.5 items-center`},A={key:0,class:`text-sm text-red-500 flex flex-wrap gap-2 items-center`},j={class:`break-words`},M={key:1,class:`text-xs px-1.5 border border-base rounded op-mute`},N={key:2,class:`text-xs op-mute flex gap-1.5 items-center`},P=C(p({__name:`ChatMessage`,props:{message:{},retryable:{type:Boolean}},emits:[`retry`],setup(t){let n=t;function a(e){return typeof e==`string`?e:e.map(e=>e.text??``).join(`
|
|
2
|
-
`)}let s=f(()=>n.message.role===`user`?a(n.message.content):``),c=f(()=>{let e=n.message;if(e.role!==`toolResult`||e.toolName!==`update_grouping`||e.isError)return;let t=a(e.content).match(/(\d+) groups?/)?.[1];return t?`Updated grouping: ${t} groups`:void 0});function p(e){if(e.name===`read_diffs`){let t=e.arguments.paths;return`Read ${Array.isArray(t)?t.length:0} file(s)`}return e.name===`update_grouping`?`Updating grouping…`:e.name}return(n,a)=>t.message.role===`user`?(h(),u(`div`,E,[l(`div`,D,v(s.value),1)])):t.message.role===`assistant`?(h(),u(`div`,O,[(h(!0),u(g,null,d(t.message.content,(e,n)=>(h(),u(g,{key:n},[e.type===`text`&&e.text.trim()?(h(),y(m,{key:0},{default:_(()=>[r(o(w),{value:e.text,streaming:t.message.stopReason===`pending`,class:`chat-md min-w-0 self-stretch`},null,8,[`value`,`streaming`])]),_:2},1024)):e.type===`toolCall`?(h(),u(`div`,k,[a[1]||=l(`span`,{class:`i-ph:wrench-duotone`,"aria-hidden":`true`},null,-1),i(` `+v(p(e)),1)])):x(``,!0)],64))),128)),t.message.stopReason===`error`?(h(),u(`div`,A,[l(`span`,j,v(t.message.errorMessage??`Request failed`),1),t.retryable?(h(),y(e,{key:0,size:`sm`,icon:`i-ph:arrow-clockwise-duotone`,onClick:a[0]||=e=>n.$emit(`retry`)},{default:_(()=>[...a[2]||=[i(` Retry `,-1)]]),_:1})):x(``,!0)])):t.message.stopReason===`aborted`?(h(),u(`span`,M,`stopped`)):x(``,!0)])):c.value?(h(),u(`div`,N,[a[3]||=l(`span`,{class:`i-ph:tree-structure-duotone`,"aria-hidden":`true`},null,-1),i(` `+v(c.value),1)])):x(``,!0)}}),[[`__scopeId`,`data-v-b78b767b`]]),F={class:`bottom-4 right-4 fixed z-dropdown`},I={key:1,class:`border border-base rounded-lg bg-base flex flex-col h-140 max-h-[calc(100vh-2rem)] max-w-[calc(100vw-2rem)] w-100 shadow-xl overflow-hidden`},L={class:`px-3 py-2 border-b border-base flex gap-2 items-center`},R={key:0,class:`text-sm p-6 text-center op-mute flex flex-auto items-center justify-center`},z={key:0,class:`text-xs op-mute flex gap-1.5 items-center`,role:`status`},B={key:0,class:`text-xs text-red-500 px-3 pb-2 break-words`},V={class:`p-2 border-t border-base flex gap-2 items-end`},H=[`disabled`],U=p({__name:`ChatWidget`,props:n({store:{}},{open:{type:Boolean,default:!1},openModifiers:{}}),emits:[`update:open`],setup(n){let o=n,p=f(()=>o.store.llm.chat),m=a(n,`open`),C=b(``),w=f(()=>p.value.isStreaming||o.store.llm.isAnalyzing),E=f(()=>p.value.messages.length-1),D=f(()=>{let e=p.value.messages.at(-1);return e?.role===`assistant`&&e.stopReason===`error`}),O=f(()=>{if(!p.value.isStreaming)return!1;let e=p.value.messages.at(-1),t=e?.role===`assistant`?e.content.at(-1):void 0;return!(t?.type===`text`&&t.text.trim())}),k=s(`listEl`),A=s(`contentEl`),j=b(!0);function M(){let e=k.value;e&&(j.value=e.scrollHeight-e.scrollTop-e.clientHeight<40)}T(A,()=>{j.value&&k.value&&(k.value.scrollTop=k.value.scrollHeight)});async function N(){let e=C.value;e.trim()&&!w.value&&(C.value=``,j.value=!0,await p.value.send(e))}function U(e){e.key!==`Enter`||e.shiftKey||e.isComposing||(e.preventDefault(),N())}return(n,a)=>(h(),u(`div`,F,[m.value?(h(),u(`div`,I,[l(`div`,L,[a[8]||=l(`span`,{class:`i-ph:chat-circle-dots-duotone op-mute`,"aria-hidden":`true`},null,-1),a[9]||=l(`span`,{class:`text-sm font-semibold flex-auto`},`Ask about this PR`,-1),p.value.available?(h(),y(e,{key:0,size:`sm`,variant:`text`,onClick:a[1]||=e=>p.value.clear()},{default:_(()=>[...a[7]||=[i(` Clear `,-1)]]),_:1})):x(``,!0),r(t,{compact:``,icon:`i-ph:caret-down`,tooltip:`Collapse`,onClick:a[2]||=e=>m.value=!1})]),p.value.available?(h(),u(g,{key:1},[l(`div`,{ref_key:`listEl`,ref:k,class:`p-3 overscroll-contain flex-auto min-w-0 overflow-y-auto`,onScroll:M},[l(`div`,{ref_key:`contentEl`,ref:A,class:`flex flex-col gap-3`},[(h(!0),u(g,null,d(p.value.messages,(e,t)=>(h(),y(P,{key:t,message:e,retryable:t===E.value&&!p.value.isStreaming,onRetry:a[3]||=e=>p.value.retry()},null,8,[`message`,`retryable`]))),128)),O.value?(h(),u(`div`,z,[...a[10]||=[l(`span`,{class:`i-ph:spinner-duotone animate-spin`,"aria-hidden":`true`},null,-1),i(` Thinking… `,-1)]])):x(``,!0)],512)],544),p.value.error&&!D.value?(h(),u(`p`,B,v(p.value.error.message),1)):x(``,!0),l(`div`,V,[c(l(`textarea`,{"onUpdate:modelValue":a[4]||=e=>C.value=e,rows:`2`,placeholder:`Ask about this PR…`,"aria-label":`Ask about this PR`,disabled:w.value,class:`text-sm p-2 outline-none border border-base rounded bg-raised flex-auto resize-none disabled:op-mute focus-visible:ring-2 focus-visible:ring-primary-500/40`,onKeydown:U},null,40,H),[[S,C.value]]),p.value.isStreaming?(h(),y(e,{key:0,size:`sm`,icon:`i-ph:stop-duotone`,onClick:a[5]||=e=>p.value.stop()},{default:_(()=>[...a[11]||=[i(` Stop `,-1)]]),_:1})):(h(),y(e,{key:1,size:`sm`,variant:`primary`,icon:`i-ph:paper-plane-right-duotone`,disabled:w.value||!C.value.trim(),onClick:a[6]||=e=>N()},{default:_(()=>[...a[12]||=[i(` Send `,-1)]]),_:1},8,[`disabled`]))])],64)):(h(),u(`div`,R,` Re-analyze to enable chat `))])):(h(),y(t,{key:0,icon:`i-ph:chat-circle-dots-duotone`,title:`Ask about this PR`,label:`Ask about this PR`,class:`text-xl border border-base bg-base shadow-lg`,onClick:a[0]||=e=>m.value=!0}))]))}});export{U as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{G as e,U as t}from"./pr-cache-DNR7E646.js";import{D as n,E as r,On as i,b as a,ct as o,g as s,k as c,mt as l,qt as u,tr as d}from"./runtime-core.esm-bundler-B8D2lM98.js";import{n as f}from"./index-BD_DzwAn.js";import{i as p,n as m,r as h,t as g}from"./diffs-store-B1RXognA.js";var _=c({__name:`[number]`,setup(c){let _=f(),v=s(()=>({kind:`github-pr`,owner:_.params.owner,repo:_.params.repo,number:_.params.number})),y=g(v.value,{token:e.value.githubToken});return o(()=>y.load()),(e,o)=>(l(),a(`main`,null,[n(m,{store:i(y)},{loading:u(()=>[n(h,{text:`Loading pull request…`})]),error:u(({error:e,retry:i})=>[n(p,{icon:`i-ph:warning-duotone`,title:`Couldn't load this pull request`},{hint:u(()=>[r(d(e.message),1)]),actions:u(()=>[n(t,{variant:`primary`,onClick:i},{default:u(()=>[...o[0]||=[r(` Retry `,-1)]]),_:1},8,[`onClick`])]),_:2},1024)]),_:1},8,[`store`])]))}});export{_ as default};
|