← Back to scan
File as GitHub Issue repo: abi/screenshot-to-code

Push this scan report to abi/screenshot-to-code

Click the green button below to open GitHub’s new-issue form, pre-filled with the report title, summary table, top findings, and an embedded score-card image. No authentication needed — you review on GitHub before submitting. Repobility is credited as the scanner.

Embedded score card image

This image will render at the top of the issue body. Hosted on Repobility, refreshes automatically after re-scans.

Repobility score card

Issue title

Insecure Randomness for Security

Curate findings to include

Pick exactly which findings appear in the issue body. By default the top 5 are included. Uncheck noise, check what matters.

Top 5 (default)
Severity Rule Title File:line
MED ERR002 [ERR002] Empty Catch Block: Empty catch blocks hide errors. frontend/src/components/history/History…:70
MED SEC041 [SEC041] Tabnabbing — target="_blank" without rel="noopener noreferrer": <a target="_blan… frontend/src/components/preview/Preview…:25
MED SEC041 [SEC041] Tabnabbing — target="_blank" without rel="noopener noreferrer": <a target="_blan… frontend/src/components/messages/Onboar…:6
MED SEC041 [SEC041] Tabnabbing — target="_blank" without rel="noopener noreferrer": <a target="_blan… frontend/src/components/TermsOfServiceD…:54
MED SEC015 [SEC015] Insecure Randomness for Security: Weak PRNG used in security-sensitive context. … backend/agent/providers/factory.py:16
MED MINED111 Bare except continues silently backend/agent/tools/parsing.py:73
MED MINED111 Bare except continues silently backend/fs_logging/gemini_prompt_report…:100
MED MINED111 Bare except continues silently backend/fs_logging/openai_turn_inputs.py:205
MED MINED111 Bare except continues silently backend/routes/export.py:355
MED MINED111 Bare except continues silently backend/routes/evals.py:381
MED MINED111 Bare except continues silently backend/routes/generate_code.py:797
MED MINED111 Bare except continues silently backend/routes/generate_code.py:647
MED MINED111 Bare except continues silently backend/evals/runner.py:329
MED MINED111 Bare except continues silently backend/evals/runner.py:89
MED MINED111 Bare except continues silently backend/run_image_generation_evals.py:203
MED COMP001 [COMP001] High cognitive complexity: Function `_run_with_session` has cognitive complexit… backend/agent/engine.py:149
MED DKR007 Docker build context has no .dockerignore .dockerignore
MED DEPCUR-NPM npm package `jest` is 1 major version(s) behind (29.7.0 -> 30.4.2) frontend/package.json
MED DEPCUR-NPM npm package `dotenv` is 1 major version(s) behind (16.6.1 -> 17.4.2) frontend/package.json
MED DEPCUR-NPM npm package `@vitejs/plugin-react` is 2 major version(s) behind (4.7.0 -> 6.0.2) frontend/package.json
MED DEPCUR-NPM npm package `@types/react-dom` is 1 major version(s) behind (18.3.7 -> 19.2.3) frontend/package.json
MED DEPCUR-NPM npm package `@types/jest` is 1 major version(s) behind (29.5.14 -> 30.0.0) frontend/package.json
MED DEPCUR-NPM npm package `zustand` is 1 major version(s) behind (4.5.7 -> 5.0.14) frontend/package.json
MED DEPCUR-NPM npm package `tailwind-merge` is 1 major version(s) behind (2.6.0 -> 3.6.0) frontend/package.json
MED DEPCUR-NPM npm package `react-icons` is 1 major version(s) behind (4.12.0 -> 5.6.0) frontend/package.json
MED DEPCUR-NPM npm package `react-dropzone` is 1 major version(s) behind (14.3.8 -> 15.0.0) frontend/package.json
MED DEPCUR-NPM npm package `copy-to-clipboard` is 1 major version(s) behind (3.3.3 -> 4.0.2) frontend/package.json
MED DEPCUR-PY Python package `google-genai` is 1 major version(s) behind (1.60.0 -> 2.8.0) backend/poetry.lock
MED DEPCUR-PY Python package `decorator` is 1 major version(s) behind (4.4.2 -> 5.3.1) backend/poetry.lock
MED DEPCUR-PY Python package `certifi` is 2 major version(s) behind (2024.12.14 -> 2026.5.20) backend/poetry.lock
MED DEPCUR-PY Python package `attrs` is 2 major version(s) behind (24.3.0 -> 26.1.0) backend/poetry.lock
MED GHSA-58qx-3vcg-4xpx ws: GHSA-58qx-3vcg-4xpx yarn.lock
MED GHSA-93m4-6634-74q7 vite: GHSA-93m4-6634-74q7 yarn.lock
MED GHSA-4w7w-66w2-5vf9 vite: GHSA-4w7w-66w2-5vf9 yarn.lock
MED GHSA-2j2x-hqr9-3h42 react-router: GHSA-2j2x-hqr9-3h42 yarn.lock
MED GHSA-qx2v-qp2m-jg93 postcss: GHSA-qx2v-qp2m-jg93 yarn.lock
MED GHSA-3v7f-55p6-f55p picomatch: GHSA-3v7f-55p6-f55p yarn.lock
MED GHSA-v2v4-37r5-5v8g ip-address: GHSA-v2v4-37r5-5v8g yarn.lock
MED GHSA-7rx3-28cr-v5wh handlebars: GHSA-7rx3-28cr-v5wh yarn.lock
MED GHSA-2qvq-rjwj-gvw9 handlebars: GHSA-2qvq-rjwj-gvw9 yarn.lock
MED GHSA-67mh-4wv8-2f99 esbuild: GHSA-67mh-4wv8-2f99 yarn.lock
MED GHSA-f886-m6hf-6m8v brace-expansion: GHSA-f886-m6hf-6m8v yarn.lock
MED GHSA-2g4f-4pwh-qvx6 ajv: GHSA-2g4f-4pwh-qvx6 yarn.lock
MED GHSA-58qx-3vcg-4xpx ws: GHSA-58qx-3vcg-4xpx package-lock.json
MED GHSA-93m4-6634-74q7 vite: GHSA-93m4-6634-74q7 package-lock.json
MED GHSA-4w7w-66w2-5vf9 vite: GHSA-4w7w-66w2-5vf9 package-lock.json
MED GHSA-2j2x-hqr9-3h42 react-router: GHSA-2j2x-hqr9-3h42 package-lock.json
MED GHSA-qx2v-qp2m-jg93 postcss: GHSA-qx2v-qp2m-jg93 package-lock.json
MED GHSA-3v7f-55p6-f55p picomatch: GHSA-3v7f-55p6-f55p package-lock.json
MED GHSA-v2v4-37r5-5v8g ip-address: GHSA-v2v4-37r5-5v8g package-lock.json
MED GHSA-7rx3-28cr-v5wh handlebars: GHSA-7rx3-28cr-v5wh package-lock.json
MED GHSA-2qvq-rjwj-gvw9 handlebars: GHSA-2qvq-rjwj-gvw9 package-lock.json
MED GHSA-67mh-4wv8-2f99 esbuild: GHSA-67mh-4wv8-2f99 package-lock.json
MED GHSA-f886-m6hf-6m8v brace-expansion: GHSA-f886-m6hf-6m8v package-lock.json
MED GHSA-2g4f-4pwh-qvx6 ajv: GHSA-2g4f-4pwh-qvx6 package-lock.json
MED GHSA-48c2-rrv3-qjmp yaml: GHSA-48c2-rrv3-qjmp frontend/yarn.lock
MED GHSA-58qx-3vcg-4xpx ws: GHSA-58qx-3vcg-4xpx frontend/yarn.lock
MED GHSA-xcj6-pq6g-qj4x vite: GHSA-xcj6-pq6g-qj4x frontend/yarn.lock
MED GHSA-x574-m823-4x7w vite: GHSA-x574-m823-4x7w frontend/yarn.lock
MED GHSA-vg6x-rcgg-rjx6 vite: GHSA-vg6x-rcgg-rjx6 frontend/yarn.lock
MED GHSA-9cwx-2883-4wfx vite: GHSA-9cwx-2883-4wfx frontend/yarn.lock
MED GHSA-93m4-6634-74q7 vite: GHSA-93m4-6634-74q7 frontend/yarn.lock
MED GHSA-92r3-m2mg-pj97 vite: GHSA-92r3-m2mg-pj97 frontend/yarn.lock
MED GHSA-8jhw-289h-jh2g vite: GHSA-8jhw-289h-jh2g frontend/yarn.lock
MED GHSA-859w-5945-r5v3 vite: GHSA-859w-5945-r5v3 frontend/yarn.lock
MED GHSA-64vr-g452-qvp3 vite: GHSA-64vr-g452-qvp3 frontend/yarn.lock
MED GHSA-4w7w-66w2-5vf9 vite: GHSA-4w7w-66w2-5vf9 frontend/yarn.lock
MED GHSA-4r4m-qw57-chr8 vite: GHSA-4r4m-qw57-chr8 frontend/yarn.lock
MED GHSA-356w-63v5-8wf4 vite: GHSA-356w-63v5-8wf4 frontend/yarn.lock
MED GHSA-9jcx-v3wj-wh4m react-router: GHSA-9jcx-v3wj-wh4m frontend/yarn.lock
MED GHSA-2j2x-hqr9-3h42 react-router: GHSA-2j2x-hqr9-3h42 frontend/yarn.lock
MED GHSA-qx2v-qp2m-jg93 postcss: GHSA-qx2v-qp2m-jg93 frontend/yarn.lock
MED GHSA-3v7f-55p6-f55p picomatch: GHSA-3v7f-55p6-f55p frontend/yarn.lock
MED GHSA-mwcw-c2x4-8c55 nanoid: GHSA-mwcw-c2x4-8c55 frontend/yarn.lock
MED GHSA-952p-6rrq-rcjv micromatch: GHSA-952p-6rrq-rcjv frontend/yarn.lock
MED GHSA-mh29-5h37-fv8m js-yaml: GHSA-mh29-5h37-fv8m frontend/yarn.lock
MED GHSA-v2v4-37r5-5v8g ip-address: GHSA-v2v4-37r5-5v8g frontend/yarn.lock
MED GHSA-67mh-4wv8-2f99 esbuild: GHSA-67mh-4wv8-2f99 frontend/yarn.lock
MED GHSA-ghr5-ch3p-vcr6 ejs: GHSA-ghr5-ch3p-vcr6 frontend/yarn.lock
MED GHSA-f886-m6hf-6m8v brace-expansion: GHSA-f886-m6hf-6m8v frontend/yarn.lock
MED GHSA-2g4f-4pwh-qvx6 ajv: GHSA-2g4f-4pwh-qvx6 frontend/yarn.lock
MED GHSA-968p-4wvh-cqc8 @babel/runtime: GHSA-968p-4wvh-cqc8 frontend/yarn.lock
MED GHSA-968p-4wvh-cqc8 @babel/helpers: GHSA-968p-4wvh-cqc8 frontend/yarn.lock
MED GHSA-58qx-3vcg-4xpx ws: GHSA-58qx-3vcg-4xpx frontend/pnpm-lock.yaml
MED GHSA-93m4-6634-74q7 vite: GHSA-93m4-6634-74q7 frontend/pnpm-lock.yaml
MED GHSA-4w7w-66w2-5vf9 vite: GHSA-4w7w-66w2-5vf9 frontend/pnpm-lock.yaml
MED GHSA-2j2x-hqr9-3h42 react-router: GHSA-2j2x-hqr9-3h42 frontend/pnpm-lock.yaml
MED GHSA-67mh-4wv8-2f99 esbuild: GHSA-67mh-4wv8-2f99 frontend/pnpm-lock.yaml
MED GHSA-597g-3phw-6986 virtualenv: GHSA-597g-3phw-6986 backend/poetry.lock
MED GHSA-pq67-6m6q-mj2v urllib3: GHSA-pq67-6m6q-mj2v backend/poetry.lock
MED GHSA-48p4-8xcf-vxj5 urllib3: GHSA-48p4-8xcf-vxj5 backend/poetry.lock
MED GHSA-2c2j-9gv5-cj73 starlette: GHSA-2c2j-9gv5-cj73 backend/poetry.lock
MED GHSA-gc5v-m9x4-r6x2 requests: GHSA-gc5v-m9x4-r6x2 backend/poetry.lock
MED GHSA-9hjg-9r4m-mvj7 requests: GHSA-9hjg-9r4m-mvj7 backend/poetry.lock
MED GHSA-mf9w-mj56-hr94 python-dotenv: GHSA-mf9w-mj56-hr94 backend/poetry.lock
MED GHSA-6w46-j5rx-g56g pytest: GHSA-6w46-j5rx-g56g backend/poetry.lock
MED GHSA-r73j-pqj5-w3x7 pillow: GHSA-r73j-pqj5-w3x7 backend/poetry.lock
MED GHSA-65pc-fj4g-8rjx idna: GHSA-65pc-fj4g-8rjx backend/poetry.lock
MED GHSA-w853-jp5j-5j7f filelock: GHSA-w853-jp5j-5j7f backend/poetry.lock
MED GHSA-qmgc-5h2g-mvrw filelock: GHSA-qmgc-5h2g-mvrw backend/poetry.lock
MED GHSA-w2fm-2cpv-w7v5 aiohttp: GHSA-w2fm-2cpv-w7v5 backend/poetry.lock
MED GHSA-p998-jp59-783m aiohttp: GHSA-p998-jp59-783m backend/poetry.lock
MED GHSA-m5qp-6w8w-w647 aiohttp: GHSA-m5qp-6w8w-w647 backend/poetry.lock
MED GHSA-jj3x-wxrx-4x23 aiohttp: GHSA-jj3x-wxrx-4x23 backend/poetry.lock
MED GHSA-jg22-mg44-37j8 aiohttp: GHSA-jg22-mg44-37j8 backend/poetry.lock
MED GHSA-hg6j-4rv6-33pg aiohttp: GHSA-hg6j-4rv6-33pg backend/poetry.lock
MED GHSA-g84x-mcqj-x9qq aiohttp: GHSA-g84x-mcqj-x9qq backend/poetry.lock
MED GHSA-c427-h43c-vf67 aiohttp: GHSA-c427-h43c-vf67 backend/poetry.lock
MED GHSA-6jhg-hg63-jvvf aiohttp: GHSA-6jhg-hg63-jvvf backend/poetry.lock
MED DKR001 Docker final stage has no non-root USER frontend/Dockerfile:1
MED DKR001 Docker final stage has no non-root USER backend/Dockerfile:1
MED JRN006 Documented legal route has no visible implementation frontend/src/components/TermsOfServiceD…:55
MED SEC017 [SEC017] Unbounded Input to LLM/External API: User input is passed to an LLM or external … backend/prompts/create/text.py:19
MED SEC017 [SEC017] Unbounded Input to LLM/External API: User input is passed to an LLM or external … backend/prompts/create/image.py:18
MED CORE_NO_CI No CI/CD configuration found
LOW SEC124 [SEC124] TOCTOU file access (os.access then open): Check-then-use file pattern (access/ex… backend/uploaded_assets/store.py:177
LOW COMP001 [COMP001] High cognitive complexity: Function `process_image` has cognitive complexity 8 … backend/agent/providers/anthropic/image…:46
LOW COMP001 [COMP001] High cognitive complexity: Function `_handle_streamed_tool_delta` has cognitive… backend/agent/engine.py:101
LOW DEPCUR-NPM npm package `eslint-plugin-react-refresh` is minor version(s) behind (0.4.26 -> 0.5.2) frontend/package.json
LOW DEPCUR-NPM npm package `autoprefixer` is minor version(s) behind (10.4.23 -> 10.5.0) frontend/package.json
LOW DEPCUR-NPM npm package `vite-plugin-checker` is minor version(s) behind (0.9.3 -> 0.14.1) frontend/package.json
LOW DEPCUR-NPM npm package `@codemirror/view` is minor version(s) behind (6.39.11 -> 6.43.0) frontend/package.json
LOW DEPCUR-NPM npm package `@codemirror/state` is minor version(s) behind (6.5.4 -> 6.6.0) frontend/package.json
LOW DEPCUR-PY Python package `imageio` is minor version(s) behind (2.36.1 -> 2.37.3) backend/poetry.lock
LOW DEPCUR-PY Python package `idna` is minor version(s) behind (3.10 -> 3.18) backend/poetry.lock
LOW DEPCUR-PY Python package `h11` is minor version(s) behind (0.14.0 -> 0.16.0) backend/poetry.lock
LOW DEPCUR-PY Python package `googleapis-common-protos` is minor version(s) behind (1.70.0 -> 1.75.0) backend/poetry.lock
LOW DEPCUR-PY Python package `google-auth` is minor version(s) behind (2.47.0 -> 2.53.0) backend/poetry.lock
LOW DEPCUR-PY Python package `frozenlist` is minor version(s) behind (1.5.0 -> 1.8.0) backend/poetry.lock
LOW DEPCUR-PY Python package `filelock` is minor version(s) behind (3.16.1 -> 3.29.1) backend/poetry.lock
LOW DEPCUR-PY Python package `fastapi` is minor version(s) behind (0.115.6 -> 0.136.3) backend/poetry.lock
LOW DEPCUR-PY Python package `exceptiongroup` is minor version(s) behind (1.2.2 -> 1.3.1) backend/poetry.lock
LOW DEPCUR-PY Python package `docstring-parser` is minor version(s) behind (0.17.0 -> 0.18.0) backend/poetry.lock
LOW DEPCUR-PY Python package `distlib` is minor version(s) behind (0.3.9 -> 0.4.1) backend/poetry.lock
LOW DEPCUR-PY Python package `click` is minor version(s) behind (8.1.7 -> 8.4.1) backend/poetry.lock
LOW DEPCUR-PY Python package `cfgv` is minor version(s) behind (3.4.0 -> 3.5.0) backend/poetry.lock
LOW DEPCUR-PY Python package `beautifulsoup4` is minor version(s) behind (4.12.3 -> 4.14.3) backend/poetry.lock
LOW DEPCUR-PY Python package `anyio` is minor version(s) behind (4.9.0 -> 4.13.0) backend/poetry.lock
LOW DEPCUR-PY Python package `anthropic` is minor version(s) behind (0.84.0 -> 0.105.2) backend/poetry.lock
LOW DEPCUR-PY Python package `aiosignal` is minor version(s) behind (1.3.2 -> 1.4.0) backend/poetry.lock
LOW DEPCUR-PY Python package `aiohappyeyeballs` is minor version(s) behind (2.4.4 -> 2.6.2) backend/poetry.lock
LOW GHSA-jqfw-vq24-v9c3 vite: GHSA-jqfw-vq24-v9c3 yarn.lock
LOW GHSA-g4jq-h2w9-997c vite: GHSA-g4jq-h2w9-997c yarn.lock
LOW GHSA-442j-39wm-28r2 handlebars: GHSA-442j-39wm-28r2 yarn.lock
LOW GHSA-jqfw-vq24-v9c3 vite: GHSA-jqfw-vq24-v9c3 package-lock.json
LOW GHSA-g4jq-h2w9-997c vite: GHSA-g4jq-h2w9-997c package-lock.json
LOW GHSA-442j-39wm-28r2 handlebars: GHSA-442j-39wm-28r2 package-lock.json
LOW GHSA-jqfw-vq24-v9c3 vite: GHSA-jqfw-vq24-v9c3 frontend/yarn.lock
LOW GHSA-g4jq-h2w9-997c vite: GHSA-g4jq-h2w9-997c frontend/yarn.lock
LOW GHSA-v6h2-p8h4-qcjw brace-expansion: GHSA-v6h2-p8h4-qcjw frontend/yarn.lock
LOW GHSA-jqfw-vq24-v9c3 vite: GHSA-jqfw-vq24-v9c3 frontend/pnpm-lock.yaml
LOW GHSA-g4jq-h2w9-997c vite: GHSA-g4jq-h2w9-997c frontend/pnpm-lock.yaml
LOW GHSA-mwh4-6h8g-pg8w aiohttp: GHSA-mwh4-6h8g-pg8w backend/poetry.lock
LOW GHSA-mqqc-3gqh-h2x8 aiohttp: GHSA-mqqc-3gqh-h2x8 backend/poetry.lock
LOW GHSA-hcc4-c3v8-rx92 aiohttp: GHSA-hcc4-c3v8-rx92 backend/poetry.lock
LOW GHSA-fh55-r93g-j68g aiohttp: GHSA-fh55-r93g-j68g backend/poetry.lock
LOW GHSA-966j-vmvw-g2g9 aiohttp: GHSA-966j-vmvw-g2g9 backend/poetry.lock
LOW GHSA-9548-qrrj-x5pj aiohttp: GHSA-9548-qrrj-x5pj backend/poetry.lock
LOW GHSA-69f9-5gxw-wvc2 aiohttp: GHSA-69f9-5gxw-wvc2 backend/poetry.lock
LOW GHSA-63hf-3vf5-4wqf aiohttp: GHSA-63hf-3vf5-4wqf backend/poetry.lock
LOW GHSA-54jq-c3m8-4m76 aiohttp: GHSA-54jq-c3m8-4m76 backend/poetry.lock
LOW GHSA-3wq7-rqq7-wx6j aiohttp: GHSA-3wq7-rqq7-wx6j backend/poetry.lock
LOW GHSA-2vrm-gr82-f7m5 aiohttp: GHSA-2vrm-gr82-f7m5 backend/poetry.lock
LOW AIC003 Duplicated implementation block across source files frontend/src/components/unified-input/t…:86
LOW AIC003 Duplicated implementation block across source files frontend/src/components/unified-input/t…:253
LOW AIC003 Duplicated implementation block across source files frontend/src/components/unified-input/t…:11
LOW AIC003 Duplicated implementation block across source files frontend/src/components/unified-input/t…:43
LOW AIC003 Duplicated implementation block across source files frontend/src/components/unified-input/U…:36
LOW AIC003 Duplicated implementation block across source files frontend/src/components/unified-input/U…:10
LOW AIC003 Duplicated implementation block across source files frontend/src/components/evals/PairwiseE…:63
LOW DKR012 Dockerfile keeps pip download cache backend/Dockerfile:6
LOW DKC010 Compose service lacks no-new-privileges hardening docker-compose.yml:21
LOW DKC010 Compose service lacks no-new-privileges hardening docker-compose.yml:3
LOW DKC006 Compose service does not declare a runtime user docker-compose.yml:21
LOW DKC006 Compose service does not declare a runtime user docker-compose.yml:3
INFO MINED052 [MINED052] Ts Any Typed: : any used as type annotation. Defeats TypeScript type safety. frontend/src/generateCode.ts:29
INFO MINED052 [MINED052] Ts Any Typed: : any used as type annotation. Defeats TypeScript type safety. frontend/src/components/commits/types.ts:16
INFO MINED056 [MINED056] React Key As Index: key={index} in map() — re-renders the wrong elements on re… frontend/src/components/evals/EvalsPage…:175
INFO MINED056 [MINED056] React Key As Index: key={index} in map() — re-renders the wrong elements on re… frontend/src/components/core/StackLabel…:14
INFO MINED056 [MINED056] React Key As Index: key={index} in map() — re-renders the wrong elements on re… frontend/src/components/UpdateImageUplo…:35
INFO MINED054 [MINED054] Ts As Any: Casting to any (as any) bypasses type checking entirely. frontend/src/components/ImageUpload.tsx:216
INFO MINED044 [MINED044] Js Console Log Prod: console.log left in code. Should be replaced with logger … frontend/src/components/evals/EvalsPage…:93
INFO MINED044 [MINED044] Js Console Log Prod: console.log left in code. Should be replaced with logger … frontend/src/components/UpdateImageUplo…:100
INFO MINED044 [MINED044] Js Console Log Prod: console.log left in code. Should be replaced with logger … frontend/src/components/ImageUpload.tsx:182
INFO MINED043 [MINED043] Http Not Https: Hardcoded http:// (not localhost) for endpoints that handle cr… backend/routes/screenshot.py:30
INFO MINED072 [MINED072] Python Pass Only Class: class Foo: pass — stub waiting to be filled in. backend/agent/runner.py:4
INFO MINED062 [MINED062] Python Dataclass No Fields: @dataclass over an empty class — unfinished model. backend/agent/providers/token_usage.py:8
INFO MINED062 [MINED062] Python Dataclass No Fields: @dataclass over an empty class — unfinished model. backend/agent/providers/pricing.py:5
INFO MINED050 [MINED050] Stub Only Function: Function declared but body is just pass, return None, rais… backend/routes/screenshot.py:26
INFO MINED050 [MINED050] Stub Only Function: Function declared but body is just pass, return None, rais… backend/agent/runner.py:5
INFO MINED050 [MINED050] Stub Only Function: Function declared but body is just pass, return None, rais… backend/agent/providers/base.py:42
INFO MINED049 [MINED049] Print Pii: Logging password/token/email/ssn directly to stdout. backend/agent/providers/anthropic/provi…:315
INFO DEPCUR-NPM npm package `ts-jest` is patch version(s) behind (29.4.6 -> 29.4.11) frontend/package.json
INFO DEPCUR-NPM npm package `postcss` is patch version(s) behind (8.5.6 -> 8.5.15) frontend/package.json
INFO DEPCUR-NPM npm package `react-syntax-highlighter` is patch version(s) behind (16.1.0 -> 16.1.1) frontend/package.json
INFO DEPCUR-NPM npm package `nanoid` is patch version(s) behind (5.1.6 -> 5.1.11) frontend/package.json
INFO DEPCUR-NPM npm package `@codemirror/language` is patch version(s) behind (6.12.1 -> 6.12.3) frontend/package.json
INFO DEPCUR-NPM npm package `@codemirror/commands` is patch version(s) behind (6.10.1 -> 6.10.3) frontend/package.json
INFO DEPCUR-PY Python package `identify` is patch version(s) behind (2.6.3 -> 2.6.19) backend/poetry.lock
INFO DEPCUR-PY Python package `httpcore` is patch version(s) behind (1.0.7 -> 1.0.9) backend/poetry.lock
Reset to top 5 200 findings available (after auto-suppression of test files + won't-fix)

Issue body (markdown)

## Code-quality scan: `abi/screenshot-to-code`

**Score: 51/100 (C-)**  ·  345 findings  ·  scanned 2026-06-05 08:07 UTC  ·  24,590 LOC

| Severity | Count |
|---|---|
| CRITICAL | 12 |
| HIGH | 118 |
| MEDIUM | 115 |
| LOW | 60 |

📊 [Full filterable report](https://repobility.com/scan/0f33f770-51d1-4d73-963a-4fec09e7a7fc/)  ·  ![scorecard](https://repobility.com/scan/0f33f770-51d1-4d73-963a-4fec09e7a7fc/report.png?v=1780646868-s2)

### Top findings

1. **MEDIUM** `ERR002` — Empty Catch Block: Empty catch blocks hide errors.
   `frontend/src/components/history/HistoryDisplay.tsx:70`
2. **MEDIUM** `SEC041` — Tabnabbing — target="_blank" without rel="noopener noreferrer"
   `frontend/src/components/preview/PreviewPane.tsx:25` · A05:2021 Security Misconfiguration
3. **MEDIUM** `SEC041` — Tabnabbing — target="_blank" without rel="noopener noreferrer"
   `frontend/src/components/messages/OnboardingNote.tsx:6` · A05:2021 Security Misconfiguration
4. **MEDIUM** `SEC041` — Tabnabbing — target="_blank" without rel="noopener noreferrer"
   `frontend/src/components/TermsOfServiceDialog.tsx:54` · A05:2021 Security Misconfiguration
5. **MEDIUM** `SEC015` — Insecure Randomness for Security
   `backend/agent/providers/factory.py:16` · A02:2021 Cryptographic Failures

---

_Filed automatically. Close this issue if not useful — we won't refile. Full report: https://repobility.com/scan/0f33f770-51d1-4d73-963a-4fec09e7a7fc/_
Megaproject â high spam risk
Could not determine 'abi/screenshot-to-code' star count (GitHub API rate-limited or unreachable). When in doubt about repo size, prefer opening a focused PR or a discussion rather than an issue.

The button opens GitHubâs new-issue page in a new tab. You will see the title + body pre-filled â review, edit if you want, then click GitHubâs "Submit new issue" button. Repobility never posts anything on your behalf.

For real security findings on big repos: use the project's SECURITY.md or private advisory flow instead of a public issue.