[project] # Nome della distribuzione (quello che si digita in `pip install`). # Il package importabile resta `ade_mail_agent`: distribuzione e modulo sono # indipendenti (come pillow/PIL, beautifulsoup4/bs4) e rinominare il modulo # non darebbe alcun beneficio a chi usa i comandi o l'MCP. name = "gigamail" version = "0.3.4" description = "GigaMail — mail for your AI agent: MCP server giving agents safe, permission-controlled access to email (Microsoft Graph + IMAP), calendar and knowledge files." readme = "README.md" requires-python = ">=3.10" license = { text = "AGPL-3.0-or-later" } classifiers = [ "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", "Programming Language :: Python :: 3", "Topic :: Communications :: Email", ] dependencies = [ "mcp>=2.0.0", "msal>=1.28", "requests>=2.31", "cryptography>=42", "python-dotenv>=1.0", # Consenso umano per l'approvazione (Windows Hello / Touch ID): # il prompt dell'OS che un processo puo' aprire ma non superare. "winrt-runtime>=3.0; sys_platform == 'win32'", "winrt-Windows.Foundation>=3.0; sys_platform == 'win32'", "winrt-Windows.Security.Credentials.UI>=3.0; sys_platform == 'win32'", # Notifica desktop (toast) per le richieste di approvazione: "winrt-Windows.UI.Notifications>=3.0; sys_platform == 'win32'", "winrt-Windows.Data.Xml.Dom>=3.0; sys_platform == 'win32'", "pyobjc-framework-LocalAuthentication>=10; sys_platform == 'darwin'", ] [project.optional-dependencies] # estrazione testo da allegati/knowledge (pdf, docx, xlsx) documents = ["pdfplumber>=0.11", "python-docx>=1.1", "openpyxl>=3.1"] # calendario CalDAV (Aruba, iCloud, ...) caldav = ["caldav>=1.3", "icalendar>=5.0"] # ricerca semantica nell'indice locale (embeddings) semantic = ["numpy>=1.26"] # backend HTTP della console umana console = ["fastapi>=0.110", "uvicorn>=0.29"] dev = ["pytest>=8", "pytest-timeout>=2.3", "httpx>=0.27", "ruff>=0.16"] all = [ "pdfplumber>=0.11", "python-docx>=1.1", "openpyxl>=3.1", "caldav>=1.3", "icalendar>=5.0", "numpy>=1.26", "fastapi>=0.110", "uvicorn>=0.29", ] [project.scripts] # Nomi ufficiali (GigaMail) gigamail = "ade_mail_agent.cli:main" gigamail-server = "ade_mail_agent.server:main" gigamail-console-api = "ade_mail_agent.http_api:main" # Alias storici: non rompono installazioni e config MCP esistenti ade-mail-agent = "ade_mail_agent.cli:main" ade-mail-agent-server = "ade_mail_agent.server:main" [project.urls] Homepage = "https://gigamail.ai" Source = "https://github.com/adecubed/gigamail" Changelog = "https://github.com/adecubed/gigamail/blob/main/CHANGELOG.md" Security = "https://github.com/adecubed/gigamail/blob/main/SECURITY.md" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src/ade_mail_agent"] [tool.pytest.ini_options] testpaths = ["tests"] timeout = 30 timeout_method = "thread" [tool.ruff] target-version = "py310" src = ["src"] [tool.ruff.lint] # Set volutamente ristretto: errori reali, import, bugbear. Le famiglie che # chiedono il refactor delle eccezioni (BLE, S110/S112) entrano con la 0.3.0 # insieme al logging strutturato — accenderle ora significherebbe 250 noqa. select = ["E4", "E7", "E9", "F", "I", "B", "PLE"]