Public scan — anyone with this URL can view this analysis. Sign up to track your own repos privately, run scheduled re-scans, and get AI fix prompts via your dashboard.
167 of your 259 findings came from Repobility's proprietary detections. ✓ Repobility tags below mark them.

Scan timing: clone 25.69s · analysis 9.68s · 36.1 MB · GitHub API rate-limit (preflight)

zylon-ai/private-gpt

https://github.com/zylon-ai/private-gpt · scanned 2026-06-05 09:58 UTC (5 days, 14 hours ago) · 10 languages

675 raw signals (243 security + 432 graph) 11/13 scanners ran 77th percentile · Python · large (100-500K LoC) System graph score 74 (higher by 10)

UNIFIED Repobility · multi-layer engine · AI coders

Complete repo analysis

Last scanned 5 days, 14 hours ago · v2 · 280 actionable findings from 2 signal sources. 159 repeated signals grouped for readability. Security checks, system graph analysis, and verified AI-agent feedback are merged into one review queue.

JSON
Score breakdown â 2026-05-18-v5
Component Sub-score Weight Contribution
structure_score 60.0 0.15 9.00
security_score 100.0 0.25 25.00
testing_score 90.0 0.20 18.00
documentation_score 86.0 0.15 12.90
practices_score 85.0 0.15 12.75
code_quality 61.0 0.10 6.10
Overall 1.00 83.8
security_score may be inflated — optional security scanners were skipped on this fast scan
Severity distribution — click a segment to filter
Active filters: excluding tests × Reset all
Scan summary Quality grade A- (84/100). Dimensions: security 100, maintainability 60. 243 findings (46 security). 109,316 lines analyzed.

Showing 212 of 280 actionable findings. 439 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.

