arca-agent 0.2.2__tar.gz → 0.2.5__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.
Files changed (41) hide show
  1. {arca_agent-0.2.2/arca_agent.egg-info → arca_agent-0.2.5}/PKG-INFO +32 -9
  2. {arca_agent-0.2.2 → arca_agent-0.2.5}/README.md +15 -9
  3. arca_agent-0.2.5/arca/__version__.py +1 -0
  4. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/core/config.py +1 -1
  5. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/llm/providers.py +21 -18
  6. {arca_agent-0.2.2 → arca_agent-0.2.5/arca_agent.egg-info}/PKG-INFO +32 -9
  7. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca_agent.egg-info/SOURCES.txt +0 -1
  8. arca_agent-0.2.5/arca_agent.egg-info/requires.txt +34 -0
  9. {arca_agent-0.2.2 → arca_agent-0.2.5}/pyproject.toml +10 -1
  10. arca_agent-0.2.2/arca/__version__.py +0 -1
  11. arca_agent-0.2.2/arca/_cpp_sim.cpython-312-x86_64-linux-gnu.so +0 -0
  12. arca_agent-0.2.2/arca_agent.egg-info/requires.txt +0 -17
  13. {arca_agent-0.2.2 → arca_agent-0.2.5}/MANIFEST.in +0 -0
  14. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/__init__.py +0 -0
  15. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/agents/__init__.py +0 -0
  16. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/agents/langgraph_orchestrator.py +0 -0
  17. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/api/__init__.py +0 -0
  18. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/api/server.py +0 -0
  19. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/cli.py +0 -0
  20. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/core/__init__.py +0 -0
  21. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/core/agent.py +0 -0
  22. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/core/trainer.py +0 -0
  23. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/cpp_ext/__init__.py +0 -0
  24. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/cpp_ext/sim_engine.cpp +0 -0
  25. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/llm/__init__.py +0 -0
  26. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/sim/__init__.py +0 -0
  27. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/sim/action.py +0 -0
  28. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/sim/custom_network.py +0 -0
  29. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/sim/environment.py +0 -0
  30. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/sim/host.py +0 -0
  31. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/sim/network_generator.py +0 -0
  32. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/utils/__init__.py +0 -0
  33. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/viz/__init__.py +0 -0
  34. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca/viz/visualizer.py +0 -0
  35. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca_agent.egg-info/dependency_links.txt +0 -0
  36. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca_agent.egg-info/entry_points.txt +0 -0
  37. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca_agent.egg-info/not-zip-safe +0 -0
  38. {arca_agent-0.2.2 → arca_agent-0.2.5}/arca_agent.egg-info/top_level.txt +0 -0
  39. {arca_agent-0.2.2 → arca_agent-0.2.5}/setup.cfg +0 -0
  40. {arca_agent-0.2.2 → arca_agent-0.2.5}/setup.py +0 -0
  41. {arca_agent-0.2.2 → arca_agent-0.2.5}/tests/test_arca.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arca-agent
3
- Version: 0.2.2
3
+ Version: 0.2.5
4
4
  Summary: ARCA — Local RL-powered Autonomous Cyber Pentesting Agent with LangGraph
5
5
  Home-page: https://github.com/dipayandasgupta/arca
6
6
  Author: Dipayan Dasgupta
@@ -11,6 +11,23 @@ Project-URL: Repository, https://github.com/DipayanDasgupta/arca
11
11
  Keywords: reinforcement-learning,cybersecurity,pentesting,langgraph,agentic-ai,pybind11
12
12
  Requires-Python: >=3.10
13
13
  Description-Content-Type: text/markdown
14
+ Requires-Dist: numpy>=1.24
15
+ Requires-Dist: gymnasium>=0.29
16
+ Requires-Dist: stable-baselines3>=2.2
17
+ Requires-Dist: networkx>=3.0
18
+ Requires-Dist: torch>=2.0
19
+ Requires-Dist: fastapi>=0.110
20
+ Requires-Dist: uvicorn[standard]>=0.29
21
+ Requires-Dist: pydantic>=2.0
22
+ Requires-Dist: rich>=13.0
23
+ Requires-Dist: typer>=0.12
24
+ Requires-Dist: matplotlib>=3.8
25
+ Requires-Dist: plotly>=5.20
26
+ Requires-Dist: langgraph>=0.1
27
+ Requires-Dist: langchain>=0.2
28
+ Requires-Dist: ollama>=0.2
29
+ Requires-Dist: pyyaml>=6.0
30
+ Requires-Dist: pandas>=2.0
14
31
  Provides-Extra: dev
