Repository navigation
Expand file tree
/
Copy pathpyproject.toml
More file actions
112 lines (104 loc) · 4.71 KB
/
Copy pathpyproject.toml
File metadata and controls
112 lines (104 loc) · 4.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
[build-system]
requires = ["setuptools==84.0.0"] # pinned: builds must not pull a just-released version (72h supply-chain rule)
build-backend = "setuptools.build_meta"
[project]
name = "semgate"
dynamic = ["version"] # from semgate.__version__ ([tool.setuptools.dynamic])
description = "Semantic command-permission gate for coding agents: deterministic rules for the certain-bad, a typed classifier (TypeSafe Jev) for the rest, fail-closed. We judge. The host acts."
readme = "README.md"
license = "Apache-2.0"
license-files = ["LICENSE", "NOTICE"]
authors = [{ name = "Manuel Parra" }]
requires-python = ">=3.10"
# Everything the live judge needs (Jev through typesafe-sdk), direct and
# transitive, with exact pins. semgate runs in its own venv (or pipx), so
# exact pins cannot clash with the versions of another project.
# typesafe-sdk itself asks for open ranges (`httpx2>=2.0.0`,
# `pydantic>=2.12.0` ...); without these pins pip takes the newest version
# of each on install day.
#
# Rule: never a version uploaded less than 72 hours before it is pinned.
# httpx2 2.13.1 and httpcore2 2.13.1 were uploaded 2026-09-23 07:47 UTC, so
# 2.13.0 is kept. typesafe-sdk 0.7.1 (key-leak fix: the SDK no longer puts
# the API key in exception text) was adopted 2026-09-24 at 59 h old as an
# owner-approved exception; it passed the 72 h rule on 2026-09-24 15:57 UTC,
# so the exception is closed. python-dotenv loads the key from .env for
# hooks that run outside your shell. exceptiongroup is needed only on
# Python 3.10. Versions are the ones resolved in the maintainer's venv on
# 2026-09-25 (pip freeze). Upload times (UTC, first file) from
# https://pypi.org/pypi/<pkg>/<ver>/json:
#
# typesafe-sdk 0.7.1 2026-09-21 15:57
# python-dotenv 1.2.3 2026-08-16 16:54
# httpx2 2.13.0 2026-09-14 14:18
# httpcore2 2.13.0 2026-09-14 14:18
# pydantic 2.13.5 2026-08-28 14:03
# pydantic-core 2.46.5 2026-08-28 09:57
# anyio 4.15.1 2026-09-05 10:42
# idna 3.20 2026-09-17 14:11
# tenacity 9.1.4 2026-02-07 10:45
# typing-extensions 4.16.0 2026-07-02 08:40
# typing-inspection 0.4.4 2026-08-12 12:37
# annotated-types 0.8.0 2026-07-23 20:16
# truststore 0.10.4 2025-08-12 18:49
# h11 0.16.0 2025-04-24 03:35
# exceptiongroup 1.3.1 2025-11-21 23:01 (Python < 3.11 only)
dependencies = [
"typesafe-sdk==0.7.1",
"python-dotenv==1.2.3",
"httpx2==2.13.0",
"httpcore2==2.13.0",
"pydantic==2.13.5",
"pydantic-core==2.46.5",
"anyio==4.15.1",
"idna==3.20",
"tenacity==9.1.4",
"typing-extensions==4.16.0",
"typing-inspection==0.4.4",
"annotated-types==0.8.0",
"truststore==0.10.4",
"h11==0.16.0",
'exceptiongroup==1.3.1; python_version < "3.11"',
]
keywords = ["coding-agents", "permissions", "prompt-injection", "antigravity", "opencode", "guardrails", "jev", "typesafe"]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"Topic :: Security",
"Topic :: Software Development :: Libraries",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Operating System :: OS Independent",
]
[project.urls]
Homepage = "https://github.com/th3nolo/semgate"
Source = "https://github.com/th3nolo/semgate"
Issues = "https://github.com/th3nolo/semgate/issues"
Author = "https://th3nolo.com"
[project.optional-dependencies]
# Empty on purpose: the judge dependencies are in `dependencies` now. The
# 0.4.0 docs said `pip install "semgate[typesafe]"`; the empty extra keeps
# that command working without a warning.
typesafe = []
dev = ["pytest==9.1.1"]
[project.scripts]
semgate = "semgate.cli:main"
semgate-antigravity-hook = "semgate.antigravity_hook:main"
semgate-claude-hook = "semgate.claude_hook:main"
# The policy JSON files live at the repo top level (policies/) and are mapped
# into the package as `semgate.policies`, so a wheel install carries them and
# `semgate.gate.policy_dir()` finds them in both layouts.
[tool.setuptools]
packages = ["semgate", "semgate.adapters", "semgate.providers", "semgate.eval", "semgate.policies", "semgate.assets", "semgate.hosts"]
[tool.setuptools.package-dir]
"semgate.policies" = "policies"
[tool.setuptools.package-data]
"semgate.policies" = ["*.json"]
"semgate.assets" = ["*.js", "*.ts", "*.md"]
"semgate" = ["data/*.json", "data/hosts/*.json"]
[tool.setuptools.dynamic]
version = { attr = "semgate.__version__" }