exaai-agent 2.0.8__py3-none-any.whl → 2.1.2__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: exaai-agent
3
- Version: 2.0.8
3
+ Version: 2.1.2
4
4
  Summary: ExaAi - Advanced AI Security Agent for Comprehensive Penetration Testing
5
5
  License: Apache-2.0
6
6
  License-File: LICENSE
@@ -53,57 +53,60 @@ Description-Content-Type: text/markdown
53
53
  [![Python](https://img.shields.io/pypi/pyversions/exaai-agent?color=3776AB)](https://pypi.org/project/exaai-agent/)
54
54
  [![PyPI](https://img.shields.io/pypi/v/exaai-agent?color=10b981)](https://pypi.org/project/exaai-agent/)
55
55
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
56
- [![Version](https://img.shields.io/badge/version-2.1.0-00d4ff.svg)]()
56
+ [![Version](https://img.shields.io/badge/version-2.1.2-00d4ff.svg)]()
57
57
 
58
58
  </div>
59
59
 
60
60
  <br>
61
61
 
62
62
  > [!TIP]
63
- > **🚀 v2.1.0 Released!** React2Shell Detection (CVE-2025-55182), Cloud Security Testing, Smart Fuzzing, and CLI improvements with `exaai` command!
63
+ > **🚀 v2.1.2 Released!** Now supports **AI Agent Integration (OpenClaw)**, Kubernetes Security, Azure/GCP modules, and Prompt Injection detection.
64
+ >
65
+ > 🤖 **Connect Your Agent:** You can now control ExaAiAgent via any AI agent (OpenClaw, etc).
66
+ > Just send this command to your agent:
67
+ > ```
68
+ > Read https://raw.githubusercontent.com/hleliofficiel/ExaAiAgent/main/SKILL.md and follow the instructions to join ExaAiAgent
69
+ > ```
64
70
 
65
71
  ---
66
72
 
67
- ## 🔥 What's New in v2.1.0
73
+ ## 🔥 What's New in v2.1.2
68
74
 
69
- ### 🚨 React2Shell Detection (CVE-2025-55182)
75
+ ### 🤖 AI Agent Integration (OpenClaw)
70
76
 
71
- New critical vulnerability scanner for **React Server Components**:
77
+ Seamlessly integrate ExaAiAgent with your AI workforce:
72
78
 
73
- - **CVSS 10.0** - Unauthenticated RCE via RSC Flight protocol
74
- - Auto-detects Next.js 15.x/16.x, React 19.x applications
75
- - Complete exploitation methodology and PoC generation
76
- - WAF bypass techniques included
79
+ - **Agent Control**: Control scans via OpenClaw or any agent framework
80
+ - **Auto-Discovery**: Agents can read `SKILL.md` to self-onboard
81
+ - **Output Optimization**: Tools now output cleaner data (no ANSI codes) for LLM consumption
77
82
 
78
- ### ☁️ AWS & Cloud Security
83
+ ### Kubernetes & Cloud Security (Updated)
79
84
 
80
- Comprehensive cloud infrastructure testing:
85
+ Expanded coverage for cloud-native infrastructure:
81
86
 
82
- - **AWS**: EC2 Metadata SSRF, S3 buckets, IAM escalation, Lambda
83
- - **Azure**: Blob storage, Managed Identity, Azure AD
84
- - **GCP**: Cloud Storage, Service Account abuse
85
- - **Kubernetes**: RBAC, Secrets, Pod escape
87
+ - **Kubernetes**: Deep RBAC auditing, Pod Security Standards (PSS), Network Policy checks
88
+ - **Azure**: Blob Storage, Entra ID (Azure AD), Key Vault auditing
89
+ - **GCP**: Cloud Storage, IAM, Service Account key leaks
90
+ - **Prompt Injection**: Dedicated scanner for AI/LLM applications
86
91
 
87
- ### Smart Security Tools
92
+ ### 🛡️ Smart Security Tools
88
93
 
89
94
  | Tool | Capability |
90
95
  |------|------------|
91
- | **Smart Fuzzer** | Context-aware payloads, parameter type detection |
96
+ | **Smart Fuzzer** | Thread-safe, context-aware fuzzing with rate limiting |
92
97
  | **Response Analyzer** | SQL errors, stack traces, sensitive data detection |
93
- | **Vuln Validator** | PoC generation, CVSS scoring, remediation advice |
94
- | **WAF Bypass** | Multi-layer bypass techniques |
98
+ | **Vuln Validator** | PoC generation with false positive reduction |
99
+ | **WAF Bypass** | Multi-layer bypass for Cloudflare, Akamai, AWS WAF |
95
100
 
96
- ### ⚡ CLI Improvements
101
+ ### ⚡ CLI & Stability
97
102
 
98
- ```bash
99
- # New command (shorter!)
100
- exaai --target https://example.com
101
-
102
- # Version check
103
- exaai --version
103
+ - **Thread-Safety**: Fixed race conditions in async scans
104
+ - **Resource Management**: Auto-shutdown and cleanup of background processes
105
+ - **Installation**: Robust `install.sh` for Linux/macOS (bash/zsh/fish)
104
106
 
105
- # TUI mode
106
- exaai tui
107
+ ```bash
108
+ # New install script
109
+ curl -sSL https://raw.githubusercontent.com/hleliofficiel/ExaAiAgent/main/install.sh | bash
107
110
  ```
108
111
 
109
112
  ---
@@ -146,6 +149,11 @@ ExaAiAgent is an elite AI-powered cybersecurity agent that acts like a real pene
146
149
 
147
150
  ```bash
148
151
  # Install ExaAiAgent
152
+
153
+ # Method 1: Automated Script (Recommended)
154
+ curl -sSL https://raw.githubusercontent.com/hleliofficiel/ExaAiAgent/main/install.sh | bash
155
+
156
+ # Method 2: pipx
149
157
  pipx install exaai-agent
150
158
 
151
159
  # Configure your AI provider (choose one)
@@ -287,7 +295,7 @@ jobs:
287
295
  - uses: actions/checkout@v4
288
296
 
289
297
  - name: Install ExaAiAgent
290
- run: pipx install exaai-agent
298
+ run: curl -sSL https://raw.githubusercontent.com/hleliofficiel/ExaAiAgent/main/install.sh | bash
291
299
 
292
300
  - name: Run ExaAiAgent
293
301
  env:
@@ -339,26 +347,22 @@ export PERPLEXITY_API_KEY="key" # For search capabilities
339
347
  | `oauth_oidc` | OAuth2/OIDC flaws |
340
348
  | `waf_bypass` | WAF bypass techniques |
341
349
  | `subdomain_takeover` | Subdomain takeover |
350
+ | `prompt_injection` | AI/LLM prompt injection attacks |
351
+ | `kubernetes_security` | **NEW!** K8s RBAC & Pod Security auditing |
342
352
 
343
353
  ---
344
354
 
345
355
  ## 🆕 Changelog
346
356
 
347
- ### v2.0.0 (Latest)
348
-
349
- - **Smart Auto-Module Loading** - Automatically detects target type
350
- - **Token Optimization** - Lightweight mode & task scaling
351
- - 🛡️ **5 New Security Modules** - GraphQL, WebSocket, OAuth, WAF, Subdomain
352
- - 🎨 **New UI/Branding** - Fresh ExaAi logo with Cyan/Purple theme
353
- - 📊 **Improved Performance** - Reduced unnecessary LLM calls
354
-
355
- ### v1.0.0
357
+ ### v2.1.2 (Latest)
358
+ - **AI Agent Integration**: OpenClaw/Agent compatibility
359
+ - **Stability Fixes**: ToolManager thread-safety, Resource cleanup
360
+ - **DevEx**: New `install.sh` script, improved logging
356
361
 
357
- - Multi-LLM Load Balancing
358
- - Enhanced Context Management
359
- - Specialized Agents
360
- - Advanced Prompts
361
- - Improved Reporting
362
+ ### v2.1.0
363
+ - **New Modules**: K8s, Azure, GCP, Prompt Injection
364
+ - **React2Shell**: CVE-2025-55182 detection
365
+ - **Auto-Discovery**: Improved target detection
362
366
 
363
367
  ---
364
368
 
@@ -10,8 +10,8 @@ exaaiagnt/agents/shared_memory.py,sha256=4Ps_kcUHIRVhpumlaF5ZGXmpoeAFi9JrJgEBK33
10
10
  exaaiagnt/agents/state.py,sha256=Tzjdegq3L4IS26XPlK9GQDcwqf6X-KKvih9_4LcXPYw,5881
11
11
  exaaiagnt/interface/__init__.py,sha256=ww23sFOQhICEIrIo0MtwWv2qHW5qUprvPj8QVjv3SM0,44
12
12
  exaaiagnt/interface/assets/tui_styles.tcss,sha256=iwhx72f5bIiSg72168ifyR_Q0TKfL3Bf0lU6cyJw1Bg,12114
13
- exaaiagnt/interface/cli.py,sha256=MxcxxgFBj3DdYVRsQ2qFSzXhtrJVhU-7xyJk5b4vD-k,8451
14
- exaaiagnt/interface/main.py,sha256=Sn25MV1wmnSnmu2lB2onc7wXXdGzcdZ8zTPjlZJ2Ddw,19085
13
+ exaaiagnt/interface/cli.py,sha256=nRKMGJXV884CfT6znU7qWPumMhefUVEnHgDZzD-LoPs,9480
14
+ exaaiagnt/interface/main.py,sha256=PO62c4P26qT9v2nLWkfQSC_SWjaCncaxdZUT42U9Lu0,19483
15
15
  exaaiagnt/interface/tool_components/__init__.py,sha256=Dz5ci3VMzvhlPOwQ2x9Nd11cmFzx1OP7sdlpZPMTT4k,935
16
16
  exaaiagnt/interface/tool_components/agents_graph_renderer.py,sha256=eVFRqmJ-TxyxZ-hssLTweDAio4UvsZZgxo2dKky0N1U,4399
17
17
  exaaiagnt/interface/tool_components/base_renderer.py,sha256=P0zYeRnbkr2NYoE8KDQmj1TzrAGX6r7qLMb4Sw7AoTI,1905
@@ -28,22 +28,25 @@ exaaiagnt/interface/tool_components/terminal_renderer.py,sha256=-ORL2vBH5XImUZrI
28
28
  exaaiagnt/interface/tool_components/thinking_renderer.py,sha256=-MQLkKCgOJksrustULFf2jhAjJrP5bbfS2BQ6zgNKCc,927
29
29
  exaaiagnt/interface/tool_components/user_message_renderer.py,sha256=6gHJ1hG-pwcTsxLM7JuYZuaDu8cZ2MeOuUDF3LGy-4I,1432
30
30
  exaaiagnt/interface/tool_components/web_search_renderer.py,sha256=JnJa22ACIcRksfxxdenesUo8Th9cHSxo-fej9YcuYHs,911
31
- exaaiagnt/interface/tui.py,sha256=t3ZbYyiGfjEab0fd6Lk4hbpbWVKGxcLnifCKonTK61c,49777
31
+ exaaiagnt/interface/tui.py,sha256=bMuIJvrauCStAJkjvRWzDueLDraKnrHWtC5ZjyuDxOc,49970
32
32
  exaaiagnt/interface/utils.py,sha256=xp6eDOC8C0c3cjt791S_jBDs1B-xp_ydIb74QnMLEt8,20219
33
33
  exaaiagnt/llm/__init__.py,sha256=hUVixjSSIUtwIP2I5D_9e6Kdxhhunnajgxx_2DEYNww,1095
34
34
  exaaiagnt/llm/config.py,sha256=HQ0skwQxtHwiDLDWBCU1Fp4UoQ8tbrTNQw9s7JGVaiY,3303
35
35
  exaaiagnt/llm/fallback.py,sha256=oPS0PGRxEHnyyBgS4yP9zdwSf4JFJh4dYZ3g8OFwWEE,11413
36
- exaaiagnt/llm/llm.py,sha256=EEPte4O37YVhCrJleHS8uU5eaYw_WDXKIEwlK2USJgE,18606
37
- exaaiagnt/llm/llm_traffic_controller.py,sha256=HZ0OZcbfr5XLVSpuW8EQLn3gQht3rjY1n6SGRFpBZa0,12187
36
+ exaaiagnt/llm/llm.py,sha256=D9VnU73ffz7GhotGqQ5RZDufQ8xPKz8aouU23oW0kPY,18664
37
+ exaaiagnt/llm/llm_traffic_controller.py,sha256=DIgJvjrT0MIOStb8g2wTAMoDXp9YLEBlFD5Bwt862K8,12304
38
38
  exaaiagnt/llm/memory_compressor.py,sha256=_At7e5QlDv2vrUDUJMEwm4CjNJ2uGYQsOBhiHiQvVr8,7054
39
39
  exaaiagnt/llm/output_processor.py,sha256=JC3TtzYj9DJhJRuKzz_VV3WIwAyYhUdZeY1N9c4SzVw,13568
40
- exaaiagnt/llm/request_queue.py,sha256=niwJVzWyvNcOl9uVYABO55c6ZReMxY_GIUhKXh946dI,9195
40
+ exaaiagnt/llm/request_queue.py,sha256=2H-jEcI1krY8U8oMoULu-1y6kEV84enI36QLUkTLKm0,9198
41
41
  exaaiagnt/llm/utils.py,sha256=0Z0r6qo9IfUSOJt5FJsq3X-veXrA8A09frc2VIy-aS4,2540
42
- exaaiagnt/prompts/README.md,sha256=Svgjx8pO1W0aVzC9z0Fxs88-NBA1whEqU8zrGBDqO0M,3813
42
+ exaaiagnt/prompts/README.md,sha256=PPeH0Up6_Ygk6zfYchcLVVZ-OqU5PhWIUwYx6KbhFaY,3975
43
43
  exaaiagnt/prompts/__init__.py,sha256=nUs1powNe_6sWmM5_KkAIxZj97t5IiMMgNrL39WwUjg,5042
44
- exaaiagnt/prompts/auto_loader.py,sha256=SNCewvdqfsIXydOcBNVcEE_x_w_j0Pl7ebOeOSNJ94E,12008
44
+ exaaiagnt/prompts/auto_loader.py,sha256=vVXBDLk8O08x3LglREvAReB2GqJqZKIsnhcwsQlKm4w,12994
45
45
  exaaiagnt/prompts/cloud/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
46
  exaaiagnt/prompts/cloud/aws_cloud_security.jinja,sha256=ObimikftsoqGzxhrvI6pQLVRQ4MmkJpjwexORS7P7uo,6768
47
+ exaaiagnt/prompts/cloud/azure_cloud_security.jinja,sha256=jKlQpWvPy6grYtU6S44cP1uKw5sLbCj6QmdUv9tu_PI,5225
48
+ exaaiagnt/prompts/cloud/gcp_cloud_security.jinja,sha256=n5GMgRufa0PBV8WbB6RfmmBAUeJZqEK_67b87MgjF7Y,6656
49
+ exaaiagnt/prompts/cloud/kubernetes_security.jinja,sha256=qmXHxMVg3wcj5aFzi176djJUhSp756obtk2Ff8PWGjo,4068
47
50
  exaaiagnt/prompts/coordination/root_agent.jinja,sha256=05VUZKnBX_7-FjEYilEq_OJG4u01_56bf4mzGNbFtJc,1996
48
51
  exaaiagnt/prompts/custom/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
52
  exaaiagnt/prompts/frameworks/fastapi.jinja,sha256=zXa08RDG9tVQu6MZetKCcOUPuDDKJJF1anTei7_2TZg,10200
@@ -74,6 +77,7 @@ exaaiagnt/prompts/vulnerabilities/open_redirect.jinja,sha256=Mbit385OO7fTSGRb0xF
74
77
  exaaiagnt/prompts/vulnerabilities/path_traversal_lfi_rfi.jinja,sha256=5Zfr424yM2LyFxt9A6q18RhbIjdq1MB6mpjWbG_FA7o,7916
75
78
  exaaiagnt/prompts/vulnerabilities/post_exploitation.jinja,sha256=YgGCIQu1FmrLq-KN930Pb-VqGWQV9BTbPIkcEFzkzac,8396
76
79
  exaaiagnt/prompts/vulnerabilities/privilege_escalation.jinja,sha256=XY0atQ4nEkGsmPiNoLtc0QwVTLV8r3w0ZvH4snmCgHE,6796
80
+ exaaiagnt/prompts/vulnerabilities/prompt_injection.jinja,sha256=7AsziV8IFMeQT1sUjFKppd76vlVfNSsiM9W523wew-E,9387
77
81
  exaaiagnt/prompts/vulnerabilities/prototype_pollution.jinja,sha256=g-I6ouqaZpxqoTa4MyGHaUKxwlM-gFrPo_F1T8r_ASI,6486
78
82
  exaaiagnt/prompts/vulnerabilities/race_conditions.jinja,sha256=ZHxdZc7v7yvhmUWJK3P3kIzOz3oaYRb2OJEzG1momcg,8372
79
83
  exaaiagnt/prompts/vulnerabilities/rce.jinja,sha256=tgmocWH3Y9FJ3fBeR9DTR7ViBcuH5salGis8vywJ2h8,8425
@@ -90,11 +94,11 @@ exaaiagnt/prompts/vulnerabilities/xxe.jinja,sha256=yyWl5i74YiFZIhQknMPWXLKL0C5gw
90
94
  exaaiagnt/runtime/__init__.py,sha256=MnuwXAMjvj2kQKJCOyzW-qQSpiipGzmESVWz436lqkQ,760
91
95
  exaaiagnt/runtime/docker_runtime.py,sha256=lb4cipUbCkwPw3_BxKyICFoIW8Su2zFs_sFW-r59Nfk,16185
92
96
  exaaiagnt/runtime/runtime.py,sha256=PRYByipRG9OhtIphIruGBSe4k-glVnYAXH68mikqt78,730
93
- exaaiagnt/runtime/tool_manager.py,sha256=CMUYlOC3Ez-9eqzz12tJO9tijdIBznFqCUwcT0hBnGA,14453
97
+ exaaiagnt/runtime/tool_manager.py,sha256=3PSUxTmGsFptNlKkZDnzXyyBA_AfbKvqhMPyRi6_fMU,14770
94
98
  exaaiagnt/runtime/tool_server.py,sha256=e23TJYL5w32gMqLS9UJ0xw3XZ4lM38ETBvHVHKk3APU,6835
95
99
  exaaiagnt/telemetry/__init__.py,sha256=8QLHMvrVNLlGKezWTf3mTSmTOLIvDS5xVciry1KVS1Y,130
96
100
  exaaiagnt/telemetry/tracer.py,sha256=DZuQ-xGdPWB2FKEn_rRPxP1RO2_acXQRkHzuhApAI88,12582
97
- exaaiagnt/tools/__init__.py,sha256=tFPqL3VKFumF1LgYMhvaecwTQ9b7vHxk0hRArPp3z2U,3402
101
+ exaaiagnt/tools/__init__.py,sha256=1Z4EECFThur9Bn_EkqVHJYx9Z3pM1cdh6qXc3rTcyPA,4000
98
102
  exaaiagnt/tools/agents_graph/__init__.py,sha256=FLJ2kGxXICY2pRKrC0sgIc3w3KhZo7VID7hbwYcgBfM,278
99
103
  exaaiagnt/tools/agents_graph/agents_graph_actions.py,sha256=ujBj3R3MpOmIVsN4T3nekVhreu60xA2EEg9rYXCdz2c,21103
100
104
  exaaiagnt/tools/agents_graph/agents_graph_actions_schema.xml,sha256=fczqDpNw2m58p2O_G0amBZso--EjEGZuK829lB-cXdE,12617
@@ -104,16 +108,20 @@ exaaiagnt/tools/browser/browser_actions.py,sha256=6p3drOznDLPVnqSo3CnJjq4qXXSvCh
104
108
  exaaiagnt/tools/browser/browser_actions_schema.xml,sha256=zZQD8sZWsNnxxnlY3QYDrfKHFu0x6i1vtfSOlIGyiho,9573
105
109
  exaaiagnt/tools/browser/browser_instance.py,sha256=vgb-dJP20SLaBOhFExn-uwfjdISBrHJpG7ewfiKQkYU,18605
106
110
  exaaiagnt/tools/browser/tab_manager.py,sha256=SMkDFOgEr3ADK2rP5Ko2uK-A24-8p0VsbjoxEj5eU-Y,13011
107
- exaaiagnt/tools/executor.py,sha256=-H-OuXI5UXGydqG9xH1lkmEKq--vTJMQiGbr5psbj1s,10854
111
+ exaaiagnt/tools/executor.py,sha256=YWw8Tz3MT3EgK9InLSjamkBWSY7sNcFziBU7Z1BMpMk,10869
108
112
  exaaiagnt/tools/file_edit/__init__.py,sha256=8f6VlEoGP627hGtcdLkr63vdrTmdb8uyPIqB0qVgZd8,141
109
113
  exaaiagnt/tools/file_edit/file_edit_actions.py,sha256=w-rEB9MphijtXJUyypttQ4DLU4y9rwHd7Zpl21LTTis,3955
110
114
  exaaiagnt/tools/file_edit/file_edit_actions_schema.xml,sha256=tt0_QgSjOtTEy8ordsXUcEiVTePiybgn4aisZJ_qnbc,5477
111
115
  exaaiagnt/tools/finish/__init__.py,sha256=QIMaHYusly8YaFR3zjYsy_CFawwgtTZvOU7gsEumFrw,68
112
116
  exaaiagnt/tools/finish/finish_actions.py,sha256=ZLyOuYMjdTPHN9_6sQxyHwp3-BVSusk5dM2WHUn3WMI,5714
113
117
  exaaiagnt/tools/finish/finish_actions_schema.xml,sha256=CS6Vq3ByyNxv2spRWS4oJcmUzWQRB7jvUAOS8aiWd8o,2294
118
+ exaaiagnt/tools/k8s_scanner/__init__.py,sha256=MIo_Hl4p7Zzea9KSR_wVnxnlyyrB9eS8g3DlZxwSsHk,557
119
+ exaaiagnt/tools/k8s_scanner/k8s_actions.py,sha256=2iK-PchYw9X8XZvx5tmEQwIi6ckA153lolbNpN5sm3g,13365
114
120
  exaaiagnt/tools/notes/__init__.py,sha256=DUpkZUWN21tb9AXCWfJLrKrgLz9YEBVU8KQy1J6cyxU,189
115
121
  exaaiagnt/tools/notes/notes_actions.py,sha256=8ewd1kCxZO_ujKP2oXuU03r9p8EZEYgoO7i_6GWw_VA,5775
116
122
  exaaiagnt/tools/notes/notes_actions_schema.xml,sha256=nzirWDyzbPRxaG3jdSjmSCjfY-ggDy1kH7oxAuj-osw,6264
123
+ exaaiagnt/tools/prompt_injection/__init__.py,sha256=YjzfqLYKdOuEeV8WgE_b9swnP2uhYtOlPbeRplKOTzc,645
124
+ exaaiagnt/tools/prompt_injection/prompt_injection_actions.py,sha256=xvg_MrRAjx9E1vumIJYK8utf34JjTupF3S4BVDV2cVM,24942
117
125
  exaaiagnt/tools/proxy/__init__.py,sha256=K3BFmT6QWw9heB7l7DnmI-Yj-DOI3BAow6g0GLWsA0c,329
118
126
  exaaiagnt/tools/proxy/proxy_actions.py,sha256=HyfI6iUVkRSnzLR_xNRKWhr4roDEAatGyYTq4wij2Js,2549
119
127
  exaaiagnt/tools/proxy/proxy_actions_schema.xml,sha256=d87SUKD2J16KQCCFpI5w2y-Ax1NgwOuGO3crr1bFPDw,11567
@@ -121,14 +129,14 @@ exaaiagnt/tools/proxy/proxy_manager.py,sha256=rmy8c_7jcYl9WeeA3O2lcZBnN7hESpTYxo
121
129
  exaaiagnt/tools/python/__init__.py,sha256=l5mFWKbtis61S8lOQY-gFn-vIlc13lu1K-pqqRywOCk,72
122
130
  exaaiagnt/tools/python/python_actions.py,sha256=ggLFFLW7cQamY1fvgUxzz9beOy_deY1zdouK_K8iF50,1436
123
131
  exaaiagnt/tools/python/python_actions_schema.xml,sha256=XcIUjz5uEoI7J3VFcby0O-0ovm9r9cIoADfpqDGJXlU,7122
124
- exaaiagnt/tools/python/python_instance.py,sha256=G0wh9zwek-dM8DiKn4bR9qH5AYqDXeSUPSPkf4RtaYw,5551
132
+ exaaiagnt/tools/python/python_instance.py,sha256=kYjyPIQG5QmYoKG4xMcb2wPyMcUO3R3A9vXINpXx6dQ,6030
125
133
  exaaiagnt/tools/python/python_manager.py,sha256=C_k8C8uQ6ESpAgzhbf3km9jeFyI52SGd2m36mD1ErhM,4235
126
134
  exaaiagnt/tools/registry.py,sha256=iBRwtiWLQr3fo1vSAOehWbIlr6cqnNPLB1dluXtsf8s,6029
127
135
  exaaiagnt/tools/reporting/__init__.py,sha256=_cYxb3OP0vZtCwO_ExLBjhAn1ECaG-SH1Z4wfGDyT1Y,110
128
136
  exaaiagnt/tools/reporting/reporting_actions.py,sha256=aVEwfG5GgJ68bFJOicO_YD2yp5wCimxlnZzpXX3TJcQ,2200
129
137
  exaaiagnt/tools/reporting/reporting_actions_schema.xml,sha256=y_g0iuyBuCh79fvA0ri8fOPlXY7uUd-P-mdzXLUyIJg,1629
130
- exaaiagnt/tools/response_analyzer.py,sha256=ZBOGwGkH2VM96UH4ZrYhPYI8S_YZp0SG8EDThO7bAX0,10566
131
- exaaiagnt/tools/smart_fuzzer.py,sha256=FQ3RQ8IYFRTEAsKzEtfephCpHbdmDRMm068AsEQ2B-k,12286
138
+ exaaiagnt/tools/response_analyzer.py,sha256=0B8LZ3pvBImH40t8QqCtLdxwc28Chq-2C8I23zi-XJM,10647
139
+ exaaiagnt/tools/smart_fuzzer.py,sha256=cN9TgJcLz3MzDuBIP8EVtEdoJL67LcrFBc2zo9j53cE,12367
132
140
  exaaiagnt/tools/terminal/__init__.py,sha256=xvflcrbLQ31o_K3cWFsIhTm7gxY5JF0nVnhOIadwFV0,80
133
141
  exaaiagnt/tools/terminal/terminal_actions.py,sha256=5z3OTF0YwZL0n_CVsx1yLmbSx7oUQg-xD0Wv8IXsIlw,892
134
142
  exaaiagnt/tools/terminal/terminal_actions_schema.xml,sha256=L7dzjvKNZpJA0qDGp1gCBuwXiY4mtjOq7T2tNDmUPA4,7257
@@ -138,13 +146,13 @@ exaaiagnt/tools/thinking/__init__.py,sha256=-v4fG4fyFkqsTSWspDtCT6IRlyRM8zeUwEM-
138
146
  exaaiagnt/tools/thinking/thinking_actions.py,sha256=Ynw1gBN4Z8iXGll0v9kObhkjQzc8-dEcHTWKeyFutAw,568
139
147
  exaaiagnt/tools/thinking/thinking_actions_schema.xml,sha256=otD4dOhQx4uyudLnjA_HIP6EmUS5NvKG4l3CVFrg8go,2756
140
148
  exaaiagnt/tools/tool_prompts.py,sha256=eQL7B8H8mo6d6mvtN_X9rmSfjwgz9Cuzfg7C7WH6TnU,5751
141
- exaaiagnt/tools/vuln_validator.py,sha256=jgfPOVogjfMSVaorlzXTUA56N1RgYrpF1QshKeHQBn8,13944
149
+ exaaiagnt/tools/vuln_validator.py,sha256=jViG2-3pVBwI3VXe5JsgCFsDBNk9nmT_s2vEe7cZjmA,14025
142
150
  exaaiagnt/tools/waf_bypass.py,sha256=71oPWnDHjn2EHi6I1SluZCKfqfXkA5j61oIkL5kNoSw,12047
143
151
  exaaiagnt/tools/web_search/__init__.py,sha256=m5PCHXqeNVraLRLNIbh54Z2N4Y_75d-ftqwyq3dbCd0,70
144
152
  exaaiagnt/tools/web_search/web_search_actions.py,sha256=jmlN2uIq8lRbhRnyaMQkC-44jhpfkLQZ_byYNlNNlOY,3111
145
153
  exaaiagnt/tools/web_search/web_search_actions_schema.xml,sha256=Ihc3Gv4LaPI_MzBbwZOt3y4pwg9xmtl8KfPNvFihEP4,4805
146
- exaai_agent-2.0.8.dist-info/METADATA,sha256=DQPnhLMYY4bBopzTdAK7M_jMZS1jcZZrIyx-k8pCqSQ,11959
147
- exaai_agent-2.0.8.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
148
- exaai_agent-2.0.8.dist-info/entry_points.txt,sha256=iLSTRDSjN8Zyc2Wo6WXmr4MtyEWkdqtZ1j_Hx73MiUs,137
149
- exaai_agent-2.0.8.dist-info/licenses/LICENSE,sha256=RV6IGl0sWdfbbtJmjPr1w_qwGyGt2jv02PXsAzN_kNs,11460
150
- exaai_agent-2.0.8.dist-info/RECORD,,
154
+ exaai_agent-2.1.2.dist-info/METADATA,sha256=OjaCfqExnqZH9WLe1FU-hfJk7sJndMruISsjGZnlMvQ,12762
155
+ exaai_agent-2.1.2.dist-info/WHEEL,sha256=kJCRJT_g0adfAJzTx2GUMmS80rTJIVHRCfG0DQgLq3o,88
156
+ exaai_agent-2.1.2.dist-info/entry_points.txt,sha256=iLSTRDSjN8Zyc2Wo6WXmr4MtyEWkdqtZ1j_Hx73MiUs,137
157
+ exaai_agent-2.1.2.dist-info/licenses/LICENSE,sha256=RV6IGl0sWdfbbtJmjPr1w_qwGyGt2jv02PXsAzN_kNs,11460
158
+ exaai_agent-2.1.2.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.2.1
2
+ Generator: poetry-core 2.3.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -31,38 +31,54 @@ BANNER = r"""
31
31
 
32
32
 
33
33
  async def run_cli(args: Any) -> None: # noqa: PLR0915
34
- console = Console()
34
+ # Detect if running in a real terminal or headless (pipe/background)
35
+ is_tty = sys.stdout.isatty()
36
+ console = Console(force_terminal=is_tty, no_color=not is_tty)
35
37
 
36
- # Clear screen and show banner
37
- console.clear()
38
- console.print()
39
- console.print(BANNER, style="bold cyan", justify="center")
40
- console.print("[bold purple]Advanced AI-Powered Cybersecurity Agent[/]", justify="center")
41
- console.print("[dim]v2.0.0[/]", justify="center")
42
- console.print()
43
-
44
- # Target info table
45
- target_table = Table(show_header=True, header_style="bold cyan", border_style="cyan")
46
- target_table.add_column("Type", style="dim")
47
- target_table.add_column("Target", style="white")
48
-
49
- for target_info in args.targets_info:
50
- target_type = target_info.get("type", "URL")
51
- target_table.add_row(target_type, target_info["original"])
52
-
53
- console.print(Panel(target_table, title="[bold cyan]🎯 Targets", border_style="cyan"))
54
- console.print()
38
+ if is_tty:
39
+ # Clear screen and show banner only in interactive terminal
40
+ console.clear()
41
+ console.print()
42
+ console.print(BANNER, style="bold cyan", justify="center")
43
+ console.print("[bold purple]Advanced AI-Powered Cybersecurity Agent[/]", justify="center")
44
+ console.print("[dim]v2.1.2[/]", justify="center")
45
+ console.print()
46
+ else:
47
+ # Simple text output for headless/pipe mode
48
+ print("=" * 50)
49
+ print("ExaAiAgent - AI-Powered Security Scanner")
50
+ print("=" * 50)
51
+
52
+ if is_tty:
53
+ # Target info table (rich formatting)
54
+ target_table = Table(show_header=True, header_style="bold cyan", border_style="cyan")
55
+ target_table.add_column("Type", style="dim")
56
+ target_table.add_column("Target", style="white")
57
+
58
+ for target_info in args.targets_info:
59
+ target_type = target_info.get("type", "URL")
60
+ target_table.add_row(target_type, target_info["original"])
61
+
62
+ console.print(Panel(target_table, title="[bold cyan]🎯 Targets", border_style="cyan"))
63
+ console.print()
55
64
 
56
- # Config info
57
- config_text = Text()
58
- config_text.append("📁 Results: ", style="dim")
59
- config_text.append(f"exaai_runs/{args.run_name}\n", style="white")
60
- if args.instruction:
61
- config_text.append("📝 Instruction: ", style="dim")
62
- config_text.append(f"{args.instruction[:100]}{'...' if len(args.instruction) > 100 else ''}", style="white")
63
-
64
- console.print(Panel(config_text, title="[bold green]⚙️ Configuration", border_style="green"))
65
- console.print()
65
+ # Config info
66
+ config_text = Text()
67
+ config_text.append("📁 Results: ", style="dim")
68
+ config_text.append(f"exaai_runs/{args.run_name}\n", style="white")
69
+ if args.instruction:
70
+ config_text.append("📝 Instruction: ", style="dim")
71
+ config_text.append(f"{args.instruction[:100]}{'...' if len(args.instruction) > 100 else ''}", style="white")
72
+
73
+ console.print(Panel(config_text, title="[bold green]⚙️ Configuration", border_style="green"))
74
+ console.print()
75
+ else:
76
+ # Simple text output for headless mode
77
+ print(f"Targets: {[t['original'] for t in args.targets_info]}")
78
+ print(f"Results: exaai_runs/{args.run_name}")
79
+ if args.instruction:
80
+ print(f"Instruction: {args.instruction[:100]}")
81
+ print("-" * 50)
66
82
 
67
83
  scan_config = {
68
84
  "scan_id": args.run_name,
@@ -71,7 +87,12 @@ async def run_cli(args: Any) -> None: # noqa: PLR0915
71
87
  "run_name": args.run_name,
72
88
  }
73
89
 
74
- llm_config = LLMConfig()
90
+ # Handle prompt modules
91
+ prompt_modules = None
92
+ if getattr(args, "prompt_modules", None):
93
+ prompt_modules = [m.strip() for m in args.prompt_modules.split(",")]
94
+
95
+ llm_config = LLMConfig(prompt_modules=prompt_modules)
75
96
  agent_config = {
76
97
  "llm_config": llm_config,
77
98
  "max_iterations": 300,
@@ -242,7 +242,7 @@ async def warm_up_llm() -> None:
242
242
 
243
243
  def get_version() -> str:
244
244
  """Get the current ExaAi version."""
245
- return "2.1.0"
245
+ return "2.1.2"
246
246
 
247
247
 
248
248
  def parse_arguments() -> argparse.Namespace:
@@ -276,6 +276,10 @@ Examples:
276
276
  # Custom instructions
277
277
  exaai -t example.com -i "Focus on authentication vulnerabilities"
278
278
  exaai -t example.com --instruction ./instructions.txt
279
+
280
+ # Specific security modules
281
+ exaai -t example.com --prompt-modules kubernetes_security,cloud_security
282
+ exaai -t example.com --prompt-modules prompt_injection
279
283
  """,
280
284
  )
281
285
 
@@ -306,6 +310,12 @@ Examples:
306
310
  "or test credentials (e.g., 'Use the following credentials: admin:password123'). "
307
311
  "You can also provide a path to a file containing detailed instructions.",
308
312
  )
313
+ parser.add_argument(
314
+ "--prompt-modules",
315
+ type=str,
316
+ help="Comma-separated list of prompt modules to load (e.g., 'kubernetes_security,prompt_injection'). "
317
+ "Overrides auto-detection.",
318
+ )
309
319
  parser.add_argument(
310
320
  "--run-name",
311
321
  type=str,
@@ -45,7 +45,7 @@ def get_package_version() -> str:
45
45
  return pkg_version("exaai-agent")
46
46
  except PackageNotFoundError:
47
47
  # Fallback version if package not installed
48
- return "2.0.4"
48
+ return "2.1.2"
49
49
 
50
50
 
51
51
  class ChatTextArea(TextArea): # type: ignore[misc]
@@ -80,7 +80,7 @@ class SplashScreen(Static): # type: ignore[misc]
80
80
  NEON_ORANGE = "#ff8800"
81
81
  SOFT_WHITE = "#e0e0e0"
82
82
 
83
- # Enhanced ASCII Logo - ExaAi v2.0.4
83
+ # Enhanced ASCII Logo - ExaAi v2.1.2
84
84
  BANNER = r"""
85
85
  ███████╗██╗ ██╗ █████╗ █████╗ ██╗
86
86
  ██╔════╝╚██╗██╔╝██╔══██╗ ██╔══██╗██║
@@ -104,7 +104,7 @@ class SplashScreen(Static): # type: ignore[misc]
104
104
  self._animation_step = 0
105
105
  self._animation_timer: Timer | None = None
106
106
  self._panel_static: Static | None = None
107
- self._version = "2.1.0"
107
+ self._version = "2.1.2"
108
108
 
109
109
  def compose(self) -> ComposeResult:
110
110
  self._version = get_package_version()
@@ -181,14 +181,14 @@ class SplashScreen(Static): # type: ignore[misc]
181
181
  return text
182
182
 
183
183
  def _build_new_features_text(self) -> Text:
184
- """Build new features highlight for v2.0.4."""
184
+ """Build new features highlight for v2.1.0."""
185
185
  text = Text("🔥 ", style=Style(color=self.NEON_ORANGE))
186
186
  text.append("NEW: ", style=Style(color=self.NEON_ORANGE, bold=True))
187
- text.append("React2Shell", style=Style(color=self.NEON_PINK))
187
+ text.append("K8s Security", style=Style(color=self.NEON_PINK))
188
188
  text.append(" • ", style=Style(color=self.SOFT_WHITE, dim=True))
189
- text.append("Cloud Security", style=Style(color=self.NEON_CYAN))
189
+ text.append("Prompt Injection", style=Style(color=self.NEON_CYAN))
190
190
  text.append(" • ", style=Style(color=self.SOFT_WHITE, dim=True))
191
- text.append("Auto-Discovery", style=Style(color=self.NEON_GREEN))
191
+ text.append("Azure/GCP", style=Style(color=self.NEON_GREEN))
192
192
  return text
193
193
 
194
194
 
@@ -391,7 +391,11 @@ class ExaaiTUIApp(App): # type: ignore[misc]
391
391
  }
392
392
 
393
393
  def _build_agent_config(self, args: argparse.Namespace) -> dict[str, Any]:
394
- llm_config = LLMConfig()
394
+ prompt_modules = None
395
+ if getattr(args, "prompt_modules", None):
396
+ prompt_modules = [m.strip() for m in args.prompt_modules.split(",")]
397
+
398
+ llm_config = LLMConfig(prompt_modules=prompt_modules)
395
399
 
396
400
  config = {
397
401
  "llm_config": llm_config,
exaaiagnt/llm/llm.py CHANGED
@@ -17,6 +17,7 @@ from litellm.utils import supports_prompt_caching
17
17
 
18
18
  from exaaiagnt.llm.config import LLMConfig
19
19
  from exaaiagnt.llm.memory_compressor import MemoryCompressor
20
+ from exaaiagnt.llm.request_queue import get_global_queue
20
21
  from exaaiagnt.llm.llm_traffic_controller import get_traffic_controller, RequestPriority
21
22
  from exaaiagnt.llm.utils import _truncate_to_first_function, parse_tool_invocations
22
23
  from exaaiagnt.prompts import load_prompt_modules
@@ -54,11 +54,13 @@ class AdaptiveLLMController:
54
54
  """
55
55
 
56
56
  _instance: Optional["AdaptiveLLMController"] = None
57
+ _lock_cls = __import__("threading").Lock()
57
58
 
58
59
  def __new__(cls) -> "AdaptiveLLMController":
59
- if cls._instance is None:
60
- cls._instance = super().__new__(cls)
61
- cls._instance._initialized = False
60
+ with cls._lock_cls:
61
+ if cls._instance is None:
62
+ cls._instance = super().__new__(cls)
63
+ cls._instance._initialized = False
62
64
  return cls._instance
63
65
 
64
66
  def __init__(self):
@@ -73,8 +75,8 @@ class AdaptiveLLMController:
73
75
  # Rate limiting state
74
76
  self._last_request_time = 0.0
75
77
  self._consecutive_rate_limits = 0
76
- self._base_delay = 2.0 # Base delay between requests
77
- self._current_delay = 2.0
78
+ self._base_delay = 4.0 # Base delay between requests
79
+ self._current_delay = 4.0
78
80
  self._max_delay = 30.0
79
81
 
80
82
  # Statistics
@@ -88,8 +90,8 @@ class AdaptiveLLMController:
88
90
  self._tool_execution_lock = asyncio.Lock()
89
91
 
90
92
  # Configuration
91
- self._max_retries = 3
92
- self._rate_limit_wait = 6.0 # Wait time after rate limit
93
+ self._max_retries = 10 # Increased for Gemini
94
+ self._rate_limit_wait = 15.0 # Longer wait after rate limit
93
95
  self._enable_verbose_logging = False
94
96
 
95
97
  self._initialized = True
@@ -65,8 +65,8 @@ class LLMRequestQueue:
65
65
 
66
66
  def __init__(
67
67
  self,
68
- max_concurrent: int = 4,
69
- delay_between_requests: float = 2.0,
68
+ max_concurrent: int = 2,
69
+ delay_between_requests: float = 4.0,
70
70
  request_timeout: int = 300,
71
71
  ):
72
72
  # Load configuration from environment
@@ -161,8 +161,8 @@ class LLMRequestQueue:
161
161
  self._semaphore.release()
162
162
 
163
163
  @retry(
164
- stop=stop_after_attempt(10), # Increased from 7 to 10
165
- wait=wait_exponential(multiplier=2, min=5, max=120), # Better backoff
164
+ stop=stop_after_attempt(15), # Increased for rate limits
165
+ wait=wait_exponential(multiplier=3, min=10, max=180), # Longer delays
166
166
  retry=retry_if_exception(should_retry_exception),
167
167
  before_sleep=before_sleep_log(logger, logging.WARNING),
168
168
  reraise=True,
@@ -43,12 +43,14 @@ The modules are dynamically injected into the agent's system prompt, allowing it
43
43
  | `race_conditions` | Race condition and TOCTOU exploits |
44
44
  | `path_traversal` | Directory traversal attacks |
45
45
 
46
- ### NEW: Advanced Modules
46
+ ### NEW: Advanced Modules (v2.1)
47
47
 
48
48
  | Module | Description |
49
49
  |--------|-------------|
50
50
  | `api_security` | REST, GraphQL, gRPC API security testing |
51
51
  | `cloud_security` | AWS, Azure, GCP security assessment |
52
+ | `kubernetes_security` | **NEW!** K8s RBAC, Pod Security, Network Policy audit |
53
+ | `prompt_injection` | **NEW!** AI/LLM prompt injection & jailbreaking |
52
54
  | `reconnaissance_osint` | Reconnaissance and OSINT techniques |
53
55
  | `privilege_escalation` | Linux/Windows privilege escalation |
54
56
  | `high_impact_bugs` | Bug bounty hunting for critical vulns |
@@ -210,6 +210,37 @@ MODULE_PATTERNS = {
210
210
  ],
211
211
  "keywords": ["aws", "s3", "ec2", "lambda", "azure", "gcp", "cloud", "bucket", "metadata"],
212
212
  },
213
+
214
+ # Kubernetes Security (NEW v2.1)
215
+ "kubernetes_security": {
216
+ "url_patterns": [
217
+ r"/api/v1/",
218
+ r"/apis/",
219
+ r":6443",
220
+ r":10250",
221
+ r":8443",
222
+ ],
223
+ "keywords": ["kubernetes", "k8s", "kubectl", "pod", "deployment", "service",
224
+ "ingress", "helm", "kubelet", "etcd", "rbac", "namespace"],
225
+ },
226
+
227
+ # AI/LLM Prompt Injection (NEW v2.1)
228
+ "prompt_injection": {
229
+ "url_patterns": [
230
+ r"/chat",
231
+ r"/completions",
232
+ r"/generate",
233
+ r"/ask",
234
+ r"/ai",
235
+ r"/llm",
236
+ r"/v1/chat",
237
+ r"/v1/completions",
238
+ r"/assistant",
239
+ ],
240
+ "keywords": ["openai", "anthropic", "llm", "gpt", "claude", "chatbot",
241
+ "ai assistant", "langchain", "llama", "gemini", "copilot",
242
+ "rag", "embedding", "vector", "prompt"],
243
+ },
213
244
  }
214
245
 
215
246