github Python analyzed b24431f

semcod/pfix

github

Self-healing Python — catches runtime errors, fixes code & dependencies via LLM + MCP

maintainer
semcod
licence
NOASSERTION
first seen
2026-06-29
last seen
2026-09-08
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 7 tools
transport stdio · sse counts 7 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • pfix_analyze
  • pfix_deps_generate
  • pfix_deps_install
  • pfix_deps_scan
  • pfix_diagnose
  • pfix_edit_file
  • pfix_fix
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit b24431f · analyzer v33 · 3d ago

skills & prompt files 1

danger signals12

code evidence vHEAD · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 148

filesystem 82

  • fs (weak) semcod-pfix-b24431f/examples/concurrency/main.py :15 exec(open("async_mistakes.py").read(), {"__name__": "__main__", "pfix": pfix})
  • fs (weak) semcod-pfix-b24431f/examples/data/main.py :15 exec(open("numeric_errors.py").read(), {"__name__": "__main__", "pfix": pfix})
  • fs (weak) semcod-pfix-b24431f/examples/deps/main.py :15 exec(open("package_traps.py").read(), {"__name__": "__main__", "pfix": pfix})
  • fs (weak) semcod-pfix-b24431f/examples/edge_cases/main.py :15 exec(open("class_errors.py").read(), {"__name__": "__main__", "pfix": pfix})
  • fs (weak) semcod-pfix-b24431f/examples/edge_cases/python_gotchas.py :10 f = open(path) # No 'with' — resource leak
  • fs (weak) semcod-pfix-b24431f/examples/encoding/main.py :15 exec(open("codec_errors.py").read(), {"__name__": "__main__", "pfix": pfix})
  • fs (weak) semcod-pfix-b24431f/examples/encoding/unicode_errors.py :14 with open(path, "wb") as f:
  • fs (weak) semcod-pfix-b24431f/examples/environment/env_var_errors.py :37 with open(config_path) as f:
  • fs (weak) semcod-pfix-b24431f/examples/environment/main.py :15 exec(open("env_var_errors.py").read(), {"__name__": "__main__", "pfix": pfix})
  • fs (weak) semcod-pfix-b24431f/examples/filesystem/file_errors.py :11 with open("config.json") as f: # FileNotFoundError: config.json doesn't exist
  • fs (weak) semcod-pfix-b24431f/examples/filesystem/main.py :15 exec(open("file_errors.py").read(), {"__name__": "__main__", "pfix": pfix})
  • fs (weak) semcod-pfix-b24431f/examples/imports/main.py :15 exec(open("missing_module.py").read(), {"__name__": "__main__", "pfix": pfix})
show 28 more
  • fs (weak) semcod-pfix-b24431f/examples/imports/missing_module.py :20 with open(path) as f:
  • fs (weak) semcod-pfix-b24431f/examples/imports/platform_specific.py :11 with open(path, "rb") as f:
  • fs (weak) semcod-pfix-b24431f/examples/memory/main.py :9 content = open(path).read() # Loads entire file — OOM on large files
  • fs (weak) semcod-pfix-b24431f/examples/production/api_patterns.py :87 with open(config_path) as f:
  • fs (weak) semcod-pfix-b24431f/examples/production/cascading_errors.py :19 with open("/etc/myapp/database.json") as f:
  • fs (weak) semcod-pfix-b24431f/examples/production/main.py :15 exec(open("api_patterns.py").read(), {"__name__": "__main__", "pfix": pfix})
  • fs (weak) semcod-pfix-b24431f/examples/reset.py :11 from pathlib import Path
  • fs (weak) semcod-pfix-b24431f/examples/run_all.py :13 from pathlib import Path
  • fs semcod-pfix-b24431f/src/pfix/__init__.py :91 from pathlib import Path
  • fs semcod-pfix-b24431f/src/pfix/_auto_activate.py :10 from pathlib import Path
  • fs semcod-pfix-b24431f/src/pfix/analyzer.py :14 from pathlib import Path
  • fs semcod-pfix-b24431f/src/pfix/audit.py :13 from pathlib import Path
  • fs semcod-pfix-b24431f/src/pfix/cache.py :15 from pathlib import Path
  • fs semcod-pfix-b24431f/src/pfix/commands/activation.py :3 import shutil
  • fs semcod-pfix-b24431f/src/pfix/commands/config.py :4 from pathlib import Path
  • fs semcod-pfix-b24431f/src/pfix/commands/diagnose.py :3 from pathlib import Path
  • fs semcod-pfix-b24431f/src/pfix/commands/run.py :6 from pathlib import Path
  • fs semcod-pfix-b24431f/src/pfix/config.py :10 import shutil
  • fs semcod-pfix-b24431f/src/pfix/dashboard.py :14 from pathlib import Path
  • fs semcod-pfix-b24431f/src/pfix/dependency.py :17 from pathlib import Path
  • fs semcod-pfix-b24431f/src/pfix/diff_fixer.py :11 from pathlib import Path
  • fs semcod-pfix-b24431f/src/pfix/env_diagnostics/__init__.py :22 from pathlib import Path
  • fs semcod-pfix-b24431f/src/pfix/env_diagnostics/auto_fix.py :10 import shutil
  • fs semcod-pfix-b24431f/src/pfix/env_diagnostics/base.py :10 from pathlib import Path
  • fs semcod-pfix-b24431f/src/pfix/env_diagnostics/concurrency.py :8 from pathlib import Path
  • fs semcod-pfix-b24431f/src/pfix/env_diagnostics/config_env.py :8 from pathlib import Path
  • fs semcod-pfix-b24431f/src/pfix/env_diagnostics/encoding.py :8 from pathlib import Path
  • fs semcod-pfix-b24431f/src/pfix/env_diagnostics/filesystem.py :8 import shutil

