BoltClam 1.0.0: ClamAV desktop protection with Bolt sign-in

Adds the PyQt6 Windows client (Homepage, Scan & results, About & updates, Settings), ClamAV scanning and quarantine, browser-download watch with an exclusive scan gate, Bolt loopback/PKCE sign-in with DPAPI key storage, Gitea release feed with checksum verification, opt-in diagnostics, and Windows/portable build tooling.

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
TheMajesticMagician
2026-10-25 16:21:14 -06:00
co-authored by Claude Code
commit addd00364d
76 changed files with 12503 additions and 0 deletions
+79
View File
@@ -0,0 +1,79 @@
# -*- mode: python ; coding: utf-8 -*-
"""PyInstaller spec for BoltClam.
Default: a one-folder Windows build (dist/BoltClam/BoltClam.exe), which is
what the Inno Setup installer packages. Set BOLTCLAM_ONEFILE=1 for a single
BoltClam.exe instead.
"""
from pathlib import Path
import os
import sys
ROOT = Path(SPECPATH).resolve()
ONE_FILE = os.environ.get("BOLTCLAM_ONEFILE") == "1"
VERSION_FILE = ROOT / "resources" / "version_info.txt"
ICON_FILE = ROOT / "resources" / "boltclam.ico"
a = Analysis(
[str(ROOT / "src" / "boltclam" / "__main__.py")],
pathex=[str(ROOT / "src")],
binaries=[],
datas=[(str(ROOT / "resources"), "resources")],
hiddenimports=[
"PyQt6.QtCore",
"PyQt6.QtGui",
"PyQt6.QtWidgets",
"PyQt6.sip",
],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=["tkinter", "unittest", "pydoc"],
noarchive=False,
optimize=1,
)
pyz = PYZ(a.pure)
exe_kwargs = dict(
name="BoltClam",
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=False,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon=str(ICON_FILE) if ICON_FILE.exists() else None,
version=str(VERSION_FILE) if sys.platform == "win32" and VERSION_FILE.exists() else None,
)
if ONE_FILE:
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
**exe_kwargs,
)
else:
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
**exe_kwargs,
)
coll = COLLECT(
exe,
a.binaries,
a.datas,
strip=False,
upx=False,
upx_exclude=[],
name="BoltClam",
)