Leaderboard github.com
dougwithseismic/claude-does-apoc
Android Phone Orchestration & Control - Built entirely by Claude
AI provenance
0%
possible
- Confidence
- 47%
- Coverage
- 100%
Estimated share of AI-generated code. Explicit attribution is a lower bound.
Code quality
74/100
adequate
- Confidence
- 90%
- Coverage
- 100%
Complexity, duplication, lint density, tests, CI, docs and review process.
Security
59/100
weak
- Confidence
- 85%
- Coverage
- 100%
Secrets, static analysis, vulnerable dependencies, CI and supply-chain posture.
AI provenance
0% possible
Weak signals consistent with AI-assisted development.
How the score is built
- Explicitly attributed share0%
- Unattributed share in AI-pace bursts82%
- Estimated AI-generated share0%
- AI tool configuration files1
- Work sessions at AI pace4
- Releases at AI pacenot measured
- Coding-style index (1.0+ means possible)0.13
Lines added per month all AI-attributed share
- 2025-1252,291 · 0% AI
Evidence by analyzer
Explicit AI attributionok
- attributed_commit_share
- 0.0%
- attributed_commits
- 0
- attributed_loc
- 0
- attributed_loc_share
- 0.0%
- commits
- 28
- effective_loc
- 52,291
- tools_detected
- 0
AI tool configurationok1 item
- artifacts
- 1
- earliest_adoption
- 2025-12-16
- tools_configured
- 1
- workflow_agents
- 0
Commit velocityok4 items
- 7,380 lines of first-party code in ~1.4h (5,269 lines/hour, 3 commit session)
- 5,428 lines of first-party code in ~1.3h (4,324 lines/hour, 4 commit session)
- 23,510 lines of first-party code in ~7.2h (3,243 lines/hour, 10 commit session)
- 6,811 lines of first-party code in ~5.9h (1,161 lines/hour, 7 commit session)
- excluded_import_loc
- 9,162
- flagged_loc
- 43,129
- flagged_loc_share
- 100.0%
- flagged_units
- 4
- max_loc_per_hour
- 5,269.34
- measured_loc
- 43,129
- median_loc_per_hour
- 3,783.76
- pr_timed_units
- 0
- pre_ai_era_burst_loc
- 0
- pre_ai_era_bursts
- 0
- pre_ai_era_measured_loc
- 0
- work_units
- 4
Release velocityskipped
Coding styleok3 items
- step-by-step narration comment: // First, try to find by serial
- step-by-step narration comment: // Then, try to find by nickname
- step-by-step narration comment: // First, handle escaped variables by temporarily replacing them
- count:assistant_voice
- 0
- count:emoji_in_code
- 0
- count:narrated_steps
- 3
- count:placeholder
- 0
- files:assistant_voice
- 0
- files:emoji_in_code
- 0
- files:narrated_steps
- 2
- files:placeholder
- 0
- index
- 0.13
- lines_scanned
- 22,630
- per_kloc:assistant_voice
- 0
- per_kloc:emoji_in_code
- 0
- per_kloc:narrated_steps
- 0.13
- per_kloc:placeholder
- 0
Code quality
74 adequate
Code quality is adequate: test-to-source ratio 1.29, no CI test run detected; 8% of function code in complex or long functions; 4% duplicated lines. Weakest area: testing.
How the score is built
- Complexity78
- Duplication80
- Lint and smells95
- Tests and CI55
- Documentation65
- Type safety100
- Review processnot measured
Evidence by analyzer
Complexity (lizard)ok9 items
- matchesSelector in packages/automation/src/ui/selector.ts: complexity 34, 70 lines
- TouchCanvas in packages/ui/src/components/TouchCanvas/TouchCanvas.tsx: complexity 25, 153 lines
- matchesCriteria in packages/core/src/pool/manager.ts: complexity 18, 42 lines
- DeviceStream in packages/ui/src/components/DeviceStream/DeviceStream.tsx: complexity 18, 115 lines
- parseDisplayInfo in packages/core/src/shell/screen-capture.ts: complexity 17, 45 lines
- validateStep in packages/workflow/src/parser/yaml-parser.ts: complexity 17, 54 lines
- parseLogcatLine in packages/core/src/shell/logcat.ts: complexity 16, 58 lines
- KeyboardOverlay in packages/ui/src/components/KeyboardOverlay/KeyboardOverlay.tsx: complexity 13, 130 lines
- Dashboard in packages/ui/src/pages/Dashboard.tsx: complexity 10, 155 lines
- complex_functions
- 7
- function_nloc
- 9,718
- functions
- 887
- long_functions
- 4
- many_param_functions
- 0
- mean_ccn
- 2.58
- p90_ccn
- 6
- risky_nloc_share
- 8.5%
Duplication (jscpd)ok10 items
- 6+ duplicated lines: packages/automation/tsup.config.ts:5 and packages/cli/tsup.config.ts:5
- 6+ duplicated lines: packages/cli/src/cli.ts:100 and packages/cli/src/cli.ts:139
- 6+ duplicated lines: packages/cli/src/commands/workflow.ts:129 and packages/cli/src/commands/workflow.ts:217
- 6+ duplicated lines: packages/cli/src/utils/device.ts:26 and packages/server/src/routes/devices.ts:38
- 6+ duplicated lines: packages/core/src/adb/binary.ts:45 and packages/core/src/adb/server.ts:45
- 6+ duplicated lines: packages/core/src/device/device.ts:89 and packages/core/src/device/device.ts:186
- 6+ duplicated lines: packages/server/src/routes/devices.ts:41 and packages/ui/src/utils/api.ts:17
- 6+ duplicated lines: packages/server/src/routes/devices.ts:72 and packages/server/src/routes/touch.ts:52
- 6+ duplicated lines: packages/server/src/routes/streaming.ts:151 and packages/server/src/routes/streaming.ts:232
- 6+ duplicated lines: packages/server/src/routes/streaming.ts:438 and packages/server/src/routes/touch.ts:259
- compared_lines
- 14,927
- duplicated_lines
- 545
- duplicated_share
- 3.6%
- files
- 118
Lintok
- category:best-practice
- 2
- category:correctness
- 10
- findings
- 12
- scanned_lines
- 22,630
- weighted_findings
- 4.50
Tests and CIok
- check:ci_present
- no
- check:ci_runs_lint
- no
- check:ci_runs_tests
- no
- check:has_tests
- yes
- check:test_ratio
- yes
- check:tests_cochange
- yes
- ci_files
- 0
- cochange_commits
- 25
- cochange_share
- 84.0%
- source_lines
- 22,630
- test_lines
- 29,202
- test_ratio
- 1.29
Documentationok2 items
- README.md
README.md - LICENSE
LICENSE
- check:changelog
- no
- check:contributing
- no
- check:license
- yes
- check:readme
- yes
- readme_lines
- 394
Type safetyok1 item
- TypeScript strict type checking: tsconfig.base.json
tsconfig.base.json
- check:low_escape_density
- yes
- check:strict_config
- yes
- escapes
- 0
- escapes_per_kloc
- 0
Security
59 weak
Security posture is weak: 108 known vulnerabilities in 30 dependencies. Weakest area: posture.
How the score is built
- Secrets97
- Static analysis (SAST)99
- Vulnerable dependencies2
- CI workflowsnot measured
- Security posture0
- OpenSSF Scorecardnot measured
Evidence by analyzer
OpenSSF Scorecardskipped
no published OpenSSF Scorecard result for this repo
Package registriesok
- checked
- 42
- declared
- 42
- lookup_errors
- 0
- missing
- 0
- recent
- 0
Secrets (gitleaks)ok
- secrets_current
- 0
- secrets_history
- 0
- secrets_low_confidence
- 0
- secrets_nonprod
- 1
Static analysis (opengrep)ok
- findings
- 4
- findings_high
- 0
- findings_low
- 2
- findings_medium
- 2
- parse_errors
- 2
- scanned_lines
- 22,630
- weighted_findings
- 0.62
Dependencies (osv-scanner)ok
- penalty
- 224
- vulnerabilities
- 108
- vulnerable_packages
- 30
- vulns_critical
- 3
- vulns_high
- 68
- vulns_low
- 5
- vulns_medium
- 32
- vulns_unknown
- 0
CI workflows (zizmor)skipped
Security postureok6 items
- packages/automation/package.json has no lockfile alongside it (unpinned dependencies)
packages/automation/package.json - packages/cli/package.json has no lockfile alongside it (unpinned dependencies)
packages/cli/package.json - packages/core/package.json has no lockfile alongside it (unpinned dependencies)
packages/core/package.json - packages/server/package.json has no lockfile alongside it (unpinned dependencies)
packages/server/package.json - packages/ui/package.json has no lockfile alongside it (unpinned dependencies)
packages/ui/package.json - packages/workflow/package.json has no lockfile alongside it (unpinned dependencies)
packages/workflow/package.json
- check:dependency_updates
- no
- check:lockfiles
- no
- check:security_policy
- no
- check:signed_commits
- no
- signed_commit_share
- 0.0%
- unpinned_manifests
- 6
Release downloadsok1 item
- gives an archive password
README.md
- binary_assets
- 0
- signals
- 1
- suspicious
- 0
Findings
3 critical68 high36 medium18 low
| Severity | Rule | Location | Message | Tool |
|---|---|---|---|---|
| critical | osv/GHSA-3qcw-2rhx-2726 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-3qcw-2rhx-2726 | Dependencies (osv-scanner) |
| critical | osv/GHSA-5xrq-8626-4rwp |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-5xrq-8626-4rwp | Dependencies (osv-scanner) |
| critical | osv/GHSA-w7jw-789q-3m8p |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-w7jw-789q-3m8p | Dependencies (osv-scanner) |
| high | osv/GHSA-23c5-xmqv-rm74 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-23c5-xmqv-rm74 | Dependencies (osv-scanner) |
| high | osv/GHSA-23c5-xmqv-rm74 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-23c5-xmqv-rm74 | Dependencies (osv-scanner) |
| high | osv/GHSA-247c-9743-5963 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-247c-9743-5963 | Dependencies (osv-scanner) |
| high | osv/GHSA-25h7-pfq9-p65f |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-25h7-pfq9-p65f | Dependencies (osv-scanner) |
| high | osv/GHSA-27p8-2357-5qqv |
pnpm-lock.yaml | @xmldom/[email protected] (npm) is affected by GHSA-27p8-2357-5qqv | Dependencies (osv-scanner) |
| high | osv/GHSA-2883-xcg3-v3hh |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-2883-xcg3-v3hh | Dependencies (osv-scanner) |
| high | osv/GHSA-28wg-ghj8-5hjv |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-28wg-ghj8-5hjv | Dependencies (osv-scanner) |
| high | osv/GHSA-2v35-w6hq-6mfw |
pnpm-lock.yaml | @xmldom/[email protected] (npm) is affected by GHSA-2v35-w6hq-6mfw | Dependencies (osv-scanner) |
| high | osv/GHSA-2v37-7h3g-55p8 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-2v37-7h3g-55p8 | Dependencies (osv-scanner) |
| high | osv/GHSA-395f-4hp3-45gv |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-395f-4hp3-45gv | Dependencies (osv-scanner) |
| high | osv/GHSA-3jxr-9vmj-r5cp |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-3jxr-9vmj-r5cp | Dependencies (osv-scanner) |
| high | osv/GHSA-3jxr-9vmj-r5cp |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-3jxr-9vmj-r5cp | Dependencies (osv-scanner) |
| high | osv/GHSA-3ppc-4f35-3m26 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-3ppc-4f35-3m26 | Dependencies (osv-scanner) |
| high | osv/GHSA-3ppc-4f35-3m26 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-3ppc-4f35-3m26 | Dependencies (osv-scanner) |
| high | osv/GHSA-4c8g-83qw-93j6 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-4c8g-83qw-93j6 | Dependencies (osv-scanner) |
| high | osv/GHSA-4w3w-2rp5-g8jm |
pnpm-lock.yaml | @xmldom/[email protected] (npm) is affected by GHSA-4w3w-2rp5-g8jm | Dependencies (osv-scanner) |
| high | osv/GHSA-52cp-r559-cp3m |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-52cp-r559-cp3m | Dependencies (osv-scanner) |
| high | osv/GHSA-587h-7wmj-h5pm |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-587h-7wmj-h5pm | Dependencies (osv-scanner) |
| high | osv/GHSA-5p4m-2wfm-xmqj |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-5p4m-2wfm-xmqj | Dependencies (osv-scanner) |
| high | osv/GHSA-667r-xxjv-c9mm |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-667r-xxjv-c9mm | Dependencies (osv-scanner) |
| high | osv/GHSA-68fv-2mgg-jv7q |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-68fv-2mgg-jv7q | Dependencies (osv-scanner) |
| high | osv/GHSA-6g55-p6wh-862q |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-6g55-p6wh-862q | Dependencies (osv-scanner) |
| high | osv/GHSA-6j4f-fj2g-mc7p |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-6j4f-fj2g-mc7p | Dependencies (osv-scanner) |
| high | osv/GHSA-6j4f-fj2g-mc7p |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-6j4f-fj2g-mc7p | Dependencies (osv-scanner) |
| high | osv/GHSA-73wf-gq98-2v4g |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-73wf-gq98-2v4g | Dependencies (osv-scanner) |
| high | osv/GHSA-7p8r-x3mc-p8w7 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-7p8r-x3mc-p8w7 | Dependencies (osv-scanner) |
| high | osv/GHSA-7r86-cg39-jmmj |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-7r86-cg39-jmmj | Dependencies (osv-scanner) |
| high | osv/GHSA-7r86-cg39-jmmj |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-7r86-cg39-jmmj | Dependencies (osv-scanner) |
| high | osv/GHSA-8344-3jmq-59r6 |
pnpm-lock.yaml | @xmldom/[email protected] (npm) is affected by GHSA-8344-3jmq-59r6 | Dependencies (osv-scanner) |
| high | osv/GHSA-93r5-fhx6-vmg9 |
pnpm-lock.yaml | @xmldom/[email protected] (npm) is affected by GHSA-93r5-fhx6-vmg9 | Dependencies (osv-scanner) |
| high | osv/GHSA-965w-775f-mr7g |
pnpm-lock.yaml | @xmldom/[email protected] (npm) is affected by GHSA-965w-775f-mr7g | Dependencies (osv-scanner) |
| high | osv/GHSA-96hv-2xvq-fx4p |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-96hv-2xvq-fx4p | Dependencies (osv-scanner) |
| high | osv/GHSA-9q9j-q6p8-xq58 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-9q9j-q6p8-xq58 | Dependencies (osv-scanner) |
| high | osv/GHSA-c2c7-rcm5-vvqj |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-c2c7-rcm5-vvqj | Dependencies (osv-scanner) |
| high | osv/GHSA-c7q8-3ch8-vqpv |
pnpm-lock.yaml | @xmldom/[email protected] (npm) is affected by GHSA-c7q8-3ch8-vqpv | Dependencies (osv-scanner) |
| high | osv/GHSA-c83g-rgw3-j3cx |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-c83g-rgw3-j3cx | Dependencies (osv-scanner) |
| high | osv/GHSA-c96f-x56v-gq3h |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-c96f-x56v-gq3h | Dependencies (osv-scanner) |
| high | osv/GHSA-f65p-4m7j-42xc |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-f65p-4m7j-42xc | Dependencies (osv-scanner) |
| high | osv/GHSA-f6ww-3ggp-fr8h |
pnpm-lock.yaml | @xmldom/[email protected] (npm) is affected by GHSA-f6ww-3ggp-fr8h | Dependencies (osv-scanner) |
| high | osv/GHSA-f88m-g3jw-g9cj |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-f88m-g3jw-g9cj | Dependencies (osv-scanner) |
| high | osv/GHSA-hwr6-493r-vm6h |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-hwr6-493r-vm6h | Dependencies (osv-scanner) |
| high | osv/GHSA-j759-j44w-7fr8 |
pnpm-lock.yaml | @xmldom/[email protected] (npm) is affected by GHSA-j759-j44w-7fr8 | Dependencies (osv-scanner) |
| high | osv/GHSA-jqff-g426-hqxp |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-jqff-g426-hqxp | Dependencies (osv-scanner) |
| high | osv/GHSA-jx2c-rxcm-jvmq |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-jx2c-rxcm-jvmq | Dependencies (osv-scanner) |
| high | osv/GHSA-mh99-v99m-4gvg |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-mh99-v99m-4gvg | Dependencies (osv-scanner) |
| high | osv/GHSA-mh99-v99m-4gvg |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-mh99-v99m-4gvg | Dependencies (osv-scanner) |
| high | osv/GHSA-mrhx-c7xc-m3w5 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-mrhx-c7xc-m3w5 | Dependencies (osv-scanner) |
| high | osv/GHSA-mw96-cpmx-2vgc |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-mw96-cpmx-2vgc | Dependencies (osv-scanner) |
| high | osv/GHSA-p68q-wchp-6fh7 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-p68q-wchp-6fh7 | Dependencies (osv-scanner) |
| high | osv/GHSA-p9ff-h696-f583 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-p9ff-h696-f583 | Dependencies (osv-scanner) |
| high | osv/GHSA-q3j6-qgpj-74h6 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-q3j6-qgpj-74h6 | Dependencies (osv-scanner) |
| high | osv/GHSA-qhr7-859c-m2p7 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-qhr7-859c-m2p7 | Dependencies (osv-scanner) |
| high | osv/GHSA-qhr7-859c-m2p7 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-qhr7-859c-m2p7 | Dependencies (osv-scanner) |
| high | osv/GHSA-qw65-cvwx-89v3 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-qw65-cvwx-89v3 | Dependencies (osv-scanner) |
| high | osv/GHSA-r28c-9q8g-f849 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-r28c-9q8g-f849 | Dependencies (osv-scanner) |
| high | osv/GHSA-rf6f-7fwh-wjgh |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-rf6f-7fwh-wjgh | Dependencies (osv-scanner) |
| high | osv/GHSA-rgj7-g3m4-5g8c |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-rgj7-g3m4-5g8c | Dependencies (osv-scanner) |
| high | osv/GHSA-rgw5-rvv9-x895 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-rgw5-rvv9-x895 | Dependencies (osv-scanner) |
| high | osv/GHSA-rgw5-rvv9-x895 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-rgw5-rvv9-x895 | Dependencies (osv-scanner) |
| high | osv/GHSA-v2hh-gcrm-f6hx |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-v2hh-gcrm-f6hx | Dependencies (osv-scanner) |
| high | osv/GHSA-v2wj-q39q-566r |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-v2wj-q39q-566r | Dependencies (osv-scanner) |
| high | osv/GHSA-v39h-62p7-jpjc |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-v39h-62p7-jpjc | Dependencies (osv-scanner) |
| high | osv/GHSA-w2rr-34g9-rvrj |
pnpm-lock.yaml | @xmldom/[email protected] (npm) is affected by GHSA-w2rr-34g9-rvrj | Dependencies (osv-scanner) |
| high | osv/GHSA-wh4c-j3r5-mjhp |
pnpm-lock.yaml | @xmldom/[email protected] (npm) is affected by GHSA-wh4c-j3r5-mjhp | Dependencies (osv-scanner) |
| high | osv/GHSA-wq5f-xc86-pv6w |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-wq5f-xc86-pv6w | Dependencies (osv-scanner) |
| high | osv/GHSA-x4fp-j954-r2f4 |
pnpm-lock.yaml | @xmldom/[email protected] (npm) is affected by GHSA-x4fp-j954-r2f4 | Dependencies (osv-scanner) |
| high | osv/GHSA-x6wf-f3px-wcqx |
pnpm-lock.yaml | @xmldom/[email protected] (npm) is affected by GHSA-x6wf-f3px-wcqx | Dependencies (osv-scanner) |
| high | osv/GHSA-xwg4-73v4-xw9w |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-xwg4-73v4-xw9w | Dependencies (osv-scanner) |
| medium | opengrep/typescript.react.best-practice.react-props-spreading |
packages/ui/src/components/DeviceList/DeviceList.tsx:320 | It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious... | Lint |
| medium | opengrep/typescript.react.best-practice.react-props-spreading |
packages/ui/src/components/DeviceList/DeviceList.tsx:347 | It's best practice to explicitly pass props to an HTML component rather than use the spread operator. The spread operator risks passing invalid HTML props to an HTML element, which can cause console warnings or worse, give malicious... | Lint |
| medium | opengrep/javascript.lang.security.audit.prototype-pollution.prototype-pollution-loop |
packages/workflow/src/parser/interpolator.ts:48 | Possibility of prototype polluting function detected. By adding or modifying attributes of an object prototype, it is possible to create attributes that exist on every object, or replace critical attributes with malicious ones. This can... | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.security.audit.detect-redos |
packages/workflow/src/parser/yaml-parser.ts:122 | Detected the use of a regular expression `^\d+\.\d+\.\d+(?:-[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*)?(?:\+[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*)?$` which appears to be vulnerable to a Regular expression Denial-of-Service (ReDoS). For this reason, it... | Static analysis (opengrep) |
| medium | osv/GHSA-2g4f-4pwh-qvx6 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-2g4f-4pwh-qvx6 | Dependencies (osv-scanner) |
| medium | osv/GHSA-2g4f-4pwh-qvx6 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-2g4f-4pwh-qvx6 | Dependencies (osv-scanner) |
| medium | osv/GHSA-3v7f-55p6-f55p |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-3v7f-55p6-f55p | Dependencies (osv-scanner) |
| medium | osv/GHSA-444r-cwp2-x5xf |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-444r-cwp2-x5xf | Dependencies (osv-scanner) |
| medium | osv/GHSA-48c2-rrv3-qjmp |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-48c2-rrv3-qjmp | Dependencies (osv-scanner) |
| medium | osv/GHSA-4mh8-r7rc-xpvc |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-4mh8-r7rc-xpvc | Dependencies (osv-scanner) |
| medium | osv/GHSA-4w7w-66w2-5vf9 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-4w7w-66w2-5vf9 | Dependencies (osv-scanner) |
| medium | osv/GHSA-58qx-3vcg-4xpx |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-58qx-3vcg-4xpx | Dependencies (osv-scanner) |
| medium | osv/GHSA-698v-4r3x-3vcv |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-698v-4r3x-3vcv | Dependencies (osv-scanner) |
| medium | osv/GHSA-6gmq-8vp8-gcm6 |
pnpm-lock.yaml | @xmldom/[email protected] (npm) is affected by GHSA-6gmq-8vp8-gcm6 | Dependencies (osv-scanner) |
| medium | osv/GHSA-6h8r-xr42-gp59 |
pnpm-lock.yaml | @xmldom/[email protected] (npm) is affected by GHSA-6h8r-xr42-gp59 | Dependencies (osv-scanner) |
| medium | osv/GHSA-82fw-gwwq-j7x9 |
pnpm-lock.yaml | @vitest/[email protected] (npm) is affected by GHSA-82fw-gwwq-j7x9 | Dependencies (osv-scanner) |
| medium | osv/GHSA-82fw-gwwq-j7x9 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-82fw-gwwq-j7x9 | Dependencies (osv-scanner) |
| medium | osv/GHSA-f886-m6hf-6m8v |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-f886-m6hf-6m8v | Dependencies (osv-scanner) |
| medium | osv/GHSA-f886-m6hf-6m8v |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-f886-m6hf-6m8v | Dependencies (osv-scanner) |
| medium | osv/GHSA-fx2h-pf6j-xcff |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-fx2h-pf6j-xcff | Dependencies (osv-scanner) |
| medium | osv/GHSA-fxqj-rqcc-2cmp |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-fxqj-rqcc-2cmp | Dependencies (osv-scanner) |
| medium | osv/GHSA-g3hv-75wg-m249 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-g3hv-75wg-m249 | Dependencies (osv-scanner) |
| medium | osv/GHSA-h67p-54hq-rp68 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-h67p-54hq-rp68 | Dependencies (osv-scanner) |
| medium | osv/GHSA-hcf7-66rw-9f5r |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-hcf7-66rw-9f5r | Dependencies (osv-scanner) |
| medium | osv/GHSA-hrr3-gc8f-f4qj |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-hrr3-gc8f-f4qj | Dependencies (osv-scanner) |
| medium | osv/GHSA-p498-v437-472g |
pnpm-lock.yaml | @humanfs/[email protected] (npm) is affected by GHSA-p498-v437-472g | Dependencies (osv-scanner) |
| medium | osv/GHSA-q2hr-2g5m-vwhr |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-q2hr-2g5m-vwhr | Dependencies (osv-scanner) |
| medium | osv/GHSA-q2hr-2g5m-vwhr |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-q2hr-2g5m-vwhr | Dependencies (osv-scanner) |
| medium | osv/GHSA-qx2v-qp2m-jg93 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-qx2v-qp2m-jg93 | Dependencies (osv-scanner) |
| medium | osv/GHSA-qxg6-89mg-rqv8 |
pnpm-lock.yaml | @vitest/[email protected] (npm) is affected by GHSA-qxg6-89mg-rqv8 | Dependencies (osv-scanner) |
| medium | osv/GHSA-r825-w8mm-5pxw |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-r825-w8mm-5pxw | Dependencies (osv-scanner) |
| medium | osv/GHSA-rq7h-c2jc-7f22 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-rq7h-c2jc-7f22 | Dependencies (osv-scanner) |
| medium | osv/GHSA-v6wh-96g9-6wx3 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-v6wh-96g9-6wx3 | Dependencies (osv-scanner) |
| medium | osv/GHSA-w2qp-rph6-63g4 |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-w2qp-rph6-63g4 | Dependencies (osv-scanner) |
| medium | osv/GHSA-w5vr-8v7q-w6rv |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-w5vr-8v7q-w6rv | Dependencies (osv-scanner) |
| medium | osv/GHSA-w74x-v6f9-j3xg |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-w74x-v6f9-j3xg | Dependencies (osv-scanner) |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
packages/ui/src/components/DeviceList/DeviceList.tsx:274 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
packages/ui/src/components/DeviceList/DeviceList.tsx:274 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
packages/ui/src/components/DeviceStream/DeviceStream.tsx:262 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
packages/ui/src/components/DeviceStream/DeviceStream.tsx:262 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
packages/ui/src/pages/Dashboard.tsx:317 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
packages/ui/src/pages/Dashboard.tsx:317 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
packages/ui/src/pages/Dashboard.tsx:352 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
packages/ui/src/pages/Dashboard.tsx:352 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
packages/ui/src/pages/Dashboard.tsx:520 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | opengrep/javascript.lang.correctness.missing-template-string-indicator |
packages/ui/src/pages/Dashboard.tsx:520 | This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? | Lint |
| low | gitleaks/curl-auth-header |
README.md:394 | Possible curl-auth-header secret in the current tree (test/docs/example file) | Secrets (gitleaks) |
| low | opengrep/javascript.lang.security.audit.unsafe-formatstring |
packages/server/src/streaming/scrcpy-stream-manager.ts:652 | Detected string concatenation with a non-literal variable in a util.format / console.log function. If an attacker injects a format specifier in the string, it will forge the log message. Try to use constant values for the format string.... | Static analysis (opengrep) |
| low | opengrep/javascript.lang.security.audit.unsafe-formatstring |
packages/server/src/streaming/scrcpy-stream-manager.ts:708 | Detected string concatenation with a non-literal variable in a util.format / console.log function. If an attacker injects a format specifier in the string, it will forge the log message. Try to use constant values for the format string.... | Static analysis (opengrep) |
| low | osv/GHSA-333x-w4r6-6crp |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-333x-w4r6-6crp | Dependencies (osv-scanner) |
| low | osv/GHSA-4x5r-pxfx-6jf8 |
pnpm-lock.yaml | @babel/[email protected] (npm) is affected by GHSA-4x5r-pxfx-6jf8 | Dependencies (osv-scanner) |
| low | osv/GHSA-9jrq-w75r-8gcw |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-9jrq-w75r-8gcw | Dependencies (osv-scanner) |
| low | osv/GHSA-mrq3-vjjr-p77c |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-mrq3-vjjr-p77c | Dependencies (osv-scanner) |
| low | osv/GHSA-xhq7-xmqj-769h |
pnpm-lock.yaml | [email protected] (npm) is affected by GHSA-xhq7-xmqj-769h | Dependencies (osv-scanner) |
Tools and coverage
Every analyzer that ran on this commit. A failed or skipped tool is a coverage gap: its share of the score is left out and the coverage figure drops.
| Analyzer | Pillar | Status | Version | Findings | Note |
|---|---|---|---|---|---|
| AI tool configuration | AI provenance | ok | signatures-v1 | 0 | |
| Explicit AI attribution | AI provenance | ok | signatures-v1 | 0 | |
| Release velocity | AI provenance | skipped | — | 0 | |
| Coding style | AI provenance | ok | — | 0 | |
| Commit velocity | AI provenance | ok | prov-4 | 0 | |
| Complexity (lizard) | Code quality | ok | lizard 1.25.1 | 0 | |
| Documentation | Code quality | ok | — | 0 | |
| Duplication (jscpd) | Code quality | ok | repotrust-dup-w6 | 0 | |
| Lint | Code quality | ok | opengrep 1.33.1; rules f1d2b562b414 | 12 | |
| Tests and CI | Code quality | ok | — | 0 | |
| Type safety | Code quality | ok | — | 0 | |
| CI workflows (zizmor) | Security | skipped | — | 0 | |
| Dependencies (osv-scanner) | Security | ok | osv-scanner version: 2.7.1 | 108 | |
| Release downloads | Security | ok | — | 0 | |
| Security posture | Security | ok | — | 0 | |
| Package registries | Security | ok | — | 0 | |
| Static analysis (opengrep) | Security | ok | opengrep 1.33.1; rules f1d2b562b414 | 4 | |
| OpenSSF Scorecard | Security | skipped | — | 0 | no published OpenSSF Scorecard result for this repo |
| Secrets (gitleaks) | Security | ok | gitleaks 8.30.1 | 1 |
Score history
Scores from different scoring versions aren't directly comparable.
| Scored | Commit | Scoring | AI provenance | Quality | Security |
|---|---|---|---|---|---|
| 2026-11-14 | b1387ef1de22 | prov-5+qual-2+sec-2 | 0% | 74 | 59 |
| 2026-11-14 | b1387ef1de22 | prov-4+qual-2+sec-2 | 0% | 74 | 59 |
Full text report
- Repository: https://github.com/dougwithseismic/claude-does-apoc
- Commit:
b1387ef1de22fbb0ff016219131f5ecbcd70f5ce - Generated: 2026-11-14T14:52:04+00:00
- Scorer 0.1.0, scoring prov-5+qual-2+sec-2, report schema v2
Scores
| Pillar | Score | Signal | Confidence | Coverage |
|---|---|---|---|---|
| AI provenance (estimated AI-generated share) | 0 | possible | 47% | 100% |
| Code quality | 74 | adequate | 90% | 100% |
| Security | 59 | weak | 85% | 100% |
AI provenance
Weak signals consistent with AI-assisted development.
-
Explicitly attributed share (lower bound): 0.0%
-
Unattributed share in AI-consistent velocity bursts: 82.5%
-
Estimated AI-generated share: 0.0%
-
AI tooling configured in repo: claude-code
-
Stylometry index: 0.13 per 1,000 lines (narrated steps 3, placeholders 0, assistant phrasing 0, emoji 0). Reported as a signal, not scored.
| Month | Lines added | Attributed to AI |
|---|---|---|
| 2025-12 | 52,291 | 0% |
Evidence
- 7,380 lines of first-party code in ~1.4h (5,269 lines/hour, 3 commit session) (7690c1a20f52)
- 5,428 lines of first-party code in ~1.3h (4,324 lines/hour, 4 commit session) (65f55ba3e42c)
- 23,510 lines of first-party code in ~7.2h (3,243 lines/hour, 10 commit session) (8054dbaa25fa)
- CLAUDE.md (claude-code configuration) (CLAUDE.md)
- 6,811 lines of first-party code in ~5.9h (1,161 lines/hour, 7 commit session) (b1387ef1de22)
- step-by-step narration comment: // First, try to find by serial (packages/cor)
- step-by-step narration comment: // Then, try to find by nickname (packages/cor)
- step-by-step narration comment: // First, handle escaped variables by temporarily replacing them (packages/wor)
AI provenance describes how code was produced; it is not a quality judgment. Unless attribution is explicit, these are signals consistent with AI generation, not proof. Squash/rebase workflows, imported code, and rewritten history reduce accuracy.
Code quality
Code quality is adequate: test-to-source ratio 1.29, no CI test run detected; 8% of function code in complex or long functions; 4% duplicated lines. Weakest area: testing.
| Area | Score |
|---|---|
| Complexity (lizard) | 78 |
| Duplication | 80 |
| Code smells (Opengrep) | 95 |
| Tests and CI | 55 |
| Documentation | 65 |
| Type safety | 100 |
| Process (Scorecard review/maintenance) | n/a |
- Functions: 887; mean complexity 2.6, 90th percentile 6; 7 complex and 4 long functions
- Duplicated lines: 3.6% of 14,927 compared
- Tests: 29,202 test lines for 22,630 source lines (ratio 1.29); CI test commands: none detected; 84% of recent source commits also change tests
- Docs missing or thin: contributing, changelog
Most complex functions:
- matchesSelector in packages/automation/src/ui/selector.ts: complexity 34, 70 lines
- TouchCanvas in packages/ui/src/components/TouchCanvas/TouchCanvas.tsx: complexity 25, 153 lines
- matchesCriteria in packages/core/src/pool/manager.ts: complexity 18, 42 lines
- DeviceStream in packages/ui/src/components/DeviceStream/DeviceStream.tsx: complexity 18, 115 lines
- parseDisplayInfo in packages/core/src/shell/screen-capture.ts: complexity 17, 45 lines
Security
Security posture is weak: 108 known vulnerabilities in 30 dependencies. Weakest area: posture.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 97 |
| Static analysis (Opengrep) | 99 |
| Vulnerable dependencies (OSV) | 2 |
| CI workflows (zizmor) | n/a |
| Posture (policy, updates, signing, lockfiles) | 0 |
| OpenSSF Scorecard | n/a |
-
Known vulnerabilities: 108 in 30 packages (critical 3, high 68, medium 32, low 5)
-
Posture checks passed: none; missing: security policy, dependency updates, signed commits, lockfiles
Top findings
| Severity | Finding | Location |
|---|---|---|
| critical | osv/GHSA-w7jw-789q-3m8p: [email protected] (npm) is affected by GHSA-w7jw-789q-3m8p |
pnpm-lock.yaml |
| critical | osv/GHSA-3qcw-2rhx-2726: [email protected] (npm) is affected by GHSA-3qcw-2rhx-2726 |
pnpm-lock.yaml |
| critical | osv/GHSA-5xrq-8626-4rwp: [email protected] (npm) is affected by GHSA-5xrq-8626-4rwp |
pnpm-lock.yaml |
| high | osv/GHSA-27p8-2357-5qqv: @xmldom/[email protected] (npm) is affected by GHSA-27p8-2357-5qqv |
pnpm-lock.yaml |
| high | osv/GHSA-2v35-w6hq-6mfw: @xmldom/[email protected] (npm) is affected by GHSA-2v35-w6hq-6mfw |
pnpm-lock.yaml |
| high | osv/GHSA-4w3w-2rp5-g8jm: @xmldom/[email protected] (npm) is affected by GHSA-4w3w-2rp5-g8jm |
pnpm-lock.yaml |
| high | osv/GHSA-8344-3jmq-59r6: @xmldom/[email protected] (npm) is affected by GHSA-8344-3jmq-59r6 |
pnpm-lock.yaml |
| high | osv/GHSA-93r5-fhx6-vmg9: @xmldom/[email protected] (npm) is affected by GHSA-93r5-fhx6-vmg9 |
pnpm-lock.yaml |
| high | osv/GHSA-965w-775f-mr7g: @xmldom/[email protected] (npm) is affected by GHSA-965w-775f-mr7g |
pnpm-lock.yaml |
| high | osv/GHSA-c7q8-3ch8-vqpv: @xmldom/[email protected] (npm) is affected by GHSA-c7q8-3ch8-vqpv |
pnpm-lock.yaml |
| high | osv/GHSA-f6ww-3ggp-fr8h: @xmldom/[email protected] (npm) is affected by GHSA-f6ww-3ggp-fr8h |
pnpm-lock.yaml |
| high | osv/GHSA-j759-j44w-7fr8: @xmldom/[email protected] (npm) is affected by GHSA-j759-j44w-7fr8 |
pnpm-lock.yaml |
| high | osv/GHSA-w2rr-34g9-rvrj: @xmldom/[email protected] (npm) is affected by GHSA-w2rr-34g9-rvrj |
pnpm-lock.yaml |
| high | osv/GHSA-wh4c-j3r5-mjhp: @xmldom/[email protected] (npm) is affected by GHSA-wh4c-j3r5-mjhp |
pnpm-lock.yaml |
| high | osv/GHSA-x4fp-j954-r2f4: @xmldom/[email protected] (npm) is affected by GHSA-x4fp-j954-r2f4 |
pnpm-lock.yaml |
| high | osv/GHSA-x6wf-f3px-wcqx: @xmldom/[email protected] (npm) is affected by GHSA-x6wf-f3px-wcqx |
pnpm-lock.yaml |
| high | osv/GHSA-3jxr-9vmj-r5cp: [email protected] (npm) is affected by GHSA-3jxr-9vmj-r5cp |
pnpm-lock.yaml |
| high | osv/GHSA-6j4f-fj2g-mc7p: [email protected] (npm) is affected by GHSA-6j4f-fj2g-mc7p |
pnpm-lock.yaml |
| high | osv/GHSA-mh99-v99m-4gvg: [email protected] (npm) is affected by GHSA-mh99-v99m-4gvg |
pnpm-lock.yaml |
| high | osv/GHSA-qhr7-859c-m2p7: [email protected] (npm) is affected by GHSA-qhr7-859c-m2p7 |
pnpm-lock.yaml |
| high | osv/GHSA-rgw5-rvv9-x895: [email protected] (npm) is affected by GHSA-rgw5-rvv9-x895 |
pnpm-lock.yaml |
| high | osv/GHSA-3jxr-9vmj-r5cp: [email protected] (npm) is affected by GHSA-3jxr-9vmj-r5cp |
pnpm-lock.yaml |
| high | osv/GHSA-6j4f-fj2g-mc7p: [email protected] (npm) is affected by GHSA-6j4f-fj2g-mc7p |
pnpm-lock.yaml |
| high | osv/GHSA-mh99-v99m-4gvg: [email protected] (npm) is affected by GHSA-mh99-v99m-4gvg |
pnpm-lock.yaml |
| high | osv/GHSA-qhr7-859c-m2p7: [email protected] (npm) is affected by GHSA-qhr7-859c-m2p7 |
pnpm-lock.yaml |
Static signals only: the scorer never runs the project's code. Secret findings are pattern matches that were not verified, and secret values are never stored.
Distribution signals
- readme-download-lure: gives an archive password
Signals consistent with a repository that exists to distribute a download. They are heuristics, not a verdict; release files were not downloaded or inspected.
Repository profile
- Source lines: 22,630; test lines: 29,202
| Language | Lines |
|---|---|
| TypeScript | 50,276 |
| Shell | 1,475 |
| JavaScript | 81 |