strix-agent 0.1.17__tar.gz → 0.1.18__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.

Potentially problematic release.


This version of strix-agent might be problematic. Click here for more details.

Files changed (98) hide show
  1. {strix_agent-0.1.17 → strix_agent-0.1.18}/PKG-INFO +4 -4
  2. {strix_agent-0.1.17 → strix_agent-0.1.18}/README.md +3 -3
  3. {strix_agent-0.1.17 → strix_agent-0.1.18}/pyproject.toml +1 -1
  4. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/main.py +79 -23
  5. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/llm/llm.py +9 -0
  6. {strix_agent-0.1.17 → strix_agent-0.1.18}/LICENSE +0 -0
  7. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/__init__.py +0 -0
  8. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/agents/StrixAgent/__init__.py +0 -0
  9. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/agents/StrixAgent/strix_agent.py +0 -0
  10. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/agents/StrixAgent/system_prompt.jinja +0 -0
  11. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/agents/__init__.py +0 -0
  12. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/agents/base_agent.py +0 -0
  13. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/agents/state.py +0 -0
  14. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/__init__.py +0 -0
  15. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/app.py +0 -0
  16. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/assets/cli.tcss +0 -0
  17. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/tool_components/__init__.py +0 -0
  18. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/tool_components/agents_graph_renderer.py +0 -0
  19. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/tool_components/base_renderer.py +0 -0
  20. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/tool_components/browser_renderer.py +0 -0
  21. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/tool_components/file_edit_renderer.py +0 -0
  22. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/tool_components/finish_renderer.py +0 -0
  23. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/tool_components/notes_renderer.py +0 -0
  24. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/tool_components/proxy_renderer.py +0 -0
  25. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/tool_components/python_renderer.py +0 -0
  26. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/tool_components/registry.py +0 -0
  27. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/tool_components/reporting_renderer.py +0 -0
  28. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/tool_components/scan_info_renderer.py +0 -0
  29. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/tool_components/terminal_renderer.py +0 -0
  30. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/tool_components/thinking_renderer.py +0 -0
  31. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/tool_components/user_message_renderer.py +0 -0
  32. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/tool_components/web_search_renderer.py +0 -0
  33. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/cli/tracer.py +0 -0
  34. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/llm/__init__.py +0 -0
  35. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/llm/config.py +0 -0
  36. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/llm/memory_compressor.py +0 -0
  37. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/llm/request_queue.py +0 -0
  38. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/llm/utils.py +0 -0
  39. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/prompts/__init__.py +0 -0
  40. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/prompts/coordination/root_agent.jinja +0 -0
  41. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/prompts/vulnerabilities/authentication_jwt.jinja +0 -0
  42. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/prompts/vulnerabilities/business_logic.jinja +0 -0
  43. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/prompts/vulnerabilities/csrf.jinja +0 -0
  44. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/prompts/vulnerabilities/idor.jinja +0 -0
  45. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/prompts/vulnerabilities/race_conditions.jinja +0 -0
  46. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/prompts/vulnerabilities/rce.jinja +0 -0
  47. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/prompts/vulnerabilities/sql_injection.jinja +0 -0
  48. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/prompts/vulnerabilities/ssrf.jinja +0 -0
  49. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/prompts/vulnerabilities/xss.jinja +0 -0
  50. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/prompts/vulnerabilities/xxe.jinja +0 -0
  51. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/runtime/__init__.py +0 -0
  52. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/runtime/docker_runtime.py +0 -0
  53. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/runtime/runtime.py +0 -0
  54. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/runtime/tool_server.py +0 -0
  55. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/__init__.py +0 -0
  56. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/agents_graph/__init__.py +0 -0
  57. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/agents_graph/agents_graph_actions.py +0 -0
  58. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/agents_graph/agents_graph_actions_schema.xml +0 -0
  59. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/argument_parser.py +0 -0
  60. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/browser/__init__.py +0 -0
  61. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/browser/browser_actions.py +0 -0
  62. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/browser/browser_actions_schema.xml +0 -0
  63. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/browser/browser_instance.py +0 -0
  64. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/browser/tab_manager.py +0 -0
  65. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/executor.py +0 -0
  66. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/file_edit/__init__.py +0 -0
  67. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/file_edit/file_edit_actions.py +0 -0
  68. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/file_edit/file_edit_actions_schema.xml +0 -0
  69. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/finish/__init__.py +0 -0
  70. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/finish/finish_actions.py +0 -0
  71. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/finish/finish_actions_schema.xml +0 -0
  72. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/notes/__init__.py +0 -0
  73. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/notes/notes_actions.py +0 -0
  74. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/notes/notes_actions_schema.xml +0 -0
  75. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/proxy/__init__.py +0 -0
  76. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/proxy/proxy_actions.py +0 -0
  77. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/proxy/proxy_actions_schema.xml +0 -0
  78. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/proxy/proxy_manager.py +0 -0
  79. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/python/__init__.py +0 -0
  80. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/python/python_actions.py +0 -0
  81. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/python/python_actions_schema.xml +0 -0
  82. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/python/python_instance.py +0 -0
  83. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/python/python_manager.py +0 -0
  84. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/registry.py +0 -0
  85. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/reporting/__init__.py +0 -0
  86. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/reporting/reporting_actions.py +0 -0
  87. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/reporting/reporting_actions_schema.xml +0 -0
  88. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/terminal/__init__.py +0 -0
  89. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/terminal/terminal_actions.py +0 -0
  90. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/terminal/terminal_actions_schema.xml +0 -0
  91. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/terminal/terminal_manager.py +0 -0
  92. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/terminal/terminal_session.py +0 -0
  93. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/thinking/__init__.py +0 -0
  94. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/thinking/thinking_actions.py +0 -0
  95. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/thinking/thinking_actions_schema.xml +0 -0
  96. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/web_search/__init__.py +0 -0
  97. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/web_search/web_search_actions.py +0 -0
  98. {strix_agent-0.1.17 → strix_agent-0.1.18}/strix/tools/web_search/web_search_actions_schema.xml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: strix-agent
