reverse-api-engineer 0.2.2__tar.gz → 0.2.3__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.
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/CHANGELOG.md +7 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/PKG-INFO +9 -12
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/README.md +8 -10
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/pyproject.toml +3 -2
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/src/reverse_api/__init__.py +1 -1
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/src/reverse_api/browser.py +46 -87
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/src/reverse_api/engineer.py +5 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/src/reverse_api/opencode_ui.py +65 -51
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/src/reverse_api/utils.py +5 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/uv.lock +26 -3530
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/.claude/settings.local.json +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/.gitignore +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/.python-version +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/CONTRIBUTING.md +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/LICENSE +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/assets/reverse-api-banner.svg +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/assets/reverse-api-engineer.gif +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/assets/reverse-api-logo.svg +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/scripts/fetch_all_jobs/README.md +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/scripts/fetch_all_jobs/api_client.py +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/scripts/post_x/README.md +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/scripts/post_x/api_client.py +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/scripts/post_x/example_usage.py +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/scripts/web_scraping_task/README.md +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/scripts/web_scraping_task/api_client.py +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/scripts/web_scraping_task/example_usage.py +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/src/reverse_api/base_engineer.py +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/src/reverse_api/cli.py +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/src/reverse_api/config.py +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/src/reverse_api/messages.py +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/src/reverse_api/opencode_engineer.py +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/src/reverse_api/session.py +0 -0
- {reverse_api_engineer-0.2.2 → reverse_api_engineer-0.2.3}/src/reverse_api/tui.py +0 -0
|
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.2.3] - 2025-12-27
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- **Version display**: Fix hardcoded version display
|
|
12
|
+
- **Logs display**: Remove agent logs, claude agent sdk logs
|
|
13
|
+
- **Browser-use installation**: Better instructions on how to install bu for agent mode
|
|
14
|
+
|
|
8
15
|
## [0.2.2] - 2025-12-26
|
|
9
16
|
|
|
10
17
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: reverse-api-engineer
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: A tool to capture browser traffic for API reverse engineering
|
|
5
5
|
Project-URL: Homepage, https://github.com/kalil0321/reverse-api-engineer
|
|
6
6
|
Project-URL: Repository, https://github.com/kalil0321/reverse-api-engineer
|
|
@@ -30,7 +30,6 @@ Requires-Dist: questionary>=2.0.0
|
|
|
30
30
|
Requires-Dist: requests>=2.32.5
|
|
31
31
|
Requires-Dist: rich>=13.0.0
|
|
32
32
|
Provides-Extra: agent
|
|
33
|
-
Requires-Dist: browser-use; extra == 'agent'
|
|
34
33
|
Requires-Dist: stagehand; extra == 'agent'
|
|
35
34
|
Description-Content-Type: text/markdown
|
|
36
35
|
|
|
@@ -74,9 +73,11 @@ CLI tool that captures browser traffic and automatically generates production-re
|
|
|
74
73
|
# Basic installation (manual and engineer modes)
|
|
75
74
|
pip install reverse-api-engineer
|
|
76
75
|
|
|
77
|
-
# With agent mode support
|
|
76
|
+
# With agent mode support
|
|
78
77
|
pip install 'reverse-api-engineer[agent]'
|
|
79
|
-
|
|
78
|
+
|
|
79
|
+
# Install browser-use with HAR recording support (required for agent mode)
|
|
80
|
+
pip install git+https://github.com/browser-use/browser-use.git@49a345fb19e9f12befc5cc1658e0033873892455
|
|
80
81
|
```
|
|
81
82
|
|
|
82
83
|
### Using uv (recommended)
|
|
@@ -84,9 +85,8 @@ pip install git+https://github.com/browser-use/browser-use.git@49a345fb19e9f12be
|
|
|
84
85
|
# Basic installation
|
|
85
86
|
uv tool install reverse-api-engineer
|
|
86
87
|
|
|
87
|
-
# With agent mode support
|
|
88
|
-
uv tool install 'reverse-api-engineer[agent]'
|
|
89
|
-
uv pip install git+https://github.com/browser-use/browser-use.git@49a345fb19e9f12befc5cc1658e0033873892455
|
|
88
|
+
# With agent mode support (includes browser-use with HAR recording)
|
|
89
|
+
uv tool install 'reverse-api-engineer[agent]' --with 'browser-use @ git+https://github.com/browser-use/browser-use.git@49a345fb19e9f12befc5cc1658e0033873892455'
|
|
90
90
|
```
|
|
91
91
|
|
|
92
92
|
### From source
|
|
@@ -142,7 +142,7 @@ reverse-api-engineer engineer <run_id>
|
|
|
142
142
|
|
|
143
143
|
Fully automated browser interaction using AI agents:
|
|
144
144
|
|
|
145
|
-
1. Install with agent support
|
|
145
|
+
1. Install with agent support (see installation instructions above for pip or uv)
|
|
146
146
|
2. Start the CLI: `reverse-api-engineer`
|
|
147
147
|
3. Switch to agent mode (Shift+Tab until you see `[agent]`)
|
|
148
148
|
4. Enter your task description (e.g., "Click on the first job listing")
|
|
@@ -151,10 +151,7 @@ Fully automated browser interaction using AI agents:
|
|
|
151
151
|
7. HAR is captured automatically
|
|
152
152
|
8. Optionally run reverse engineering to generate API client
|
|
153
153
|
|
|
154
|
-
**
|
|
155
|
-
```bash
|
|
156
|
-
pip install git+https://github.com/browser-use/browser-use.git@<commit-hash>
|
|
157
|
-
```
|
|
154
|
+
**Important:** Browser-use must be installed from the specific git commit shown in the installation instructions above. This version includes HAR recording support which is not yet available in the PyPI release.
|
|
158
155
|
|
|
159
156
|
**Agent Provider Configuration:**
|
|
160
157
|
- **Browser-Use** (default): Supports Browser-Use LLM, OpenAI, and Google models
|
|
@@ -38,9 +38,11 @@ CLI tool that captures browser traffic and automatically generates production-re
|
|
|
38
38
|
# Basic installation (manual and engineer modes)
|
|
39
39
|
pip install reverse-api-engineer
|
|
40
40
|
|
|
41
|
-
# With agent mode support
|
|
41
|
+
# With agent mode support
|
|
42
42
|
pip install 'reverse-api-engineer[agent]'
|
|
43
|
-
|
|
43
|
+
|
|
44
|
+
# Install browser-use with HAR recording support (required for agent mode)
|
|
45
|
+
pip install git+https://github.com/browser-use/browser-use.git@49a345fb19e9f12befc5cc1658e0033873892455
|
|
44
46
|
```
|
|
45
47
|
|
|
46
48
|
### Using uv (recommended)
|
|
@@ -48,9 +50,8 @@ pip install git+https://github.com/browser-use/browser-use.git@49a345fb19e9f12be
|
|
|
48
50
|
# Basic installation
|
|
49
51
|
uv tool install reverse-api-engineer
|
|
50
52
|
|
|
51
|
-
# With agent mode support
|
|
52
|
-
uv tool install 'reverse-api-engineer[agent]'
|
|
53
|
-
uv pip install git+https://github.com/browser-use/browser-use.git@49a345fb19e9f12befc5cc1658e0033873892455
|
|
53
|
+
# With agent mode support (includes browser-use with HAR recording)
|
|
54
|
+
uv tool install 'reverse-api-engineer[agent]' --with 'browser-use @ git+https://github.com/browser-use/browser-use.git@49a345fb19e9f12befc5cc1658e0033873892455'
|
|
54
55
|
```
|
|
55
56
|
|
|
56
57
|
### From source
|
|
@@ -106,7 +107,7 @@ reverse-api-engineer engineer <run_id>
|
|
|
106
107
|
|
|
107
108
|
Fully automated browser interaction using AI agents:
|
|
108
109
|
|
|
109
|
-
1. Install with agent support
|
|
110
|
+
1. Install with agent support (see installation instructions above for pip or uv)
|
|
110
111
|
2. Start the CLI: `reverse-api-engineer`
|
|
111
112
|
3. Switch to agent mode (Shift+Tab until you see `[agent]`)
|
|
112
113
|
4. Enter your task description (e.g., "Click on the first job listing")
|
|
@@ -115,10 +116,7 @@ Fully automated browser interaction using AI agents:
|
|
|
115
116
|
7. HAR is captured automatically
|
|
116
117
|
8. Optionally run reverse engineering to generate API client
|
|
117
118
|
|
|
118
|
-
**
|
|
119
|
-
```bash
|
|
120
|
-
pip install git+https://github.com/browser-use/browser-use.git@<commit-hash>
|
|
121
|
-
```
|
|
119
|
+
**Important:** Browser-use must be installed from the specific git commit shown in the installation instructions above. This version includes HAR recording support which is not yet available in the PyPI release.
|
|
122
120
|
|
|
123
121
|
**Agent Provider Configuration:**
|
|
124
122
|
- **Browser-Use** (default): Supports Browser-Use LLM, OpenAI, and Google models
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "reverse-api-engineer"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.3"
|
|
4
4
|
description = "A tool to capture browser traffic for API reverse engineering"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
@@ -35,7 +35,8 @@ dependencies = [
|
|
|
35
35
|
|
|
36
36
|
[project.optional-dependencies]
|
|
37
37
|
agent = [
|
|
38
|
-
|
|
38
|
+
# browser-use must be installed separately from git (PyPI doesn't allow git dependencies)
|
|
39
|
+
# See installation instructions in README
|
|
39
40
|
"stagehand"
|
|
40
41
|
]
|
|
41
42
|
|
|
@@ -19,6 +19,7 @@ from rich.console import Console
|
|
|
19
19
|
from rich.status import Status
|
|
20
20
|
|
|
21
21
|
from .utils import get_har_dir, get_timestamp
|
|
22
|
+
from . import __version__
|
|
22
23
|
|
|
23
24
|
console = Console()
|
|
24
25
|
|
|
@@ -386,7 +387,7 @@ class ManualBrowser:
|
|
|
386
387
|
# Wait for browser to close
|
|
387
388
|
try:
|
|
388
389
|
while self._context.pages:
|
|
389
|
-
self._context.pages[0].wait_for_timeout(100)
|
|
390
|
+
self._context.pages[0].wait_for_timeout(100)
|
|
390
391
|
except Exception:
|
|
391
392
|
pass
|
|
392
393
|
|
|
@@ -435,7 +436,7 @@ class ManualBrowser:
|
|
|
435
436
|
time.sleep(1)
|
|
436
437
|
|
|
437
438
|
status.update(" [dim]saving har file...[/dim]")
|
|
438
|
-
self._context.close()
|
|
439
|
+
self._context.close()
|
|
439
440
|
|
|
440
441
|
if self.har_path.exists():
|
|
441
442
|
har_size = self.har_path.stat().st_size
|
|
@@ -675,69 +676,43 @@ class AgentBrowser:
|
|
|
675
676
|
async def _run_with_browser_use(self) -> dict:
|
|
676
677
|
"""Run agent with HAR recording via browser-use's built-in HAR capture."""
|
|
677
678
|
import logging
|
|
679
|
+
import os
|
|
678
680
|
|
|
679
|
-
#
|
|
680
|
-
|
|
681
|
-
def __init__(self, console_instance):
|
|
682
|
-
super().__init__()
|
|
683
|
-
self.console = console_instance
|
|
684
|
-
|
|
685
|
-
def emit(self, record):
|
|
686
|
-
try:
|
|
687
|
-
msg = record.getMessage()
|
|
688
|
-
|
|
689
|
-
if "🧠 Memory:" in msg or ("Memory:" in msg and "🧠" not in msg):
|
|
690
|
-
if "🧠 Memory:" in msg:
|
|
691
|
-
memory_text = msg.split("🧠 Memory:", 1)[-1].strip()
|
|
692
|
-
elif "Memory:" in msg:
|
|
693
|
-
memory_text = msg.split("Memory:", 1)[-1].strip()
|
|
694
|
-
else:
|
|
695
|
-
memory_text = msg
|
|
696
|
-
|
|
697
|
-
memory_text = " ".join(memory_text.split())
|
|
698
|
-
|
|
699
|
-
if memory_text:
|
|
700
|
-
self.console.print(f" [dim]{memory_text}[/dim]")
|
|
701
|
-
except Exception:
|
|
702
|
-
pass # Silently ignore handler errors
|
|
703
|
-
|
|
704
|
-
# Suppress all browser-use logs completely
|
|
705
|
-
# Keep INFO level for memory capture, but prevent propagation to parent handlers
|
|
706
|
-
null_handler = logging.NullHandler()
|
|
707
|
-
|
|
708
|
-
browser_use_logger = logging.getLogger("browser_use")
|
|
709
|
-
browser_use_logger.setLevel(logging.INFO)
|
|
710
|
-
browser_use_logger.handlers.clear() # Remove existing handlers
|
|
711
|
-
browser_use_logger.propagate = False
|
|
712
|
-
|
|
713
|
-
agent_logger = logging.getLogger("Agent")
|
|
714
|
-
agent_logger.setLevel(logging.INFO)
|
|
715
|
-
agent_logger.handlers.clear() # Remove existing handlers
|
|
716
|
-
agent_logger.propagate = False
|
|
717
|
-
|
|
718
|
-
# Suppress these loggers completely
|
|
719
|
-
for logger_name in ["BrowserSession", "service", "tools"]:
|
|
720
|
-
logger = logging.getLogger(logger_name)
|
|
721
|
-
logger.setLevel(logging.CRITICAL)
|
|
722
|
-
logger.handlers.clear()
|
|
723
|
-
logger.addHandler(null_handler)
|
|
724
|
-
logger.propagate = False
|
|
681
|
+
# Set before importing to ensure it takes effect
|
|
682
|
+
os.environ['BROWSER_USE_LOGGING_LEVEL'] = 'WARNING'
|
|
725
683
|
|
|
684
|
+
# Import browser-use after setting environment variable
|
|
726
685
|
try:
|
|
727
686
|
from browser_use import Agent, Browser
|
|
728
687
|
from browser_use import ChatBrowserUse
|
|
688
|
+
|
|
689
|
+
# Suppress all browser-use loggers after import
|
|
690
|
+
def suppress_browser_use_logs():
|
|
691
|
+
for logger_name in [
|
|
692
|
+
"browser_use",
|
|
693
|
+
"Agent",
|
|
694
|
+
"BrowserSession",
|
|
695
|
+
"service",
|
|
696
|
+
"tools",
|
|
697
|
+
]:
|
|
698
|
+
logger = logging.getLogger(logger_name)
|
|
699
|
+
logger.setLevel(logging.CRITICAL)
|
|
700
|
+
logger.handlers.clear()
|
|
701
|
+
logger.addHandler(logging.NullHandler())
|
|
702
|
+
logger.propagate = False
|
|
703
|
+
|
|
704
|
+
suppress_browser_use_logs()
|
|
729
705
|
except ImportError:
|
|
730
706
|
result = {
|
|
731
707
|
"success": False,
|
|
732
708
|
"message": None,
|
|
733
|
-
"error": "browser-use is required for agent mode. Install it with: pip install
|
|
709
|
+
"error": "browser-use is required for agent mode. Install it with: pip install git+https://github.com/browser-use/browser-use.git@49a345fb19e9f12befc5cc1658e0033873892455",
|
|
734
710
|
}
|
|
735
711
|
console.print(f" [red]error:[/red] {result['error']}")
|
|
736
712
|
return result
|
|
737
713
|
|
|
738
714
|
result = {"success": False, "message": None, "error": None}
|
|
739
715
|
browser = None
|
|
740
|
-
memory_handler = None
|
|
741
716
|
|
|
742
717
|
try:
|
|
743
718
|
# Parse agent model and validate API key
|
|
@@ -786,60 +761,41 @@ class AgentBrowser:
|
|
|
786
761
|
console.print(f" [red]error:[/red] {result['error']}")
|
|
787
762
|
return result
|
|
788
763
|
|
|
764
|
+
suppress_browser_use_logs()
|
|
765
|
+
|
|
789
766
|
console.print(f" [dim]starting browser with har...[/dim]")
|
|
790
767
|
browser = Browser(
|
|
791
768
|
record_har_path=str(self.har_path),
|
|
792
769
|
record_har_mode="full",
|
|
793
770
|
record_har_content="attach",
|
|
794
771
|
)
|
|
772
|
+
|
|
773
|
+
suppress_browser_use_logs()
|
|
774
|
+
|
|
795
775
|
await browser.start()
|
|
796
776
|
|
|
777
|
+
suppress_browser_use_logs()
|
|
778
|
+
|
|
797
779
|
console.print(f" [dim]browser started[/dim]")
|
|
798
780
|
|
|
799
781
|
task = self.prompt
|
|
800
782
|
|
|
801
|
-
# Set up memory log handler
|
|
802
|
-
memory_handler = MemoryLogHandler(console)
|
|
803
|
-
memory_handler.setLevel(logging.INFO)
|
|
804
|
-
browser_use_logger.addHandler(memory_handler)
|
|
805
|
-
agent_logger.addHandler(memory_handler)
|
|
806
|
-
|
|
807
783
|
agent = Agent(task=task, llm=llm, browser=browser)
|
|
808
|
-
agent_result = await agent.run()
|
|
809
784
|
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
785
|
+
suppress_browser_use_logs()
|
|
786
|
+
|
|
787
|
+
agent_result = await agent.run()
|
|
813
788
|
|
|
814
|
-
# Extract final result
|
|
789
|
+
# Extract final result using browser-use's built-in method
|
|
815
790
|
final_message = None
|
|
816
|
-
if agent_result:
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
if hasattr(last_result, "text") and last_result.text:
|
|
820
|
-
final_message = last_result.text
|
|
821
|
-
elif hasattr(last_result, "result") and last_result.result:
|
|
822
|
-
final_message = str(last_result.result)
|
|
823
|
-
elif hasattr(agent_result, "result"):
|
|
824
|
-
final_message = str(agent_result.result)
|
|
825
|
-
elif hasattr(agent_result, "text"):
|
|
826
|
-
final_message = agent_result.text
|
|
827
|
-
else:
|
|
828
|
-
msg_str = str(agent_result)
|
|
829
|
-
if "Final Result:" in msg_str:
|
|
830
|
-
parts = msg_str.split("Final Result:")
|
|
831
|
-
if len(parts) > 1:
|
|
832
|
-
final_message = parts[-1].strip()
|
|
833
|
-
else:
|
|
834
|
-
final_message = msg_str
|
|
791
|
+
if agent_result and hasattr(agent_result, "final_result"):
|
|
792
|
+
final_result_attr = agent_result.final_result
|
|
793
|
+
final_message = final_result_attr() if callable(final_result_attr) else final_result_attr
|
|
835
794
|
|
|
836
795
|
result["success"] = True
|
|
837
796
|
result["message"] = final_message or "Task completed"
|
|
838
797
|
|
|
839
798
|
except Exception as e:
|
|
840
|
-
if memory_handler:
|
|
841
|
-
browser_use_logger.removeHandler(memory_handler)
|
|
842
|
-
agent_logger.removeHandler(memory_handler)
|
|
843
799
|
result["error"] = str(e)
|
|
844
800
|
console.print(f" [yellow]agent error: {e}[/yellow]")
|
|
845
801
|
finally:
|
|
@@ -908,7 +864,10 @@ class AgentBrowser:
|
|
|
908
864
|
empty_har = {
|
|
909
865
|
"log": {
|
|
910
866
|
"version": "1.2",
|
|
911
|
-
"creator": {
|
|
867
|
+
"creator": {
|
|
868
|
+
"name": "reverse-api-engineer",
|
|
869
|
+
"version": __version__,
|
|
870
|
+
},
|
|
912
871
|
"pages": [],
|
|
913
872
|
"entries": [],
|
|
914
873
|
}
|
|
@@ -1062,11 +1021,11 @@ class AgentBrowser:
|
|
|
1062
1021
|
|
|
1063
1022
|
if result.get("success"):
|
|
1064
1023
|
console.print(f" [green]agent task completed[/green]")
|
|
1065
|
-
|
|
1066
|
-
|
|
1024
|
+
msg = result.get("message", "").strip()
|
|
1025
|
+
if msg:
|
|
1067
1026
|
if len(msg) > 500:
|
|
1068
1027
|
msg = msg[:500] + "..."
|
|
1069
|
-
console.print(f" [dim]result:[/dim] [white]{msg}[/white]")
|
|
1028
|
+
console.print(f" [dim]result:[/dim]\n [white]{msg}[/white]")
|
|
1070
1029
|
else:
|
|
1071
1030
|
error = result.get("error", "unknown error")
|
|
1072
1031
|
console.print(f" [yellow]agent error: {error}[/yellow]")
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Reverse engineering module with SDK dispatch."""
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
|
+
import logging
|
|
4
5
|
from pathlib import Path
|
|
5
6
|
from typing import Optional, Dict, Any
|
|
6
7
|
|
|
@@ -16,6 +17,10 @@ from claude_agent_sdk import (
|
|
|
16
17
|
|
|
17
18
|
from .base_engineer import BaseEngineer
|
|
18
19
|
|
|
20
|
+
# Suppress claude_agent_sdk logs
|
|
21
|
+
logging.getLogger("claude_agent_sdk").setLevel(logging.WARNING)
|
|
22
|
+
logging.getLogger("claude_agent_sdk._internal.transport.subprocess_cli").setLevel(logging.WARNING)
|
|
23
|
+
|
|
19
24
|
|
|
20
25
|
class ClaudeEngineer(BaseEngineer):
|
|
21
26
|
"""Uses Claude Agent SDK to analyze HAR files and generate Python API scripts."""
|