一些检查失败了
automerge / automerge (push) Has been cancelled
react-native-android-build-apk / AssembleRelease (push) Has been cancelled
Build macOS M1 / Main (push) Has been cancelled
Joplin Continuous Integration / Main (macos-15-intel) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-11-vs2026-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-2025) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04-arm) (push) Has been cancelled
Joplin UI tests / Main (ubuntu-22.04) (push) Has been cancelled
Joplin UI tests / Main (windows-2025) (push) Has been cancelled
Joplin UI tests / Mobile (push) Has been cancelled
Close stale issues / ProcessStaleIssues (push) Has been cancelled
454 行
34 KiB
JSON
454 行
34 KiB
JSON
{
|
||
"issue": {
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/14430",
|
||
"repository_url": "https://api.github.com/repos/laurent22/joplin",
|
||
"labels_url": "https://api.github.com/repos/laurent22/joplin/issues/14430/labels{/name}",
|
||
"comments_url": "https://api.github.com/repos/laurent22/joplin/issues/14430/comments",
|
||
"events_url": "https://api.github.com/repos/laurent22/joplin/issues/14430/events",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14430",
|
||
"id": 3976644909,
|
||
"node_id": "PR_kwDOBLftOs7FkZX9",
|
||
"number": 14430,
|
||
"title": "Add optional GPU support to Transcribe server",
|
||
"user": {
|
||
"login": "Anshv784",
|
||
"id": 170914106,
|
||
"node_id": "U_kgDOCi_xOg",
|
||
"avatar_url": "https://avatars.githubusercontent.com/u/170914106?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/Anshv784",
|
||
"html_url": "https://github.com/Anshv784",
|
||
"followers_url": "https://api.github.com/users/Anshv784/followers",
|
||
"following_url": "https://api.github.com/users/Anshv784/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/Anshv784/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/Anshv784/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/Anshv784/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/Anshv784/orgs",
|
||
"repos_url": "https://api.github.com/users/Anshv784/repos",
|
||
"events_url": "https://api.github.com/users/Anshv784/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/Anshv784/received_events",
|
||
"type": "User",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"labels": [
|
||
{
|
||
"id": 519700743,
|
||
"node_id": "MDU6TGFiZWw1MTk3MDA3NDM=",
|
||
"url": "https://api.github.com/repos/laurent22/joplin/labels/enhancement",
|
||
"name": "enhancement",
|
||
"color": "5ebeff",
|
||
"default": true,
|
||
"description": "Feature requests and code enhancements"
|
||
},
|
||
{
|
||
"id": 1091233678,
|
||
"node_id": "MDU6TGFiZWwxMDkxMjMzNjc4",
|
||
"url": "https://api.github.com/repos/laurent22/joplin/labels/documentation",
|
||
"name": "documentation",
|
||
"color": "fef1bf",
|
||
"default": true,
|
||
"description": "Documentation, web site, README"
|
||
},
|
||
{
|
||
"id": 2676541710,
|
||
"node_id": "MDU6TGFiZWwyNjc2NTQxNzEw",
|
||
"url": "https://api.github.com/repos/laurent22/joplin/labels/server",
|
||
"name": "server",
|
||
"color": "ffc274",
|
||
"default": false,
|
||
"description": "Issues related to Joplin Server"
|
||
},
|
||
{
|
||
"id": 8767133118,
|
||
"node_id": "LA_kwDOBLftOs8AAAACCo_Vvg",
|
||
"url": "https://api.github.com/repos/laurent22/joplin/labels/transcribe",
|
||
"name": "transcribe",
|
||
"color": "ffc274",
|
||
"default": false,
|
||
"description": "Related to Joplin Transcribe"
|
||
}
|
||
],
|
||
"state": "closed",
|
||
"locked": false,
|
||
"assignees": [],
|
||
"milestone": null,
|
||
"comments": 4,
|
||
"created_at": "2026-02-23T06:54:30Z",
|
||
"updated_at": "2026-02-23T09:05:45Z",
|
||
"closed_at": "2026-02-23T09:03:28Z",
|
||
"assignee": null,
|
||
"author_association": "NONE",
|
||
"active_lock_reason": null,
|
||
"draft": false,
|
||
"pull_request": {
|
||
"url": "https://api.github.com/repos/laurent22/joplin/pulls/14430",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14430",
|
||
"diff_url": "https://github.com/laurent22/joplin/pull/14430.diff",
|
||
"patch_url": "https://github.com/laurent22/joplin/pull/14430.patch",
|
||
"merged_at": null
|
||
},
|
||
"body": "## Summary\r\nThis pull request addresses #14253 by adding optional GPU support to the Transcribe server.\r\n\r\nThe change allows model layers to be offloaded to the GPU using the `-ngl` flag, while keeping the default CPU-only behavior unchanged. GPU usage is fully opt-in and enabled only when explicitly configured.\r\n\r\n## Implementation details\r\n- Adds a new environment variable, `HTR_CLI_NGL`, to control GPU layer offloading\r\n - Default value is `0` (CPU-only)\r\n - When set to a value greater than `0` (for example `999`), the server passes `-ngl <value>` to the underlying transcription CLI\r\n- Extends `HtrCli` to conditionally append the `-ngl` flag based on configuration\r\n- Updates Docker configuration, environment samples, and documentation\r\n- Documents optional use of a **llamafile-based CLI** as a drop-in replacement to simplify deployment without changing existing workflows\r\n\r\n## Behavior\r\n- Existing CPU-only behavior remains the default\r\n- GPU support is enabled only when:\r\n - `HTR_CLI_NGL` is explicitly set to a value greater than `0`, and\r\n - a GPU-capable CLI binary is used\r\n- No breaking changes are introduced\r\n\r\n## Tests\r\n- Added unit tests in `packages/transcribe/src/core/HtrCli.test.ts` to verify CLI argument handling:\r\n - Ensures `-ngl` is not added when GPU support is disabled\r\n - Ensures `-ngl <value>` is added when GPU support is enabled\r\n- All tests pass:\r\n<img width=\"617\" height=\"211\" alt=\"Tests Image\" src=\"https://github.com/user-attachments/assets/bc00a09f-f952-4348-949a-d5725a70c2ae\" />\r\n\r\n",
|
||
"closed_by": {
|
||
"login": "laurent22",
|
||
"id": 1285584,
|
||
"node_id": "MDQ6VXNlcjEyODU1ODQ=",
|
||
"avatar_url": "https://avatars.githubusercontent.com/u/1285584?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/laurent22",
|
||
"html_url": "https://github.com/laurent22",
|
||
"followers_url": "https://api.github.com/users/laurent22/followers",
|
||
"following_url": "https://api.github.com/users/laurent22/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/laurent22/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/laurent22/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/laurent22/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/laurent22/orgs",
|
||
"repos_url": "https://api.github.com/users/laurent22/repos",
|
||
"events_url": "https://api.github.com/users/laurent22/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/laurent22/received_events",
|
||
"type": "User",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"reactions": {
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/14430/reactions",
|
||
"total_count": 0,
|
||
"+1": 0,
|
||
"-1": 0,
|
||
"laugh": 0,
|
||
"hooray": 0,
|
||
"confused": 0,
|
||
"heart": 0,
|
||
"rocket": 0,
|
||
"eyes": 0
|
||
},
|
||
"timeline_url": "https://api.github.com/repos/laurent22/joplin/issues/14430/timeline",
|
||
"performed_via_github_app": null,
|
||
"state_reason": null
|
||
},
|
||
"comments": [
|
||
{
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3943014075",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14430#issuecomment-3943014075",
|
||
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14430",
|
||
"id": 3943014075,
|
||
"node_id": "IC_kwDOBLftOs7rBZ67",
|
||
"user": {
|
||
"login": "github-actions[bot]",
|
||
"id": 41898282,
|
||
"node_id": "MDM6Qm90NDE4OTgyODI=",
|
||
"avatar_url": "https://avatars.githubusercontent.com/in/15368?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/github-actions%5Bbot%5D",
|
||
"html_url": "https://github.com/apps/github-actions",
|
||
"followers_url": "https://api.github.com/users/github-actions%5Bbot%5D/followers",
|
||
"following_url": "https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/github-actions%5Bbot%5D/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/github-actions%5Bbot%5D/orgs",
|
||
"repos_url": "https://api.github.com/users/github-actions%5Bbot%5D/repos",
|
||
"events_url": "https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/github-actions%5Bbot%5D/received_events",
|
||
"type": "Bot",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"created_at": "2026-02-23T06:54:43Z",
|
||
"updated_at": "2026-02-23T09:03:40Z",
|
||
"body": "****CLA Assistant Lite bot**** All contributors have signed the CLA ✍️ ✅",
|
||
"author_association": "CONTRIBUTOR",
|
||
"reactions": {
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3943014075/reactions",
|
||
"total_count": 0,
|
||
"+1": 0,
|
||
"-1": 0,
|
||
"laugh": 0,
|
||
"hooray": 0,
|
||
"confused": 0,
|
||
"heart": 0,
|
||
"rocket": 0,
|
||
"eyes": 0
|
||
},
|
||
"performed_via_github_app": {
|
||
"id": 15368,
|
||
"client_id": "Iv1.05c79e9ad1f6bdfa",
|
||
"slug": "github-actions",
|
||
"node_id": "MDM6QXBwMTUzNjg=",
|
||
"owner": {
|
||
"login": "github",
|
||
"id": 9919,
|
||
"node_id": "MDEyOk9yZ2FuaXphdGlvbjk5MTk=",
|
||
"avatar_url": "https://avatars.githubusercontent.com/u/9919?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/github",
|
||
"html_url": "https://github.com/github",
|
||
"followers_url": "https://api.github.com/users/github/followers",
|
||
"following_url": "https://api.github.com/users/github/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/github/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/github/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/github/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/github/orgs",
|
||
"repos_url": "https://api.github.com/users/github/repos",
|
||
"events_url": "https://api.github.com/users/github/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/github/received_events",
|
||
"type": "Organization",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"name": "GitHub Actions",
|
||
"description": "Automate your workflow from idea to production",
|
||
"external_url": "https://help.github.com/en/actions",
|
||
"html_url": "https://github.com/apps/github-actions",
|
||
"created_at": "2018-07-30T09:30:17Z",
|
||
"updated_at": "2026-05-05T14:51:38Z",
|
||
"permissions": {
|
||
"actions": "write",
|
||
"administration": "read",
|
||
"artifact_metadata": "write",
|
||
"attestations": "write",
|
||
"checks": "write",
|
||
"code_quality": "write",
|
||
"contents": "write",
|
||
"copilot_requests": "write",
|
||
"deployments": "write",
|
||
"discussions": "write",
|
||
"issues": "write",
|
||
"merge_queues": "write",
|
||
"metadata": "read",
|
||
"models": "read",
|
||
"packages": "write",
|
||
"pages": "write",
|
||
"pull_requests": "write",
|
||
"repository_hooks": "write",
|
||
"repository_projects": "write",
|
||
"security_events": "write",
|
||
"statuses": "write",
|
||
"vulnerability_alerts": "read"
|
||
},
|
||
"events": [
|
||
"branch_protection_rule",
|
||
"check_run",
|
||
"check_suite",
|
||
"create",
|
||
"delete",
|
||
"deployment",
|
||
"deployment_status",
|
||
"discussion",
|
||
"discussion_comment",
|
||
"fork",
|
||
"gollum",
|
||
"issues",
|
||
"issue_comment",
|
||
"label",
|
||
"merge_group",
|
||
"milestone",
|
||
"page_build",
|
||
"public",
|
||
"pull_request",
|
||
"pull_request_review",
|
||
"pull_request_review_comment",
|
||
"push",
|
||
"registry_package",
|
||
"release",
|
||
"repository",
|
||
"repository_dispatch",
|
||
"status",
|
||
"watch",
|
||
"workflow_dispatch",
|
||
"workflow_run"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3943014781",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14430#issuecomment-3943014781",
|
||
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14430",
|
||
"id": 3943014781,
|
||
"node_id": "IC_kwDOBLftOs7rBaF9",
|
||
"user": {
|
||
"login": "coderabbitai[bot]",
|
||
"id": 136622811,
|
||
"node_id": "BOT_kgDOCCSy2w",
|
||
"avatar_url": "https://avatars.githubusercontent.com/in/347564?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/coderabbitai%5Bbot%5D",
|
||
"html_url": "https://github.com/apps/coderabbitai",
|
||
"followers_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/followers",
|
||
"following_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/orgs",
|
||
"repos_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/repos",
|
||
"events_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/coderabbitai%5Bbot%5D/received_events",
|
||
"type": "Bot",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"created_at": "2026-02-23T06:54:57Z",
|
||
"updated_at": "2026-02-23T09:05:45Z",
|
||
"body": "<!-- This is an auto-generated comment: summarize by coderabbit.ai -->\n<!-- This is an auto-generated comment: failure by coderabbit.ai -->\n\n> [!CAUTION]\n> ## Review failed\n> \n> The pull request is closed.\n\n<!-- end of auto-generated comment: failure by coderabbit.ai -->\n\n<details>\n<summary>ℹ️ Recent review info</summary>\n\n**Configuration used**: Path: .coderabbit.yaml\n\n**Review profile**: CHILL\n\n**Plan**: Pro\n\n<details>\n<summary>📥 Commits</summary>\n\nReviewing files that changed from the base of the PR and between 7c2f0317b5d581fed5776b37bd27e5b3318da828 and 709bc6115aea17a4a9f3dae61b1ac6dc0fb1d78f.\n\n</details>\n\n<details>\n<summary>📒 Files selected for processing (1)</summary>\n\n* `packages/transcribe/src/core/HtrCli.test.ts`\n\n</details>\n\n</details>\n\n---\n\n\n<!-- walkthrough_start -->\n\n<details>\n<summary>📝 Walkthrough</summary>\n\n## Walkthrough\n\nAdds optional GPU offload support to the transcription service via a new environment variable HTR_CLI_NGL, propagates it into the HtrCli options as gpuLayers, updates command construction to include -ngl when enabled, updates docs/configs, and adds tests for the new flag.\n\n## Changes\n\n|Cohort / File(s)|Summary|\n|---|---|\n|**Configuration & runtime files** <br> ` .env-transcribe-sample`, `Dockerfile.transcribe`, `docker-compose.server.yml`|Added commented GPU offload docs and example values; introduced `HTR_CLI_NGL` in docker-compose (default 0) and guidance for GPU-capable binaries.|\n|**Environment & defaults** <br> `packages/transcribe/src/env.ts`|Added `HTR_CLI_NGL: number` to `EnvVariables` and `defaultEnvValues` with default 0 and comment.|\n|**Core implementation & API** <br> `packages/transcribe/src/core/HtrCli.ts`, `packages/transcribe/src/api/app.ts`|Added optional `gpuLayers?: number` to HtrCli options; app passes gpuLayers from env when >0; buildCommand conditionally appends `-ngl <n>`; run() adds imageName basename/traversal sanitisation; logs updated to reflect GPU/CPU mode.|\n|**Tests** <br> `packages/transcribe/src/core/HtrCli.test.ts`|Added execCommand mock, fake output, and tests verifying `-ngl` is included only when `gpuLayers > 0`; retained parsing tests.|\n|**Documentation** <br> `packages/transcribe/README.md`|Documented GPU support, instructions for GPU-capable binaries (CUDA/Metal/llamafile), `HTR_CLI_NGL` usage and example Docker/docker-compose commands.|\n|**Spellcheck dictionary** <br> `packages/tools/cspell/dictionary4.txt`|Added `CUDA` and `llamafile` entries for spell-check recognition.|\n\n## Sequence Diagram\n\n```mermaid\nsequenceDiagram\n participant App as App Initialisation\n participant Env as Environment\n participant HtrCli as HtrCli Instance\n participant Cmd as Command Builder\n participant Binary as CLI Binary\n\n App->>Env: Read HTR_CLI_NGL\n Env-->>App: Return numeric value\n App->>HtrCli: Instantiate with gpuLayers (if > 0)\n HtrCli->>HtrCli: Log GPU or CPU mode\n App->>Cmd: Request command build\n Cmd->>Cmd: Check gpuLayers\n alt gpuLayers > 0\n Cmd->>Cmd: Append \"-ngl {value}\"\n end\n Cmd-->>App: Return command string\n App->>Binary: Execute command\n Binary-->>App: Return transcription output\n```\n\n## Possibly related PRs\n\n- laurent22/joplin#14381: Refactor touching HtrCli construction and command building; closely related to addition of the `gpuLayers`/`HTR_CLI_NGL` flag.\n\n</details>\n\n<!-- walkthrough_end -->\n\n<!-- pre_merge_checks_walkthrough_start -->\n\n<details>\n<summary>🚥 Pre-merge checks | ✅ 3</summary>\n\n<details>\n<summary>✅ Passed checks (3 passed)</summary>\n\n| Check name | Status | Explanation |\n| :----------------: | :------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Title check | ✅ Passed | The title accurately summarizes the main change: adding optional GPU support to the Transcribe server, which is the central objective of this pull request. |\n| Description check | ✅ Passed | The description is well-related to the changeset, providing clear implementation details, behaviour explanation, and testing information that aligns with all modifications across the codebase. |\n| Docstring Coverage | ✅ Passed | No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. |\n\n</details>\n\n<sub>✏️ Tip: You can configure your own custom pre-merge checks in the settings.</sub>\n\n</details>\n\n<!-- pre_merge_checks_walkthrough_end -->\n\n<!-- finishing_touch_checkbox_start -->\n\n<details>\n<summary>✨ Finishing Touches</summary>\n\n- [ ] <!-- {\"checkboxId\": \"7962f53c-55bc-4827-bfbf-6a18da830691\"} --> 📝 Generate docstrings (stacked PR)\n- [ ] <!-- {\"checkboxId\": \"3e1879ae-f29b-4d0d-8e06-d12b7ba33d98\"} --> 📝 Generate docstrings (commit on current branch)\n<details>\n<summary>🧪 Generate unit tests (beta)</summary>\n\n- [ ] <!-- {\"checkboxId\": \"f47ac10b-58cc-4372-a567-0e02b2c3d479\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} --> Create PR with unit tests\n- [ ] <!-- {\"checkboxId\": \"07f1e7d6-8a8e-4e23-9900-8731c2c87f58\", \"radioGroupId\": \"utg-output-choice-group-unknown_comment_id\"} --> Post copyable unit tests in a comment\n\n</details>\n\n</details>\n\n<!-- finishing_touch_checkbox_end -->\n\n<!-- tips_start -->\n\n---\n\nThanks for using [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=laurent22/joplin&utm_content=14430)! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.\n\n<details>\n<summary>❤️ Share</summary>\n\n- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)\n- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)\n- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)\n- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)\n\n</details>\n\n<sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub>\n\n<!-- tips_end -->\n\n<!-- internal state start -->\n\n\n<!-- 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 -->\n\n<!-- internal state end -->",
|
||
"author_association": "CONTRIBUTOR",
|
||
"reactions": {
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3943014781/reactions",
|
||
"total_count": 0,
|
||
"+1": 0,
|
||
"-1": 0,
|
||
"laugh": 0,
|
||
"hooray": 0,
|
||
"confused": 0,
|
||
"heart": 0,
|
||
"rocket": 0,
|
||
"eyes": 0
|
||
},
|
||
"performed_via_github_app": {
|
||
"id": 347564,
|
||
"client_id": "Iv1.6aaafe4fe882736b",
|
||
"slug": "coderabbitai",
|
||
"node_id": "A_kwHOB96YWc4ABU2s",
|
||
"owner": {
|
||
"login": "coderabbitai",
|
||
"id": 132028505,
|
||
"node_id": "O_kgDOB96YWQ",
|
||
"avatar_url": "https://avatars.githubusercontent.com/u/132028505?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/coderabbitai",
|
||
"html_url": "https://github.com/coderabbitai",
|
||
"followers_url": "https://api.github.com/users/coderabbitai/followers",
|
||
"following_url": "https://api.github.com/users/coderabbitai/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/coderabbitai/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/coderabbitai/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/coderabbitai/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/coderabbitai/orgs",
|
||
"repos_url": "https://api.github.com/users/coderabbitai/repos",
|
||
"events_url": "https://api.github.com/users/coderabbitai/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/coderabbitai/received_events",
|
||
"type": "Organization",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"name": "coderabbitai",
|
||
"description": "# Transforming Code Reviews with AI\r\n\r\n## Features\r\n\r\n**Automated Reviews**: Continuous reviews of the pull requests including incremental commits. \r\n\r\n**Summarization**: Generates high-level summary and a technical walkthrough of the PR changes. \r\n\r\n**Line-by-line review**: Provides line-by-line suggestions committable with one click.\r\n\r\n**Codebase verification**: Verifies the impact on the overall codebase and identifies missing changes.\r\n\r\n**Insights into your code**: Ask any questions on your codebase within the pull request \r\n\r\n**Chat about your code** : Chat with the bot around your code. The more you chat, the smarter it gets.\r\n\r\n**Issue Validation**: Validates the PR against the linked issues and identifies other related issues \r\n\r\n\r\n\r\n",
|
||
"external_url": "https://coderabbit.ai?utm_source=cr_app&utm_medium=github",
|
||
"html_url": "https://github.com/apps/coderabbitai",
|
||
"created_at": "2023-06-14T15:47:27Z",
|
||
"updated_at": "2026-03-14T07:58:44Z",
|
||
"permissions": {
|
||
"actions": "read",
|
||
"checks": "write",
|
||
"contents": "write",
|
||
"discussions": "read",
|
||
"issues": "write",
|
||
"members": "read",
|
||
"metadata": "read",
|
||
"pull_requests": "write",
|
||
"statuses": "write"
|
||
},
|
||
"events": [
|
||
"issues",
|
||
"issue_comment",
|
||
"label",
|
||
"organization",
|
||
"pull_request",
|
||
"pull_request_review",
|
||
"pull_request_review_comment",
|
||
"pull_request_review_thread",
|
||
"release",
|
||
"repository"
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3943034037",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14430#issuecomment-3943034037",
|
||
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14430",
|
||
"id": 3943034037,
|
||
"node_id": "IC_kwDOBLftOs7rBey1",
|
||
"user": {
|
||
"login": "Anshv784",
|
||
"id": 170914106,
|
||
"node_id": "U_kgDOCi_xOg",
|
||
"avatar_url": "https://avatars.githubusercontent.com/u/170914106?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/Anshv784",
|
||
"html_url": "https://github.com/Anshv784",
|
||
"followers_url": "https://api.github.com/users/Anshv784/followers",
|
||
"following_url": "https://api.github.com/users/Anshv784/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/Anshv784/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/Anshv784/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/Anshv784/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/Anshv784/orgs",
|
||
"repos_url": "https://api.github.com/users/Anshv784/repos",
|
||
"events_url": "https://api.github.com/users/Anshv784/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/Anshv784/received_events",
|
||
"type": "User",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"created_at": "2026-02-23T07:02:04Z",
|
||
"updated_at": "2026-02-23T07:02:04Z",
|
||
"body": "I have read the CLA Document and I hereby sign the CLA",
|
||
"author_association": "NONE",
|
||
"reactions": {
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3943034037/reactions",
|
||
"total_count": 0,
|
||
"+1": 0,
|
||
"-1": 0,
|
||
"laugh": 0,
|
||
"hooray": 0,
|
||
"confused": 0,
|
||
"heart": 0,
|
||
"rocket": 0,
|
||
"eyes": 0
|
||
},
|
||
"performed_via_github_app": null
|
||
},
|
||
{
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3943486613",
|
||
"html_url": "https://github.com/laurent22/joplin/pull/14430#issuecomment-3943486613",
|
||
"issue_url": "https://api.github.com/repos/laurent22/joplin/issues/14430",
|
||
"id": 3943486613,
|
||
"node_id": "IC_kwDOBLftOs7rDNSV",
|
||
"user": {
|
||
"login": "laurent22",
|
||
"id": 1285584,
|
||
"node_id": "MDQ6VXNlcjEyODU1ODQ=",
|
||
"avatar_url": "https://avatars.githubusercontent.com/u/1285584?v=4",
|
||
"gravatar_id": "",
|
||
"url": "https://api.github.com/users/laurent22",
|
||
"html_url": "https://github.com/laurent22",
|
||
"followers_url": "https://api.github.com/users/laurent22/followers",
|
||
"following_url": "https://api.github.com/users/laurent22/following{/other_user}",
|
||
"gists_url": "https://api.github.com/users/laurent22/gists{/gist_id}",
|
||
"starred_url": "https://api.github.com/users/laurent22/starred{/owner}{/repo}",
|
||
"subscriptions_url": "https://api.github.com/users/laurent22/subscriptions",
|
||
"organizations_url": "https://api.github.com/users/laurent22/orgs",
|
||
"repos_url": "https://api.github.com/users/laurent22/repos",
|
||
"events_url": "https://api.github.com/users/laurent22/events{/privacy}",
|
||
"received_events_url": "https://api.github.com/users/laurent22/received_events",
|
||
"type": "User",
|
||
"user_view_type": "public",
|
||
"site_admin": false
|
||
},
|
||
"created_at": "2026-02-23T09:03:28Z",
|
||
"updated_at": "2026-02-23T09:03:28Z",
|
||
"body": "Thanks for the submission.\r\n\r\nWe’re closing this PR because it is too large in scope for the GSoC application phase. At this stage, we expect small, focused contributions (bug fixes or limited features) so we can properly assess your skills and approach.\r\n\r\nPRs that attempt to tackle broad or complex changes are not appropriate for this phase and are unlikely to be reviewed.",
|
||
"author_association": "OWNER",
|
||
"reactions": {
|
||
"url": "https://api.github.com/repos/laurent22/joplin/issues/comments/3943486613/reactions",
|
||
"total_count": 0,
|
||
"+1": 0,
|
||
"-1": 0,
|
||
"laugh": 0,
|
||
"hooray": 0,
|
||
"confused": 0,
|
||
"heart": 0,
|
||
"rocket": 0,
|
||
"eyes": 0
|
||
},
|
||
"performed_via_github_app": null
|
||
}
|
||
]
|
||
} |