3
- Version: 0.1.17
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
- # Recommended
137
- export PERPLEXITY_API_KEY="your-api-key"
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)
@@ -89,12 +89,12 @@ strix --target api.your-app.com --instruction "Prioritize authentication and aut
89
89
  ### ⚙️ Configuration
90
90
 
91
91
  ```bash
92
- # Required
93
92
  export STRIX_LLM="openai/gpt-5"
94
93
  export LLM_API_KEY="your-api-key"
95
94
 
96
- # Recommended
97
- export PERPLEXITY_API_KEY="your-api-key"
95
+ # Optional
96
+ export LLM_API_BASE="your-api-base-url" # if using a local model, e.g. Ollama, LMStudio
97
+ export PERPLEXITY_API_KEY="your-api-key" # for search capabilities
98
98
  ```
99
99
 
100
100
  [📚 View supported AI models](https://docs.litellm.ai/docs/providers)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "strix-agent"
3
- version = "0.1.17"
3
+ version = "0.1.18"
4
4
  description = "Open-source AI Hackers for your apps"
5
5
  authors = ["Strix <hi@usestrix.com>"]
6
6
  readme = "README.md"
@@ -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
- missing_required_vars.append("LLM_API_KEY")
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
- error_text.append("• ", style="white")
77
- error_text.append("STRIX_LLM", style="bold cyan")
78
- error_text.append(
79
- " - Model name to use with litellm (e.g., 'openai/gpt-5')\n",
80
- style="white",
81
- )
82
- error_text.append("• ", style="white")
83
- error_text.append("LLM_API_KEY", style="bold cyan")
84
- error_text.append(" - API key for the LLM provider\n", style="white")
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
- error_text.append("• ", style="white")
89
- error_text.append("PERPLEXITY_API_KEY", style="bold cyan")
90
- error_text.append(
91
- " - API key for Perplexity AI web search (enables real-time research)\n",
92
- style="white",
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
- error_text.append("export LLM_API_KEY='your-api-key-here'\n", style="dim white")
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
- error_text.append(
100
- "export PERPLEXITY_API_KEY='your-perplexity-key-here'", style="dim white"
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'."},
@@ -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):
File without changes