42 more not shown — this panel samples each group; the count above is the real total.

shell / exec 9

  • shell (weak) semcod-pfix-b24431f/examples/encoding/codec_errors.py :9 import subprocess
  • shell (weak) semcod-pfix-b24431f/examples/reset.py :9 import subprocess
  • shell (weak) semcod-pfix-b24431f/examples/run_all.py :11 import subprocess
  • shell semcod-pfix-b24431f/src/pfix/dependency.py :15 import subprocess
  • shell semcod-pfix-b24431f/src/pfix/env_diagnostics/imports/checks.py :9 import subprocess
  • shell semcod-pfix-b24431f/src/pfix/env_diagnostics/venv.py :201 import subprocess
  • shell semcod-pfix-b24431f/src/pfix/pfix_python.py :14 import subprocess
  • shell semcod-pfix-b24431f/src/pfix/validation.py :17 import subprocess
  • shell (weak) semcod-pfix-b24431f/tests/test_mcp_server.py :5 import subprocess

network 8

  • net (weak) semcod-pfix-b24431f/examples/deps/package_traps.py :19 import requests
  • net (weak) semcod-pfix-b24431f/examples/imports/missing_module.py :9 import httpx # not installed by default
  • net (weak) semcod-pfix-b24431f/examples/network/main.py :9 import socket
  • net (weak) semcod-pfix-b24431f/examples/shared.py :13 import requests
  • net semcod-pfix-b24431f/src/pfix/env_diagnostics/network.py :7 import socket
  • net semcod-pfix-b24431f/src/pfix/mcp_client.py :36 import httpx
  • net semcod-pfix-b24431f/src/pfix/production.py :284 import urllib.request
  • net semcod-pfix-b24431f/src/pfix/telemetry.py :106 import urllib.request

secrets 1

  • secrets semcod-pfix-b24431f/src/pfix/config.py :159 "llm_api_key": os.getenv("OPENROUTER_API_KEY", os.getenv("PFIX_API_KEY", "")),

database 3

  • db semcod-pfix-b24431f/src/pfix/cache.py :13 import sqlite3
  • db semcod-pfix-b24431f/src/pfix/dashboard.py :110 import sqlite3
  • db semcod-pfix-b24431f/src/pfix/logging.py :11 import sqlite3

tool registrations 7

  • pfix_analyze semcod-pfix-b24431f/src/pfix/mcp_server.py :99
  • pfix_fix semcod-pfix-b24431f/src/pfix/mcp_server.py :139
  • pfix_deps_scan semcod-pfix-b24431f/src/pfix/mcp_server.py :252
  • pfix_deps_install semcod-pfix-b24431f/src/pfix/mcp_server.py :264
  • pfix_deps_generate semcod-pfix-b24431f/src/pfix/mcp_server.py :300
  • pfix_diagnose semcod-pfix-b24431f/src/pfix/mcp_server.py :345
  • pfix_edit_file semcod-pfix-b24431f/src/pfix/mcp_server.py :410

declared dependencies 21

  • mcp@>=1.0.0
  • litellm@>=1.40.0
  • python-dotenv@>=1.0.0
  • rich@>=13.0.0
  • pipreqs@>=0.4.0
  • pathspec@>=0.12.0
  • httpx@>=0.27.0
  • uvicorn@>=0.30.0
  • gitpython@>=3.1.0
  • watchdog@>=4.0.0
  • structlog@>=24.0.0
  • tenacity@>=8.0.0
show 9 more
  • diskcache@>=5.6.0
  • sentry-sdk@>=2.0
  • textual@>=0.50
  • pytest@>=8.0
  • pytest-cov@>=5.0
  • ruff@>=0.4.0
  • costs@>=0.1.20
  • psutil@>=5.9.0
  • pfix@*

perm:untrusted 1

  • untrusted (weak) semcod-pfix-b24431f/examples/shared.py :15 return requests.get(url).json()