15
32
  Requires-Dist: pytest; extra == "dev"
16
33
  Requires-Dist: black; extra == "dev"
@@ -28,17 +45,23 @@ Dynamic: author
28
45
  Dynamic: home-page
29
46
  Dynamic: requires-python
30
47
 
48
+ <div align="center">
49
+ <img src="https://github.com/DipayanDasgupta/arca/raw/main/logo.png"
50
+ alt="ARCA Logo"
51
+ width="320">
52
+
53
+ <h1>ARCA — Autonomous Reinforcement Cyber Agent</h1>
31
54
 
55
+ > **A fully local, pip-installable RL-powered cyber pentesting simulation framework with LangGraph orchestration and optional C++ acceleration.**
32
56
 
33
- # ARCA — Autonomous Reinforcement Cyber Agent
57
+ [![PyPI version](https://img.shields.io/pypi/v/arca-agent.svg)](https://pypi.org/project/arca-agent/0.2.3/)
58
+ [![Python](https://img.shields.io/badge/python-3.10%2B-blue)](https://python.org)
59
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
60
+ [![RL](https://img.shields.io/badge/RL-PPO%20%7C%20A2C%20%7C%20DQN-orange)](https://stable-baselines3.readthedocs.io)
61
+ [![LangGraph](https://img.shields.io/badge/Orchestration-LangGraph-purple)](https://langchain-ai.github.io/langgraph)
62
+ </div>
34
63
 
35
- > **A fully local, pip-installable RL-powered cyber pentesting simulation framework with LangGraph orchestration and optional C++ acceleration.**
36
-
37
- [![PyPI version](https://img.shields.io/pypi/v/arca-agent.svg)](https://pypi.org/project/arca-agent/)
38
- [![Python](https://img.shields.io/badge/python-3.10%2B-blue)](https://python.org)
39
- [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
40
- [![RL](https://img.shields.io/badge/RL-PPO%20%7C%20A2C%20%7C%20DQN-orange)](https://stable-baselines3.readthedocs.io)
41
- [![LangGraph](https://img.shields.io/badge/Orchestration-LangGraph-purple)](https://langchain-ai.github.io/langgraph)
64
+ <br>
42
65
 
43
66
  ---
44
67
 
@@ -1,14 +1,20 @@
1
+ <div align="center">
2
+ <img src="https://github.com/DipayanDasgupta/arca/raw/main/logo.png"
3
+ alt="ARCA Logo"
4
+ width="320">
5
+
6
+ <h1>ARCA — Autonomous Reinforcement Cyber Agent</h1>
1
7
 
8
+ > **A fully local, pip-installable RL-powered cyber pentesting simulation framework with LangGraph orchestration and optional C++ acceleration.**
2
9
 
3
- # ARCA — Autonomous Reinforcement Cyber Agent
10
+ [![PyPI version](https://img.shields.io/pypi/v/arca-agent.svg)](https://pypi.org/project/arca-agent/0.2.3/)
11
+ [![Python](https://img.shields.io/badge/python-3.10%2B-blue)](https://python.org)
12
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
13
+ [![RL](https://img.shields.io/badge/RL-PPO%20%7C%20A2C%20%7C%20DQN-orange)](https://stable-baselines3.readthedocs.io)
14
+ [![LangGraph](https://img.shields.io/badge/Orchestration-LangGraph-purple)](https://langchain-ai.github.io/langgraph)
15
+ </div>
4
16
 
5
- > **A fully local, pip-installable RL-powered cyber pentesting simulation framework with LangGraph orchestration and optional C++ acceleration.**
6
-
7
- [![PyPI version](https://img.shields.io/pypi/v/arca-agent.svg)](https://pypi.org/project/arca-agent/)
8
- [![Python](https://img.shields.io/badge/python-3.10%2B-blue)](https://python.org)
9
- [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
10
- [![RL](https://img.shields.io/badge/RL-PPO%20%7C%20A2C%20%7C%20DQN-orange)](https://stable-baselines3.readthedocs.io)
11
- [![LangGraph](https://img.shields.io/badge/Orchestration-LangGraph-purple)](https://langchain-ai.github.io/langgraph)
17
+ <br>
12
18
 
13
19
  ---
14
20
 
@@ -197,4 +203,4 @@ ARCA is a **simulation and education tool only**. All attack actions run inside
197
203
  ## Author
198
204
 
199
205
  **Dipayan Dasgupta** — IIT Madras, Civil Engineering
200
- [GitHub](https://github.com/dipayandasgupta) · [LinkedIn](https://www.linkedin.com/in/dipayan-dasgupta-24a24719b/)
206
+ [GitHub](https://github.com/dipayandasgupta) · [LinkedIn](https://www.linkedin.com/in/dipayan-dasgupta-24a24719b/)
@@ -0,0 +1 @@
1
+ __version__ = "0.2.5"
@@ -53,7 +53,7 @@ class RLConfig:
53
53
  class LLMConfig:
54
54
  """LangGraph / LLM critic and reflection settings."""
55
55
  enabled: bool = True
56
- provider: Literal["ollama", "openai", "anthropic"] = "ollama"
56
+ provider: str = "auto"
57
57
  model: str = "llama3" # ollama model name or API model id
58
58
  base_url: str = "http://localhost:11434"
59
59
  temperature: float = 0.2
@@ -19,13 +19,9 @@ Setup:
19
19
  Claude: export ANTHROPIC_API_KEY=sk-ant-...
20
20
  """
21
21
 
22
- from __future__ import annotations
23
-
24
22
  import os
25
- import time
26
23
  from abc import ABC, abstractmethod
27
24
  from typing import Optional
28
- from dataclasses import dataclass
29
25
 
30
26
 
31
27
  # ── Base interface ────────────────────────────────────────────────────────────
@@ -97,7 +93,7 @@ class OllamaProvider(LLMProvider):
97
93
  return data.get("response", "").strip()
98
94
 
99
95
 
100
- # ── Groq (free tier, very fast) ───────────────────────────────────────────────
96
+ # ── Groq (fixed - forces correct model) ───────────────────────────────────────
101
97
 
102
98
  class GroqProvider(LLMProvider):
103
99
  """
@@ -108,12 +104,12 @@ class GroqProvider(LLMProvider):
108
104
  Best models for ARCA:
109
105
  llama-3.1-8b-instant — fast, good reasoning
110
106
  llama-3.3-70b-versatile — slow but very capable
111
- mixtral-8x7b-32768 — good for long context
112
107
  """
113
108
 
114
109
  def __init__(self, model: str = "llama-3.1-8b-instant", api_key: Optional[str] = None):
115
- self.model = model
116
- self.api_key = api_key or os.environ.get("GROQ_API_KEY", "")
110
+ # Force correct model - ignore any wrong "llama3" passed from orchestrator
111
+ self.model = "llama-3.1-8b-instant" if model in ("llama3", "llama-3") else model
112
+ self.api_key = (api_key or os.environ.get("GROQ_API_KEY", "")).strip()
117
113
  self._client = None
118
114
 
119
115
  @property
@@ -121,7 +117,8 @@ class GroqProvider(LLMProvider):
121
117
  return f"groq:{self.model}"
122
118
 
123
119
  def is_available(self) -> bool:
124
- return bool(self.api_key)
120
+ # Strict check: must start with 'gsk_' and not be empty
121
+ return bool(self.api_key and self.api_key.startswith("gsk_"))
125
122
 
126
123
  def _get_client(self):
127
124
  if self._client is None:
@@ -130,17 +127,23 @@ class GroqProvider(LLMProvider):
130
127
  self._client = Groq(api_key=self.api_key)
131
128
  except ImportError:
132
129
  raise ImportError("Install groq: pip install groq")
130
+ except Exception as e:
131
+ raise RuntimeError(f"Failed to initialize Groq client: {e}")
133
132
  return self._client
134
133
 
135
134
  def complete(self, prompt: str, max_tokens: int = 512) -> str:
136
- client = self._get_client()
137
- response = client.chat.completions.create(
138
- model=self.model,
139
- messages=[{"role": "user", "content": prompt}],
140
- max_tokens=max_tokens,
141
- temperature=0.2,
142
- )
143
- return response.choices[0].message.content.strip()
135
+ try:
136
+ client = self._get_client()
137
+ response = client.chat.completions.create(
138
+ model=self.model,
139
+ messages=[{"role": "user", "content": prompt}],
140
+ max_tokens=max_tokens,
141
+ temperature=0.2,
142
+ )
143
+ return response.choices[0].message.content.strip()
144
+ except Exception as e:
145
+ # Let the caller know it failed so fallback can trigger cleanly
146
+ raise RuntimeError(f"Groq API call failed: {e}")
144
147
 
145
148
 
146
149
  # ── Anthropic / Claude ────────────────────────────────────────────────────────
@@ -343,7 +346,7 @@ def list_providers() -> list[dict]:
343
346
  {
344
347
  "name": "groq",
345
348
  "model": "llama-3.1-8b-instant",
346
- "available": bool(os.environ.get("GROQ_API_KEY")),
349
+ "available": GroqProvider().is_available(), # Uses improved check
347
350
  "setup": "export GROQ_API_KEY=gsk_... (free at console.groq.com)",
348
351
  "cost": "Free tier",
349
352
  "speed": "Very fast",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arca-agent
3
- Version: 0.2.2
3
+ Version: 0.2.5
4
4
  Summary: ARCA — Local RL-powered Autonomous Cyber Pentesting Agent with LangGraph
5
5
  Home-page: https://github.com/dipayandasgupta/arca
6
6
  Author: Dipayan Dasgupta
@@ -11,6 +11,23 @@ Project-URL: Repository, https://github.com/DipayanDasgupta/arca
11
11
  Keywords: reinforcement-learning,cybersecurity,pentesting,langgraph,agentic-ai,pybind11
12
12
  Requires-Python: >=3.10
13
13
  Description-Content-Type: text/markdown
14
+ Requires-Dist: numpy>=1.24
15
+ Requires-Dist: gymnasium>=0.29
16
+ Requires-Dist: stable-baselines3>=2.2
17
+ Requires-Dist: networkx>=3.0
18
+ Requires-Dist: torch>=2.0
19
+ Requires-Dist: fastapi>=0.110
20
+ Requires-Dist: uvicorn[standard]>=0.29
21
+ Requires-Dist: pydantic>=2.0
22
+ Requires-Dist: rich>=13.0
23
+ Requires-Dist: typer>=0.12
24
+ Requires-Dist: matplotlib>=3.8
25
+ Requires-Dist: plotly>=5.20
26
+ Requires-Dist: langgraph>=0.1
27
+ Requires-Dist: langchain>=0.2
28
+ Requires-Dist: ollama>=0.2
29
+ Requires-Dist: pyyaml>=6.0
30
+ Requires-Dist: pandas>=2.0
14
31
  Provides-Extra: dev
15
32
  Requires-Dist: pytest; extra == "dev"
16
33
  Requires-Dist: black; extra == "dev"
@@ -28,17 +45,23 @@ Dynamic: author
28
45
  Dynamic: home-page
29
46
  Dynamic: requires-python
30
47
 
48
+ <div align="center">
49
+ <img src="https://github.com/DipayanDasgupta/arca/raw/main/logo.png"
50
+ alt="ARCA Logo"
51
+ width="320">
52
+
53
+ <h1>ARCA — Autonomous Reinforcement Cyber Agent</h1>
31
54
 
55
+ > **A fully local, pip-installable RL-powered cyber pentesting simulation framework with LangGraph orchestration and optional C++ acceleration.**
32
56
 
33
- # ARCA — Autonomous Reinforcement Cyber Agent
57
+ [![PyPI version](https://img.shields.io/pypi/v/arca-agent.svg)](https://pypi.org/project/arca-agent/0.2.3/)
58
+ [![Python](https://img.shields.io/badge/python-3.10%2B-blue)](https://python.org)
59
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
60
+ [![RL](https://img.shields.io/badge/RL-PPO%20%7C%20A2C%20%7C%20DQN-orange)](https://stable-baselines3.readthedocs.io)
61
+ [![LangGraph](https://img.shields.io/badge/Orchestration-LangGraph-purple)](https://langchain-ai.github.io/langgraph)
62
+ </div>
34
63
 
35
- > **A fully local, pip-installable RL-powered cyber pentesting simulation framework with LangGraph orchestration and optional C++ acceleration.**
36
-
37
- [![PyPI version](https://img.shields.io/pypi/v/arca-agent.svg)](https://pypi.org/project/arca-agent/)
38
- [![Python](https://img.shields.io/badge/python-3.10%2B-blue)](https://python.org)
39
- [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
40
- [![RL](https://img.shields.io/badge/RL-PPO%20%7C%20A2C%20%7C%20DQN-orange)](https://stable-baselines3.readthedocs.io)
41
- [![LangGraph](https://img.shields.io/badge/Orchestration-LangGraph-purple)](https://langchain-ai.github.io/langgraph)
64
+ <br>
42
65
 
43
66
  ---
44
67
 
@@ -4,7 +4,6 @@ pyproject.toml
4
4
  setup.py
5
5
  arca/__init__.py
6
6
  arca/__version__.py
7
- arca/_cpp_sim.cpython-312-x86_64-linux-gnu.so
8
7
  arca/cli.py
9
8
  arca/agents/__init__.py
10
9
  arca/agents/langgraph_orchestrator.py
@@ -0,0 +1,34 @@
1
+ numpy>=1.24
2
+ gymnasium>=0.29
3
+ stable-baselines3>=2.2
4
+ networkx>=3.0
5
+ torch>=2.0
6
+ fastapi>=0.110
7
+ uvicorn[standard]>=0.29
8
+ pydantic>=2.0
9
+ rich>=13.0
10
+ typer>=0.12
11
+ matplotlib>=3.8
12
+ plotly>=5.20
13
+ langgraph>=0.1
14
+ langchain>=0.2
15
+ ollama>=0.2
16
+ pyyaml>=6.0
17
+ pandas>=2.0
18
+
19
+ [all]
20
+ pybind11>=2.11
21
+ dash>=2.16
22
+ ollama>=0.2
23
+
24
+ [cpp]
25
+ pybind11>=2.11
26
+
27
+ [dev]
28
+ pytest
29
+ black
30
+ ruff
31
+ mypy
32
+
33
+ [viz]
34
+ dash>=2.16
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "arca-agent"
3
- version = "0.2.2"
3
+ version = "0.2.5"
4
4
  description = "ARCA — Local RL-powered Autonomous Cyber Pentesting Agent with LangGraph"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -8,6 +8,15 @@ license = {text = "MIT"}
8
8
  authors = [{name = "Dipayan Dasgupta", email = "deep.dasgupta2006@gmail.com"}]
9
9
  keywords = ["reinforcement-learning", "cybersecurity", "pentesting", "langgraph", "agentic-ai", "pybind11"]
10
10
 
11
+ dependencies = [
12
+ "numpy>=1.24", "gymnasium>=0.29", "stable-baselines3>=2.2",
13
+ "networkx>=3.0", "torch>=2.0", "fastapi>=0.110",
14
+ "uvicorn[standard]>=0.29", "pydantic>=2.0", "rich>=13.0",
15
+ "typer>=0.12", "matplotlib>=3.8", "plotly>=5.20",
16
+ "langgraph>=0.1", "langchain>=0.2", "ollama>=0.2",
17
+ "pyyaml>=6.0", "pandas>=2.0"
18
+ ]
19
+
11
20
  [project.urls]
12
21
  Homepage = "https://github.com/DipayanDasgupta/arca"
13
22
  Repository = "https://github.com/DipayanDasgupta/arca"
@@ -1 +0,0 @@
1
- __version__ = "0.1.5"
@@ -1,17 +0,0 @@
1
-
2
- [all]
3
- pybind11>=2.11
4
- dash>=2.16
5
- ollama>=0.2
6
-
7
- [cpp]
8
- pybind11>=2.11
9
-
10
- [dev]
11
- pytest
12
- black
13
- ruff
14
- mypy
15
-
16
- [viz]
17
- dash>=2.16
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes