strix-agent 0.1.17__py3-none-any.whl → 0.1.18__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.
Potentially problematic release.
This version of strix-agent might be problematic. Click here for more details.
- strix/cli/main.py +79 -23
- strix/llm/llm.py +9 -0
- {strix_agent-0.1.17.dist-info → strix_agent-0.1.18.dist-info}/METADATA +4 -4
- {strix_agent-0.1.17.dist-info → strix_agent-0.1.18.dist-info}/RECORD +7 -7
- {strix_agent-0.1.17.dist-info → strix_agent-0.1.18.dist-info}/LICENSE +0 -0
- {strix_agent-0.1.17.dist-info → strix_agent-0.1.18.dist-info}/WHEEL +0 -0
- {strix_agent-0.1.17.dist-info → strix_agent-0.1.18.dist-info}/entry_points.txt +0 -0
strix/cli/main.py
CHANGED
|
@@ -48,8 +48,23 @@ def validate_environment() -> None:
|
|
|
48
48
|
if not os.getenv("STRIX_LLM"):
|
|
49
49
|
missing_required_vars.append("STRIX_LLM")
|
|
50
50
|
|
|
51
|
+
has_base_url = any(
|
|
52
|
+
[
|
|
53
|
+
os.getenv("LLM_API_BASE"),
|
|
54
|
+
os.getenv("OPENAI_API_BASE"),
|
|
55
|
+
os.getenv("LITELLM_BASE_URL"),
|
|
56
|
+
os.getenv("OLLAMA_API_BASE"),
|
|
57
|
+
]
|
|
58
|
+
)
|
|
59
|
+
|
|
51
60
|
if not os.getenv("LLM_API_KEY"):
|
|
52
|
-
|
|
61
|
+
if not has_base_url:
|
|
62
|
+
missing_required_vars.append("LLM_API_KEY")
|
|
63
|
+
else:
|
|
64
|
+
missing_optional_vars.append("LLM_API_KEY")
|
|
65
|
+
|
|
66
|
+
if not has_base_url:
|
|
67
|
+
missing_optional_vars.append("LLM_API_BASE")
|
|
53
68
|
|
|
54
69
|
if not os.getenv("PERPLEXITY_API_KEY"):
|
|
55
70
|
missing_optional_vars.append("PERPLEXITY_API_KEY")
|
|
@@ -65,40 +80,72 @@ def validate_environment() -> None:
|
|
|
65
80
|
error_text.append(" is not set\n", style="white")
|
|
66
81
|
|
|
67
82
|
if missing_optional_vars:
|
|
68
|
-
error_text.append(
|
|
69
|
-
"\nOptional (but recommended) environment variables:\n", style="dim white"
|
|
70
|
-
)
|
|
83
|
+
error_text.append("\nOptional environment variables:\n", style="dim white")
|
|
71
84
|
for var in missing_optional_vars:
|
|
72
85
|
error_text.append(f"• {var}", style="dim yellow")
|
|
73
86
|
error_text.append(" is not set\n", style="dim white")
|
|
74
87
|
|
|
75
88
|
error_text.append("\nRequired environment variables:\n", style="white")
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
89
|
+
for var in missing_required_vars:
|
|
90
|
+
if var == "STRIX_LLM":
|
|
91
|
+
error_text.append("• ", style="white")
|
|
92
|
+
error_text.append("STRIX_LLM", style="bold cyan")
|
|
93
|
+
error_text.append(
|
|
94
|
+
" - Model name to use with litellm (e.g., 'openai/gpt-5')\n",
|
|
95
|
+
style="white",
|
|
96
|
+
)
|
|
97
|
+
elif var == "LLM_API_KEY":
|
|
98
|
+
error_text.append("• ", style="white")
|
|
99
|
+
error_text.append("LLM_API_KEY", style="bold cyan")
|
|
100
|
+
error_text.append(
|
|
101
|
+
" - API key for the LLM provider (required for cloud providers)\n",
|
|
102
|
+
style="white",
|
|
103
|
+
)
|
|
85
104
|
|
|
86
105
|
if missing_optional_vars:
|
|
87
106
|
error_text.append("\nOptional environment variables:\n", style="white")
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
107
|
+
for var in missing_optional_vars:
|
|
108
|
+
if var == "LLM_API_KEY":
|
|
109
|
+
error_text.append("• ", style="white")
|
|
110
|
+
error_text.append("LLM_API_KEY", style="bold cyan")
|
|
111
|
+
error_text.append(" - API key for the LLM provider\n", style="white")
|
|
112
|
+
elif var == "LLM_API_BASE":
|
|
113
|
+
error_text.append("• ", style="white")
|
|
114
|
+
error_text.append("LLM_API_BASE", style="bold cyan")
|
|
115
|
+
error_text.append(
|
|
116
|
+
" - Custom API base URL if using local models (e.g., Ollama, LMStudio)\n",
|
|
117
|
+
style="white",
|
|
118
|
+
)
|
|
119
|
+
elif var == "PERPLEXITY_API_KEY":
|
|
120
|
+
error_text.append("• ", style="white")
|
|
121
|
+
error_text.append("PERPLEXITY_API_KEY", style="bold cyan")
|
|
122
|
+
error_text.append(
|
|
123
|
+
" - API key for Perplexity AI web search (enables real-time research)\n",
|
|
124
|
+
style="white",
|
|
125
|
+
)
|
|
94
126
|
|
|
95
127
|
error_text.append("\nExample setup:\n", style="white")
|
|
96
128
|
error_text.append("export STRIX_LLM='openai/gpt-5'\n", style="dim white")
|
|
97
|
-
|
|
129
|
+
|
|
130
|
+
if "LLM_API_KEY" in missing_required_vars:
|
|
131
|
+
error_text.append("export LLM_API_KEY='your-api-key-here'\n", style="dim white")
|
|
132
|
+
|
|
98
133
|
if missing_optional_vars:
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
134
|
+
for var in missing_optional_vars:
|
|
135
|
+
if var == "LLM_API_KEY":
|
|
136
|
+
error_text.append(
|
|
137
|
+
"export LLM_API_KEY='your-api-key-here' # optional with local models\n",
|
|
138
|
+
style="dim white",
|
|
139
|
+
)
|
|
140
|
+
elif var == "LLM_API_BASE":
|
|
141
|
+
error_text.append(
|
|
142
|
+
"export LLM_API_BASE='http://localhost:11434' # needed for local models only\n",
|
|
143
|
+
style="dim white",
|
|
144
|
+
)
|
|
145
|
+
elif var == "PERPLEXITY_API_KEY":
|
|
146
|
+
error_text.append(
|
|
147
|
+
"export PERPLEXITY_API_KEY='your-perplexity-key-here'\n", style="dim white"
|
|
148
|
+
)
|
|
102
149
|
|
|
103
150
|
panel = Panel(
|
|
104
151
|
error_text,
|
|
@@ -152,6 +199,15 @@ async def warm_up_llm() -> None:
|
|
|
152
199
|
if api_key:
|
|
153
200
|
litellm.api_key = api_key
|
|
154
201
|
|
|
202
|
+
api_base = (
|
|
203
|
+
os.getenv("LLM_API_BASE")
|
|
204
|
+
or os.getenv("OPENAI_API_BASE")
|
|
205
|
+
or os.getenv("LITELLM_BASE_URL")
|
|
206
|
+
or os.getenv("OLLAMA_API_BASE")
|
|
207
|
+
)
|
|
208
|
+
if api_base:
|
|
209
|
+
litellm.api_base = api_base
|
|
210
|
+
|
|
155
211
|
test_messages = [
|
|
156
212
|
{"role": "system", "content": "You are a helpful assistant."},
|
|
157
213
|
{"role": "user", "content": "Reply with just 'OK'."},
|
strix/llm/llm.py
CHANGED
|
@@ -28,6 +28,15 @@ api_key = os.getenv("LLM_API_KEY")
|
|
|
28
28
|
if api_key:
|
|
29
29
|
litellm.api_key = api_key
|
|
30
30
|
|
|
31
|
+
api_base = (
|
|
32
|
+
os.getenv("LLM_API_BASE")
|
|
33
|
+
or os.getenv("OPENAI_API_BASE")
|
|
34
|
+
or os.getenv("LITELLM_BASE_URL")
|
|
35
|
+
or os.getenv("OLLAMA_API_BASE")
|
|
36
|
+
)
|
|
37
|
+
if api_base:
|
|
38
|
+
litellm.api_base = api_base
|
|
39
|
+
|
|
31
40
|
|
|
32
41
|
class LLMRequestFailedError(Exception):
|
|
33
42
|
def __init__(self, message: str, details: str | None = None):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: strix-agent
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.18
|
|
4
4
|
Summary: Open-source AI Hackers for your apps
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Keywords: cybersecurity,security,vulnerability,scanner,pentest,agent,ai,cli
|
|
@@ -129,12 +129,12 @@ strix --target api.your-app.com --instruction "Prioritize authentication and aut
|
|
|
129
129
|
### ⚙️ Configuration
|
|
130
130
|
|
|
131
131
|
```bash
|
|
132
|
-
# Required
|
|
133
132
|
export STRIX_LLM="openai/gpt-5"
|
|
134
133
|
export LLM_API_KEY="your-api-key"
|
|
135
134
|
|
|
136
|
-
#
|
|
137
|
-
export
|
|
135
|
+
# Optional
|
|
136
|
+
export LLM_API_BASE="your-api-base-url" # if using a local model, e.g. Ollama, LMStudio
|
|
137
|
+
export PERPLEXITY_API_KEY="your-api-key" # for search capabilities
|
|
138
138
|
```
|
|
139
139
|
|
|
140
140
|
[📚 View supported AI models](https://docs.litellm.ai/docs/providers)
|
|
@@ -8,7 +8,7 @@ strix/agents/state.py,sha256=O5tuAsABlCOCYt-itoK7S30XtH44WD3JjEflkZP3y6E,4982
|
|
|
8
8
|
strix/cli/__init__.py,sha256=ww23sFOQhICEIrIo0MtwWv2qHW5qUprvPj8QVjv3SM0,44
|
|
9
9
|
strix/cli/app.py,sha256=G5XvXgdUoGJSyeJCicP_JgmWs1B92FZY5htX6_dfFKk,41000
|
|
10
10
|
strix/cli/assets/cli.tcss,sha256=y7N_l8sJhDeflwqjmGz_Zm6xhVzpKUPJ6zcci-3qesE,11914
|
|
11
|
-
strix/cli/main.py,sha256=
|
|
11
|
+
strix/cli/main.py,sha256=w3UJGZOG0qsnEbBCLFAh7Yhi4eteQzNnKLSXDMxPR0I,23852
|
|
12
12
|
strix/cli/tool_components/__init__.py,sha256=Dz5ci3VMzvhlPOwQ2x9Nd11cmFzx1OP7sdlpZPMTT4k,935
|
|
13
13
|
strix/cli/tool_components/agents_graph_renderer.py,sha256=eVFRqmJ-TxyxZ-hssLTweDAio4UvsZZgxo2dKky0N1U,4399
|
|
14
14
|
strix/cli/tool_components/base_renderer.py,sha256=KOm7dKVAGWxLgUTAltoEsLX2OJm6vb0btFiTK7qmgwU,1886
|
|
@@ -28,7 +28,7 @@ strix/cli/tool_components/web_search_renderer.py,sha256=JnJa22ACIcRksfxxdenesUo8
|
|
|
28
28
|
strix/cli/tracer.py,sha256=V8_ZnYHKfzsVQSMuxb04_AweuXN1dWUJ-9C025-rM0Y,11207
|
|
29
29
|
strix/llm/__init__.py,sha256=WqYE3Xc2e1D3z4QyjwN_jZPTdqsSDX6ODYsu-dcufSk,230
|
|
30
30
|
strix/llm/config.py,sha256=iBv1tuUOUDcP2gVQWhjtN8wtO5lWOipsER7Rnc3p6k4,603
|
|
31
|
-
strix/llm/llm.py,sha256=
|
|
31
|
+
strix/llm/llm.py,sha256=lsjNAXDGikhI2EGrtQHolqRtr5KC4Zi4-2sCUF3n9ZE,15604
|
|
32
32
|
strix/llm/memory_compressor.py,sha256=RFJWirlK39ZkoDc42eNicJUR8nMVbxSsviWvfJ4kRgs,6953
|
|
33
33
|
strix/llm/request_queue.py,sha256=P8YStE3qe8X1H0PkIaZ7_FNokWgDlgrrZrRj0TWHbKo,2595
|
|
34
34
|
strix/llm/utils.py,sha256=0Z0r6qo9IfUSOJt5FJsq3X-veXrA8A09frc2VIy-aS4,2540
|
|
@@ -92,8 +92,8 @@ strix/tools/thinking/thinking_actions_schema.xml,sha256=otD4dOhQx4uyudLnjA_HIP6E
|
|
|
92
92
|
strix/tools/web_search/__init__.py,sha256=m5PCHXqeNVraLRLNIbh54Z2N4Y_75d-ftqwyq3dbCd0,70
|
|
93
93
|
strix/tools/web_search/web_search_actions.py,sha256=LRS3AjGO4JLIyu_B6-ogfWOsnENwqrrCa8Rz0vxuuGQ,3107
|
|
94
94
|
strix/tools/web_search/web_search_actions_schema.xml,sha256=Ihc3Gv4LaPI_MzBbwZOt3y4pwg9xmtl8KfPNvFihEP4,4805
|
|
95
|
-
strix_agent-0.1.
|
|
96
|
-
strix_agent-0.1.
|
|
97
|
-
strix_agent-0.1.
|
|
98
|
-
strix_agent-0.1.
|
|
99
|
-
strix_agent-0.1.
|
|
95
|
+
strix_agent-0.1.18.dist-info/LICENSE,sha256=fblpcTQlHjFL2NOSV_4XDJiz4q2bLtZ-l6yvlhPnueM,11345
|
|
96
|
+
strix_agent-0.1.18.dist-info/METADATA,sha256=YDzrTkLRg8j5RmJgGHuOUld_FoVBsubdf85DcRVxi8k,6241
|
|
97
|
+
strix_agent-0.1.18.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
|
|
98
|
+
strix_agent-0.1.18.dist-info/entry_points.txt,sha256=sswIgnkzSVSzQ3Rd046g7mhIPQaj_7RYlXgU_bQelF0,45
|
|
99
|
+
strix_agent-0.1.18.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|