Scan timing: clone 5.23s · analysis 32.48s · 5.5 MB · GitHub API rate-limit (preflight)
https://github.com/lfnovo/open-notebook
· scanned 2026-06-04 23:17 UTC (1 week, 1 day ago)
· 10 languages
828 raw signals (278 security + 550 graph) 10th percentile · Typescript · medium (20-100K LoC) System graph score 57 (lower by 5)
Last scanned 1 week, 1 day ago · v2 · 396 actionable findings from 2 signal sources. 435 repeated signals grouped for readability. Security checks, system graph analysis, and verified AI-agent feedback are merged into one review queue.
| Component | Sub-score | Weight | Contribution |
|---|---|---|---|
structure_score |
60.0 | 0.15 | 9.00 |
security_score |
0.9 | 0.25 | 0.23 |
testing_score |
53.0 | 0.20 | 10.60 |
documentation_score |
100.0 | 0.15 | 15.00 |
practices_score |
86.0 | 0.15 | 12.90 |
code_quality |
43.9 | 0.10 | 4.39 |
| Overall | 1.00 | 52.1 |
Showing 325 of 396 actionable findings. 831 raw detector signals were grouped into reader-sized issues. Click TP / FP to vote on a finding's accuracy — votes adjust the confidence weighting and improve detection across the platform.
docker-compose.yml:14 (2 hits)docs/5-CONFIGURATION/security.md:154, 174, 182, 368, 376, 394 (12 hits)docs/7-DEVELOPMENT/api-reference.md:18, 101 (4 hits)docs/5-CONFIGURATION/reverse-proxy.md:819 (2 hits)Dockerfile:39, 99 (4 hits)Dockerfile.single:49, 88 (4 hits).github/workflows/build-dev.yml:54, 55, 107, 108, 185, 186 (12 hits)frontend/src/lib/locales/bn-IN/index.ts:161
frontend/src/lib/locales/ca-ES/index.ts:161
frontend/src/lib/locales/de-DE/index.ts:164
frontend/src/lib/locales/en-US/index.ts:161
frontend/src/lib/locales/es-ES/index.ts:161
frontend/src/lib/locales/fr-FR/index.ts:161
frontend/src/lib/locales/it-IT/index.ts:161
frontend/src/lib/locales/ja-JP/index.ts:161
frontend/src/lib/locales/pl-PL/index.ts:161
frontend/src/lib/locales/pt-BR/index.ts:161
frontend/src/lib/locales/ru-RU/index.ts:161
api/routers/commands.py:108 (2 hits)api/routers/episode_profiles.py:165 (2 hits)api/routers/podcasts.py:272 (2 hits)api/routers/commands.py:74 (2 hits)api/routers/podcasts.py:144 (2 hits)api/routers/podcasts.py:190 (2 hits)api/routers/podcasts.py:72 (2 hits)api/routers/context.py:12 (2 hits)api/routers/podcasts.py:215 (2 hits)api/routers/episode_profiles.py:129 (2 hits)open_notebook/ai/provision.py:25 (2 hits)open_notebook/utils/embedding.py:248 (2 hits)open_notebook/database/repository.py:148 (2 hits)api/client.py:88, 96, 102, 108, 114, 135, 152, 162, +17 more (50 hits)docker-compose.yml:1 (2 hits)Dockerfile.single:2, 26, 29, 54 (8 hits)Dockerfile:2, 68 (4 hits)Dockerfile:11, 72 (4 hits)Dockerfile.single:57 (2 hits)api/routers/commands.py:109 (2 hits)api/routers/episode_profiles.py:166 (2 hits)api/routers/models.py:253 (2 hits)api/routers/podcasts.py:273 (2 hits)api/routers/speaker_profiles.py:136 (2 hits)api/routers/commands.py:38 (2 hits)api/routers/embedding.py:13 (2 hits)api/routers/episode_profiles.py:101 (2 hits)api/routers/episode_profiles.py:192 (2 hits)api/routers/models.py:198 (2 hits)api/routers/models.py:689 (2 hits)api/routers/models.py:550 (2 hits)api/routers/models.py:523 (2 hits)api/routers/models.py:271 (2 hits)api/routers/context.py:13 (2 hits)api/routers/podcasts.py:216 (2 hits)api/routers/podcasts.py:42 (2 hits)api/routers/search.py:18 (2 hits)api/routers/search.py:114 (2 hits)api/routers/search.py:161 (2 hits)api/routers/speaker_profiles.py:83 (2 hits)api/routers/speaker_profiles.py:162 (2 hits)api/routers/episode_profiles.py:130 (2 hits)api/routers/models.py:316 (2 hits)api/routers/speaker_profiles.py:106 (2 hits).github/workflows/build-and-release.yml:30, 58, 87, 149, 178 (15 hits).github/workflows/build-dev.yml:42, 80, 111, 160, 189 (15 hits).github/workflows/test.yml:22, 46, 49 (9 hits)frontend/package-lock.json:1 (2 hits)api/credentials_service.py:365 (2 hits)uv.lock (2 hits)uv.lock (2 hits)uv.lock (2 hits)uv.lock (2 hits)uv.lock (2 hits)uv.lock (2 hits)uv.lock (2 hits)uv.lock (2 hits)uv.lock (2 hits)frontend/src/components/auth/LoginForm.tsx:152 (2 hits)uv.lock (2 hits)api/routers/commands.py:108
securityAuth fastapi unauth mutation
api/routers/credentials.py:259
securityAuth fastapi unauth mutation
api/routers/episode_profiles.py:165
securityAuth fastapi unauth mutation
api/routers/insights.py:37
securityAuth fastapi unauth mutation
api/routers/models.py:252
securityAuth fastapi unauth mutation
api/routers/notes.py:174
securityAuth fastapi unauth mutation
api/routers/notebooks.py:320
securityAuth fastapi unauth mutation
api/routers/podcasts.py:272
securityAuth fastapi unauth mutation
api/routers/chat.py:306
securityAuth fastapi unauth mutation
api/routers/source_chat.py:362
securityAuth fastapi unauth mutation
api/routers/sources.py:946
securityAuth fastapi unauth mutation
api/routers/speaker_profiles.py:135
securityAuth fastapi unauth mutation
api/routers/transformations.py:235
securityAuth fastapi unauth mutation
api/routers/notebooks.py:290
securityAuth fastapi unauth mutation
api/routers/notebooks.py:245
securityAuth fastapi unauth mutation
api/routers/search.py:160
securityAuth fastapi unauth mutation
api/routers/search.py:113
securityAuth fastapi unauth mutation
api/routers/models.py:688
securityAuth fastapi unauth mutation
api/routers/chat.py:421
securityAuth fastapi unauth mutation
api/routers/credentials.py:139
securityAuth fastapi unauth mutation
api/routers/episode_profiles.py:100
securityAuth fastapi unauth mutation
api/routers/models.py:197
securityAuth fastapi unauth mutation
api/routers/notes.py:49
securityAuth fastapi unauth mutation
api/routers/notebooks.py:89
securityAuth fastapi unauth mutation
api/routers/chat.py:137
securityAuth fastapi unauth mutation
api/routers/source_chat.py:87
securityAuth fastapi unauth mutation
api/routers/sources.py:993
securityAuth fastapi unauth mutation
api/routers/sources.py:580
securityAuth fastapi unauth mutation
api/routers/sources.py:289
securityAuth fastapi unauth mutation
api/routers/speaker_profiles.py:82
securityAuth fastapi unauth mutation
api/routers/transformations.py:49
securityAuth fastapi unauth mutation
api/routers/credentials.py:363
securityAuth fastapi unauth mutation
api/routers/episode_profiles.py:189
securityAuth fastapi unauth mutation
api/routers/speaker_profiles.py:159
securityAuth fastapi unauth mutation
api/routers/embedding.py:12
securityAuth fastapi unauth mutation
api/routers/chat.py:330
securityAuth fastapi unauth mutation
api/routers/commands.py:37
securityAuth fastapi unauth mutation
api/routers/transformations.py:81
securityAuth fastapi unauth mutation
api/routers/podcasts.py:41
securityAuth fastapi unauth mutation
api/routers/context.py:12
securityAuth fastapi unauth mutation
api/routers/credentials.py:421
securityAuth fastapi unauth mutation
api/routers/credentials.py:409
securityAuth fastapi unauth mutation
api/routers/podcasts.py:215
securityAuth fastapi unauth mutation
api/routers/sources.py:821
securityAuth fastapi unauth mutation
api/routers/insights.py:55
securityAuth fastapi unauth mutation
api/routers/search.py:17
securityAuth fastapi unauth mutation
api/routers/source_chat.py:483
securityAuth fastapi unauth mutation
api/routers/embedding_rebuild.py:18
securityAuth fastapi unauth mutation
api/routers/models.py:549
securityAuth fastapi unauth mutation
api/routers/models.py:522
securityAuth fastapi unauth mutation
api/routers/credentials.py:357
securityAuth fastapi unauth mutation
api/routers/models.py:270
securityAuth fastapi unauth mutation
api/routers/credentials.py:196
securityAuth fastapi unauth mutation
api/routers/models.py:315
securityAuth fastapi unauth mutation
api/routers/transformations.py:138
securityAuth fastapi unauth mutation
api/routers/episode_profiles.py:129
securityAuth fastapi unauth mutation
api/routers/notes.py:133
securityAuth fastapi unauth mutation
api/routers/notebooks.py:183
securityAuth fastapi unauth mutation
api/routers/chat.py:250
securityAuth fastapi unauth mutation
api/routers/settings.py:31
securityAuth fastapi unauth mutation
api/routers/source_chat.py:290
securityAuth fastapi unauth mutation
api/routers/sources.py:779
securityAuth fastapi unauth mutation
api/routers/speaker_profiles.py:105
securityAuth fastapi unauth mutation
api/routers/transformations.py:188
securityAuth fastapi unauth mutation
repo-level (2 hits)repo-level (2 hits)api/routers/settings.py:11 (2 hits)api/routers/embedding.py:12 (2 hits)api/routers/search.py:17 (2 hits)api/routers/settings.py:31 (2 hits)api/routers/commands.py:108 (2 hits)api/routers/episode_profiles.py:165 (2 hits)api/routers/insights.py:37 (2 hits)api/routers/models.py:252 (2 hits)api/routers/podcasts.py:272 (2 hits)api/routers/sources.py:946 (2 hits)api/routers/speaker_profiles.py:135 (2 hits)api/routers/transformations.py:235 (2 hits)api/routers/credentials.py:259 (2 hits)api/routers/context.py:12 (2 hits)repo-level (2 hits)api/routers/languages.py:62 (2 hits)uv.lock (2 hits)uv.lock (2 hits)frontend/package-lock.json (2 hits)frontend/package-lock.json (2 hits)open_notebook/ai/connection_tester.py:93, 128, 167 (6 hits)api/routers/podcasts.py:106, 158 (4 hits)open_notebook/database/async_migrate.py:205, 215 (4 hits)open_notebook/podcasts/models.py:241, 259 (4 hits)api/credentials_service.py:338 (2 hits)api/routers/chat.py:450 (2 hits)api/routers/commands.py:150 (2 hits)api/routers/context.py:41 (2 hits)Dockerfile:68 (2 hits)Dockerfile.single:54 (2 hits)Dockerfile:44, 90 (4 hits)Dockerfile.single:75 (2 hits)Dockerfile:56 (2 hits)uv.lock (2 hits)open_notebook/domain/base.py:217 (2 hits)frontend/package.json (2 hits)uv.lock (2 hits)uv.lock (2 hits)frontend/package-lock.json (2 hits).well-known/security.txt (2 hits)docs/1-INSTALLATION/from-source.md:11 (2 hits)frontend/package-lock.json (2 hits).github/workflows/build-and-release.yml:70, 73, 81, 129, 161, 164, 172, 220 (8 hits).github/workflows/build-dev.yml:93, 97, 105, 138, 172, 175, 183, 206 (8 hits).github/workflows/test.yml:25 (3 hits).github/workflows/build-and-release.yml
CI/CD securitySupply chainGithub actions
.github/workflows/build-dev.yml
CI/CD securitySupply chainGithub actions
api/main.py:63
Cors wildcard
frontend/src/app/layout.tsx:27
Dangerous innerhtml
.dockerignore (2 hits)frontend/package-lock.json (2 hits)docker-compose.yml:14 (2 hits)docker-compose.yml:1, 14 (4 hits)Dockerfile.single:57 (2 hits)frontend/src/components/podcasts/SpeakerProfilesPanel.tsx:11, 13 (4 hits)api/notes_service.py:30 (2 hits)api/podcast_service.py:88 (2 hits)api/routers/context.py:19 (2 hits)frontend/src/components/podcasts/EpisodeProfilesPanel.tsx:11 (2 hits)frontend/src/components/podcasts/forms/SpeakerProfileFormDialog.tsx:121 (2 hits)frontend/src/components/search/StreamingResponse.tsx:161 (2 hits)frontend/src/components/source/ChatPanel.tsx:325 (2 hits)frontend/package.json (2 hits)frontend/package.json (2 hits)frontend/package.json (2 hits)frontend/package.json (2 hits)frontend/package.json (2 hits)frontend/package.json (2 hits)frontend/package.json (2 hits)Dockerfile:2, 68 (2 hits)repo-level (19 hits)api/search_service.py:40
api/auth.py:82
api/chat_service.py:39
api/sources_service.py:224
api/podcast_api_service.py:83
api/podcast_api_service.py:25
api/chat_service.py:110
api/podcast_api_service.py:103
api/podcast_api_service.py:66
api/podcast_api_service.py:112
api/chat_service.py:124
api/sources_service.py:267
api/credentials_service.py:826
api/credentials_service.py:718
api/credentials_service.py:365
api/chat_service.py:79
api/podcast_api_service.py:92
Showing first 300 of 325. Refine filters or use the findings page for deep search.
This page is publicly accessible at:
https://repobility.com/scan/6acf376e-b59e-454e-a3e7-70f3dcebe5a4/
To check status programmatically (no auth required):
curl -s https://repobility.com/api/v1/public/scan/6acf376e-b59e-454e-a3e7-70f3dcebe5a4/
Important — please don't re-submit the same URL repeatedly. The submission endpoint is idempotent: re-submitting the same git URL returns this same scan_token, not a new one. To re-scan this repo, sign up free and use the dashboard.