hackagent 0.14.0__tar.gz → 0.16.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {hackagent-0.14.0 → hackagent-0.16.0}/.gitignore +8 -2
- hackagent-0.16.0/PKG-INFO +121 -0
- hackagent-0.16.0/README.md +80 -0
- hackagent-0.16.0/hackagent/__init__.py +33 -0
- hackagent-0.16.0/hackagent/attacks/__init__.py +12 -0
- hackagent-0.16.0/hackagent/attacks/_lib/__init__.py +22 -0
- hackagent-0.16.0/hackagent/attacks/_lib/graphviz.py +21 -0
- hackagent-0.16.0/hackagent/attacks/_lib/response.py +84 -0
- {hackagent-0.14.0/hackagent/attacks/generator → hackagent-0.16.0/hackagent/attacks/_lib}/templates.py +2 -2
- hackagent-0.16.0/hackagent/attacks/techniques/__init__.py +31 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/__init__.py +10 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/advprefix/__init__.py +12 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/advprefix/attack.py +314 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/advprefix/config.py +141 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/advprefix/prompts.py +191 -0
- {hackagent-0.14.0/hackagent/attacks/techniques → hackagent-0.16.0/hackagent/attacks/techniques/adaptive}/autodan_turbo/__init__.py +3 -5
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/autodan_turbo/attack.py +215 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/autodan_turbo/config.py +79 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/autodan_turbo/library.py +122 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/autodan_turbo/prompts.py +240 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/bon/__init__.py +13 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/bon/attack.py +121 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/bon/augment.py +84 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/bon/config.py +46 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/pair/__init__.py +12 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/pair/attack.py +257 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/pair/config.py +86 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/pair/prompts.py +201 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/pap/__init__.py +19 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/pap/attack.py +96 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/pap/config.py +50 -0
- {hackagent-0.14.0/hackagent/attacks/techniques → hackagent-0.16.0/hackagent/attacks/techniques/adaptive}/pap/taxonomy.py +36 -1
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/tap/__init__.py +12 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/tap/attack.py +306 -0
- hackagent-0.16.0/hackagent/attacks/techniques/adaptive/tap/config.py +94 -0
- hackagent-0.14.0/hackagent/attacks/techniques/tap/config.py → hackagent-0.16.0/hackagent/attacks/techniques/adaptive/tap/prompts.py +79 -84
- hackagent-0.16.0/hackagent/attacks/techniques/contract.py +104 -0
- hackagent-0.16.0/hackagent/attacks/techniques/indirect/__init__.py +13 -0
- hackagent-0.16.0/hackagent/attacks/techniques/indirect/rag/__init__.py +12 -0
- hackagent-0.16.0/hackagent/attacks/techniques/indirect/rag/attack.py +293 -0
- hackagent-0.16.0/hackagent/attacks/techniques/indirect/rag/config.py +92 -0
- hackagent-0.14.0/hackagent/attacks/techniques/rag/config.py → hackagent-0.16.0/hackagent/attacks/techniques/indirect/rag/prompts.py +120 -134
- hackagent-0.16.0/hackagent/attacks/techniques/indirect/rag/retrieval.py +63 -0
- hackagent-0.16.0/hackagent/attacks/techniques/indirect/tool_output_ipi/__init__.py +12 -0
- hackagent-0.16.0/hackagent/attacks/techniques/indirect/tool_output_ipi/attack.py +168 -0
- hackagent-0.16.0/hackagent/attacks/techniques/indirect/tool_output_ipi/config.py +79 -0
- hackagent-0.16.0/hackagent/attacks/techniques/indirect/tool_output_ipi/prompts.py +226 -0
- hackagent-0.16.0/hackagent/attacks/techniques/iterative.py +123 -0
- hackagent-0.16.0/hackagent/attacks/techniques/multi_turn/__init__.py +9 -0
- hackagent-0.16.0/hackagent/attacks/techniques/multi_turn/crescendo/__init__.py +12 -0
- hackagent-0.16.0/hackagent/attacks/techniques/multi_turn/crescendo/attack.py +167 -0
- hackagent-0.16.0/hackagent/attacks/techniques/multi_turn/crescendo/config.py +66 -0
- hackagent-0.16.0/hackagent/attacks/techniques/multi_turn/crescendo/prompts.py +177 -0
- hackagent-0.16.0/hackagent/attacks/techniques/registry.py +91 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/__init__.py +11 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/base.py +59 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/baseline/__init__.py +9 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/baseline/attack.py +19 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/baseline/config.py +10 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/cipherchat/__init__.py +9 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/cipherchat/attack.py +145 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/cipherchat/config.py +84 -0
- hackagent-0.14.0/hackagent/attacks/techniques/cipherchat/prompts_and_demonstrations.py → hackagent-0.16.0/hackagent/attacks/techniques/static/cipherchat/demonstrations.py +5 -65
- hackagent-0.16.0/hackagent/attacks/techniques/static/cipherchat/encodings/__init__.py +45 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/cipherchat/encodings/base.py +56 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/cipherchat/encodings/byte_escape.py +38 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/cipherchat/encodings/mapping.py +219 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/cipherchat/encodings/prompts.py +128 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/cipherchat/encodings/registry.py +49 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/fc/__init__.py +9 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/fc/attack.py +123 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/fc/config.py +64 -0
- {hackagent-0.14.0/hackagent/attacks/techniques → hackagent-0.16.0/hackagent/attacks/techniques/static}/fc/flowchart_renderer.py +31 -29
- hackagent-0.16.0/hackagent/attacks/techniques/static/flipattack/__init__.py +9 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/flipattack/attack.py +135 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/flipattack/config.py +43 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/flipattack/prompts.py +51 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/h4rm3l/__init__.py +20 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/h4rm3l/attack.py +37 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/h4rm3l/config.py +44 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/h4rm3l/decorators/__init__.py +110 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/h4rm3l/decorators/base.py +89 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/h4rm3l/decorators/compiler.py +265 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/h4rm3l/decorators/llm.py +291 -0
- hackagent-0.14.0/hackagent/attacks/techniques/h4rm3l/decorators.py → hackagent-0.16.0/hackagent/attacks/techniques/static/h4rm3l/decorators/static.py +36 -597
- hackagent-0.16.0/hackagent/attacks/techniques/static/h4rm3l/programs.py +67 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/mml/__init__.py +9 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/mml/attack.py +73 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/mml/config.py +55 -0
- {hackagent-0.14.0/hackagent/attacks/techniques → hackagent-0.16.0/hackagent/attacks/techniques/static}/mml/image_encoder.py +34 -15
- hackagent-0.16.0/hackagent/attacks/techniques/static/static_template/__init__.py +9 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/static_template/attack.py +32 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/static_template/config.py +77 -0
- hackagent-0.16.0/hackagent/attacks/techniques/static/static_template/templates.py +55 -0
- hackagent-0.16.0/hackagent/attacks/techniques/trace.py +246 -0
- hackagent-0.16.0/hackagent/catalog/__init__.py +4 -0
- hackagent-0.14.0/hackagent/cli/commands/attack/catalog.py → hackagent-0.16.0/hackagent/catalog/attacks.py +8 -2
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/__init__.py +5 -5
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/base.py +4 -4
- hackagent-0.16.0/hackagent/catalog/risks/craft_adversarial_data/__init__.py +18 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/craft_adversarial_data/profile.py +5 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/craft_adversarial_data/vulnerabilities.py +2 -2
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/credential_exposure/__init__.py +3 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/credential_exposure/profile.py +5 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/credential_exposure/vulnerabilities.py +2 -2
- hackagent-0.16.0/hackagent/catalog/risks/excessive_agency/__init__.py +8 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/excessive_agency/profile.py +3 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/excessive_agency/vulnerabilities.py +2 -2
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/input_manipulation_attack/__init__.py +3 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/input_manipulation_attack/profile.py +5 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/input_manipulation_attack/vulnerabilities.py +2 -2
- hackagent-0.16.0/hackagent/catalog/risks/jailbreak/__init__.py +8 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/jailbreak/profile.py +5 -5
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/jailbreak/vulnerabilities.py +2 -2
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/malicious_tool_invocation/__init__.py +3 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/malicious_tool_invocation/profile.py +5 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/malicious_tool_invocation/vulnerabilities.py +2 -2
- hackagent-0.16.0/hackagent/catalog/risks/misinformation/__init__.py +8 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/misinformation/profile.py +3 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/misinformation/vulnerabilities.py +2 -2
- hackagent-0.16.0/hackagent/catalog/risks/model_evasion/__init__.py +8 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/model_evasion/profile.py +3 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/model_evasion/vulnerabilities.py +2 -2
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/profile_helpers.py +8 -8
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/profile_types.py +2 -2
- hackagent-0.16.0/hackagent/catalog/risks/prompt_injection/__init__.py +14 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/prompt_injection/profile.py +3 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/prompt_injection/templates.py +1 -1
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/prompt_injection/vulnerabilities.py +2 -2
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/public_facing_application_exploitation/__init__.py +3 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/public_facing_application_exploitation/profile.py +3 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/public_facing_application_exploitation/vulnerabilities.py +2 -2
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/registry.py +14 -14
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/sensitive_information_disclosure/__init__.py +3 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/sensitive_information_disclosure/profile.py +3 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/sensitive_information_disclosure/vulnerabilities.py +2 -2
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/system_prompt_leakage/__init__.py +3 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/system_prompt_leakage/profile.py +5 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/system_prompt_leakage/vulnerabilities.py +2 -2
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/vector_embedding_weaknesses_exploit/__init__.py +3 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/vector_embedding_weaknesses_exploit/profile.py +3 -3
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/vector_embedding_weaknesses_exploit/vulnerabilities.py +2 -2
- {hackagent-0.14.0/hackagent/attacks → hackagent-0.16.0/hackagent/catalog}/taxonomy.py +34 -12
- hackagent-0.16.0/hackagent/client.py +589 -0
- hackagent-0.16.0/hackagent/core/__init__.py +4 -0
- hackagent-0.16.0/hackagent/core/contracts/__init__.py +71 -0
- hackagent-0.16.0/hackagent/core/contracts/_base.py +9 -0
- hackagent-0.16.0/hackagent/core/contracts/completion.py +108 -0
- hackagent-0.16.0/hackagent/core/contracts/enums.py +144 -0
- hackagent-0.16.0/hackagent/core/contracts/judging.py +105 -0
- hackagent-0.16.0/hackagent/core/contracts/messages.py +39 -0
- hackagent-0.16.0/hackagent/core/contracts/protocols.py +67 -0
- hackagent-0.16.0/hackagent/core/contracts/specs.py +55 -0
- hackagent-0.16.0/hackagent/core/defaults.py +103 -0
- hackagent-0.16.0/hackagent/core/logging.py +16 -0
- hackagent-0.16.0/hackagent/core/settings.py +237 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/datasets/__init__.py +2 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/datasets/base.py +8 -1
- hackagent-0.16.0/hackagent/datasets/calibration.py +194 -0
- hackagent-0.16.0/hackagent/datasets/config.py +304 -0
- hackagent-0.16.0/hackagent/datasets/goals.py +111 -0
- hackagent-0.16.0/hackagent/datasets/intents.py +121 -0
- hackagent-0.16.0/hackagent/datasets/labelling.py +176 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/datasets/presets.py +1 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/datasets/providers/file.py +5 -1
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/datasets/providers/huggingface.py +5 -1
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/datasets/providers/url_json.py +5 -1
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/datasets/registry.py +4 -3
- hackagent-0.16.0/hackagent/datasets/taxonomy.py +160 -0
- hackagent-0.16.0/hackagent/datasets/taxonomy.yaml +99 -0
- hackagent-0.16.0/hackagent/evaluation/__init__.py +66 -0
- hackagent-0.16.0/hackagent/evaluation/audit.py +430 -0
- hackagent-0.16.0/hackagent/evaluation/base.py +21 -0
- hackagent-0.16.0/hackagent/evaluation/config.py +54 -0
- hackagent-0.16.0/hackagent/evaluation/judges.py +504 -0
- hackagent-0.16.0/hackagent/evaluation/metrics.py +161 -0
- hackagent-0.16.0/hackagent/evaluation/panel.py +299 -0
- hackagent-0.14.0/hackagent/attacks/evaluator/pattern_evaluators.py → hackagent-0.16.0/hackagent/evaluation/patterns.py +1 -1
- hackagent-0.16.0/hackagent/examples/__init__.py +59 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/claude/README.md +25 -18
- hackagent-0.16.0/hackagent/examples/claude/flipattack-claude.yaml +43 -0
- hackagent-0.16.0/hackagent/examples/claude/flipattack-ollama.yaml +46 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/codex/README.md +10 -10
- hackagent-0.16.0/hackagent/examples/codex/h4rm3l-codex.yaml +41 -0
- hackagent-0.16.0/hackagent/examples/codex/h4rm3l-ollama.yaml +38 -0
- hackagent-0.16.0/hackagent/examples/google_adk/jailbreak_eval/advprefix-adk.yaml +59 -0
- hackagent-0.16.0/hackagent/examples/google_adk/multi_tool_agent/advprefix-multi-tool.yaml +47 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/hermes/README.md +9 -7
- hackagent-0.16.0/hackagent/examples/hermes/flipattack-hermes.yaml +39 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/langchain/rag/README.md +11 -6
- hackagent-0.16.0/hackagent/examples/langchain/rag/advprefix-corpbot.yaml +41 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/litellm_multi_provider/README.md +8 -8
- hackagent-0.16.0/hackagent/examples/litellm_multi_provider/tap-any-provider.yaml +64 -0
- hackagent-0.16.0/hackagent/examples/ollama/flipattack-local.yaml +43 -0
- hackagent-0.16.0/hackagent/examples/ollama/h4rm3l-demo.yaml +51 -0
- hackagent-0.16.0/hackagent/examples/ollama/risk-evaluation.yaml +78 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/openai_sdk/db_tool_sandbox/README.md +2 -2
- hackagent-0.16.0/hackagent/examples/openai_sdk/db_tool_sandbox/flipattack-sqldesk.yaml +48 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/openai_sdk/multi_judge/README.md +1 -1
- hackagent-0.16.0/hackagent/examples/openai_sdk/multi_judge/flipattack-multi-judge.yaml +70 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/openai_sdk/pc_tool_sandbox/README.md +3 -3
- hackagent-0.16.0/hackagent/examples/openai_sdk/pc_tool_sandbox/pair-vaultdesk.yaml +58 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/openai_sdk/quick_evaluation/README.md +3 -3
- hackagent-0.16.0/hackagent/examples/openai_sdk/quick_evaluation/h4rm3l-granite.yaml +59 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/openai_sdk/rag/README.md +9 -5
- hackagent-0.16.0/hackagent/examples/openai_sdk/rag/h4rm3l-corpbot.yaml +56 -0
- hackagent-0.16.0/hackagent/examples/rag/indirect-injection.yaml +66 -0
- hackagent-0.16.0/hackagent/examples/vllm/risk-evaluation.yaml +76 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/web/README.md +27 -42
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/web/plan.py +1 -1
- hackagent-0.16.0/hackagent/examples/web/tap-site-chatbot.yaml +67 -0
- hackagent-0.16.0/hackagent/interfaces/__init__.py +9 -0
- hackagent-0.16.0/hackagent/interfaces/cli/banner.py +34 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/interfaces}/cli/bootstrap.py +4 -6
- hackagent-0.16.0/hackagent/interfaces/cli/commands/campaign.py +291 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/interfaces}/cli/commands/config.py +15 -15
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/interfaces}/cli/commands/datasets.py +3 -5
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/interfaces}/cli/commands/examples.py +253 -153
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/interfaces}/cli/commands/results.py +20 -30
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/interfaces}/cli/commands/web.py +23 -18
- hackagent-0.16.0/hackagent/interfaces/cli/config.py +157 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/interfaces}/cli/help_page.py +2 -2
- hackagent-0.14.0/hackagent/logger.py → hackagent-0.16.0/hackagent/interfaces/cli/logging_setup.py +7 -13
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/interfaces}/cli/main.py +56 -64
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/interfaces}/cli/utils.py +12 -57
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/__init__.py +1 -1
- hackagent-0.16.0/hackagent/interfaces/tui/app.py +423 -0
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/base.py +30 -10
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/events.py +1 -1
- hackagent-0.16.0/hackagent/interfaces/tui/logger.py +125 -0
- hackagent-0.16.0/hackagent/interfaces/tui/views/__init__.py +21 -0
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/views/agents.py +15 -24
- hackagent-0.16.0/hackagent/interfaces/tui/views/audit.py +36 -0
- hackagent-0.16.0/hackagent/interfaces/tui/views/campaign/__init__.py +9 -0
- hackagent-0.16.0/hackagent/interfaces/tui/views/campaign/builder.py +1054 -0
- hackagent-0.16.0/hackagent/interfaces/tui/views/campaign/draft.py +219 -0
- hackagent-0.16.0/hackagent/interfaces/tui/views/campaign/form.py +233 -0
- hackagent-0.16.0/hackagent/interfaces/tui/views/campaign/outline.py +278 -0
- hackagent-0.16.0/hackagent/interfaces/tui/views/campaign/report.py +62 -0
- hackagent-0.16.0/hackagent/interfaces/tui/views/campaign/schema.py +522 -0
- hackagent-0.16.0/hackagent/interfaces/tui/views/campaign/screens.py +303 -0
- hackagent-0.16.0/hackagent/interfaces/tui/views/campaign/welcome.py +165 -0
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/views/config.py +52 -23
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/views/results/__init__.py +4 -4
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/views/results/export.py +1 -1
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/views/results/formatters/__init__.py +5 -5
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/views/results/formatters/http.py +1 -1
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/views/results/formatters/run_report.py +2 -2
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/views/results/formatters/summaries.py +4 -4
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/views/results/formatters/traces.py +2 -2
- hackagent-0.16.0/hackagent/interfaces/tui/views/results/tab.py +420 -0
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/widgets/__init__.py +2 -2
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/widgets/actions.py +3 -3
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/widgets/logs.py +1 -1
- {hackagent-0.14.0/hackagent/server/webui → hackagent-0.16.0/hackagent/interfaces/web}/__init__.py +19 -21
- {hackagent-0.14.0/hackagent/server/webui → hackagent-0.16.0/hackagent/interfaces/web}/_local_api.py +25 -29
- {hackagent-0.14.0/hackagent/server/webui → hackagent-0.16.0/hackagent/interfaces/web}/_proxy.py +2 -12
- {hackagent-0.14.0/hackagent/server/webui → hackagent-0.16.0/hackagent/interfaces/web}/_serializers.py +15 -29
- {hackagent-0.14.0/hackagent/server/webui → hackagent-0.16.0/hackagent/interfaces/web}/_static.py +2 -2
- hackagent-0.16.0/hackagent/models/__init__.py +44 -0
- hackagent-0.16.0/hackagent/models/build.py +207 -0
- hackagent-0.16.0/hackagent/models/completions/__init__.py +22 -0
- {hackagent-0.14.0/hackagent/router/providers → hackagent-0.16.0/hackagent/models/completions}/adk.py +131 -226
- {hackagent-0.14.0/hackagent/router/discovery → hackagent-0.16.0/hackagent/models/completions}/browser.py +5 -5
- {hackagent-0.14.0/hackagent/router/providers → hackagent-0.16.0/hackagent/models/completions}/claude.py +32 -220
- hackagent-0.16.0/hackagent/models/completions/cli.py +208 -0
- {hackagent-0.14.0/hackagent/router/providers → hackagent-0.16.0/hackagent/models/completions}/codex.py +52 -239
- {hackagent-0.14.0/hackagent/router/providers → hackagent-0.16.0/hackagent/models/completions}/hermes.py +77 -232
- hackagent-0.16.0/hackagent/models/completions/litellm.py +136 -0
- {hackagent-0.14.0/hackagent/router/providers → hackagent-0.16.0/hackagent/models/completions}/web.py +69 -115
- hackagent-0.16.0/hackagent/models/config.py +264 -0
- hackagent-0.16.0/hackagent/models/connect.py +93 -0
- hackagent-0.14.0/hackagent/attacks/shared/embedding_utils.py → hackagent-0.16.0/hackagent/models/embeddings.py +32 -8
- hackagent-0.16.0/hackagent/models/factory.py +185 -0
- hackagent-0.16.0/hackagent/models/guardrail.py +229 -0
- hackagent-0.16.0/hackagent/models/model.py +118 -0
- {hackagent-0.14.0/hackagent/router → hackagent-0.16.0/hackagent/models}/provider_config.py +7 -7
- hackagent-0.16.0/hackagent/models/response.py +201 -0
- hackagent-0.16.0/hackagent/models/retry.py +35 -0
- hackagent-0.16.0/hackagent/models/target_params.py +46 -0
- hackagent-0.16.0/hackagent/orchestrator/__init__.py +13 -0
- hackagent-0.16.0/hackagent/orchestrator/campaign/__init__.py +75 -0
- hackagent-0.16.0/hackagent/orchestrator/campaign/audit.py +229 -0
- hackagent-0.16.0/hackagent/orchestrator/campaign/loader.py +28 -0
- hackagent-0.16.0/hackagent/orchestrator/campaign/overrides.py +237 -0
- hackagent-0.16.0/hackagent/orchestrator/campaign/preflight.py +122 -0
- hackagent-0.16.0/hackagent/orchestrator/campaign/resolve.py +278 -0
- hackagent-0.16.0/hackagent/orchestrator/campaign/results.py +315 -0
- hackagent-0.16.0/hackagent/orchestrator/campaign/runner.py +881 -0
- hackagent-0.16.0/hackagent/orchestrator/campaign/spec.py +552 -0
- hackagent-0.16.0/hackagent/orchestrator/campaign/tracking.py +204 -0
- hackagent-0.16.0/hackagent/orchestrator/planning/__init__.py +39 -0
- hackagent-0.16.0/hackagent/orchestrator/planning/catalog.py +153 -0
- hackagent-0.16.0/hackagent/orchestrator/planning/planner.py +339 -0
- hackagent-0.16.0/hackagent/orchestrator/planning/web.py +46 -0
- {hackagent-0.14.0/hackagent/attacks/techniques/rag → hackagent-0.16.0/hackagent/storage}/__init__.py +1 -3
- hackagent-0.16.0/hackagent/storage/_http/__init__.py +4 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/models.py +20 -14
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/scripts/generate.py +10 -10
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/scripts/generate.sh +10 -10
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/scripts/openapi-python-client.yaml +2 -2
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/errors.py +3 -3
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent}/storage/local.py +184 -11
- hackagent-0.16.0/hackagent/storage/records.py +149 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent}/storage/remote.py +344 -86
- hackagent-0.14.0/hackagent/server/storage/base.py → hackagent-0.16.0/hackagent/storage/store.py +43 -103
- hackagent-0.16.0/hackagent/tracking/__init__.py +11 -0
- hackagent-0.16.0/hackagent/tracking/evaluation.py +108 -0
- hackagent-0.14.0/hackagent/router/tracking/utils.py → hackagent-0.16.0/hackagent/tracking/serialize.py +17 -1
- {hackagent-0.14.0 → hackagent-0.16.0}/pyproject.toml +108 -17
- hackagent-0.14.0/PKG-INFO +0 -188
- hackagent-0.14.0/README.md +0 -153
- hackagent-0.14.0/hackagent/__init__.py +0 -25
- hackagent-0.14.0/hackagent/agent.py +0 -569
- hackagent-0.14.0/hackagent/attacks/__init__.py +0 -67
- hackagent-0.14.0/hackagent/attacks/base.py +0 -92
- hackagent-0.14.0/hackagent/attacks/evaluator/__init__.py +0 -110
- hackagent-0.14.0/hackagent/attacks/evaluator/base.py +0 -985
- hackagent-0.14.0/hackagent/attacks/evaluator/evaluation_step.py +0 -1926
- hackagent-0.14.0/hackagent/attacks/evaluator/inline_step_judge.py +0 -205
- hackagent-0.14.0/hackagent/attacks/evaluator/judge_evaluators.py +0 -578
- hackagent-0.14.0/hackagent/attacks/evaluator/metrics.py +0 -403
- hackagent-0.14.0/hackagent/attacks/evaluator/sync.py +0 -329
- hackagent-0.14.0/hackagent/attacks/generator/__init__.py +0 -31
- hackagent-0.14.0/hackagent/attacks/objectives/__init__.py +0 -42
- hackagent-0.14.0/hackagent/attacks/objectives/base.py +0 -74
- hackagent-0.14.0/hackagent/attacks/objectives/harmful_behavior.py +0 -63
- hackagent-0.14.0/hackagent/attacks/objectives/jailbreak.py +0 -60
- hackagent-0.14.0/hackagent/attacks/objectives/policy_violation.py +0 -69
- hackagent-0.14.0/hackagent/attacks/objectives/rag.py +0 -55
- hackagent-0.14.0/hackagent/attacks/orchestrator.py +0 -2242
- hackagent-0.14.0/hackagent/attacks/registry.py +0 -143
- hackagent-0.14.0/hackagent/attacks/shared/__init__.py +0 -31
- hackagent-0.14.0/hackagent/attacks/shared/guardrail.py +0 -256
- hackagent-0.14.0/hackagent/attacks/shared/progress.py +0 -110
- hackagent-0.14.0/hackagent/attacks/shared/response_utils.py +0 -125
- hackagent-0.14.0/hackagent/attacks/shared/router_factory.py +0 -187
- hackagent-0.14.0/hackagent/attacks/shared/translation.py +0 -144
- hackagent-0.14.0/hackagent/attacks/shared/tui.py +0 -61
- hackagent-0.14.0/hackagent/attacks/techniques/__init__.py +0 -24
- hackagent-0.14.0/hackagent/attacks/techniques/advprefix/__init__.py +0 -33
- hackagent-0.14.0/hackagent/attacks/techniques/advprefix/attack.py +0 -353
- hackagent-0.14.0/hackagent/attacks/techniques/advprefix/completions.py +0 -502
- hackagent-0.14.0/hackagent/attacks/techniques/advprefix/config.py +0 -269
- hackagent-0.14.0/hackagent/attacks/techniques/advprefix/eval_pipeline.py +0 -483
- hackagent-0.14.0/hackagent/attacks/techniques/advprefix/generate.py +0 -932
- hackagent-0.14.0/hackagent/attacks/techniques/advprefix/utils.py +0 -210
- hackagent-0.14.0/hackagent/attacks/techniques/autodan_turbo/attack.py +0 -391
- hackagent-0.14.0/hackagent/attacks/techniques/autodan_turbo/autodan_eval.py +0 -127
- hackagent-0.14.0/hackagent/attacks/techniques/autodan_turbo/config.py +0 -275
- hackagent-0.14.0/hackagent/attacks/techniques/autodan_turbo/core.py +0 -606
- hackagent-0.14.0/hackagent/attacks/techniques/autodan_turbo/dashboard_tracing.py +0 -67
- hackagent-0.14.0/hackagent/attacks/techniques/autodan_turbo/lifelong.py +0 -487
- hackagent-0.14.0/hackagent/attacks/techniques/autodan_turbo/log_styles.py +0 -90
- hackagent-0.14.0/hackagent/attacks/techniques/autodan_turbo/strategy_library.py +0 -400
- hackagent-0.14.0/hackagent/attacks/techniques/autodan_turbo/summarizer.py +0 -194
- hackagent-0.14.0/hackagent/attacks/techniques/autodan_turbo/warm_up.py +0 -377
- hackagent-0.14.0/hackagent/attacks/techniques/base.py +0 -472
- hackagent-0.14.0/hackagent/attacks/techniques/baseline/__init__.py +0 -13
- hackagent-0.14.0/hackagent/attacks/techniques/baseline/attack.py +0 -199
- hackagent-0.14.0/hackagent/attacks/techniques/baseline/config.py +0 -16
- hackagent-0.14.0/hackagent/attacks/techniques/baseline/generation.py +0 -183
- hackagent-0.14.0/hackagent/attacks/techniques/bon/__init__.py +0 -16
- hackagent-0.14.0/hackagent/attacks/techniques/bon/attack.py +0 -283
- hackagent-0.14.0/hackagent/attacks/techniques/bon/config.py +0 -121
- hackagent-0.14.0/hackagent/attacks/techniques/bon/generation.py +0 -746
- hackagent-0.14.0/hackagent/attacks/techniques/cipherchat/__init__.py +0 -12
- hackagent-0.14.0/hackagent/attacks/techniques/cipherchat/attack.py +0 -212
- hackagent-0.14.0/hackagent/attacks/techniques/cipherchat/config.py +0 -54
- hackagent-0.14.0/hackagent/attacks/techniques/cipherchat/encode_experts.py +0 -366
- hackagent-0.14.0/hackagent/attacks/techniques/cipherchat/generation.py +0 -335
- hackagent-0.14.0/hackagent/attacks/techniques/config.py +0 -467
- hackagent-0.14.0/hackagent/attacks/techniques/crescendo/__init__.py +0 -19
- hackagent-0.14.0/hackagent/attacks/techniques/crescendo/attack.py +0 -906
- hackagent-0.14.0/hackagent/attacks/techniques/crescendo/config.py +0 -116
- hackagent-0.14.0/hackagent/attacks/techniques/fc/__init__.py +0 -19
- hackagent-0.14.0/hackagent/attacks/techniques/fc/attack.py +0 -479
- hackagent-0.14.0/hackagent/attacks/techniques/fc/config.py +0 -190
- hackagent-0.14.0/hackagent/attacks/techniques/fc/generation.py +0 -606
- hackagent-0.14.0/hackagent/attacks/techniques/flipattack/__init__.py +0 -21
- hackagent-0.14.0/hackagent/attacks/techniques/flipattack/attack.py +0 -513
- hackagent-0.14.0/hackagent/attacks/techniques/flipattack/config.py +0 -114
- hackagent-0.14.0/hackagent/attacks/techniques/flipattack/generation.py +0 -222
- hackagent-0.14.0/hackagent/attacks/techniques/h4rm3l/__init__.py +0 -15
- hackagent-0.14.0/hackagent/attacks/techniques/h4rm3l/attack.py +0 -310
- hackagent-0.14.0/hackagent/attacks/techniques/h4rm3l/config.py +0 -183
- hackagent-0.14.0/hackagent/attacks/techniques/h4rm3l/generation.py +0 -365
- hackagent-0.14.0/hackagent/attacks/techniques/indirect_prompt_injection/attack.py +0 -1414
- hackagent-0.14.0/hackagent/attacks/techniques/indirect_prompt_injection/config.py +0 -215
- hackagent-0.14.0/hackagent/attacks/techniques/mml/__init__.py +0 -18
- hackagent-0.14.0/hackagent/attacks/techniques/mml/attack.py +0 -345
- hackagent-0.14.0/hackagent/attacks/techniques/mml/config.py +0 -115
- hackagent-0.14.0/hackagent/attacks/techniques/mml/generation.py +0 -288
- hackagent-0.14.0/hackagent/attacks/techniques/pair/__init__.py +0 -15
- hackagent-0.14.0/hackagent/attacks/techniques/pair/attack.py +0 -1360
- hackagent-0.14.0/hackagent/attacks/techniques/pair/config.py +0 -154
- hackagent-0.14.0/hackagent/attacks/techniques/pap/__init__.py +0 -15
- hackagent-0.14.0/hackagent/attacks/techniques/pap/attack.py +0 -232
- hackagent-0.14.0/hackagent/attacks/techniques/pap/config.py +0 -157
- hackagent-0.14.0/hackagent/attacks/techniques/pap/generation.py +0 -518
- hackagent-0.14.0/hackagent/attacks/techniques/rag/attack.py +0 -1446
- hackagent-0.14.0/hackagent/attacks/techniques/rag/jailbreak.py +0 -439
- hackagent-0.14.0/hackagent/attacks/techniques/static_template/__init__.py +0 -20
- hackagent-0.14.0/hackagent/attacks/techniques/static_template/attack.py +0 -285
- hackagent-0.14.0/hackagent/attacks/techniques/static_template/config.py +0 -134
- hackagent-0.14.0/hackagent/attacks/techniques/static_template/generation.py +0 -359
- hackagent-0.14.0/hackagent/attacks/techniques/static_template/static_eval.py +0 -668
- hackagent-0.14.0/hackagent/attacks/techniques/tap/__init__.py +0 -3
- hackagent-0.14.0/hackagent/attacks/techniques/tap/attack.py +0 -337
- hackagent-0.14.0/hackagent/attacks/techniques/tap/generation.py +0 -975
- hackagent-0.14.0/hackagent/attacks/techniques/tap/tap_evaluation.py +0 -293
- hackagent-0.14.0/hackagent/attacks/techniques/tool_output_ipi/__init__.py +0 -47
- hackagent-0.14.0/hackagent/attacks/techniques/tool_output_ipi/attack.py +0 -263
- hackagent-0.14.0/hackagent/attacks/techniques/tool_output_ipi/config.py +0 -155
- hackagent-0.14.0/hackagent/attacks/techniques/tool_output_ipi/generation.py +0 -1007
- hackagent-0.14.0/hackagent/attacks/types.py +0 -190
- hackagent-0.14.0/hackagent/cli/commands/agent.py +0 -101
- hackagent-0.14.0/hackagent/cli/commands/attack/__init__.py +0 -66
- hackagent-0.14.0/hackagent/cli/commands/attack/chain.py +0 -247
- hackagent-0.14.0/hackagent/cli/commands/attack/config.py +0 -109
- hackagent-0.14.0/hackagent/cli/commands/attack/display.py +0 -237
- hackagent-0.14.0/hackagent/cli/commands/attack/group.py +0 -119
- hackagent-0.14.0/hackagent/cli/commands/attack/info.py +0 -82
- hackagent-0.14.0/hackagent/cli/commands/attack/options.py +0 -82
- hackagent-0.14.0/hackagent/cli/commands/attack/runner.py +0 -175
- hackagent-0.14.0/hackagent/cli/commands/attack/strategies.py +0 -108
- hackagent-0.14.0/hackagent/cli/commands/claude.py +0 -288
- hackagent-0.14.0/hackagent/cli/commands/codex.py +0 -291
- hackagent-0.14.0/hackagent/cli/commands/scan/__init__.py +0 -47
- hackagent-0.14.0/hackagent/cli/commands/scan/command.py +0 -448
- hackagent-0.14.0/hackagent/cli/commands/scan/helpers.py +0 -120
- hackagent-0.14.0/hackagent/cli/commands/scan/quick.py +0 -181
- hackagent-0.14.0/hackagent/cli/config.py +0 -222
- hackagent-0.14.0/hackagent/cli/tui/app.py +0 -324
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/__init__.py +0 -50
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/registry.py +0 -41
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/specs/__init__.py +0 -58
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/specs/advprefix.py +0 -197
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/specs/autodan_turbo.py +0 -150
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/specs/baseline.py +0 -104
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/specs/bon.py +0 -131
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/specs/cipherchat.py +0 -215
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/specs/fc.py +0 -65
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/specs/flipattack.py +0 -107
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/specs/h4rm3l.py +0 -100
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/specs/mml.py +0 -121
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/specs/pair.py +0 -142
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/specs/pap.py +0 -139
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/specs/static_template.py +0 -146
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/specs/tap.py +0 -119
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/specs/tfc.py +0 -80
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/specs/tool_output_ipi.py +0 -168
- hackagent-0.14.0/hackagent/cli/tui/attack_specs/types.py +0 -182
- hackagent-0.14.0/hackagent/cli/tui/logger.py +0 -264
- hackagent-0.14.0/hackagent/cli/tui/views/__init__.py +0 -22
- hackagent-0.14.0/hackagent/cli/tui/views/attacks/__init__.py +0 -37
- hackagent-0.14.0/hackagent/cli/tui/views/attacks/executor.py +0 -429
- hackagent-0.14.0/hackagent/cli/tui/views/attacks/form.py +0 -531
- hackagent-0.14.0/hackagent/cli/tui/views/attacks/helpers.py +0 -131
- hackagent-0.14.0/hackagent/cli/tui/views/attacks/layout.py +0 -261
- hackagent-0.14.0/hackagent/cli/tui/views/attacks/runner.py +0 -287
- hackagent-0.14.0/hackagent/cli/tui/views/attacks/tab.py +0 -391
- hackagent-0.14.0/hackagent/cli/tui/views/results/details.py +0 -377
- hackagent-0.14.0/hackagent/cli/tui/views/results/tab.py +0 -400
- hackagent-0.14.0/hackagent/cli/tui/views/results/table.py +0 -212
- hackagent-0.14.0/hackagent/config.py +0 -170
- hackagent-0.14.0/hackagent/datasets/intents.py +0 -349
- hackagent-0.14.0/hackagent/examples/claude/hack_claude.py +0 -86
- hackagent-0.14.0/hackagent/examples/claude/hack_ollama.py +0 -80
- hackagent-0.14.0/hackagent/examples/codex/hack_codex.py +0 -89
- hackagent-0.14.0/hackagent/examples/codex/hack_ollama.py +0 -77
- hackagent-0.14.0/hackagent/examples/google_adk/jailbreak_eval/hack.py +0 -154
- hackagent-0.14.0/hackagent/examples/google_adk/multi_tool_agent/hack.py +0 -31
- hackagent-0.14.0/hackagent/examples/hermes/hack_hermes.py +0 -94
- hackagent-0.14.0/hackagent/examples/langchain/rag/hack.py +0 -61
- hackagent-0.14.0/hackagent/examples/litellm_multi_provider/demo.py +0 -245
- hackagent-0.14.0/hackagent/examples/ollama/demo.py +0 -117
- hackagent-0.14.0/hackagent/examples/ollama/hack.py +0 -154
- hackagent-0.14.0/hackagent/examples/ollama/local.py +0 -25
- hackagent-0.14.0/hackagent/examples/openai_sdk/db_tool_sandbox/hack.py +0 -101
- hackagent-0.14.0/hackagent/examples/openai_sdk/multi_judge/run_flipattack_multi_judge.py +0 -108
- hackagent-0.14.0/hackagent/examples/openai_sdk/pc_tool_sandbox/hack.py +0 -116
- hackagent-0.14.0/hackagent/examples/openai_sdk/quick_evaluation/run_h4rm3l.py +0 -96
- hackagent-0.14.0/hackagent/examples/openai_sdk/rag/hack.py +0 -72
- hackagent-0.14.0/hackagent/examples/rag/test_indirect_injection.py +0 -196
- hackagent-0.14.0/hackagent/examples/vllm/hack.py +0 -219
- hackagent-0.14.0/hackagent/examples/web/hack.py +0 -95
- hackagent-0.14.0/hackagent/risks/craft_adversarial_data/__init__.py +0 -14
- hackagent-0.14.0/hackagent/risks/excessive_agency/__init__.py +0 -8
- hackagent-0.14.0/hackagent/risks/jailbreak/__init__.py +0 -8
- hackagent-0.14.0/hackagent/risks/misinformation/__init__.py +0 -8
- hackagent-0.14.0/hackagent/risks/model_evasion/__init__.py +0 -8
- hackagent-0.14.0/hackagent/risks/prompt_injection/__init__.py +0 -14
- hackagent-0.14.0/hackagent/router/__init__.py +0 -32
- hackagent-0.14.0/hackagent/router/_chat_registration.py +0 -192
- hackagent-0.14.0/hackagent/router/agent.py +0 -607
- hackagent-0.14.0/hackagent/router/discovery/__init__.py +0 -53
- hackagent-0.14.0/hackagent/router/discovery/scanner.py +0 -489
- hackagent-0.14.0/hackagent/router/envelope.py +0 -344
- hackagent-0.14.0/hackagent/router/providers/__init__.py +0 -0
- hackagent-0.14.0/hackagent/router/router.py +0 -1256
- hackagent-0.14.0/hackagent/router/tracking/__init__.py +0 -46
- hackagent-0.14.0/hackagent/router/tracking/audit.py +0 -72
- hackagent-0.14.0/hackagent/router/tracking/category_classifier.py +0 -659
- hackagent-0.14.0/hackagent/router/tracking/context.py +0 -152
- hackagent-0.14.0/hackagent/router/tracking/coordinator.py +0 -820
- hackagent-0.14.0/hackagent/router/tracking/decorators.py +0 -305
- hackagent-0.14.0/hackagent/router/tracking/step.py +0 -540
- hackagent-0.14.0/hackagent/router/tracking/tracker.py +0 -872
- hackagent-0.14.0/hackagent/router/tracking_logger.py +0 -246
- hackagent-0.14.0/hackagent/router/types.py +0 -138
- hackagent-0.14.0/hackagent/server/__init__.py +0 -0
- hackagent-0.14.0/hackagent/server/storage/__init__.py +0 -0
- hackagent-0.14.0/hackagent/server/storage/enums.py +0 -34
- hackagent-0.14.0/hackagent/utils.py +0 -144
- {hackagent-0.14.0 → hackagent-0.16.0}/LICENSE +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/_version.py +0 -0
- {hackagent-0.14.0/hackagent/attacks/shared → hackagent-0.16.0/hackagent/attacks/_lib}/prompt_parser.py +0 -0
- /hackagent-0.14.0/hackagent/attacks/shared/utils.py → /hackagent-0.16.0/hackagent/attacks/_lib/transforms.py +0 -0
- {hackagent-0.14.0/hackagent/attacks/techniques → hackagent-0.16.0/hackagent/attacks/techniques/static}/fc/prompts.py +0 -0
- {hackagent-0.14.0/hackagent/attacks/techniques → hackagent-0.16.0/hackagent/attacks/techniques/static}/mml/prompts.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/craft_adversarial_data/types.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/credential_exposure/types.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/excessive_agency/types.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/input_manipulation_attack/types.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/jailbreak/types.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/malicious_tool_invocation/types.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/misinformation/types.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/model_evasion/types.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/prompt_injection/types.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/public_facing_application_exploitation/types.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/sensitive_information_disclosure/types.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/system_prompt_leakage/types.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/utils.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/catalog}/risks/vector_embedding_weaknesses_exploit/types.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/core}/async_utils.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/core}/errors.py +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/datasets/omnisafebench/dataset.json +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/datasets/providers/__init__.py +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/google_adk/jailbreak_eval/__init__.py +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/google_adk/jailbreak_eval/agent.py +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/google_adk/multi_tool_agent/__init__.py +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/google_adk/multi_tool_agent/agent.py +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/langchain/rag/agent_client.py +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/langchain/rag/agent_server.py +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/langchain/rag/ingest.py +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/langchain/rag/policies.pdf +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/langchain/rag/read_db.py +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/litellm_multi_provider/__init__.py +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/openai_sdk/db_tool_sandbox/agent.py +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/openai_sdk/db_tool_sandbox/sandbox.db +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/openai_sdk/pc_tool_sandbox/agent.py +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/openai_sdk/pc_tool_sandbox/confidential/db_credentials.txt +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/openai_sdk/rag/agent_server.py +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/openai_sdk/rag/ingest.py +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/openai_sdk/rag/policies.pdf +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/rag/.gitignore +0 -0
- {hackagent-0.14.0 → hackagent-0.16.0}/hackagent/examples/rag/test_data/gender_studies_overview.txt +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/interfaces}/cli/__init__.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/interfaces}/cli/commands/__init__.py +0 -0
- {hackagent-0.14.0/hackagent → hackagent-0.16.0/hackagent/interfaces}/cli/safe_stdio.py +0 -0
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/theme.py +0 -0
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/views/results/formatters/datetimes.py +0 -0
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/views/results/formatters/text.py +0 -0
- {hackagent-0.14.0/hackagent/cli → hackagent-0.16.0/hackagent/interfaces}/tui/widgets/clipboard.py +0 -0
- {hackagent-0.14.0/hackagent/server/webui → hackagent-0.16.0/hackagent/interfaces/web}/static/.gitignore +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/__init__.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/agent/__init__.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/agent/agent_create.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/agent/agent_destroy.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/agent/agent_list.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/agent/agent_partial_update.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/agent/agent_retrieve.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/agent/agent_update.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/apilogs/__init__.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/apilogs/apilogs_list.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/apilogs/apilogs_retrieve.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/apilogs/apilogs_summary_retrieve.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/attack/__init__.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/attack/attack_create.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/attack/attack_destroy.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/attack/attack_list.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/attack/attack_partial_update.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/attack/attack_retrieve.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/attack/attack_update.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/checkout/__init__.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/checkout/checkout_create.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/generate/__init__.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/generate/v1_chat_completions_create.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/judge/__init__.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/judge/judge_create.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/key/__init__.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/key/key_context_retrieve.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/key/key_create.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/key/key_destroy.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/key/key_list.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/key/key_retrieve.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/organization/__init__.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/organization/organization_create.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/organization/organization_destroy.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/organization/organization_list.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/organization/organization_me_retrieve.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/organization/organization_partial_update.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/organization/organization_retrieve.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/organization/organization_update.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/result/__init__.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/result/result_create.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/result/result_destroy.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/result/result_list.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/result/result_partial_update.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/result/result_retrieve.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/result/result_trace_create.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/result/result_update.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/run/__init__.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/run/run_create.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/run/run_destroy.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/run/run_list.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/run/run_partial_update.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/run/run_result_create.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/run/run_retrieve.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/run/run_run_tests_create.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/run/run_update.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/user/__init__.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/user/user_create.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/user/user_destroy.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/user/user_list.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/user/user_me_retrieve.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/user/user_me_update.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/user/user_partial_update.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/user/user_retrieve.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/api/user/user_update.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/client.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent/storage/_http}/types.py +0 -0
- {hackagent-0.14.0/hackagent/server → hackagent-0.16.0/hackagent}/storage/buckets.py +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# Custom
|
|
2
2
|
logs/
|
|
3
|
+
.logs/
|
|
3
4
|
*.sbatch
|
|
4
5
|
.ruff_cache/
|
|
5
6
|
reports/
|
|
@@ -71,6 +72,7 @@ htmlcov/
|
|
|
71
72
|
.cache
|
|
72
73
|
nosetests.xml
|
|
73
74
|
coverage.xml
|
|
75
|
+
coverage.json
|
|
74
76
|
*.cover
|
|
75
77
|
.hypothesis/
|
|
76
78
|
.pytest_cache/
|
|
@@ -147,5 +149,9 @@ tests/e2e/attacks/
|
|
|
147
149
|
snapshot_report.html
|
|
148
150
|
|
|
149
151
|
# Web UI bundle (built by scripts/build_webui.sh)
|
|
150
|
-
hackagent/
|
|
151
|
-
!hackagent/
|
|
152
|
+
hackagent/interfaces/web/static/*
|
|
153
|
+
!hackagent/interfaces/web/static/.gitignore
|
|
154
|
+
|
|
155
|
+
# Results exported from the TUI (hackagent/interfaces/tui/views/results/export.py)
|
|
156
|
+
hackagent_results_*.csv
|
|
157
|
+
hackagent_results_*.json
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: hackagent
|
|
3
|
+
Version: 0.16.0
|
|
4
|
+
Summary: HackAgent is an open-source security toolkit to detect vulnerabilities of your AI Agents.
|
|
5
|
+
Author-email: AI Security Lab <ais@ai4i.it>
|
|
6
|
+
License: Apache-2.0
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Keywords: agents,ai,security,testing,vulnerabilities
|
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Requires-Python: >=3.10
|
|
18
|
+
Requires-Dist: click>=8.1.0
|
|
19
|
+
Requires-Dist: httpx>=0.27.0
|
|
20
|
+
Requires-Dist: litellm>=1.69.2
|
|
21
|
+
Requires-Dist: openai>=1.0.0
|
|
22
|
+
Requires-Dist: pydantic[email]>=2.0
|
|
23
|
+
Requires-Dist: python-dateutil>=2.8.0
|
|
24
|
+
Requires-Dist: pyyaml>=6.0.0
|
|
25
|
+
Requires-Dist: rich>=14.0.0
|
|
26
|
+
Provides-Extra: browser
|
|
27
|
+
Requires-Dist: playwright>=1.40; extra == 'browser'
|
|
28
|
+
Provides-Extra: hf
|
|
29
|
+
Requires-Dist: datasets>=2.14.0; extra == 'hf'
|
|
30
|
+
Provides-Extra: rag
|
|
31
|
+
Requires-Dist: faiss-cpu>=1.13.2; extra == 'rag'
|
|
32
|
+
Requires-Dist: numpy>=1.26; extra == 'rag'
|
|
33
|
+
Provides-Extra: tui
|
|
34
|
+
Requires-Dist: textual>=1.0.0; extra == 'tui'
|
|
35
|
+
Provides-Extra: vision
|
|
36
|
+
Requires-Dist: pillow>=10.0.0; extra == 'vision'
|
|
37
|
+
Provides-Extra: web
|
|
38
|
+
Requires-Dist: flask>=3.1.3; extra == 'web'
|
|
39
|
+
Requires-Dist: hackagent-webui<1.0,>=0.2; extra == 'web'
|
|
40
|
+
Description-Content-Type: text/markdown
|
|
41
|
+
|
|
42
|
+
<div align="center">
|
|
43
|
+
|
|
44
|
+
<img src="https://docs.hackagent.dev/img/banner.svg" alt="HackAgent" width="800">
|
|
45
|
+
|
|
46
|
+
**The open-source red-team toolkit for AI models and agents**
|
|
47
|
+
|
|
48
|
+
[Docs](https://docs.hackagent.dev/) · [App](https://app.hackagent.dev/) · [API](https://api.hackagent.dev/schema/redoc)
|
|
49
|
+
|
|
50
|
+
[](https://pypi.org/project/hackagent/)
|
|
51
|
+

|
|
52
|
+

|
|
53
|
+

|
|
54
|
+

|
|
55
|
+
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
HackAgent attacks your AI model or agent with research-backed techniques —
|
|
59
|
+
jailbreaks, prompt injection, tool misuse — and has judge models score every
|
|
60
|
+
reply. You get a measured success rate per attack, so you can see how exposed a
|
|
61
|
+
target is and whether a fix helped.
|
|
62
|
+
|
|
63
|
+
## See it run
|
|
64
|
+
|
|
65
|
+
**Terminal UI.** Start from an example, change what you need, run it.
|
|
66
|
+
|
|
67
|
+
<img src="https://raw.githubusercontent.com/AISecurityLab/hackagent/main/docs/static/gifs/hackagent-tui.gif" alt="Building and running a campaign in the HackAgent terminal UI" width="100%">
|
|
68
|
+
|
|
69
|
+
**Command line.** The same campaign is one YAML file you can edit, check and run, in a shell or in CI.
|
|
70
|
+
|
|
71
|
+
<img src="https://raw.githubusercontent.com/AISecurityLab/hackagent/main/docs/static/gifs/hackagent-cli.gif" alt="Copying, editing, validating and running a campaign from the command line" width="100%">
|
|
72
|
+
|
|
73
|
+
**Dashboard.** Browse runs, results and traces with `hackagent web`, or on [app.hackagent.dev](https://app.hackagent.dev/).
|
|
74
|
+
|
|
75
|
+
<img src="https://raw.githubusercontent.com/AISecurityLab/hackagent/main/docs/static/gifs/hackagent-dashboard.gif" alt="Browsing campaign results in the HackAgent dashboard" width="100%">
|
|
76
|
+
|
|
77
|
+
## Quick start
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
pip install 'hackagent[tui]'
|
|
81
|
+
hackagent # opens the terminal UI
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Or run an example end to end, fully local, with [Ollama](https://ollama.com):
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
ollama pull gemma3:4b
|
|
88
|
+
hackagent examples copy h4rm3l-demo
|
|
89
|
+
hackagent campaign run h4rm3l-demo.yaml
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
No API key needed: results go to a local database unless a campaign says
|
|
93
|
+
otherwise.
|
|
94
|
+
|
|
95
|
+
## Learn more
|
|
96
|
+
|
|
97
|
+
- [Installation](https://docs.hackagent.dev/getting-started/installation) — extras, and standalone binaries that need no Python
|
|
98
|
+
- [Your first campaign](https://docs.hackagent.dev/getting-started/first-campaign) — write, check and run one
|
|
99
|
+
- [Concepts](https://docs.hackagent.dev/concepts) — attacks, judges and how a run works
|
|
100
|
+
- [Attacks](https://docs.hackagent.dev/reference/attacks) and the [campaign file reference](https://docs.hackagent.dev/reference/campaign)
|
|
101
|
+
- [Dashboard](https://docs.hackagent.dev/getting-started/dashboard) — `hackagent web`, locally or against your account
|
|
102
|
+
|
|
103
|
+
Questions? Join the [discussions](https://github.com/AISecurityLab/hackagent/discussions) or email ais@ai4i.it.
|
|
104
|
+
|
|
105
|
+
## Responsible use
|
|
106
|
+
|
|
107
|
+
HackAgent is for authorized security testing only. Test systems you own or
|
|
108
|
+
have written permission to test, and report what you find through coordinated
|
|
109
|
+
disclosure. Read the [responsible disclosure guidelines](https://docs.hackagent.dev/security/responsible-disclosure)
|
|
110
|
+
and our [security policy](SECURITY.md).
|
|
111
|
+
|
|
112
|
+
## Contributing
|
|
113
|
+
|
|
114
|
+
Contributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) and
|
|
115
|
+
[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
|
|
116
|
+
|
|
117
|
+
## License
|
|
118
|
+
|
|
119
|
+
Licensed under Apache-2.0. See [LICENSE](LICENSE). HackAgent is intended for
|
|
120
|
+
security research and AI safety improvement; the authors are not responsible
|
|
121
|
+
for misuse.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<img src="https://docs.hackagent.dev/img/banner.svg" alt="HackAgent" width="800">
|
|
4
|
+
|
|
5
|
+
**The open-source red-team toolkit for AI models and agents**
|
|
6
|
+
|
|
7
|
+
[Docs](https://docs.hackagent.dev/) · [App](https://app.hackagent.dev/) · [API](https://api.hackagent.dev/schema/redoc)
|
|
8
|
+
|
|
9
|
+
[](https://pypi.org/project/hackagent/)
|
|
10
|
+

|
|
11
|
+

|
|
12
|
+

|
|
13
|
+

|
|
14
|
+
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
HackAgent attacks your AI model or agent with research-backed techniques —
|
|
18
|
+
jailbreaks, prompt injection, tool misuse — and has judge models score every
|
|
19
|
+
reply. You get a measured success rate per attack, so you can see how exposed a
|
|
20
|
+
target is and whether a fix helped.
|
|
21
|
+
|
|
22
|
+
## See it run
|
|
23
|
+
|
|
24
|
+
**Terminal UI.** Start from an example, change what you need, run it.
|
|
25
|
+
|
|
26
|
+
<img src="https://raw.githubusercontent.com/AISecurityLab/hackagent/main/docs/static/gifs/hackagent-tui.gif" alt="Building and running a campaign in the HackAgent terminal UI" width="100%">
|
|
27
|
+
|
|
28
|
+
**Command line.** The same campaign is one YAML file you can edit, check and run, in a shell or in CI.
|
|
29
|
+
|
|
30
|
+
<img src="https://raw.githubusercontent.com/AISecurityLab/hackagent/main/docs/static/gifs/hackagent-cli.gif" alt="Copying, editing, validating and running a campaign from the command line" width="100%">
|
|
31
|
+
|
|
32
|
+
**Dashboard.** Browse runs, results and traces with `hackagent web`, or on [app.hackagent.dev](https://app.hackagent.dev/).
|
|
33
|
+
|
|
34
|
+
<img src="https://raw.githubusercontent.com/AISecurityLab/hackagent/main/docs/static/gifs/hackagent-dashboard.gif" alt="Browsing campaign results in the HackAgent dashboard" width="100%">
|
|
35
|
+
|
|
36
|
+
## Quick start
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
pip install 'hackagent[tui]'
|
|
40
|
+
hackagent # opens the terminal UI
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Or run an example end to end, fully local, with [Ollama](https://ollama.com):
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
ollama pull gemma3:4b
|
|
47
|
+
hackagent examples copy h4rm3l-demo
|
|
48
|
+
hackagent campaign run h4rm3l-demo.yaml
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
No API key needed: results go to a local database unless a campaign says
|
|
52
|
+
otherwise.
|
|
53
|
+
|
|
54
|
+
## Learn more
|
|
55
|
+
|
|
56
|
+
- [Installation](https://docs.hackagent.dev/getting-started/installation) — extras, and standalone binaries that need no Python
|
|
57
|
+
- [Your first campaign](https://docs.hackagent.dev/getting-started/first-campaign) — write, check and run one
|
|
58
|
+
- [Concepts](https://docs.hackagent.dev/concepts) — attacks, judges and how a run works
|
|
59
|
+
- [Attacks](https://docs.hackagent.dev/reference/attacks) and the [campaign file reference](https://docs.hackagent.dev/reference/campaign)
|
|
60
|
+
- [Dashboard](https://docs.hackagent.dev/getting-started/dashboard) — `hackagent web`, locally or against your account
|
|
61
|
+
|
|
62
|
+
Questions? Join the [discussions](https://github.com/AISecurityLab/hackagent/discussions) or email ais@ai4i.it.
|
|
63
|
+
|
|
64
|
+
## Responsible use
|
|
65
|
+
|
|
66
|
+
HackAgent is for authorized security testing only. Test systems you own or
|
|
67
|
+
have written permission to test, and report what you find through coordinated
|
|
68
|
+
disclosure. Read the [responsible disclosure guidelines](https://docs.hackagent.dev/security/responsible-disclosure)
|
|
69
|
+
and our [security policy](SECURITY.md).
|
|
70
|
+
|
|
71
|
+
## Contributing
|
|
72
|
+
|
|
73
|
+
Contributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) and
|
|
74
|
+
[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
|
|
75
|
+
|
|
76
|
+
## License
|
|
77
|
+
|
|
78
|
+
Licensed under Apache-2.0. See [LICENSE](LICENSE). HackAgent is intended for
|
|
79
|
+
security research and AI safety improvement; the authors are not responsible
|
|
80
|
+
for misuse.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Copyright 2026 - AI4I. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
"""A client library for HackAgent — AI Agent Security Testing.
|
|
5
|
+
|
|
6
|
+
The package root exports the facade and public types only. Importing it does
|
|
7
|
+
not install a logging handler and does not import interface toolkits.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from hackagent.client import HackAgent
|
|
11
|
+
from hackagent.core.contracts import AgentType
|
|
12
|
+
from hackagent.core.errors import ApiError, HackAgentError
|
|
13
|
+
from hackagent.core.settings import (
|
|
14
|
+
DEFAULT_REMOTE_BASE_URL,
|
|
15
|
+
Settings,
|
|
16
|
+
Source,
|
|
17
|
+
read_config_file,
|
|
18
|
+
resolve_ollama_base_url,
|
|
19
|
+
resolve_remote_base_url,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
__all__ = (
|
|
23
|
+
"AgentType",
|
|
24
|
+
"ApiError",
|
|
25
|
+
"DEFAULT_REMOTE_BASE_URL",
|
|
26
|
+
"HackAgent",
|
|
27
|
+
"HackAgentError",
|
|
28
|
+
"Settings",
|
|
29
|
+
"Source",
|
|
30
|
+
"read_config_file",
|
|
31
|
+
"resolve_ollama_base_url",
|
|
32
|
+
"resolve_remote_base_url",
|
|
33
|
+
)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Copyright 2026 - AI4I. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
"""
|
|
5
|
+
Attack techniques for the HackAgent security assessment framework.
|
|
6
|
+
|
|
7
|
+
Techniques live under ``techniques/``. The composition root that runs them
|
|
8
|
+
is :mod:`hackagent.orchestrator`. Judges live in ``hackagent.evaluation``.
|
|
9
|
+
Run records live in ``hackagent.tracking``.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
__all__: list[str] = []
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Copyright 2026 - AI4I. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
"""Shared attack helpers.
|
|
5
|
+
|
|
6
|
+
Depth-0 techniques import only ``hackagent.core`` and this package — not
|
|
7
|
+
other depth-0 packages or sibling techniques. What remains here is the live
|
|
8
|
+
set: response extraction (shared with the model layer), prompt parsing,
|
|
9
|
+
templating transforms, and the graphviz helper.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from hackagent.attacks._lib.response import (
|
|
13
|
+
extract_response_content,
|
|
14
|
+
get_guardrail_info,
|
|
15
|
+
is_guardrail_response,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
__all__ = [
|
|
19
|
+
"extract_response_content",
|
|
20
|
+
"get_guardrail_info",
|
|
21
|
+
"is_guardrail_response",
|
|
22
|
+
]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Copyright 2026 - AI4I. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
"""Graphviz bootstrap for flowchart rendering (FC-Attack).
|
|
5
|
+
|
|
6
|
+
``ensure_graphviz()`` is the public entry point used by interfaces and
|
|
7
|
+
the FC renderer.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from typing import Optional
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def ensure_graphviz(allow_download: Optional[bool] = None) -> Optional[str]:
|
|
16
|
+
"""Ensure Graphviz ``dot`` is available and return its resolved path."""
|
|
17
|
+
from hackagent.attacks.techniques.static.fc.flowchart_renderer import (
|
|
18
|
+
ensure_graphviz,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
return ensure_graphviz(allow_download=allow_download)
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Copyright 2026 - AI4I. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
"""Response helpers for attack modules.
|
|
5
|
+
|
|
6
|
+
Prefer :class:`~hackagent.core.contracts.Completion` properties
|
|
7
|
+
(``text``, ``ok``, ``blocked``, ``guardrail_info``). These helpers keep
|
|
8
|
+
legacy envelope/dict and OpenAI-style objects working until every
|
|
9
|
+
technique calls ``LLM.complete``.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
import logging
|
|
15
|
+
from typing import Any, Dict, Optional
|
|
16
|
+
|
|
17
|
+
from hackagent.core.contracts import Completion
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger("hackagent.attacks._lib.response")
|
|
20
|
+
|
|
21
|
+
GUARDRAIL_ADAPTER_TYPE = "guardrail"
|
|
22
|
+
GUARDRAIL_BLOCKED_MSG = "Blocked by guardrail"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def extract_response_content(
|
|
26
|
+
response: Any,
|
|
27
|
+
logger: Optional[logging.Logger] = None,
|
|
28
|
+
) -> Optional[str]:
|
|
29
|
+
"""Extract text content from a Completion or legacy LLM response."""
|
|
30
|
+
if response is None:
|
|
31
|
+
return None
|
|
32
|
+
|
|
33
|
+
log = logger or globals()["logger"]
|
|
34
|
+
|
|
35
|
+
if isinstance(response, Completion):
|
|
36
|
+
return response.text or None
|
|
37
|
+
|
|
38
|
+
# OpenAI-style object with choices attribute
|
|
39
|
+
if hasattr(response, "choices") and response.choices:
|
|
40
|
+
try:
|
|
41
|
+
message = response.choices[0].message
|
|
42
|
+
content = message.content if message else None
|
|
43
|
+
return content or None
|
|
44
|
+
except (AttributeError, IndexError) as e:
|
|
45
|
+
log.debug(f"Failed to extract from OpenAI-style response: {e}")
|
|
46
|
+
|
|
47
|
+
if isinstance(response, dict):
|
|
48
|
+
content = response.get("generated_text") or response.get("processed_response")
|
|
49
|
+
if content:
|
|
50
|
+
return content
|
|
51
|
+
error_msg = response.get("error_message")
|
|
52
|
+
if error_msg:
|
|
53
|
+
log.debug(f"Response contains error: {error_msg}")
|
|
54
|
+
return None
|
|
55
|
+
|
|
56
|
+
if isinstance(response, str):
|
|
57
|
+
return response if response else None
|
|
58
|
+
|
|
59
|
+
# Duck-typed Completion-like (e.g. FakeLLM extras)
|
|
60
|
+
text = getattr(response, "text", None)
|
|
61
|
+
if isinstance(text, str):
|
|
62
|
+
return text or None
|
|
63
|
+
|
|
64
|
+
return None
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def is_guardrail_response(response: Any) -> bool:
|
|
68
|
+
"""Return True if *response* is a guardrail-blocked response."""
|
|
69
|
+
if isinstance(response, Completion):
|
|
70
|
+
return response.blocked
|
|
71
|
+
if not isinstance(response, dict):
|
|
72
|
+
return False
|
|
73
|
+
return response.get("adapter_type") == GUARDRAIL_ADAPTER_TYPE
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def get_guardrail_info(response: Any) -> Dict[str, Any]:
|
|
77
|
+
"""Extract guardrail metadata from a blocked response."""
|
|
78
|
+
if isinstance(response, Completion):
|
|
79
|
+
return response.guardrail_info
|
|
80
|
+
if not is_guardrail_response(response):
|
|
81
|
+
return {}
|
|
82
|
+
if isinstance(response, dict):
|
|
83
|
+
return response.get("agent_specific_data") or {}
|
|
84
|
+
return {}
|
|
@@ -15,7 +15,7 @@ Constants:
|
|
|
15
15
|
SUCCESS_PATTERNS: Regex patterns for detecting successful attacks
|
|
16
16
|
|
|
17
17
|
Usage:
|
|
18
|
-
from hackagent.attacks.
|
|
18
|
+
from hackagent.attacks._lib.templates import (
|
|
19
19
|
AttackTemplates,
|
|
20
20
|
REFUSAL_PATTERNS,
|
|
21
21
|
SUCCESS_PATTERNS,
|
|
@@ -25,7 +25,7 @@ Usage:
|
|
|
25
25
|
import codecs
|
|
26
26
|
from typing import List
|
|
27
27
|
|
|
28
|
-
from hackagent.attacks.
|
|
28
|
+
from hackagent.attacks._lib.transforms import encode_base64
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
class AttackTemplates:
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Copyright 2026 - AI4I. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
"""
|
|
5
|
+
Attack techniques module.
|
|
6
|
+
|
|
7
|
+
Techniques define HOW we generate attacks. Each technique is a complete
|
|
8
|
+
implementation that can target different objectives.
|
|
9
|
+
|
|
10
|
+
Techniques are grouped by category, the same grouping the docs use:
|
|
11
|
+
|
|
12
|
+
- static/: fixed transforms, no attacker refinement loop (baseline,
|
|
13
|
+
static_template, flipattack, cipherchat, h4rm3l, mml, fc/tfc)
|
|
14
|
+
- adaptive/: independent attempts that refine or search (pair, tap, pap,
|
|
15
|
+
bon, advprefix, autodan_turbo)
|
|
16
|
+
- multi_turn/: one growing conversation with the target (crescendo)
|
|
17
|
+
- indirect/: payload delivered through retrieved content or tool output
|
|
18
|
+
(rag, tool_output_ipi)
|
|
19
|
+
|
|
20
|
+
The folder follows :mod:`hackagent.catalog.taxonomy`: the ``indirect`` tag
|
|
21
|
+
decides first, otherwise the primary category does.
|
|
22
|
+
|
|
23
|
+
Every technique package holds:
|
|
24
|
+
1. attack.py - a ``StaticAttack`` or ``IterativeAttack`` subclass
|
|
25
|
+
2. config.py - its ``AttackParams``: parameters and role fields
|
|
26
|
+
|
|
27
|
+
:mod:`.contract` holds what every attack depends on, :mod:`.registry` maps a
|
|
28
|
+
campaign's attack name to its class, and :mod:`.trace` records what a run did.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
__all__ = []
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Copyright 2026 - AI4I. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
"""Adaptive techniques.
|
|
5
|
+
|
|
6
|
+
Many independent attempts that refine or search, without a shared growing
|
|
7
|
+
conversation: pair, tap, pap, bon, advprefix, and autodan_turbo.
|
|
8
|
+
|
|
9
|
+
Importing this package does not import the techniques in it.
|
|
10
|
+
"""
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Copyright 2026 - AI4I. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
"""AdvPrefix: write the opening the target will finish.
|
|
5
|
+
|
|
6
|
+
Based on: https://arxiv.org/abs/2412.10321
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from .attack import AdvPrefixAttack
|
|
10
|
+
from .config import AdvPrefixParams
|
|
11
|
+
|
|
12
|
+
__all__ = ["AdvPrefixAttack", "AdvPrefixParams"]
|