webtap-tool 0.1.1__tar.gz → 0.1.2__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 webtap-tool might be problematic. Click here for more details.
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/CHANGELOG.md +10 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/PKG-INFO +146 -46
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/README.md +145 -45
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/pyproject.toml +1 -1
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/.gitignore +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/ARCHITECTURE.md +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/data/filters.json +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/extension/manifest.json +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/extension/popup.html +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/extension/popup.js +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/llms.txt +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/VISION.md +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/__init__.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/api.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/app.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/cdp/README.md +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/cdp/__init__.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/cdp/query.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/cdp/schema/README.md +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/cdp/schema/cdp_protocol.json +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/cdp/schema/cdp_version.json +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/cdp/session.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/DEVELOPER_GUIDE.md +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/TIPS.md +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/__init__.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/_builders.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/_errors.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/_tips.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/_utils.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/body.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/connection.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/console.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/events.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/fetch.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/filters.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/inspect.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/javascript.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/launch.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/navigation.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/network.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/commands/setup.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/filters.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/services/README.md +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/services/__init__.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/services/body.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/services/console.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/services/fetch.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/services/main.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/services/network.py +0 -0
- {webtap_tool-0.1.1 → webtap_tool-0.1.2}/src/webtap/services/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: webtap-tool
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Terminal-based web page inspector for AI debugging sessions
|
|
5
5
|
Author-email: Fredrik Angelsen <fredrikangelsen@gmail.com>
|
|
6
6
|
Classifier: Development Status :: 3 - Alpha
|
|
@@ -25,69 +25,148 @@ Requires-Dist: websocket-client>=1.8.0
|
|
|
25
25
|
Requires-Dist: websockets>=15.0.1
|
|
26
26
|
Description-Content-Type: text/markdown
|
|
27
27
|
|
|
28
|
-
#
|
|
28
|
+
# webtap
|
|
29
29
|
|
|
30
30
|
Browser debugging via Chrome DevTools Protocol with native event storage and dynamic querying.
|
|
31
31
|
|
|
32
|
-
##
|
|
32
|
+
## ✨ Features
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
- 🔍 **Native CDP Storage** - Events stored exactly as received in DuckDB
|
|
35
|
+
- 🎯 **Dynamic Field Discovery** - Automatically indexes all field paths from events
|
|
36
|
+
- 🚫 **Smart Filtering** - Built-in filters for ads, tracking, analytics noise
|
|
37
|
+
- 📊 **SQL Querying** - Direct DuckDB access for complex analysis
|
|
38
|
+
- 🔌 **MCP Ready** - Tools and resources for Claude/LLMs
|
|
39
|
+
- 🎨 **Rich Display** - Tables, alerts, and formatted output
|
|
40
|
+
- 🐍 **Python Inspection** - Full Python environment for data exploration
|
|
35
41
|
|
|
36
|
-
##
|
|
42
|
+
## 📋 Prerequisites
|
|
37
43
|
|
|
38
|
-
|
|
39
|
-
- **
|
|
40
|
-
- **Smart Filtering** - Built-in filters for ads, tracking, analytics noise
|
|
41
|
-
- **SQL Querying** - Direct DuckDB access for complex analysis
|
|
42
|
-
- **Chrome Extension** - Visual page selector and connection management
|
|
43
|
-
- **Python Inspection** - Full Python environment for data exploration
|
|
44
|
-
|
|
45
|
-
## Installation
|
|
44
|
+
Required system dependencies:
|
|
45
|
+
- **google-chrome-stable** or **chromium** - Browser with DevTools Protocol support
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
|
-
#
|
|
49
|
-
|
|
48
|
+
# macOS
|
|
49
|
+
brew install --cask google-chrome
|
|
50
|
+
|
|
51
|
+
# Ubuntu/Debian
|
|
52
|
+
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
|
|
53
|
+
sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
|
|
54
|
+
sudo apt update
|
|
55
|
+
sudo apt install google-chrome-stable
|
|
50
56
|
|
|
51
|
-
#
|
|
52
|
-
|
|
53
|
-
|
|
57
|
+
# Arch Linux
|
|
58
|
+
yay -S google-chrome # or google-chrome-stable from AUR
|
|
59
|
+
|
|
60
|
+
# Fedora
|
|
61
|
+
sudo dnf install google-chrome-stable
|
|
54
62
|
```
|
|
55
63
|
|
|
56
|
-
##
|
|
64
|
+
## 📦 Installation
|
|
57
65
|
|
|
58
|
-
1. **Start Chrome with debugging**
|
|
59
66
|
```bash
|
|
60
|
-
#
|
|
61
|
-
|
|
67
|
+
# Install via uv tool (recommended)
|
|
68
|
+
uv tool install webtap-tool
|
|
62
69
|
|
|
63
|
-
#
|
|
64
|
-
|
|
70
|
+
# Or with pipx
|
|
71
|
+
pipx install webtap-tool
|
|
65
72
|
|
|
66
|
-
#
|
|
67
|
-
|
|
73
|
+
# Update to latest
|
|
74
|
+
uv tool upgrade webtap-tool
|
|
75
|
+
|
|
76
|
+
# Uninstall
|
|
77
|
+
uv tool uninstall webtap-tool
|
|
68
78
|
```
|
|
69
79
|
|
|
70
|
-
|
|
80
|
+
## 🚀 Quick Start
|
|
81
|
+
|
|
71
82
|
```bash
|
|
83
|
+
# 1. Install webtap
|
|
84
|
+
uv tool install webtap-tool
|
|
85
|
+
|
|
86
|
+
# 2. Optional: Setup helpers (first time only)
|
|
87
|
+
webtap --cli setup-filters # Download default filter configurations
|
|
88
|
+
webtap --cli setup-extension # Download Chrome extension files
|
|
89
|
+
webtap --cli setup-chrome # Install Chrome wrapper for debugging
|
|
90
|
+
|
|
91
|
+
# 3. Launch Chrome with debugging
|
|
92
|
+
webtap --cli run-chrome # Or manually: google-chrome-stable --remote-debugging-port=9222
|
|
93
|
+
|
|
94
|
+
# 4. Start webtap REPL
|
|
72
95
|
webtap
|
|
73
96
|
|
|
74
|
-
#
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
>>>
|
|
97
|
+
# 5. Connect and explore
|
|
98
|
+
>>> pages() # List available Chrome pages
|
|
99
|
+
>>> connect(0) # Connect to first page
|
|
100
|
+
>>> network() # View network requests (filtered)
|
|
101
|
+
>>> console() # View console messages
|
|
102
|
+
>>> events({"url": "*api*"}) # Query any CDP field dynamically
|
|
80
103
|
```
|
|
81
104
|
|
|
82
|
-
|
|
105
|
+
## 🔌 MCP Setup for Claude
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# Quick setup with Claude CLI
|
|
109
|
+
claude mcp add webtap -- webtap --mcp
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Or manually configure Claude Desktop (`~/Library/Application Support/Claude/claude_desktop_config.json`):
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"mcpServers": {
|
|
116
|
+
"webtap": {
|
|
117
|
+
"command": "webtap",
|
|
118
|
+
"args": ["--mcp"]
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## 🎮 Usage
|
|
125
|
+
|
|
126
|
+
### Interactive REPL
|
|
127
|
+
```bash
|
|
128
|
+
webtap # Start REPL
|
|
129
|
+
webtap --mcp # Start as MCP server
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### CLI Commands
|
|
133
|
+
```bash
|
|
134
|
+
webtap --cli setup-filters # Download filter configurations
|
|
135
|
+
webtap --cli setup-extension # Download Chrome extension
|
|
136
|
+
webtap --cli setup-chrome # Install Chrome wrapper script
|
|
137
|
+
webtap --cli run-chrome # Launch Chrome with debugging
|
|
138
|
+
webtap --cli --help # Show all CLI commands
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Commands
|
|
83
142
|
```python
|
|
84
143
|
>>> pages() # List available Chrome pages
|
|
85
144
|
>>> connect(0) # Connect to first page
|
|
86
145
|
>>> network() # View network requests (filtered)
|
|
87
146
|
>>> console() # View console messages
|
|
88
147
|
>>> events({"url": "*api*"}) # Query any CDP field dynamically
|
|
148
|
+
>>> body(50) # Get response body
|
|
149
|
+
>>> inspect(49) # View event details
|
|
150
|
+
>>> js("document.title") # Execute JavaScript
|
|
89
151
|
```
|
|
90
152
|
|
|
153
|
+
### Command Reference
|
|
154
|
+
|
|
155
|
+
| Command | Description |
|
|
156
|
+
|---------|------------|
|
|
157
|
+
| `pages()` | List available Chrome pages |
|
|
158
|
+
| `connect(page=0)` | Connect to page by index |
|
|
159
|
+
| `disconnect()` | Disconnect from current page |
|
|
160
|
+
| `navigate(url)` | Navigate to URL |
|
|
161
|
+
| `network(no_filters=False)` | View network requests |
|
|
162
|
+
| `console()` | View console messages |
|
|
163
|
+
| `events(filters)` | Query events dynamically |
|
|
164
|
+
| `inspect(rowid, expr=None)` | Inspect event details |
|
|
165
|
+
| `body(response_id, expr=None)` | Get response body |
|
|
166
|
+
| `js(code, wait_return=True)` | Execute JavaScript |
|
|
167
|
+
| `filters(action="list")` | Manage noise filters |
|
|
168
|
+
| `clear(events=True)` | Clear events/console/cache |
|
|
169
|
+
|
|
91
170
|
## Core Commands
|
|
92
171
|
|
|
93
172
|
### Connection & Navigation
|
|
@@ -392,20 +471,41 @@ WebTap includes aggressive default filters to reduce noise. Customize in `.webta
|
|
|
392
471
|
- Python 3.12+
|
|
393
472
|
- Dependencies: websocket-client, duckdb, replkit2, fastapi, uvicorn, beautifulsoup4
|
|
394
473
|
|
|
395
|
-
##
|
|
474
|
+
## 🏗️ Architecture
|
|
475
|
+
|
|
476
|
+
Built on [ReplKit2](https://github.com/angelsen/replkit2) for dual REPL/MCP functionality.
|
|
477
|
+
|
|
478
|
+
**Key Design:**
|
|
479
|
+
- **Store AS-IS** - No transformation of CDP events
|
|
480
|
+
- **Query On-Demand** - Extract only what's needed
|
|
481
|
+
- **Dynamic Discovery** - No predefined schemas
|
|
482
|
+
- **SQL-First** - Leverage DuckDB's JSON capabilities
|
|
483
|
+
- **Minimal Memory** - Store only CDP data
|
|
484
|
+
|
|
485
|
+
## 📚 Documentation
|
|
486
|
+
|
|
487
|
+
- [Architecture](ARCHITECTURE.md) - System design
|
|
488
|
+
- [Vision](src/webtap/VISION.md) - Design philosophy
|
|
489
|
+
- [Services](src/webtap/services/) - Service layer implementations
|
|
490
|
+
- [Commands](src/webtap/commands/) - Command implementations
|
|
491
|
+
|
|
492
|
+
## 🛠️ Development
|
|
396
493
|
|
|
397
494
|
```bash
|
|
398
|
-
#
|
|
399
|
-
|
|
400
|
-
|
|
495
|
+
# Clone repository
|
|
496
|
+
git clone https://github.com/angelsen/tap-tools
|
|
497
|
+
cd tap-tools
|
|
498
|
+
|
|
499
|
+
# Install for development
|
|
500
|
+
uv sync --package webtap
|
|
401
501
|
|
|
402
|
-
#
|
|
403
|
-
|
|
502
|
+
# Run development version
|
|
503
|
+
uv run --package webtap webtap
|
|
404
504
|
|
|
405
|
-
#
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
505
|
+
# Run tests and checks
|
|
506
|
+
make check-webtap # Check build
|
|
507
|
+
make format # Format code
|
|
508
|
+
make lint # Fix linting
|
|
409
509
|
```
|
|
410
510
|
|
|
411
511
|
## API Server
|
|
@@ -422,6 +522,6 @@ WebTap automatically starts a FastAPI server on port 8765 for Chrome extension i
|
|
|
422
522
|
|
|
423
523
|
The API server runs in a background thread and doesn't block the REPL.
|
|
424
524
|
|
|
425
|
-
## License
|
|
525
|
+
## 📄 License
|
|
426
526
|
|
|
427
|
-
MIT -
|
|
527
|
+
MIT - see [LICENSE](../../LICENSE) for details.
|
|
@@ -1,66 +1,145 @@
|
|
|
1
|
-
#
|
|
1
|
+
# webtap
|
|
2
2
|
|
|
3
3
|
Browser debugging via Chrome DevTools Protocol with native event storage and dynamic querying.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## ✨ Features
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
- 🔍 **Native CDP Storage** - Events stored exactly as received in DuckDB
|
|
8
|
+
- 🎯 **Dynamic Field Discovery** - Automatically indexes all field paths from events
|
|
9
|
+
- 🚫 **Smart Filtering** - Built-in filters for ads, tracking, analytics noise
|
|
10
|
+
- 📊 **SQL Querying** - Direct DuckDB access for complex analysis
|
|
11
|
+
- 🔌 **MCP Ready** - Tools and resources for Claude/LLMs
|
|
12
|
+
- 🎨 **Rich Display** - Tables, alerts, and formatted output
|
|
13
|
+
- 🐍 **Python Inspection** - Full Python environment for data exploration
|
|
8
14
|
|
|
9
|
-
##
|
|
15
|
+
## 📋 Prerequisites
|
|
10
16
|
|
|
11
|
-
|
|
12
|
-
- **
|
|
13
|
-
- **Smart Filtering** - Built-in filters for ads, tracking, analytics noise
|
|
14
|
-
- **SQL Querying** - Direct DuckDB access for complex analysis
|
|
15
|
-
- **Chrome Extension** - Visual page selector and connection management
|
|
16
|
-
- **Python Inspection** - Full Python environment for data exploration
|
|
17
|
-
|
|
18
|
-
## Installation
|
|
17
|
+
Required system dependencies:
|
|
18
|
+
- **google-chrome-stable** or **chromium** - Browser with DevTools Protocol support
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
#
|
|
22
|
-
|
|
21
|
+
# macOS
|
|
22
|
+
brew install --cask google-chrome
|
|
23
|
+
|
|
24
|
+
# Ubuntu/Debian
|
|
25
|
+
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
|
|
26
|
+
sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
|
|
27
|
+
sudo apt update
|
|
28
|
+
sudo apt install google-chrome-stable
|
|
23
29
|
|
|
24
|
-
#
|
|
25
|
-
|
|
26
|
-
|
|
30
|
+
# Arch Linux
|
|
31
|
+
yay -S google-chrome # or google-chrome-stable from AUR
|
|
32
|
+
|
|
33
|
+
# Fedora
|
|
34
|
+
sudo dnf install google-chrome-stable
|
|
27
35
|
```
|
|
28
36
|
|
|
29
|
-
##
|
|
37
|
+
## 📦 Installation
|
|
30
38
|
|
|
31
|
-
1. **Start Chrome with debugging**
|
|
32
39
|
```bash
|
|
33
|
-
#
|
|
34
|
-
|
|
40
|
+
# Install via uv tool (recommended)
|
|
41
|
+
uv tool install webtap-tool
|
|
35
42
|
|
|
36
|
-
#
|
|
37
|
-
|
|
43
|
+
# Or with pipx
|
|
44
|
+
pipx install webtap-tool
|
|
38
45
|
|
|
39
|
-
#
|
|
40
|
-
|
|
46
|
+
# Update to latest
|
|
47
|
+
uv tool upgrade webtap-tool
|
|
48
|
+
|
|
49
|
+
# Uninstall
|
|
50
|
+
uv tool uninstall webtap-tool
|
|
41
51
|
```
|
|
42
52
|
|
|
43
|
-
|
|
53
|
+
## 🚀 Quick Start
|
|
54
|
+
|
|
44
55
|
```bash
|
|
56
|
+
# 1. Install webtap
|
|
57
|
+
uv tool install webtap-tool
|
|
58
|
+
|
|
59
|
+
# 2. Optional: Setup helpers (first time only)
|
|
60
|
+
webtap --cli setup-filters # Download default filter configurations
|
|
61
|
+
webtap --cli setup-extension # Download Chrome extension files
|
|
62
|
+
webtap --cli setup-chrome # Install Chrome wrapper for debugging
|
|
63
|
+
|
|
64
|
+
# 3. Launch Chrome with debugging
|
|
65
|
+
webtap --cli run-chrome # Or manually: google-chrome-stable --remote-debugging-port=9222
|
|
66
|
+
|
|
67
|
+
# 4. Start webtap REPL
|
|
45
68
|
webtap
|
|
46
69
|
|
|
47
|
-
#
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
>>>
|
|
70
|
+
# 5. Connect and explore
|
|
71
|
+
>>> pages() # List available Chrome pages
|
|
72
|
+
>>> connect(0) # Connect to first page
|
|
73
|
+
>>> network() # View network requests (filtered)
|
|
74
|
+
>>> console() # View console messages
|
|
75
|
+
>>> events({"url": "*api*"}) # Query any CDP field dynamically
|
|
53
76
|
```
|
|
54
77
|
|
|
55
|
-
|
|
78
|
+
## 🔌 MCP Setup for Claude
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Quick setup with Claude CLI
|
|
82
|
+
claude mcp add webtap -- webtap --mcp
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Or manually configure Claude Desktop (`~/Library/Application Support/Claude/claude_desktop_config.json`):
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"mcpServers": {
|
|
89
|
+
"webtap": {
|
|
90
|
+
"command": "webtap",
|
|
91
|
+
"args": ["--mcp"]
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## 🎮 Usage
|
|
98
|
+
|
|
99
|
+
### Interactive REPL
|
|
100
|
+
```bash
|
|
101
|
+
webtap # Start REPL
|
|
102
|
+
webtap --mcp # Start as MCP server
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### CLI Commands
|
|
106
|
+
```bash
|
|
107
|
+
webtap --cli setup-filters # Download filter configurations
|
|
108
|
+
webtap --cli setup-extension # Download Chrome extension
|
|
109
|
+
webtap --cli setup-chrome # Install Chrome wrapper script
|
|
110
|
+
webtap --cli run-chrome # Launch Chrome with debugging
|
|
111
|
+
webtap --cli --help # Show all CLI commands
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Commands
|
|
56
115
|
```python
|
|
57
116
|
>>> pages() # List available Chrome pages
|
|
58
117
|
>>> connect(0) # Connect to first page
|
|
59
118
|
>>> network() # View network requests (filtered)
|
|
60
119
|
>>> console() # View console messages
|
|
61
120
|
>>> events({"url": "*api*"}) # Query any CDP field dynamically
|
|
121
|
+
>>> body(50) # Get response body
|
|
122
|
+
>>> inspect(49) # View event details
|
|
123
|
+
>>> js("document.title") # Execute JavaScript
|
|
62
124
|
```
|
|
63
125
|
|
|
126
|
+
### Command Reference
|
|
127
|
+
|
|
128
|
+
| Command | Description |
|
|
129
|
+
|---------|------------|
|
|
130
|
+
| `pages()` | List available Chrome pages |
|
|
131
|
+
| `connect(page=0)` | Connect to page by index |
|
|
132
|
+
| `disconnect()` | Disconnect from current page |
|
|
133
|
+
| `navigate(url)` | Navigate to URL |
|
|
134
|
+
| `network(no_filters=False)` | View network requests |
|
|
135
|
+
| `console()` | View console messages |
|
|
136
|
+
| `events(filters)` | Query events dynamically |
|
|
137
|
+
| `inspect(rowid, expr=None)` | Inspect event details |
|
|
138
|
+
| `body(response_id, expr=None)` | Get response body |
|
|
139
|
+
| `js(code, wait_return=True)` | Execute JavaScript |
|
|
140
|
+
| `filters(action="list")` | Manage noise filters |
|
|
141
|
+
| `clear(events=True)` | Clear events/console/cache |
|
|
142
|
+
|
|
64
143
|
## Core Commands
|
|
65
144
|
|
|
66
145
|
### Connection & Navigation
|
|
@@ -365,20 +444,41 @@ WebTap includes aggressive default filters to reduce noise. Customize in `.webta
|
|
|
365
444
|
- Python 3.12+
|
|
366
445
|
- Dependencies: websocket-client, duckdb, replkit2, fastapi, uvicorn, beautifulsoup4
|
|
367
446
|
|
|
368
|
-
##
|
|
447
|
+
## 🏗️ Architecture
|
|
448
|
+
|
|
449
|
+
Built on [ReplKit2](https://github.com/angelsen/replkit2) for dual REPL/MCP functionality.
|
|
450
|
+
|
|
451
|
+
**Key Design:**
|
|
452
|
+
- **Store AS-IS** - No transformation of CDP events
|
|
453
|
+
- **Query On-Demand** - Extract only what's needed
|
|
454
|
+
- **Dynamic Discovery** - No predefined schemas
|
|
455
|
+
- **SQL-First** - Leverage DuckDB's JSON capabilities
|
|
456
|
+
- **Minimal Memory** - Store only CDP data
|
|
457
|
+
|
|
458
|
+
## 📚 Documentation
|
|
459
|
+
|
|
460
|
+
- [Architecture](ARCHITECTURE.md) - System design
|
|
461
|
+
- [Vision](src/webtap/VISION.md) - Design philosophy
|
|
462
|
+
- [Services](src/webtap/services/) - Service layer implementations
|
|
463
|
+
- [Commands](src/webtap/commands/) - Command implementations
|
|
464
|
+
|
|
465
|
+
## 🛠️ Development
|
|
369
466
|
|
|
370
467
|
```bash
|
|
371
|
-
#
|
|
372
|
-
|
|
373
|
-
|
|
468
|
+
# Clone repository
|
|
469
|
+
git clone https://github.com/angelsen/tap-tools
|
|
470
|
+
cd tap-tools
|
|
471
|
+
|
|
472
|
+
# Install for development
|
|
473
|
+
uv sync --package webtap
|
|
374
474
|
|
|
375
|
-
#
|
|
376
|
-
|
|
475
|
+
# Run development version
|
|
476
|
+
uv run --package webtap webtap
|
|
377
477
|
|
|
378
|
-
#
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
478
|
+
# Run tests and checks
|
|
479
|
+
make check-webtap # Check build
|
|
480
|
+
make format # Format code
|
|
481
|
+
make lint # Fix linting
|
|
382
482
|
```
|
|
383
483
|
|
|
384
484
|
## API Server
|
|
@@ -395,6 +495,6 @@ WebTap automatically starts a FastAPI server on port 8765 for Chrome extension i
|
|
|
395
495
|
|
|
396
496
|
The API server runs in a background thread and doesn't block the REPL.
|
|
397
497
|
|
|
398
|
-
## License
|
|
498
|
+
## 📄 License
|
|
399
499
|
|
|
400
|
-
MIT -
|
|
500
|
+
MIT - see [LICENSE](../../LICENSE) for details.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|