-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
146 lines (134 loc) · 3.96 KB
/
pyproject.toml
File metadata and controls
146 lines (134 loc) · 3.96 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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
[build-system]
requires = ["setuptools>=77.0", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "humanbound"
version = "2.0.1"
description = "Humanbound — open-source AI agent red-team engine, SDK, and CLI."
readme = "README.md"
license = "Apache-2.0"
requires-python = ">=3.10"
authors = [
{name = "Humanbound", email = "hello@humanbound.ai"},
]
maintainers = [
{name = "Demetris Gerogiannis", email = "hello@humanbound.ai"},
{name = "Kostas Siabanis", email = "hello@humanbound.ai"},
]
keywords = [
"ai",
"ai-security",
"red-team",
"llm",
"prompt-injection",
"agent-security",
"penetration-testing",
"humanbound",
]
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"Intended Audience :: Information Technology",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Environment :: Console",
"Framework :: Pytest",
"Topic :: Security",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Software Development :: Testing",
"Typing :: Typed",
]
dependencies = [
"click>=8.1.0",
"rich>=13.0.0",
"requests>=2.32.0",
"pyyaml>=6.0.0",
"pydantic>=2.0",
"msal>=1.31.0",
"pyperclip>=1.8.0",
]
[project.optional-dependencies]
engine = [
"openai>=1.0.0",
"anthropic>=0.20.0",
"google-generativeai>=0.3.0",
"websockets>=12.0",
]
firewall = [
"humanbound-firewall>=0.2",
"scikit-learn>=1.3.0",
"torch>=2.0.0",
]
mcp = [
"mcp>=1.2.0",
]
pytest = [
"pytest>=7.0.0",
]
dev = [
"pytest>=7.0.0",
"pytest-cov>=4.0.0",
"pytest-timeout>=2.3",
"ruff>=0.6",
"mypy>=1.11",
"build>=1.2",
"twine>=5.0",
"pre-commit>=3.8",
]
[project.scripts]
hb = "humanbound_cli.main:main"
[project.entry-points.pytest11]
hb = "humanbound_cli.pytest_plugin"
[project.urls]
Homepage = "https://github.com/humanbound/humanbound"
Documentation = "https://docs.humanbound.ai/"
Repository = "https://github.com/humanbound/humanbound"
Issues = "https://github.com/humanbound/humanbound/issues"
Changelog = "https://github.com/humanbound/humanbound/blob/main/CHANGELOG.md"
Community = "https://docs.humanbound.ai/community/"
[tool.setuptools.packages.find]
include = ["humanbound*", "humanbound_cli*"]
[tool.setuptools.package-data]
humanbound = ["py.typed"]
humanbound_cli = [
"templates/*.html",
"templates/*.svg",
"templates/compliance/*.yaml",
"py.typed",
]
[tool.pytest.ini_options]
markers = [
"hb: mark test as a Humanbound security test",
"hb_category(name): mark test for a specific category",
]
timeout = 60
# tests/unit/test_*.py does `from conftest import ...` directly, so its
# directory must be on sys.path. (Adding an __init__.py there would also
# work but would change test discovery semantics.)
pythonpath = ["tests/unit"]
[tool.ruff]
line-length = 100
target-version = "py310"
[tool.ruff.lint]
select = ["E", "F", "W", "I", "B", "UP"]
ignore = [
"E501", # line length handled by formatter
"E402", # module-level code before imports (used in shim patterns)
"E722", # bare except tolerated in legacy error handlers
"E741", # allow "l" as variable name in data-pipeline loops
"B006", # mutable default args in legacy command signatures
"B007", # unused loop vars that document intent
"B904", # raise-from chaining not uniformly applied
"F841", # locally-bound unused vars kept for clarity
"W291", # trailing whitespace (formatter handles)
"F401", # unused imports at package boundaries used for re-exports
"E712", # explicit `== False` reads OK in some legacy guards
"B005", # .strip with multi-char string is intentional in glob-pattern helpers
]
[tool.mypy]
python_version = "3.10"
ignore_missing_imports = true
check_untyped_defs = true