vercel-labs/agent-desktop
Computer use CLI for AI agents
Rust★ 10,513+2,275 that day#1 on trending
C68.8/100
Duplication65
5.3% in rust, powershell, python, csharp, bash, javascript, objectivec, c-header, swift, c, tsx, typescriptDead code82
2.1%Complexity72
23.6% The score is jscpd's own --health model: markup, data and text left out, tests kept. The numbers below are the trending scan's.
5.66%duplicated code · 23,021 of 406,813 lines
2,026clones in code
2,668code files of 3,372 scanned
7.27%duplicated over all files · 2,502 clones
Most complex files
- probes/windows/26-shell-surfaces/shell-probe.cs454 cx
- probes/windows/scratch/run-capture-clipboard-dogfood.ps1269 cx
- probes/windows/common.ps1253 cx
- probes/windows/scratch/run-semantic-dogfood.ps1250 cx
- probes/windows/08-uia3-com.cs242 cx
- probes/windows/scratch/run-actionability-dogfood.ps1215 cx
- scripts/check_architecture.py204 cx
- tests/e2e-linux/scenarios/ref_contract.py198 cx
- probes/windows/scratch/run-input-dogfood.ps1195 cx
- probes/windows/01-tree-dump.ps1181 cx
Dead code 2.11% unused · 11 findings
- crates/core/src/trace/trace_read/viewer.jsunused-file
- src/visual_debug/viewer.jsunused-file
- crates/linux/src/system/close/close_live/owners.pyunused-file
- src/visual_debug/viewer_filter.jsunused-file
- apps/docs/lib/utils.tsunused-file
- apps/docs/lib/geistdocs/i18n.ts:i18nProviderunused-export
- scripts/linux-live-gate.py:CLI_WAYLANDunused-import
- scripts/linux-live-gate.py:CURSOR_WAYLANDunused-import
- apps/docs/lib/geistdocs/site-url.ts:isSiteUrlConfiguredunused-export
- apps/docs/lib/geistdocs/source.ts:getPageImageunused-export
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code, and 1 generated file: scripts/check-rust-file-size.sh.
Largest clones in the code
- 15 lines in 10 placesrust87 tokenscrates/core/src/commands/check.rs:1–15crates/core/src/commands/clear.rs:1–15crates/core/src/commands/click.rs:1–15crates/core/src/commands/collapse.rs:1–18crates/core/src/commands/expand.rs:1–15and 5 more
1use crate::{ 2 AppError, 3 actions::action::Action, 4 adapter::PlatformAdapter, 5 commands::helpers::{RefArgs, execute_ref_action_with_context}, 6 context::CommandContext, 7}; 8use serde_json::Value; 9 10pub fn execute(First 10 of 15 lines.
- 16 lines in 7 placespowershell114 tokensprobes/windows/14-ci-capability/probe.ps1:50–65probes/windows/15-vocabulary/probe.ps1:55–70probes/windows/16-observation/probe.ps1:62–77probes/windows/17-resolution/probe.ps1:59–74probes/windows/18-actionability/probe.ps1:47–62and 2 more
50function Write-CapabilityCapture { 51 param( 52 [Parameter(Mandatory = $true)][string]$Name, 53 [Parameter(Mandatory = $true)][AllowEmptyString()][string]$Content 54 ) 55 $redacted = Protect-ProbeText -Text $Content 56 $path = Join-Path $script:CaptureDir $Name 57 $utf8NoBom = New-Object System.Text.UTF8Encoding $false 58 [IO.File]::WriteAllText($path, $redacted, $utf8NoBom) 59 if (-not (Test-CaptureRedaction -Path $path)) {First 10 of 16 lines.
- 11 lines in 7 placespowershell104 tokensprobes/windows/22-capture-clipboard/measure-cost.ps1:27–37probes/windows/22-capture-clipboard/probe.ps1:53–65probes/windows/23-signals-menus/measure-cost.ps1:44–56probes/windows/23-signals-menus/probe-root-classify.ps1:68–80probes/windows/23-signals-menus/probe.ps1:58–70and 2 more
27 $redacted = Protect-ProbeText -Text $Content 28 $path = Join-Path $script:CaptureDir $Name 29 $utf8NoBom = New-Object System.Text.UTF8Encoding $false 30 [IO.File]::WriteAllText($path, $redacted, $utf8NoBom) 31 $normalized = Get-NormalizedCapture -Text $redacted 32 [IO.File]::WriteAllText(($path + '.normalized'), $normalized, $utf8NoBom) 33 if (-not (Test-CaptureRedaction -Path $path)) { throw "redaction residue in $path" } 34 return $path 35} 3653$redacted = Protect-ProbeText -Text $Content 54$path = Join-Path $script:CaptureDir $Name 55$utf8NoBom = New-Object System.Text.UTF8Encoding $false 56[IO.File]::WriteAllText($path, $redacted, $utf8NoBom) 57$normalized = Get-NormalizedCapture -Text $redacted 58[IO.File]::WriteAllText(($path + '.normalized'), $normalized, $utf8NoBom) 59if (-not (Test-CaptureRedaction -Path $path)) { 60 throw "redaction residue in $path" 61} 62return $pathFirst 10 of 11 lines, the second copy on the right.
7 more
- 15 lines in 8 placesrust87 tokenscrates/core/src/commands/wait_resolution_tests.rs:109–123crates/core/src/ref_action/ref_action_exactly_once_tests.rs:200–214crates/core/src/ref_action/ref_action_tests.rs:201–215crates/core/src/ref_action/ref_action_wait_app_not_found_tests.rs:16–30crates/core/src/ref_action/ref_action_wait_process_state_tests.rs:19–33and 3 more
- 12 lines in 10 placesrust67 tokenscrates/core/src/ref_action/ref_action_wait_app_not_found_tests.rs:84–95crates/core/src/ref_action/ref_action_wait_app_not_found_tests.rs:123–134crates/core/src/ref_action/ref_action_wait_app_not_found_tests.rs:199–210crates/core/src/ref_action/ref_action_wait_lease_tests.rs:86–97crates/core/src/ref_action/ref_action_wait_process_state_tests.rs:87–98and 5 more
- 18 lines in 5 placespowershell150 tokensprobes/windows/24-fixture-e2e/01-fixture-toolchain.ps1:78–95probes/windows/24-fixture-e2e/04-explorer-below-fold.ps1:87–104probes/windows/24-fixture-e2e/06-cell-role-provider.ps1:76–93probes/windows/24-fixture-e2e/09-cell-role-stock-dgv.ps1:64–81probes/windows/24-fixture-e2e/10-hosted-modern-capture.ps1:58–75
- 9 lines in 7 placespowershell91 tokens
- 14 lines in 7 placesrust81 tokenscrates/core/src/ref_action/presentation_lease_tests.rs:22–35crates/core/src/ref_action/presentation_shared_cursor_tests.rs:40–53crates/core/src/ref_action/ref_action_tests.rs:108–121crates/core/src/ref_action/ref_action_tests.rs:154–167crates/core/src/ref_action/ref_action_wait_success_tests.rs:61–74and 2 more
- 66 lines in 2 placespowershell482 tokens
- 20 lines in 4 placespowershell151 tokens
Largest clones over all files, tests and data included
- 1360 lines in 2 placesjsondata files3,724 tokensprobes/windows/15-vocabulary/captures/uia-vocabulary-wpf-ci.json:56–1415probes/windows/15-vocabulary/captures/uia-vocabulary-wpf-devbox.json:56–1415
56 "read_median_micros": 3978, 57 "repeats": 7, 58 "successful_reads": 3482 59 }, 60 "note": "min is the least noise-sensitive estimator; the spread is reported so a claim can be checked against it", 61 "warmed_up": true 62 }, 63"cached_labeled_by": { 64 "cached_nodes": 81, 65 "labelled_nodes": 2,First 10 of 1360 lines.
- 53 lines in 4 placesmarkupmarkup981 tokens.agents/skills/architecture-diagram/references/template.html:6–58apps/docs/public/desktop/diagrams/architecture/index.html:6–58apps/docs/public/desktop/diagrams/ref-resolution/index.html:6–58apps/docs/public/desktop/diagrams/snapshot-loop/index.html:6–58
6<title>Diagram name</title> 7<script> 8 var t = new URLSearchParams(location.search).get("theme"); 9 if (t === "light" || t === "dark") document.documentElement.setAttribute("data-theme", t); 10 if (window.self === window.top) document.documentElement.setAttribute("data-top", ""); 11</script> 12<style> 13 :root { 14 color-scheme: dark; 15 --bg: #000; --panel: #0a0a0a; --node: #111; --border: #5c5c5c;First 10 of 53 lines.
- 748 lines in 2 placesjsondata files2,421 tokensprobes/windows/19-semantic-actions/captures/semantic-set-ci.json:1–748probes/windows/19-semantic-actions/captures/semantic-set-devbox.json:1–748
1{ 2 "winforms": { 3 "ExpandCollapse": { 4 "automation_id_digest": "fe622ad1c908a3ce", 5 "call": { 6 "before": { 7 "ok": true, 8 "state": "Collapsed" 9 }, 10 "collapse": {First 10 of 748 lines.
- 642 lines in 2 placesjsondata files1,746 tokens
- 293 lines in 2 placesjsondata files931 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| rust | 2,502 | 352,942 | 1,617 | 18,084 | 5.12% |
| powershell | 86 | 35,249 | 380 | 4,579 | 12.99% |
| csharp | 8 | 5,471 | 20 | 292 | 5.34% |
| c-header | 2 | 2,318 | 7 | 51 | 2.2% |
| c | 5 | 95 | 2 | 15 | 15.79% |
| javascript | 17 | 3,013 | 0 | 0 | 0% |
| bash | 26 | 2,771 | 0 | 0 | 0% |
| python | 13 | 2,528 | 0 | 0 | 0% |
| objectivec | 9 | 2,426 | 0 | 0 | 0% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| rust | 2,593 | 366,842 | 1,701 | 18,862 | 5.14% |
| powershell | 139 | 44,842 | 415 | 4,901 | 10.93% |
| json | 156 | 29,054 | 284 | 11,646 | 40.08% |
| python | 164 | 22,419 | 27 | 261 | 1.16% |
| yaml | 29 | 2,868 | 26 | 509 | 17.75% |
| csharp | 27 | 7,621 | 20 | 292 | 3.83% |
| markup | 8 | 643 | 10 | 240 | 37.33% |
| javascript | 32 | 5,717 | 9 | 96 | 1.68% |
| c-header | 2 | 2,318 | 7 | 51 | 2.2% |
| c | 8 | 929 | 2 | 15 | 1.61% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Nov 3, 2026 | #1 | 10,513 (+2,275) | 3,372 | 507,501 | 2,502 | 7.27% | 5.66% | C 68.8 | d3dc190 |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.