🔀 merge main
This commit is contained in:
78
.github/workflows/claude-code-review.yml
vendored
Normal file
78
.github/workflows/claude-code-review.yml
vendored
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
name: Claude Code Review
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [opened, synchronize]
|
||||||
|
# Optional: Only run on specific file changes
|
||||||
|
# paths:
|
||||||
|
# - "src/**/*.ts"
|
||||||
|
# - "src/**/*.tsx"
|
||||||
|
# - "src/**/*.js"
|
||||||
|
# - "src/**/*.jsx"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
claude-review:
|
||||||
|
# Optional: Filter by PR author
|
||||||
|
# if: |
|
||||||
|
# github.event.pull_request.user.login == 'external-contributor' ||
|
||||||
|
# github.event.pull_request.user.login == 'new-developer' ||
|
||||||
|
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: read
|
||||||
|
issues: read
|
||||||
|
id-token: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 1
|
||||||
|
|
||||||
|
- name: Run Claude Code Review
|
||||||
|
id: claude-review
|
||||||
|
uses: anthropics/claude-code-action@beta
|
||||||
|
with:
|
||||||
|
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
||||||
|
|
||||||
|
# Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4)
|
||||||
|
# model: "claude-opus-4-20250514"
|
||||||
|
|
||||||
|
# Direct prompt for automated review (no @claude mention needed)
|
||||||
|
direct_prompt: |
|
||||||
|
Please review this pull request and provide feedback on:
|
||||||
|
- Code quality and best practices
|
||||||
|
- Potential bugs or issues
|
||||||
|
- Performance considerations
|
||||||
|
- Security concerns
|
||||||
|
- Test coverage
|
||||||
|
|
||||||
|
Be constructive and helpful in your feedback.
|
||||||
|
|
||||||
|
# Optional: Use sticky comments to make Claude reuse the same comment on subsequent pushes to the same PR
|
||||||
|
# use_sticky_comment: true
|
||||||
|
|
||||||
|
# Optional: Customize review based on file types
|
||||||
|
# direct_prompt: |
|
||||||
|
# Review this PR focusing on:
|
||||||
|
# - For TypeScript files: Type safety and proper interface usage
|
||||||
|
# - For API endpoints: Security, input validation, and error handling
|
||||||
|
# - For React components: Performance, accessibility, and best practices
|
||||||
|
# - For tests: Coverage, edge cases, and test quality
|
||||||
|
|
||||||
|
# Optional: Different prompts for different authors
|
||||||
|
# direct_prompt: |
|
||||||
|
# ${{ github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR' &&
|
||||||
|
# 'Welcome! Please review this PR from a first-time contributor. Be encouraging and provide detailed explanations for any suggestions.' ||
|
||||||
|
# 'Please provide a thorough code review focusing on our coding standards and best practices.' }}
|
||||||
|
|
||||||
|
# Optional: Add specific tools for running tests or linting
|
||||||
|
# allowed_tools: "Bash(npm run test),Bash(npm run lint),Bash(npm run typecheck)"
|
||||||
|
|
||||||
|
# Optional: Skip review for certain conditions
|
||||||
|
# if: |
|
||||||
|
# !contains(github.event.pull_request.title, '[skip-review]') &&
|
||||||
|
# !contains(github.event.pull_request.title, '[WIP]')
|
||||||
|
|
||||||
64
.github/workflows/claude.yml
vendored
Normal file
64
.github/workflows/claude.yml
vendored
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
name: Claude Code
|
||||||
|
|
||||||
|
on:
|
||||||
|
issue_comment:
|
||||||
|
types: [created]
|
||||||
|
pull_request_review_comment:
|
||||||
|
types: [created]
|
||||||
|
issues:
|
||||||
|
types: [opened, assigned]
|
||||||
|
pull_request_review:
|
||||||
|
types: [submitted]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
claude:
|
||||||
|
if: |
|
||||||
|
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
|
||||||
|
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
|
||||||
|
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
|
||||||
|
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pull-requests: read
|
||||||
|
issues: read
|
||||||
|
id-token: write
|
||||||
|
actions: read # Required for Claude to read CI results on PRs
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 1
|
||||||
|
|
||||||
|
- name: Run Claude Code
|
||||||
|
id: claude
|
||||||
|
uses: anthropics/claude-code-action@beta
|
||||||
|
with:
|
||||||
|
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
||||||
|
|
||||||
|
# This is an optional setting that allows Claude to read CI results on PRs
|
||||||
|
additional_permissions: |
|
||||||
|
actions: read
|
||||||
|
|
||||||
|
# Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4)
|
||||||
|
# model: "claude-opus-4-20250514"
|
||||||
|
|
||||||
|
# Optional: Customize the trigger phrase (default: @claude)
|
||||||
|
# trigger_phrase: "/claude"
|
||||||
|
|
||||||
|
# Optional: Trigger when specific user is assigned to an issue
|
||||||
|
# assignee_trigger: "claude-bot"
|
||||||
|
|
||||||
|
# Optional: Allow Claude to run specific commands
|
||||||
|
# allowed_tools: "Bash(npm install),Bash(npm run build),Bash(npm run test:*),Bash(npm run lint:*)"
|
||||||
|
|
||||||
|
# Optional: Add custom instructions for Claude to customize its behavior for your project
|
||||||
|
# custom_instructions: |
|
||||||
|
# Follow our coding standards
|
||||||
|
# Ensure all new code has tests
|
||||||
|
# Use TypeScript for new files
|
||||||
|
|
||||||
|
# Optional: Custom environment variables for Claude
|
||||||
|
# claude_env: |
|
||||||
|
# NODE_ENV: test
|
||||||
|
|
||||||
25
README.md
25
README.md
@@ -315,6 +315,13 @@ Pake's development can not be without these Hackers. They contributed a lot of c
|
|||||||
<sub><b>Matt Bajorek</b></sub>
|
<sub><b>Matt Bajorek</b></sub>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/vaddisrinivas">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/38348871?v=4" width="90;" alt="vaddisrinivas"/>
|
||||||
|
<br />
|
||||||
|
<sub><b>Srinivas Vaddi</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
<td align="center">
|
<td align="center">
|
||||||
<a href="https://github.com/QingZ11">
|
<a href="https://github.com/QingZ11">
|
||||||
<img src="https://avatars.githubusercontent.com/u/38887077?v=4" width="90;" alt="QingZ11"/>
|
<img src="https://avatars.githubusercontent.com/u/38887077?v=4" width="90;" alt="QingZ11"/>
|
||||||
@@ -349,15 +356,15 @@ Pake's development can not be without these Hackers. They contributed a lot of c
|
|||||||
<br />
|
<br />
|
||||||
<sub><b>Kieran</b></sub>
|
<sub><b>Kieran</b></sub>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td></tr>
|
||||||
|
<tr>
|
||||||
<td align="center">
|
<td align="center">
|
||||||
<a href="https://github.com/exposir">
|
<a href="https://github.com/exposir">
|
||||||
<img src="https://avatars.githubusercontent.com/u/33340988?v=4" width="90;" alt="exposir"/>
|
<img src="https://avatars.githubusercontent.com/u/33340988?v=4" width="90;" alt="exposir"/>
|
||||||
<br />
|
<br />
|
||||||
<sub><b>孟世博</b></sub>
|
<sub><b>孟世博</b></sub>
|
||||||
</a>
|
</a>
|
||||||
</td></tr>
|
</td>
|
||||||
<tr>
|
|
||||||
<td align="center">
|
<td align="center">
|
||||||
<a href="https://github.com/2nthony">
|
<a href="https://github.com/2nthony">
|
||||||
<img src="https://avatars.githubusercontent.com/u/19513289?v=4" width="90;" alt="2nthony"/>
|
<img src="https://avatars.githubusercontent.com/u/19513289?v=4" width="90;" alt="2nthony"/>
|
||||||
@@ -399,15 +406,15 @@ Pake's development can not be without these Hackers. They contributed a lot of c
|
|||||||
<br />
|
<br />
|
||||||
<sub><b>Dengju Deng</b></sub>
|
<sub><b>Dengju Deng</b></sub>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td></tr>
|
||||||
|
<tr>
|
||||||
<td align="center">
|
<td align="center">
|
||||||
<a href="https://github.com/Fechin">
|
<a href="https://github.com/Fechin">
|
||||||
<img src="https://avatars.githubusercontent.com/u/2541482?v=4" width="90;" alt="Fechin"/>
|
<img src="https://avatars.githubusercontent.com/u/2541482?v=4" width="90;" alt="Fechin"/>
|
||||||
<br />
|
<br />
|
||||||
<sub><b>Fechin</b></sub>
|
<sub><b>Fechin</b></sub>
|
||||||
</a>
|
</a>
|
||||||
</td></tr>
|
</td>
|
||||||
<tr>
|
|
||||||
<td align="center">
|
<td align="center">
|
||||||
<a href="https://github.com/ImgBotApp">
|
<a href="https://github.com/ImgBotApp">
|
||||||
<img src="https://avatars.githubusercontent.com/u/31427850?v=4" width="90;" alt="ImgBotApp"/>
|
<img src="https://avatars.githubusercontent.com/u/31427850?v=4" width="90;" alt="ImgBotApp"/>
|
||||||
@@ -449,15 +456,15 @@ Pake's development can not be without these Hackers. They contributed a lot of c
|
|||||||
<br />
|
<br />
|
||||||
<sub><b>Null</b></sub>
|
<sub><b>Null</b></sub>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td></tr>
|
||||||
|
<tr>
|
||||||
<td align="center">
|
<td align="center">
|
||||||
<a href="https://github.com/geekvest">
|
<a href="https://github.com/geekvest">
|
||||||
<img src="https://avatars.githubusercontent.com/u/126322776?v=4" width="90;" alt="geekvest"/>
|
<img src="https://avatars.githubusercontent.com/u/126322776?v=4" width="90;" alt="geekvest"/>
|
||||||
<br />
|
<br />
|
||||||
<sub><b>Null</b></sub>
|
<sub><b>Null</b></sub>
|
||||||
</a>
|
</a>
|
||||||
</td></tr>
|
</td>
|
||||||
<tr>
|
|
||||||
<td align="center">
|
<td align="center">
|
||||||
<a href="https://github.com/houhoz">
|
<a href="https://github.com/houhoz">
|
||||||
<img src="https://avatars.githubusercontent.com/u/19684376?v=4" width="90;" alt="houhoz"/>
|
<img src="https://avatars.githubusercontent.com/u/19684376?v=4" width="90;" alt="houhoz"/>
|
||||||
|
|||||||
9
bin/utils/url.ts
vendored
9
bin/utils/url.ts
vendored
@@ -1,5 +1,4 @@
|
|||||||
import * as psl from 'psl';
|
import * as psl from 'psl';
|
||||||
import isUrl from 'is-url';
|
|
||||||
|
|
||||||
// Extracts the domain from a given URL.
|
// Extracts the domain from a given URL.
|
||||||
export function getDomain(inputUrl: string): string | null {
|
export function getDomain(inputUrl: string): string | null {
|
||||||
@@ -32,10 +31,10 @@ export function appendProtocol(inputUrl: string): string {
|
|||||||
// Normalizes the URL by ensuring it has a protocol and is valid.
|
// Normalizes the URL by ensuring it has a protocol and is valid.
|
||||||
export function normalizeUrl(urlToNormalize: string): string {
|
export function normalizeUrl(urlToNormalize: string): string {
|
||||||
const urlWithProtocol = appendProtocol(urlToNormalize);
|
const urlWithProtocol = appendProtocol(urlToNormalize);
|
||||||
|
try {
|
||||||
if (isUrl(urlWithProtocol)) {
|
new URL(urlWithProtocol);
|
||||||
return urlWithProtocol;
|
return urlWithProtocol;
|
||||||
} else {
|
} catch (err) {
|
||||||
throw new Error(`Your url "${urlWithProtocol}" is invalid`);
|
throw new Error(`Your url "${urlWithProtocol}" is invalid: ${(err as Error).message}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
29
package.json
29
package.json
@@ -48,17 +48,15 @@
|
|||||||
"exports": "./dist/pake.js",
|
"exports": "./dist/pake.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tauri-apps/api": "^2.2.0",
|
"@tauri-apps/api": "^2.7.0",
|
||||||
"@tauri-apps/cli": "^2.2.5",
|
"@tauri-apps/cli": "^2.7.1",
|
||||||
"axios": "^1.7.9",
|
"axios": "^1.11.0",
|
||||||
"chalk": "^5.4.1",
|
"chalk": "^5.5.0",
|
||||||
"commander": "^13.1.0",
|
"commander": "^11.1.0",
|
||||||
"execa": "^9.5.2",
|
"file-type": "^18.7.0",
|
||||||
"file-type": "^20.0.0",
|
"fs-extra": "^11.3.1",
|
||||||
"fs-extra": "^11.3.0",
|
|
||||||
"is-url": "^1.2.4",
|
|
||||||
"loglevel": "^1.9.2",
|
"loglevel": "^1.9.2",
|
||||||
"ora": "^8.1.1",
|
"ora": "^8.2.0",
|
||||||
"prompts": "^2.4.2",
|
"prompts": "^2.4.2",
|
||||||
"psl": "^1.15.0",
|
"psl": "^1.15.0",
|
||||||
"tmp-promise": "^3.0.3",
|
"tmp-promise": "^3.0.3",
|
||||||
@@ -66,23 +64,22 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@rollup/plugin-alias": "^5.1.1",
|
"@rollup/plugin-alias": "^5.1.1",
|
||||||
"@rollup/plugin-commonjs": "^28.0.2",
|
"@rollup/plugin-commonjs": "^28.0.6",
|
||||||
"@rollup/plugin-json": "^6.1.0",
|
"@rollup/plugin-json": "^6.1.0",
|
||||||
"@rollup/plugin-replace": "^6.0.2",
|
"@rollup/plugin-replace": "^6.0.2",
|
||||||
"@rollup/plugin-terser": "^0.4.4",
|
"@rollup/plugin-terser": "^0.4.4",
|
||||||
"@types/fs-extra": "^11.0.4",
|
"@types/fs-extra": "^11.0.4",
|
||||||
"@types/is-url": "^1.2.32",
|
"@types/node": "^20.19.10",
|
||||||
"@types/node": "^22.10.8",
|
|
||||||
"@types/page-icon": "^0.3.6",
|
"@types/page-icon": "^0.3.6",
|
||||||
"@types/prompts": "^2.4.9",
|
"@types/prompts": "^2.4.9",
|
||||||
"@types/psl": "^1.1.3",
|
"@types/psl": "^1.11.0",
|
||||||
"@types/tmp": "^0.2.6",
|
"@types/tmp": "^0.2.6",
|
||||||
"@types/update-notifier": "^6.0.8",
|
"@types/update-notifier": "^6.0.8",
|
||||||
"app-root-path": "^3.1.0",
|
"app-root-path": "^3.1.0",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"rollup": "^4.31.0",
|
"rollup": "^4.46.2",
|
||||||
"rollup-plugin-typescript2": "^0.36.0",
|
"rollup-plugin-typescript2": "^0.36.0",
|
||||||
"tslib": "^2.8.1",
|
"tslib": "^2.8.1",
|
||||||
"typescript": "^5.7.3"
|
"typescript": "^5.9.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
996
pnpm-lock.yaml
generated
996
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user