exaai-agent 2.2.0__py3-none-any.whl → 2.2.1__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.2.0
3
+ Version: 2.2.1
4
4
  Summary: ExaAi - Advanced AI Security Agent for Comprehensive Penetration Testing
5
5
  License: Apache-2.0
6
6
  License-File: LICENSE
@@ -37,6 +37,7 @@ Requires-Dist: rich
37
37
  Requires-Dist: tenacity (>=9.0.0,<10.0.0)
38
38
  Requires-Dist: textual (>=4.0.0,<5.0.0)
39
39
  Requires-Dist: uvicorn
40
+ Requires-Dist: websockets (>=12.0,<13.0)
40
41
  Requires-Dist: xmltodict (>=0.13.0,<0.14.0)
41
42
  Description-Content-Type: text/markdown
42
43
 
@@ -13,7 +13,7 @@ exaaiagnt/dashboard/templates/index.html,sha256=d5_Uwl2bNTm8Ynb_jlOoXftlrZ7F1Kpt
13
13
  exaaiagnt/interface/__init__.py,sha256=ww23sFOQhICEIrIo0MtwWv2qHW5qUprvPj8QVjv3SM0,44
14
14
  exaaiagnt/interface/assets/tui_styles.tcss,sha256=iwhx72f5bIiSg72168ifyR_Q0TKfL3Bf0lU6cyJw1Bg,12114
15
15
  exaaiagnt/interface/cli.py,sha256=vTkeNELONfXwzQ_XgPhX3UcHVSbOBL_E6USnkRZtM74,9855
16
- exaaiagnt/interface/main.py,sha256=PO62c4P26qT9v2nLWkfQSC_SWjaCncaxdZUT42U9Lu0,19483
16
+ exaaiagnt/interface/main.py,sha256=MK8Y8u43P3Y3hvHpR84NPL49YOA0jRR64DzZocWZn7M,20107
17
17
  exaaiagnt/interface/tool_components/__init__.py,sha256=Dz5ci3VMzvhlPOwQ2x9Nd11cmFzx1OP7sdlpZPMTT4k,935
18
18
  exaaiagnt/interface/tool_components/agents_graph_renderer.py,sha256=eVFRqmJ-TxyxZ-hssLTweDAio4UvsZZgxo2dKky0N1U,4399
19
19
  exaaiagnt/interface/tool_components/base_renderer.py,sha256=P0zYeRnbkr2NYoE8KDQmj1TzrAGX6r7qLMb4Sw7AoTI,1905
@@ -30,7 +30,7 @@ exaaiagnt/interface/tool_components/terminal_renderer.py,sha256=-ORL2vBH5XImUZrI
30
30
  exaaiagnt/interface/tool_components/thinking_renderer.py,sha256=-MQLkKCgOJksrustULFf2jhAjJrP5bbfS2BQ6zgNKCc,927
31
31
  exaaiagnt/interface/tool_components/user_message_renderer.py,sha256=6gHJ1hG-pwcTsxLM7JuYZuaDu8cZ2MeOuUDF3LGy-4I,1432
32
32
  exaaiagnt/interface/tool_components/web_search_renderer.py,sha256=JnJa22ACIcRksfxxdenesUo8Th9cHSxo-fej9YcuYHs,911
33
- exaaiagnt/interface/tui.py,sha256=bMuIJvrauCStAJkjvRWzDueLDraKnrHWtC5ZjyuDxOc,49970
33
+ exaaiagnt/interface/tui.py,sha256=lPEqiW-_Un8dtP48311ksmqGs4LkGfxnz0r0nEQmfWA,49970
34
34
  exaaiagnt/interface/utils.py,sha256=xp6eDOC8C0c3cjt791S_jBDs1B-xp_ydIb74QnMLEt8,20219
35
35
  exaaiagnt/llm/__init__.py,sha256=hUVixjSSIUtwIP2I5D_9e6Kdxhhunnajgxx_2DEYNww,1095
36
36
  exaaiagnt/llm/config.py,sha256=HQ0skwQxtHwiDLDWBCU1Fp4UoQ8tbrTNQw9s7JGVaiY,3303
@@ -94,7 +94,7 @@ exaaiagnt/prompts/vulnerabilities/websocket_security.jinja,sha256=8xHptbsCCI1W9P
94
94
  exaaiagnt/prompts/vulnerabilities/xss.jinja,sha256=GG1egKjGw9onilu1azEhU2Hfxu9XjQfBA2j4P4KQRzE,8675
95
95
  exaaiagnt/prompts/vulnerabilities/xxe.jinja,sha256=yyWl5i74YiFZIhQknMPWXLKL0C5gwL6Ra_YB4xddJsc,7841
96
96
  exaaiagnt/runtime/__init__.py,sha256=MnuwXAMjvj2kQKJCOyzW-qQSpiipGzmESVWz436lqkQ,760
97
- exaaiagnt/runtime/docker_runtime.py,sha256=lb4cipUbCkwPw3_BxKyICFoIW8Su2zFs_sFW-r59Nfk,16185
97
+ exaaiagnt/runtime/docker_runtime.py,sha256=anlBMLwlJ1RFprp8Zs29hN03NHQyOlKDMoY9jzZcZzI,16641
98
98
  exaaiagnt/runtime/runtime.py,sha256=PRYByipRG9OhtIphIruGBSe4k-glVnYAXH68mikqt78,730
99
99
  exaaiagnt/runtime/tool_manager.py,sha256=3PSUxTmGsFptNlKkZDnzXyyBA_AfbKvqhMPyRi6_fMU,14770
100
100
  exaaiagnt/runtime/tool_server.py,sha256=e23TJYL5w32gMqLS9UJ0xw3XZ4lM38ETBvHVHKk3APU,6835
@@ -118,7 +118,7 @@ exaaiagnt/tools/finish/__init__.py,sha256=QIMaHYusly8YaFR3zjYsy_CFawwgtTZvOU7gsE
118
118
  exaaiagnt/tools/finish/finish_actions.py,sha256=ZLyOuYMjdTPHN9_6sQxyHwp3-BVSusk5dM2WHUn3WMI,5714
119
119
  exaaiagnt/tools/finish/finish_actions_schema.xml,sha256=CS6Vq3ByyNxv2spRWS4oJcmUzWQRB7jvUAOS8aiWd8o,2294
120
120
  exaaiagnt/tools/k8s_scanner/__init__.py,sha256=MIo_Hl4p7Zzea9KSR_wVnxnlyyrB9eS8g3DlZxwSsHk,557
121
- exaaiagnt/tools/k8s_scanner/k8s_actions.py,sha256=DdwnXm0Z86guNsAtuxsNhLeexIFk1y_Xza_GvACd2zM,13477
121
+ exaaiagnt/tools/k8s_scanner/k8s_actions.py,sha256=1Ow7uWTzAgOgQLjpH0M00YIycZ6bMsjXU2FgCrE-1m4,13477
122
122
  exaaiagnt/tools/k8s_scanner/k8s_actions_schema.xml,sha256=s-Qnq8FX6zjT6qIRHG81dq9zSToj6BbnntLGQ-vWzhM,1272
123
123
  exaaiagnt/tools/notes/__init__.py,sha256=DUpkZUWN21tb9AXCWfJLrKrgLz9YEBVU8KQy1J6cyxU,189
124
124
  exaaiagnt/tools/notes/notes_actions.py,sha256=8ewd1kCxZO_ujKP2oXuU03r9p8EZEYgoO7i_6GWw_VA,5775
@@ -155,8 +155,8 @@ exaaiagnt/tools/waf_bypass.py,sha256=71oPWnDHjn2EHi6I1SluZCKfqfXkA5j61oIkL5kNoSw
155
155
  exaaiagnt/tools/web_search/__init__.py,sha256=m5PCHXqeNVraLRLNIbh54Z2N4Y_75d-ftqwyq3dbCd0,70
156
156
  exaaiagnt/tools/web_search/web_search_actions.py,sha256=k9zjzdqTVsNdh0pFtntIfwO77_ThQIedXSaUhJxPs2U,3295
157
157
  exaaiagnt/tools/web_search/web_search_actions_schema.xml,sha256=Ihc3Gv4LaPI_MzBbwZOt3y4pwg9xmtl8KfPNvFihEP4,4805
158
- exaai_agent-2.2.0.dist-info/METADATA,sha256=92DfPaFHPXBZkhl09w4pWJ0CE_mKFs4mIOh3TMd3bZ8,13421
159
- exaai_agent-2.2.0.dist-info/WHEEL,sha256=kJCRJT_g0adfAJzTx2GUMmS80rTJIVHRCfG0DQgLq3o,88
160
- exaai_agent-2.2.0.dist-info/entry_points.txt,sha256=iLSTRDSjN8Zyc2Wo6WXmr4MtyEWkdqtZ1j_Hx73MiUs,137
161
- exaai_agent-2.2.0.dist-info/licenses/LICENSE,sha256=RV6IGl0sWdfbbtJmjPr1w_qwGyGt2jv02PXsAzN_kNs,11460
162
- exaai_agent-2.2.0.dist-info/RECORD,,
158
+ exaai_agent-2.2.1.dist-info/METADATA,sha256=_N3L88kQUscOnVK0NuHGAjH0MZXidMNpNiSm9_nWJJ0,13462
159
+ exaai_agent-2.2.1.dist-info/WHEEL,sha256=kJCRJT_g0adfAJzTx2GUMmS80rTJIVHRCfG0DQgLq3o,88
160
+ exaai_agent-2.2.1.dist-info/entry_points.txt,sha256=iLSTRDSjN8Zyc2Wo6WXmr4MtyEWkdqtZ1j_Hx73MiUs,137
161
+ exaai_agent-2.2.1.dist-info/licenses/LICENSE,sha256=RV6IGl0sWdfbbtJmjPr1w_qwGyGt2jv02PXsAzN_kNs,11460
162
+ exaai_agent-2.2.1.dist-info/RECORD,,
@@ -224,7 +224,17 @@ async def warm_up_llm() -> None:
224
224
  error_text.append("\n\n", style="white")
225
225
  error_text.append("Could not establish connection to the language model.\n", style="white")
226
226
  error_text.append("Please check your configuration and try again.\n", style="white")
227
- error_text.append(f"\nError: {e}", style="dim white")
227
+
228
+ # Enhanced error diagnosis
229
+ error_str = str(e)
230
+ if "AuthenticationError" in error_str:
231
+ error_text.append("🔍 Hint: Your API key seems invalid or expired.\n", style="bold yellow")
232
+ elif "NotFoundError" in error_str:
233
+ error_text.append(f"🔍 Hint: The model '{model_name}' was not found. Check if the model name is correct.\n", style="bold yellow")
234
+ elif "ConnectionError" in error_str:
235
+ error_text.append("🔍 Hint: Network connection failed. Check your internet or proxy settings.\n", style="bold yellow")
236
+
237
+ error_text.append(f"\nError Details: {e}", style="dim white")
228
238
 
229
239
  panel = Panel(
230
240
  error_text,
@@ -242,7 +252,7 @@ async def warm_up_llm() -> None:
242
252
 
243
253
  def get_version() -> str:
244
254
  """Get the current ExaAi version."""
245
- return "2.1.2"
255
+ return "2.2.1"
246
256
 
247
257
 
248
258
  def parse_arguments() -> argparse.Namespace:
@@ -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.1.2"
48
+ return "2.2.1"
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.1.2
83
+ # Enhanced ASCII Logo - ExaAi v2.2.1
84
84
  BANNER = r"""
85
85
  ███████╗██╗ ██╗ █████╗ █████╗ ██╗
86
86
  ██╔════╝╚██╗██╔╝██╔══██╗ ██╔══██╗██║
@@ -104,6 +104,14 @@ class DockerRuntime(AbstractRuntime):
104
104
  self._tool_server_port = tool_server_port
105
105
  self._tool_server_token = tool_server_token
106
106
 
107
+ # Mount kubeconfig if available
108
+ volumes = {}
109
+ kube_config = os.path.expanduser("~/.kube")
110
+ if os.path.exists(kube_config):
111
+ volumes[kube_config] = {'bind': '/root/.kube', 'mode': 'ro'}
112
+ # Also mount for pentester user
113
+ volumes[kube_config] = {'bind': '/home/pentester/.kube', 'mode': 'ro'}
114
+
107
115
  container = self.client.containers.run(
108
116
  EXAAI_IMAGE,
109
117
  command="sleep infinity",
@@ -114,6 +122,7 @@ class DockerRuntime(AbstractRuntime):
114
122
  f"{caido_port}/tcp": caido_port,
115
123
  f"{tool_server_port}/tcp": tool_server_port,
116
124
  },
125
+ volumes=volumes,
117
126
  cap_add=["NET_ADMIN", "NET_RAW"],
118
127
  labels={"exaai-scan-id": scan_id},
119
128
  environment={
@@ -10,7 +10,7 @@ Comprehensive security testing for Kubernetes clusters including:
10
10
  - Container vulnerability scanning integration
11
11
 
12
12
  Author: ALhilali
13
- Version: 1.0.0
13
+ Version: 2.2.1
14
14
  """
15
15
 
16
16
  import logging