critical Security checks quality Quality conf 1.00 ✓ Repobility [MINED030] Python Pickle Loads: pickle.loads() can execute arbitrary code via __reduce__.
Review and fix per the pattern semantics. See CWE-502 / for context.
private_gpt/components/readers/nodes/v2/document_node_v2.py:45
high Security checks quality Quality conf 1.00 ✓ Repobility 7 occurrences [MINED107] Missing import: `string` used but not imported: The file uses `string.something(...)` but never imports `string`. This raises NameError at runtime the first time the line executes.
Add `import string` at the top of the file.
7 files, 7 locations
private_gpt/chat/input_models.py:58
private_gpt/components/ingest/ingest_helper.py:57
private_gpt/components/readers/text/email_reader.py:132
private_gpt/components/tabular/database_query_generator.py:1066
private_gpt/components/vector_store/patched_qdrant_store.py:802
private_gpt/components/web/web_search/processors/select_best_links.py:153
private_gpt/server/chat/interceptors/condensation_interceptor.py:113
critical Security checks quality Quality conf 1.00 [SEC081] Python: pickle.loads / marshal.loads on untrusted data: pickle.load(s) and marshal.load(s) execute arbitrary code on untrusted input. Ported from dlint DUO103 / DUO120 (BSD-3).
Use json, msgpack, or protobuf for untrusted data. If pickle is required, sign the payload with HMAC.
private_gpt/components/readers/nodes/v2/document_node_v2.py:45
critical Security checks cicd CI/CD security conf 0.96 5 occurrences Docker image bakes a secret-like ENV value
Remove the secret from the Dockerfile, rotate the value if real, and inject runtime secrets through your platform secret manager.
lines 127, 128, 129, 214, 215
Dockerfile:127, 128, 129, 214, 215 (5 hits)
CI/CD securitycontainers
low Security checks cicd CI/CD security conf 0.35 ✓ Repobility 2 occurrences Workflow references repository secrets in a pull_request workflow
Fork pull_request runs do not receive normal repository secrets on GitHub Actions. Review this as a reliability/intent signal, not as direct fork-secret exfiltration. Raise severity only for pull_request_target or another trusted-context path that runs untrusted PR code with secrets.
lines 23, 51
.github/workflows/post-release-please.yml:23, 51 (2 hits)
CI/CD securityworkflow secretsGitHub Actions
low Security checks quality Quality conf 1.00 ✓ Repobility 3 occurrences [MINED006] Overcatch Baseexception: except BaseException: ... — prevents Ctrl+C and SystemExit from working.
Review and fix per the pattern semantics. See CWE-705 / for context.
3 files, 3 locations
private_gpt/celery/tasks/ingestion/extraction_tasks.py:121
private_gpt/cli/commands/worker.py:150
private_gpt/server/chat/interceptors/condensation_interceptor.py:191
high Security checks quality Quality conf 1.00 ✓ Repobility [MINED020] Logging Credential Via Fstring: logger.error(f"failed for {api_key}") — secrets end up in log aggregators / sentry.
Review and fix per the pattern semantics. See CWE-532 / A09:2021 for context.
private_gpt/components/workflows/others/summary.py:213
high Security checks quality Quality conf 1.00 ✓ Repobility [MINED034] Python Subprocess Shell True: subprocess(..., shell=True) enables command injection.
Review and fix per the pattern semantics. See CWE-78 / for context.
private_gpt/components/sandbox/local.py:35
high Security checks quality Quality conf 1.00 ✓ Repobility 6 occurrences [MINED108] `self._create_error_response` used but never assigned in __init__: Method `__call__` of class `ExceptionMiddleware` reads `self._create_error_response`, but no assignment to it exists in __init__ (and no class-level fallback). This raises AttributeError the first time the method runs against an instance.
Initialize `self._create_error_response = <default>` in __init__, or add a class-level default.
2 files, 6 locations
scripts/ingest_folder.py:53, 56, 60, 61, 75 (5 hits)
private_gpt/global_handler.py:41
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI DELETE /{message_id}/delete has no auth: Handler `delete_stream` is registered with router/app.delete(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/chat_async/chat_async_router.py:618
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI DELETE /{skill_id} has no auth: Handler `delete_skill` is registered with router/app.delete(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/skills/skill_router.py:270
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI DELETE /{skill_id}/versions/{version} has no auth: Handler `delete_skill_version` is registered with router/app.delete(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/skills/skill_router.py:539
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST (unknown path) has no auth: Handler `chat_messages` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/chat_async/chat_async_router.py:197
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST (unknown path) has no auth: Handler `create_skill` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/skills/skill_router.py:84
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /chunked-content has no auth: Handler `chunked_content_retrieval` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/content/content_router.py:523
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /complete has no auth: Handler `create_completion` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/completion/completion_router.py:23
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /content has no auth: Handler `content_retrieval` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/content/content_router.py:333
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /delete has no auth: Handler `delete_ingested` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/ingest/ingest_router.py:896
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /delete/async has no auth: Handler `delete_ingested_async` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/ingest/ingest_router.py:945
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /embeddings has no auth: Handler `embeddings_generation` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/embeddings/embeddings_router.py:283
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /ingest has no auth: Handler `ingest_content` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/ingest/ingest_router.py:412
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /ingest/async has no auth: Handler `ingest_content_async` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/ingest/ingest_router.py:564
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /messages has no auth: Handler `chat_messages` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/chat/chat_router.py:222
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /messages/count_tokens has no auth: Handler `count_message_tokens` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/chat/chat_router.py:274
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /messages/validate has no auth: Handler `validate_messages` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/chat/chat_router.py:388
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /search has no auth: Handler `search` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/primitives/primitives_router.py:304
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /tools/database-query has no auth: Handler `database_query` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/tools/tool_router.py:429
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /tools/semantic-search has no auth: Handler `semantic_search` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/tools/tool_router.py:211
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /tools/tabular-data-analysis has no auth: Handler `tabular_data_analysis` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/tools/tool_router.py:320
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /tools/web-fetch has no auth: Handler `web_fetch` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/tools/tool_router.py:515
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /tools/web-search has no auth: Handler `web_search` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/tools/tool_router.py:610
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /{message_id}/cancel has no auth: Handler `cancel_stream` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/chat_async/chat_async_router.py:556
high Security checks quality Quality conf 0.80 ✓ Repobility [MINED112] FastAPI POST /{skill_id}/versions has no auth: Handler `create_skill_version` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function body.
Add Depends(get_current_user) or Security(...) to the handler signature. If the route is truly public, document it with a code comment so the rule knows it's intentional.
private_gpt/server/skills/skill_router.py:345
high Security checks software dependencies conf 0.90 ✓ Repobility [MINED118] Dockerfile FROM `python:3.11.10-slim-bookworm` not pinned by digest: `FROM python:3.11.10-slim-bookworm` resolves the tag at build time. The registry CAN re-push a different image for the same tag, so every build is potentially different. Production images should pin to `image@sha256:...` for reproducibility + supply-chain integrity.
Replace with: `FROM python:3.11.10-slim-bookworm@sha256:<digest>`. Get the digest from `docker manifest inspect`. Re-pin via a scheduled bot (Renovate, Dependabot).
Dockerfile:2
high Security checks security Injection conf 0.50 [SEC004] SQL Injection Risk: String interpolation in SQL execution. Allows SQL injection.
Use parameterized queries: cursor.execute('SELECT * FROM t WHERE id = %s', [id]). For dynamic table or column names, choose identifiers from a hard-coded allowlist and keep values in parameters.
private_gpt/components/code_execution/local.py:134
low Security checks cicd CI/CD security conf 0.90 ✓ Repobility 43 occurrences GitHub Action is tag-pinned rather than SHA-pinned
[MINED115] Action `actions/checkout` pinned to mutable ref `@v6`: `uses: actions/checkout@v6` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that made the tj-actions/changed-files compromise (2025) instantly affect ~23K repos. Pin to a 40-char commit SHA + lo…
7 files, 43 locations
.github/workflows/generate-release.yml:30, 61, 98, 101, 106, 175, 225, 228, +1 more (18 hits)
.github/workflows/preview-docs.yml:20, 25, 44 (6 hits)
.github/workflows/tests.yml:33, 42, 49, 55 (6 hits)
.github/workflows/fern-check.yml:15, 18 (4 hits)
.github/workflows/post-release-please.yml:20, 48 (4 hits)
.github/workflows/publish-docs.yml:15, 18 (4 hits)
.github/workflows/update-claude-specs.yml:16
CI/CD securitySupply chainGitHub Actions
high System graph security security conf 1.00 Insecure pattern 'eval_used' in private_gpt/components/concurrency/redis_semaphore_manager.py:90
Found a known-risky pattern (eval_used). Review and replace if possible.
private_gpt/components/concurrency/redis_semaphore_manager.py:90 Eval used
high System graph security security conf 1.00 Insecure pattern 'eval_used' in private_gpt/components/llm/custom/sagemaker.py:336
Found a known-risky pattern (eval_used). Review and replace if possible.
private_gpt/components/llm/custom/sagemaker.py:336 Eval used
high System graph security security conf 1.00 Insecure pattern 'tls_verify_false' in private_gpt/components/storage/s3_helper.py:48
Found a known-risky pattern (tls_verify_false). Review and replace if possible.
private_gpt/components/storage/s3_helper.py:48 Tls verify false
medium Security checks security auth conf 0.92 [AUC001] No Repobility access matrix policy found: The repository uses web/API frameworks but does not define .repobility/access.yml or equivalent authorization documentation.
Add .repobility/access.yml mapping routes to anonymous, authenticated, owner, admin, and super_admin. Keep business-specific rules in the repo so CI can enforce them.
high Security checks security auth conf 0.74 [AUC002] Low visible authorization coverage in route inventory: Only 33.3% of discovered routes show nearby authentication, authorization, middleware, or public-route evidence.
Review the access matrix and add explicit framework auth declarations or policy-file exceptions for intentionally public routes.
medium Security checks security auth conf 0.72 [AUC012] FastAPI interactive docs may be exposed by framework defaults: FastAPI exposes /docs, /redoc, and /openapi.json by default. Public production APIs should explicitly disable those defaults, protect them behind admin authentication, or publish a reviewed OpenAPI spec with declared security requirements.
Set docs_url=None, redoc_url=None, and openapi_url=None for production apps unless the docs are intentionally public and protected by routing, ingress, or an authenticated docs handler.
low Security checks quality Error handling conf 1.00 [ERR001] Silent Exception Swallowing: Silently swallowing all exceptions hides bugs. Even in cleanup code, log at DEBUG level.
Log the error: `except Exception: logger.debug('cleanup failed', exc_info=True)`. Or handle specific exception types.
private_gpt/components/streaming/stream/stream_processor.py:113
low Security checks security Injection conf 0.50 [SEC005] Command Injection Risk: Unsafe shell execution or eval of user input.
Use subprocess with shell=False and a list of args. Never eval user input.
private_gpt/components/sandbox/local.py:35
low Security checks security Deserialization conf 1.00 [SEC007] Unsafe Deserialization: Unsafe deserialization can execute arbitrary code.
Use yaml.safe_load() instead of yaml.load(). Avoid pickle for untrusted data.
private_gpt/components/readers/nodes/v2/document_node_v2.py:45
medium Security checks security path traversal conf 1.00 [SEC012] ZipSlip — Archive Path Traversal: Archive extraction without path validation allows writing files outside the target directory.
Validate extracted paths with os.path.realpath() and ensure they stay within the target directory.
private_gpt/initialize.py:55
medium Security checks security Crypto conf 1.00 [SEC014] SSL Verification Disabled: SSL certificate verification is disabled, allowing man-in-the-middle attacks.
Enable SSL verification. Use verify=True (default) for requests. Pin certificates if needed.
private_gpt/components/storage/s3_helper.py:48
low Security checks quality Quality conf 1.00 3 occurrences [SEC136] AI-typical over-broad exception handler swallowing all errors: Catch-all exception block that silently returns success or no-ops. AI agents reach for this pattern when a flaky test or an unfamiliar API throws — wrap, swallow, return success. Real bugs are masked, observability is destroyed, and callers think the operation worked. CWE-396 (improperly-generalized exception). Distinct from intentional fallback because there's no log line and the success value is fabricated.
Catch the specific exception type, log at error level with full exception info, and return a failure-shaped result. If the operation is genuinely best-effort, log at warning and document why in a comment so the next reader (or scanner) knows.
3 files, 3 locations
private_gpt/cli/commands/run.py:106
private_gpt/components/database/table_like_inspector.py:92
private_gpt/components/engines/citations/term_extractor.py:57
high Security checks quality Quality conf 0.72 Agent control bridge may listen on a network interface without visible auth
Bind local agent bridges to 127.0.0.1 by default. If remote access is required, require a bearer token or mTLS, enforce origin/CSRF checks for browser clients, and document the threat model.
private_gpt/launcher.py:1
low Security checks quality Error handling conf 0.55 ✓ Repobility 17 occurrences Broad exception handler needs review
This handler catches Exception/BaseException. It is actionable when it swallows errors without logging, re-raising, or returning a structured error. Handlers that intentionally convert exceptions into typed error results should not be treated as high risk.
10 files, 17 locations
private_gpt/components/database/procedure_inspector.py:117, 205, 285 (3 hits)
private_gpt/components/tabular/database_query_generator.py:280, 299, 1199 (3 hits)
private_gpt/cli/commands/run.py:40, 114 (2 hits)
private_gpt/components/database/function_inspector.py:118, 206 (2 hits)
private_gpt/components/web/web_scraper_service.py:330, 375 (2 hits)
private_gpt/components/llm/utils.py:17
private_gpt/components/tools/binary_block_decorators.py:166
private_gpt/events/interceptors/ping_event_interceptor.py:31
Error handlingquality
medium Security checks cicd CI/CD security conf 0.76 2 occurrences Docker build secret exposed through ARG
Replace secret ARG usage with `RUN --mount=type=secret,id=name ...` and pass the value with `docker build --secret`.
lines 119, 120
Dockerfile:119, 120 (2 hits)
CI/CD securitycontainers
high Security checks cicd CI/CD security conf 0.82 Docker final stage has no non-root USER
Add a non-root USER in the final runtime stage after files and permissions are prepared.
Dockerfile:174 CI/CD securitycontainers
medium Security checks quality Quality conf 0.78 Public web service has no security.txt
Add /.well-known/security.txt with Contact, Expires, Canonical, Preferred-Languages, and Policy fields. Keep the contact endpoint monitored.
.well-known/security.txt
high Security checks software dependencies conf 0.70 3 occurrences Remote install command pipes network code directly to a shell
Publish a package-manager install path or add checksum/signature verification before execution. For docs, show the inspect-then-run flow and pin the downloaded artifact version.
3 files, 3 locations
README.md:65
fern/docs/pages/getting-started/quickstart.mdx:18
fern/docs/pages/installation/local.mdx:31
medium System graph hardware Security conf 1.00 Dockerfile runs as root: Dockerfile
No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image.
Container
medium System graph cicd CI/CD security conf 1.00 9 occurrences GitHub Action is tag-pinned rather than SHA-pinned
AnimMouse/[email protected] can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA.
3 files, 9 locations
.github/workflows/generate-release.yml:164, 178, 181, 184, 191, 203 (7 hits)
.github/workflows/actions/install_dependencies/action.yml:31
.github/workflows/release-please.yml:16
CI/CD securitySupply chainGitHub Actions
medium System graph cicd CI/CD security conf 1.00 4 occurrences GitHub Actions workflow grants broad write permissions
CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions.
4 files, 4 locations
.github/workflows/generate-release.yml
.github/workflows/post-release-please.yml
.github/workflows/release-please.yml
.github/workflows/update-claude-specs.yml
CI/CD securitySupply chainGithub actions
medium System graph security security conf 1.00 Insecure pattern 'subprocess_shell_true' in private_gpt/components/sandbox/local.py:37
Found a known-risky pattern (subprocess_shell_true). Review and replace if possible.
private_gpt/components/sandbox/local.py:37 Subprocess shell true
medium System graph quality Integrity conf 1.00 Network/subprocess call without timeout or try/except — private_gpt/cli/commands/run.py:363
`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries.
runtime safetyRobustness
medium System graph quality Integrity conf 1.00 Network/subprocess call without timeout or try/except — private_gpt/server/ingest/uri_loader.py:12
`requests.get(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries.
runtime safetyRobustness
medium System graph quality Integrity conf 1.00 Network/subprocess call without timeout or try/except — scripts/set_version.py:53
`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries.
runtime safetyRobustness
medium System graph quality Integrity conf 1.00 Network/subprocess call without timeout or try/except — scripts/update_claude_specs.py:77
`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries.
runtime safetyRobustness
medium System graph security Coverage conf 1.00 No auth library detected
The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). Either auth lives in custom code, in a separate service, or is missing.
auth
low Security checks cicd CI/CD security conf 0.72 .dockerignore misses sensitive defaults
Add missing patterns such as .env, .git, private keys, certificates, dependency folders, and local databases.
.dockerignore CI/CD securitycontainers
high Security checks cicd CI/CD security conf 0.72 2 occurrences Dockerfile keeps pip download cache
Use `pip install --no-cache-dir ...` in container builds.
lines 133, 206
Dockerfile:133, 206 (2 hits)
CI/CD securitycontainers
low Security checks quality Quality conf 0.60 21 occurrences Duplicated implementation block across source files
Duplicate implementation blocks are maintenance debt. Keep them visible, but they are not a high-severity defect unless the duplicated logic is security-sensitive or drifting.
12 files, 15 locations
private_gpt/components/llm/tokenizers/tiktoken.py:65, 66 (2 hits)
private_gpt/components/tools/tool_factories.py:38, 71 (2 hits)
private_gpt/server/chat_async/chat_async_router.py:31, 110 (2 hits)
private_gpt/components/concurrency/redis_semaphore_manager.py:81
private_gpt/components/database/procedure_inspector.py:34
private_gpt/components/llm/registry.py:60
private_gpt/components/llm/tokenizers/mistral.py:437
private_gpt/components/llm/tokenizers/remote.py:67
duplicationquality
low System graph quality Maintenance conf 1.00 40 TODO/FIXME markers
High count of TODO/FIXME/HACK markers — track them as issues so they're not forgotten.
low System graph hardware Coverage conf 1.00 Containers defined but no K8s/orchestration manifest found
Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo.
Deployment
low System graph hardware Supply chain conf 1.00 Docker base image is tag-pinned but not digest-pinned: python:3.11.10-slim-bookworm
Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter.
Dockerfile:2 containersPinned dependencies
low System graph software Dead code candidate conf 1.00 File has no detected symbols: private_gpt/__main__.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: private_gpt/celery/states.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: private_gpt/components/engines/chat_loop/types.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: private_gpt/components/workflows/types.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: private_gpt/constants.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: private_gpt/main.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: private_gpt/utils/custom_typing.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph software Dead code candidate conf 1.00 File has no detected symbols: scripts/extract_openapi.py
Source file with no class/function declarations — possible config, dead code, or scratch file.
low System graph quality Tests conf 1.00 Low test-to-source ratio
109 tests / 564 src (ratio 0.19).
low System graph quality Integrity conf 1.00 16 occurrences Near-duplicate function bodies in 2 places
Functions with the same first-5-line body hash: private_gpt/settings/settings.py:model_post_init, private_gpt/settings/settings.py:model_post_init This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hygiene). Consolidate or document why they're …
16 occurrences
repo-level (16 hits)
duplicatesduplication
low System graph quality Integrity conf 1.00 3 occurrences Near-duplicate function bodies in 3 places
Functions with the same first-5-line body hash: private_gpt/events/models/_events.py:from_defaults, private_gpt/events/models/_events.py:from_defaults, private_gpt/events/models/_events.py:from_defaults This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.h…
3 occurrences
repo-level (3 hits)
duplicatesduplication
low System graph quality Integrity conf 1.00 Near-duplicate function bodies in 4 places
Functions with the same first-5-line body hash: private_gpt/celery/base.py:get, private_gpt/celery/base.py:increment, private_gpt/celery/base.py:decrement, private_gpt/celery/base.py:cleanup This is *the* AI-coder failure mode (4× more duplication in vibe-coded repos — see https://jw.hn/ai-code-hy…
duplicatesduplication
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `bash_v1` in tests/components/tools/test_tool_pipeline.py:46
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `create_v2` in tests/server/skills/test_skill_routes.py:230
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `database_query_v1` in private_gpt/components/chat/models/chat_config_models.py:112
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `database_query_v1` in private_gpt/server/chat/chat_models.py:248
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `df_copy` in private_gpt/components/ingest/processors/df_preprocessor.py:248
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `dlparse_v2` in private_gpt/components/readers/docling/api_clients.py:72
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `document_node_v2` in private_gpt/components/ingest/transformations/markdown_to_tree_transform.py:23
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `document_node_v2` in private_gpt/components/readers/nodes/utils.py:18
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `document_node_v2` in tests/components/readers/nodes/test_node_structure.py:21
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `file_info_copy` in private_gpt/components/readers/pptx2md/convert_slide_into_image.py:157
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `list_objects_v2` in private_gpt/components/storage/s3_helper.py:126
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `load_skill_v1` in tests/components/skills/test_skill_management_builder.py:76
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `load_skill_v1` in tests/server/chat/test_chat_routes_skills_integration.py:118
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/artifact_index/base_artifact_index.py:579
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/chat/input_models.py:594
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/chat/schema_models.py:23
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/components/chat/processors/chat_history/multimodality/audio_preprocessor.py:70
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/components/chat/processors/chat_history/multimodality/image_preprocessor.py:70
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/components/chat/processors/chat_history/multimodality/multimodality_preprocessor.py:26
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/components/engines/chat_loop/chat_loop_engine.py:238
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/components/engines/chat_loop/interceptors/chat_loop_interceptor.py:20
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/components/engines/chat_loop/interceptors/chat_loop_interceptor_chain.py:32
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/components/engines/chat_loop/interceptors/ensure_index_is_refreshed_interceptor.py:39
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/components/engines/chat_loop/interceptors/ensure_timestamp_in_content_blocks_interceptors.py:35
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/components/engines/chat_loop/interceptors/ensure_tools_are_flatten_interceptor.py:50
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/components/engines/chat_loop/models/chat_loop_state.py:38
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/components/ingest/transformations/slide_header_checker_transform.py:72
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/components/memory/trimming_memory.py:295
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/components/prompts/prompt_builder.py:559
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/components/tools/builders/semantic_search_builder.py:113
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/components/tools/builders/tabular_data_builder.py:144
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/server/chat/interceptors/document_processing_interceptor.py:47
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/server/chat/interceptors/extract_citation_interceptor.py:42
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/server/chat/interceptors/filter_event_by_type_interceptor.py:51
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/server/chat/interceptors/ping_loop_interceptor.py:47
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/server/chat/interceptors/schema_coercing_tool_interceptor.py:333
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/server/chat/interceptors/system_prompt_interceptor.py:44
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in private_gpt/server/chat/interceptors/tool_choice_interceptor.py:38
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in tests/components/multimodality/test_multimodality.py:349
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in tests/components/skills/test_skill_service_storage_atomicity.py:23
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in tests/components/tools/test_code_execution_builders.py:18
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in tests/components/tools/test_code_execution_local.py:10
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in tests/engines/test_chat_agent_engine.py:67
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `model_copy` in tests/server/chat/test_chat_service.py:40
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `read_file_v1` in private_gpt/components/toolsets/factories/filesystem_toolset_factory.py:19
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `request_copy` in private_gpt/components/tools/tool_pipeline.py:66
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `semantic_search_v1` in private_gpt/components/tools/processors/base.py:37
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `snap_old` in tests/components/llm/tokenizers/models/test_cache_evolution.py:25
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `tokenizer_v1` in tests/components/llm/tokenizers/models/test_concurrency.py:410
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `tool_copy` in private_gpt/server/chat/interceptors/null_tool_values_interceptor.py:48
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `web_extract_v1` in tests/components/tools/test_tool_names.py:9
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `web_search_v1` in tests/server/chat/interceptors/test_skill_tool_visibility_interceptor.py:18
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph quality Integrity conf 1.00 Old/deprecated-named symbol `web_search_v1` in tests/server/chat/test_chat_knowledge_revamp.py:160
Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version.
old markerDead code
low System graph software Dead code conf 1.00 Possibly dead Python function: analyze_texts
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/components/engines/citations/utils.py:53
low System graph software Dead code conf 1.00 Possibly dead Python function: detect_language
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/components/engines/citations/term_extractor.py:45
low System graph software Dead code conf 1.00 Possibly dead Python function: eta
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/utils/eta.py:38
low System graph software Dead code conf 1.00 Possibly dead Python function: filter_health_logs
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/launcher.py:169
low System graph software Dead code conf 1.00 Possibly dead Python function: generate_fake_percentage_fn
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/celery/notify.py:78
low System graph software Dead code conf 1.00 Possibly dead Python function: ingest_on_watch
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
scripts/ingest_folder.py:73
low System graph software Dead code conf 1.00 Possibly dead Python function: latest_user_text
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/components/engines/chat_loop/utils/message_utils.py:4
low System graph software Dead code conf 1.00 Possibly dead Python function: load_env_var
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/settings/yaml.py:22
low System graph software Dead code conf 1.00 Possibly dead Python function: register_backend_config
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/celery/backend_config.py:38
low System graph software Dead code conf 1.00 Possibly dead Python function: register_broker_config
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/celery/broker_config.py:53
low System graph software Dead code conf 1.00 Possibly dead Python function: register_observability
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/initialize.py:113
low System graph software Dead code conf 1.00 Possibly dead Python function: register_semaphore_manager
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/components/concurrency/registry.py:63
low System graph software Dead code conf 1.00 Possibly dead Python function: register_task_packages
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/celery/task_registry.py:6
low System graph software Dead code conf 1.00 Possibly dead Python function: request_validation_exception_adapter
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/global_handler.py:67
low System graph software Dead code conf 1.00 Possibly dead Python function: retry_func
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/utils/retry.py:51
low System graph software Dead code conf 1.00 Possibly dead Python function: run_command
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/cli/commands/run.py:269
low System graph software Dead code conf 1.00 Possibly dead Python function: safe_next
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/utils/async_utils.py:55
low System graph software Dead code conf 1.00 Possibly dead Python function: send_wrapper
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/global_handler.py:34
low System graph software Dead code conf 1.00 Possibly dead Python function: serve_command
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/cli/commands/serve.py:19
low System graph software Dead code conf 1.00 Possibly dead Python function: skip_return_nodes
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/components/engines/citations/utils.py:180
low System graph software Dead code conf 1.00 Possibly dead Python function: stop_generator
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/celery/notify.py:100
low System graph software Dead code conf 1.00 Possibly dead Python function: task_after_return
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/celery/callback.py:95
low System graph software Dead code conf 1.00 Possibly dead Python function: timeit
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/utils/time.py:19
low System graph software Dead code conf 1.00 Possibly dead Python function: to_async_iterator
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/utils/async_utils.py:25
low System graph software Dead code conf 1.00 Possibly dead Python function: to_prompt_or_token_ids
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/utils/tokens.py:103
low System graph software Dead code conf 1.00 Possibly dead Python function: update_heartbeat_file
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/celery/bootsteps.py:33
low System graph software Dead code conf 1.00 Possibly dead Python function: upsert_system_message
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/components/engines/chat_loop/utils/message_utils.py:18
low System graph software Dead code conf 1.00 Possibly dead Python function: worker_command
No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler.
private_gpt/cli/commands/worker.py:60
low System graph quality Integrity conf 1.00 Stub function `_messages_to_prompt` (body is just `pass`/`return`) — private_gpt/components/llm/prompt_styles/prompt_style_base.py:85
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `convert_from_bytes` (body is just `pass`/`return`) — private_gpt/components/readers/docling/api_clients.py:213
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `get_content_internal` (body is just `pass`/`return`) — private_gpt/components/readers/nodes/tree_node.py:399
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `get_metadata` (body is just `pass`/`return`) — private_gpt/components/llm/custom/base.py:169
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `get_objects` (body is just `pass`/`return`) — private_gpt/components/database/table_like_inspector.py:19
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `get_type` (body is just `pass`/`return`) — private_gpt/components/database/inspected_schema.py:64
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `get_type` (body is just `pass`/`return`) — private_gpt/components/database/inspector_interface.py:19
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `initialize` (body is just `pass`/`return`) — private_gpt/artifact_index/base_artifact_index.py:63
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `retrieve` (body is just `pass`/`return`) — private_gpt/components/workflows/others/summary_retriever.py:16
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `set_content` (body is just `pass`/`return`) — private_gpt/components/readers/nodes/partial_node.py:30
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph quality Integrity conf 1.00 Stub function `update` (body is just `pass`/`return`) — private_gpt/events/models/_events.py:110
Likely an AI scaffold that was never filled in. Remove or implement.
Empty handlerDead code
low System graph api Wiring conf 1.00 Unused endpoint: DELETE /{message_id}/delete
`private_gpt/server/chat_async/chat_async_router.py` declares `DELETE /{message_id}/delete` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: DELETE /{skill_id}
`private_gpt/server/skills/skill_router.py` declares `DELETE /{skill_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: DELETE /{skill_id}/versions/{version}
`private_gpt/server/skills/skill_router.py` declares `DELETE /{skill_id}/versions/{version}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting wh…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /
`private_gpt/server/skills/skill_router.py` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /delete/async/{task_id}
`private_gpt/server/ingest/ingest_router.py` declares `GET /delete/async/{task_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consume…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /ingest/async/{task_id}
`private_gpt/server/ingest/ingest_router.py` declares `GET /ingest/async/{task_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consume…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /list
`private_gpt/server/ingest/ingest_router.py` declares `GET /list` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /models
`private_gpt/server/models/models_router.py` declares `GET /models` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /models/{model_id}
`private_gpt/server/models/models_router.py` declares `GET /models/{model_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /{message_id}/status
`private_gpt/server/chat_async/chat_async_router.py` declares `GET /{message_id}/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who co…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /{message_id}/stream
`private_gpt/server/chat_async/chat_async_router.py` declares `GET /{message_id}/stream` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who co…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /{skill_id}
`private_gpt/server/skills/skill_router.py` declares `GET /{skill_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /{skill_id}/versions
`private_gpt/server/skills/skill_router.py` declares `GET /{skill_id}/versions` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: GET /{skill_id}/versions/{version}
`private_gpt/server/skills/skill_router.py` declares `GET /{skill_id}/versions/{version}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who c…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /
`private_gpt/server/skills/skill_router.py` declares `POST /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /chunked-content
`private_gpt/server/content/content_router.py` declares `POST /chunked-content` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /complete
`private_gpt/server/completion/completion_router.py` declares `POST /complete` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /content
`private_gpt/server/content/content_router.py` declares `POST /content` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /delete
`private_gpt/server/ingest/ingest_router.py` declares `POST /delete` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /delete/async
`private_gpt/server/ingest/ingest_router.py` declares `POST /delete/async` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /embeddings
`private_gpt/server/embeddings/embeddings_router.py` declares `POST /embeddings` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes i…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /ingest
`private_gpt/server/ingest/ingest_router.py` declares `POST /ingest` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /ingest/async
`private_gpt/server/ingest/ingest_router.py` declares `POST /ingest/async` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /messages
`private_gpt/server/chat/chat_router.py` declares `POST /messages` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /messages/count_tokens
`private_gpt/server/chat/chat_router.py` declares `POST /messages/count_tokens` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /messages/validate
`private_gpt/server/chat/chat_router.py` declares `POST /messages/validate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /search
`private_gpt/server/primitives/primitives_router.py` declares `POST /search` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /tools/database-query
`private_gpt/server/tools/tool_router.py` declares `POST /tools/database-query` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /tools/semantic-search
`private_gpt/server/tools/tool_router.py` declares `POST /tools/semantic-search` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes i…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /tools/tabular-data-analysis
`private_gpt/server/tools/tool_router.py` declares `POST /tools/tabular-data-analysis` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who cons…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /tools/web-fetch
`private_gpt/server/tools/tool_router.py` declares `POST /tools/web-fetch` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /tools/web-search
`private_gpt/server/tools/tool_router.py` declares `POST /tools/web-search` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes it.
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /{message_id}/cancel
`private_gpt/server/chat_async/chat_async_router.py` declares `POST /{message_id}/cancel` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who c…
Unused endpoint
low System graph api Wiring conf 1.00 Unused endpoint: POST /{skill_id}/versions
`private_gpt/server/skills/skill_router.py` declares `POST /{skill_id}/versions` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code — consider removing or documenting who consumes i…
Unused endpoint
low System graph quality Complexity conf 1.00 Very large file: private_gpt/chat/input_models.py (1494 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: private_gpt/settings/settings.py (1592 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: tests/server/chat/test_chat_routes.py (2318 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: tests/server/chat/test_input_models.py (2315 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
low System graph quality Complexity conf 1.00 Very large file: tests/server/chat/test_schema_models.py (2431 lines)
Files with >800 lines often hide complexity hotspots and discourage tests.
For AI agents: Voting guide (TP/FP) MCP manifest Stdio wrapper SARIF Integrate Findings queue Vote TP/FP on findings to calibrate the engine.
For AI agents + API integrations
Email me when this repo regresses
Free. We re-scan periodically; new criticals → your inbox. No signup required for the scan itself.
API access

This page is publicly accessible at: https://repobility.com/scan/236a1059-41c1-4798-8b77-d160d63718b9/

To check status programmatically (no auth required):

curl -s https://repobility.com/api/v1/public/scan/236a1059-41c1-4798-8b77-d160d63718b9/

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.