cursor-agent-beacon 0.3.1__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.
- cursor_agent_beacon-0.3.1/.gitignore +51 -0
- cursor_agent_beacon-0.3.1/LICENSE +21 -0
- cursor_agent_beacon-0.3.1/PKG-INFO +179 -0
- cursor_agent_beacon-0.3.1/README.md +146 -0
- cursor_agent_beacon-0.3.1/firmware/viewe/README.md +90 -0
- cursor_agent_beacon-0.3.1/gnome-extension/extension.js +683 -0
- cursor_agent_beacon-0.3.1/gnome-extension/icons/error-symbolic.svg +5 -0
- cursor_agent_beacon-0.3.1/gnome-extension/icons/idle-symbolic.svg +4 -0
- cursor_agent_beacon-0.3.1/gnome-extension/icons/mcp-symbolic.svg +6 -0
- cursor_agent_beacon-0.3.1/gnome-extension/icons/terminal-symbolic.svg +5 -0
- cursor_agent_beacon-0.3.1/gnome-extension/icons/thinking-symbolic.svg +4 -0
- cursor_agent_beacon-0.3.1/gnome-extension/metadata.json +9 -0
- cursor_agent_beacon-0.3.1/gnome-extension/schemas/org.gnome.shell.extensions.cursor-status-panel.gschema.xml +20 -0
- cursor_agent_beacon-0.3.1/gnome-extension/stylesheet.css +133 -0
- cursor_agent_beacon-0.3.1/preview/README.md +42 -0
- cursor_agent_beacon-0.3.1/pyproject.toml +73 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/__init__.py +3 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/bridge/__init__.py +7 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/bridge/config.py +54 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/bridge/serial_writer.py +88 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/bridge/server.py +137 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/bridge/service.py +88 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/cli.py +289 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/compat.py +13 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/config.py +60 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/doctor.py +353 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/handler.py +71 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/hooks.py +29 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/install.py +258 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/mapper.py +307 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/models.py +91 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/paths.py +60 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/protocol.py +57 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/response.py +31 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/session_registry.py +401 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/setup.py +107 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/sinks/__init__.py +60 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/sinks/base.py +14 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/sinks/file.py +29 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/sinks/http.py +74 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/sinks/log.py +27 -0
- cursor_agent_beacon-0.3.1/src/cursor_agent_beacon/theme.py +90 -0
- cursor_agent_beacon-0.3.1/themes/README.md +60 -0
- cursor_agent_beacon-0.3.1/themes/custom/README.md +58 -0
- cursor_agent_beacon-0.3.1/themes/custom/example/manifest.json +55 -0
- cursor_agent_beacon-0.3.1/themes/standard/ASSETS.md +84 -0
- cursor_agent_beacon-0.3.1/themes/standard/ATTRIBUTION.md +10 -0
- cursor_agent_beacon-0.3.1/themes/standard/assets/error.gif +0 -0
- cursor_agent_beacon-0.3.1/themes/standard/assets/running_mcp.gif +0 -0
- cursor_agent_beacon-0.3.1/themes/standard/assets/running_shell.gif +0 -0
- cursor_agent_beacon-0.3.1/themes/standard/assets/sleeping.gif +0 -0
- cursor_agent_beacon-0.3.1/themes/standard/assets/stop.gif +0 -0
- cursor_agent_beacon-0.3.1/themes/standard/assets/success.gif +0 -0
- cursor_agent_beacon-0.3.1/themes/standard/assets/thinking.gif +0 -0
- cursor_agent_beacon-0.3.1/themes/standard/assets/waiting.gif +0 -0
- cursor_agent_beacon-0.3.1/themes/standard/manifest.json +58 -0
- cursor_agent_beacon-0.3.1/themes/standard/pixel-faces.json +118 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib/
|
|
14
|
+
lib64/
|
|
15
|
+
parts/
|
|
16
|
+
sdist/
|
|
17
|
+
var/
|
|
18
|
+
wheels/
|
|
19
|
+
*.egg-info/
|
|
20
|
+
.installed.cfg
|
|
21
|
+
*.egg
|
|
22
|
+
MANIFEST
|
|
23
|
+
.venv/
|
|
24
|
+
venv/
|
|
25
|
+
ENV/
|
|
26
|
+
|
|
27
|
+
# Testing
|
|
28
|
+
.pytest_cache/
|
|
29
|
+
.coverage
|
|
30
|
+
htmlcov/
|
|
31
|
+
.tox/
|
|
32
|
+
|
|
33
|
+
# IDE
|
|
34
|
+
.idea/
|
|
35
|
+
.vscode/
|
|
36
|
+
*.swp
|
|
37
|
+
*.swo
|
|
38
|
+
|
|
39
|
+
# Local status / runtime
|
|
40
|
+
.cursor-agent-beacon/
|
|
41
|
+
themes/custom/*
|
|
42
|
+
!themes/custom/README.md
|
|
43
|
+
!themes/custom/example/
|
|
44
|
+
!themes/custom/example/**
|
|
45
|
+
firmware/viewe/data/**/*.png
|
|
46
|
+
config/hardware.env
|
|
47
|
+
*.log
|
|
48
|
+
|
|
49
|
+
# OS
|
|
50
|
+
.DS_Store
|
|
51
|
+
Thumbs.db
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 cursor-agent-beacon contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: cursor-agent-beacon
|
|
3
|
+
Version: 0.3.1
|
|
4
|
+
Summary: Deterministic Cursor agent status monitoring via native hooks
|
|
5
|
+
Project-URL: Homepage, https://github.com/suribe06/cursor-agent-beacon
|
|
6
|
+
Project-URL: Documentation, https://github.com/suribe06/cursor-agent-beacon#readme
|
|
7
|
+
Project-URL: Issues, https://github.com/suribe06/cursor-agent-beacon/issues
|
|
8
|
+
Project-URL: Repository, https://github.com/suribe06/cursor-agent-beacon
|
|
9
|
+
Author: cursor-agent-beacon contributors
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: agent,cursor,hooks,monitoring,observability
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Provides-Extra: bridge
|
|
23
|
+
Requires-Dist: pyserial>=3.5; extra == 'bridge'
|
|
24
|
+
Provides-Extra: dev
|
|
25
|
+
Requires-Dist: pillow>=10.0; extra == 'dev'
|
|
26
|
+
Requires-Dist: pyright>=1.1; extra == 'dev'
|
|
27
|
+
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
|
|
28
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
29
|
+
Requires-Dist: ruff>=0.9; extra == 'dev'
|
|
30
|
+
Provides-Extra: export
|
|
31
|
+
Requires-Dist: pillow>=10.0; extra == 'export'
|
|
32
|
+
Description-Content-Type: text/markdown
|
|
33
|
+
|
|
34
|
+
# Cursor Agent Beacon
|
|
35
|
+
|
|
36
|
+
[](https://github.com/suribe06/cursor-agent-beacon/actions/workflows/ci.yml)
|
|
37
|
+
[](LICENSE)
|
|
38
|
+
[](https://www.python.org/downloads/)
|
|
39
|
+
|
|
40
|
+
Deterministic monitoring of Cursor agent activity using native [Cursor Hooks](https://cursor.com/docs/hooks).
|
|
41
|
+
|
|
42
|
+
**Repository:** https://github.com/suribe06/cursor-agent-beacon
|
|
43
|
+
|
|
44
|
+
Cursor fires hook events automatically during the agent lifecycle. Cursor Agent Beacon listens to those events, maps them to a small set of high-level states, and publishes status updates through pluggable sinks.
|
|
45
|
+
|
|
46
|
+
This is the software foundation for a physical status panel (ESP32 + color TFT). **v0.3** ships Python hooks, **bundled standard GIF themes**, a **local bridge service**, and **one-shot setup**.
|
|
47
|
+
|
|
48
|
+
## Features
|
|
49
|
+
|
|
50
|
+
- **One-shot setup**: `./setup.sh` or `pip install` + `cursor-agent-beacon setup`
|
|
51
|
+
- **`doctor` / `status` / `uninstall`** CLI for install verification and teardown
|
|
52
|
+
- Normalized status model (`idle`, `thinking`, `running_shell`, `running_mcp`, `success`, `error`, ...)
|
|
53
|
+
- **Standard theme**: 8 animated pixel-robot GIFs (480ร480) in `themes/standard/assets/`
|
|
54
|
+
- **Custom themes**: drop your own GIFs in `themes/custom/<name>/`
|
|
55
|
+
- Fail-open behavior โ hooks never block Cursor
|
|
56
|
+
- JSON log sink (stderr) for the Hooks output channel
|
|
57
|
+
- File sink with latest status snapshot
|
|
58
|
+
- HTTP sink for the local bridge service
|
|
59
|
+
- **Bridge service** (`cursor-agent-beacon bridge`): `POST /status` โ theme GIF resolution โ serial commands
|
|
60
|
+
- **GNOME status panel** (v0.10, pre-release): Ubuntu top-bar indicator โ [`gnome-extension/`](gnome-extension/) + [`docs/gnome-panel.md`](docs/gnome-panel.md)
|
|
61
|
+
- **Multi-session registry**: per-chat status under `~/.local/share/cursor-agent-beacon/`
|
|
62
|
+
|
|
63
|
+
## Quick start
|
|
64
|
+
|
|
65
|
+
### From git (recommended for development)
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
git clone https://github.com/suribe06/cursor-agent-beacon.git
|
|
69
|
+
cd cursor-agent-beacon
|
|
70
|
+
./setup.sh
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### From PyPI
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
python3 -m venv .venv
|
|
77
|
+
source .venv/bin/activate
|
|
78
|
+
pip install "cursor-agent-beacon[bridge]"
|
|
79
|
+
cursor-agent-beacon setup
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Restart Cursor when setup finishes. On Ubuntu, reload GNOME Shell if the top-bar panel does not appear.
|
|
83
|
+
|
|
84
|
+
Verify installation:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
.venv/bin/cursor-agent-beacon doctor
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
After using the agent:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
.venv/bin/cursor-agent-beacon status
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Check status (any project):
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
cat ~/.local/share/cursor-agent-beacon/status.json
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
See [Getting Started](docs/getting-started.md) for bridge, themes, and development setup.
|
|
103
|
+
|
|
104
|
+
## Architecture
|
|
105
|
+
|
|
106
|
+
```text
|
|
107
|
+
Cursor โ hooks.json โ hook-handler.py โ cursor_agent_beacon โ sinks
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Read more in [`docs/architecture.md`](docs/architecture.md).
|
|
111
|
+
|
|
112
|
+
## Configuration
|
|
113
|
+
|
|
114
|
+
| Variable | Default | Description |
|
|
115
|
+
| --- | --- | --- |
|
|
116
|
+
| `CURSOR_AGENT_BEACON_LOG` | `true` | Emit JSON lines to stderr |
|
|
117
|
+
| `CURSOR_AGENT_BEACON_FILE` | `true` | Write latest status file |
|
|
118
|
+
| `CURSOR_AGENT_BEACON_STATUS_FILE` | `.cursor-agent-beacon/status.json` (project) or `~/.local/share/cursor-agent-beacon/status.json` (user install) | Status snapshot path |
|
|
119
|
+
| `CURSOR_AGENT_BEACON_HTTP_URL` | unset | Bridge `POST /status` endpoint |
|
|
120
|
+
| `CURSOR_AGENT_BEACON_BRIDGE_HOST` | `127.0.0.1` | Bridge bind address |
|
|
121
|
+
| `CURSOR_AGENT_BEACON_BRIDGE_PORT` | `8765` | Bridge HTTP port |
|
|
122
|
+
| `CURSOR_AGENT_BEACON_SERIAL_PORT` | unset | ESP32 serial device (dry-run if unset) |
|
|
123
|
+
| `CURSOR_AGENT_BEACON_SERIAL_BAUD` | `115200` | Serial baud rate |
|
|
124
|
+
| `CURSOR_AGENT_BEACON_THEME` | `standard` | Theme id (`standard` or custom theme name) |
|
|
125
|
+
| `CURSOR_AGENT_BEACON_THEMES_DIR` | packaged `themes/` or repo `themes/` | Root folder for theme packs |
|
|
126
|
+
| `CURSOR_AGENT_BEACON_REDACT_CONTENT` | `false` | Hide prompt/response text in status |
|
|
127
|
+
|
|
128
|
+
## Project status
|
|
129
|
+
|
|
130
|
+
| Component | Status |
|
|
131
|
+
| --- | --- |
|
|
132
|
+
| Python hook handler | โ
v0.3 |
|
|
133
|
+
| Multi-session file sink | โ
v0.3 |
|
|
134
|
+
| One-shot setup + doctor CLI | โ
v0.3 |
|
|
135
|
+
| GNOME status panel | ๐งช v0.10 pre-release |
|
|
136
|
+
| Standard GIF theme | โ
bundled |
|
|
137
|
+
| Custom GIF themes | โ
`themes/custom/` |
|
|
138
|
+
| Local bridge service | โ
v0.2 |
|
|
139
|
+
| VIEWE display firmware | ๐ planned |
|
|
140
|
+
|
|
141
|
+
See [`docs/roadmap.md`](docs/roadmap.md).
|
|
142
|
+
|
|
143
|
+
## Documentation
|
|
144
|
+
|
|
145
|
+
- [Getting Started](docs/getting-started.md)
|
|
146
|
+
- [Hooks Reference](docs/hooks.md)
|
|
147
|
+
- [GNOME Status Panel](docs/gnome-panel.md)
|
|
148
|
+
- [Architecture](docs/architecture.md)
|
|
149
|
+
- [Hardware โ VIEWE](docs/hardware-viewe.md)
|
|
150
|
+
- [Roadmap](docs/roadmap.md)
|
|
151
|
+
- [Changelog](CHANGELOG.md)
|
|
152
|
+
|
|
153
|
+
## Contributing
|
|
154
|
+
|
|
155
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md). Please read the [Code of Conduct](CODE_OF_CONDUCT.md) before participating.
|
|
156
|
+
|
|
157
|
+
Report security issues privately โ see [SECURITY.md](SECURITY.md).
|
|
158
|
+
|
|
159
|
+
## Development
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
./setup.sh
|
|
163
|
+
source .venv/bin/activate
|
|
164
|
+
pip install -e ".[dev,bridge]"
|
|
165
|
+
pytest
|
|
166
|
+
ruff check src tests
|
|
167
|
+
ruff format --check src tests
|
|
168
|
+
pyright
|
|
169
|
+
python -m build
|
|
170
|
+
cursor-agent-beacon bridge
|
|
171
|
+
cursor-agent-beacon install-hooks
|
|
172
|
+
PYTHONPATH=src python3 -m cursor_agent_beacon.cli map examples/sample-events/stop_completed.json
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Systemd user service template: [`packaging/cursor-agent-beacon-bridge.service`](packaging/cursor-agent-beacon-bridge.service)
|
|
176
|
+
|
|
177
|
+
## License
|
|
178
|
+
|
|
179
|
+
MIT โ see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Cursor Agent Beacon
|
|
2
|
+
|
|
3
|
+
[](https://github.com/suribe06/cursor-agent-beacon/actions/workflows/ci.yml)
|
|
4
|
+
[](LICENSE)
|
|
5
|
+
[](https://www.python.org/downloads/)
|
|
6
|
+
|
|
7
|
+
Deterministic monitoring of Cursor agent activity using native [Cursor Hooks](https://cursor.com/docs/hooks).
|
|
8
|
+
|
|
9
|
+
**Repository:** https://github.com/suribe06/cursor-agent-beacon
|
|
10
|
+
|
|
11
|
+
Cursor fires hook events automatically during the agent lifecycle. Cursor Agent Beacon listens to those events, maps them to a small set of high-level states, and publishes status updates through pluggable sinks.
|
|
12
|
+
|
|
13
|
+
This is the software foundation for a physical status panel (ESP32 + color TFT). **v0.3** ships Python hooks, **bundled standard GIF themes**, a **local bridge service**, and **one-shot setup**.
|
|
14
|
+
|
|
15
|
+
## Features
|
|
16
|
+
|
|
17
|
+
- **One-shot setup**: `./setup.sh` or `pip install` + `cursor-agent-beacon setup`
|
|
18
|
+
- **`doctor` / `status` / `uninstall`** CLI for install verification and teardown
|
|
19
|
+
- Normalized status model (`idle`, `thinking`, `running_shell`, `running_mcp`, `success`, `error`, ...)
|
|
20
|
+
- **Standard theme**: 8 animated pixel-robot GIFs (480ร480) in `themes/standard/assets/`
|
|
21
|
+
- **Custom themes**: drop your own GIFs in `themes/custom/<name>/`
|
|
22
|
+
- Fail-open behavior โ hooks never block Cursor
|
|
23
|
+
- JSON log sink (stderr) for the Hooks output channel
|
|
24
|
+
- File sink with latest status snapshot
|
|
25
|
+
- HTTP sink for the local bridge service
|
|
26
|
+
- **Bridge service** (`cursor-agent-beacon bridge`): `POST /status` โ theme GIF resolution โ serial commands
|
|
27
|
+
- **GNOME status panel** (v0.10, pre-release): Ubuntu top-bar indicator โ [`gnome-extension/`](gnome-extension/) + [`docs/gnome-panel.md`](docs/gnome-panel.md)
|
|
28
|
+
- **Multi-session registry**: per-chat status under `~/.local/share/cursor-agent-beacon/`
|
|
29
|
+
|
|
30
|
+
## Quick start
|
|
31
|
+
|
|
32
|
+
### From git (recommended for development)
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
git clone https://github.com/suribe06/cursor-agent-beacon.git
|
|
36
|
+
cd cursor-agent-beacon
|
|
37
|
+
./setup.sh
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### From PyPI
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
python3 -m venv .venv
|
|
44
|
+
source .venv/bin/activate
|
|
45
|
+
pip install "cursor-agent-beacon[bridge]"
|
|
46
|
+
cursor-agent-beacon setup
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Restart Cursor when setup finishes. On Ubuntu, reload GNOME Shell if the top-bar panel does not appear.
|
|
50
|
+
|
|
51
|
+
Verify installation:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
.venv/bin/cursor-agent-beacon doctor
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
After using the agent:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
.venv/bin/cursor-agent-beacon status
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Check status (any project):
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
cat ~/.local/share/cursor-agent-beacon/status.json
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
See [Getting Started](docs/getting-started.md) for bridge, themes, and development setup.
|
|
70
|
+
|
|
71
|
+
## Architecture
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
Cursor โ hooks.json โ hook-handler.py โ cursor_agent_beacon โ sinks
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Read more in [`docs/architecture.md`](docs/architecture.md).
|
|
78
|
+
|
|
79
|
+
## Configuration
|
|
80
|
+
|
|
81
|
+
| Variable | Default | Description |
|
|
82
|
+
| --- | --- | --- |
|
|
83
|
+
| `CURSOR_AGENT_BEACON_LOG` | `true` | Emit JSON lines to stderr |
|
|
84
|
+
| `CURSOR_AGENT_BEACON_FILE` | `true` | Write latest status file |
|
|
85
|
+
| `CURSOR_AGENT_BEACON_STATUS_FILE` | `.cursor-agent-beacon/status.json` (project) or `~/.local/share/cursor-agent-beacon/status.json` (user install) | Status snapshot path |
|
|
86
|
+
| `CURSOR_AGENT_BEACON_HTTP_URL` | unset | Bridge `POST /status` endpoint |
|
|
87
|
+
| `CURSOR_AGENT_BEACON_BRIDGE_HOST` | `127.0.0.1` | Bridge bind address |
|
|
88
|
+
| `CURSOR_AGENT_BEACON_BRIDGE_PORT` | `8765` | Bridge HTTP port |
|
|
89
|
+
| `CURSOR_AGENT_BEACON_SERIAL_PORT` | unset | ESP32 serial device (dry-run if unset) |
|
|
90
|
+
| `CURSOR_AGENT_BEACON_SERIAL_BAUD` | `115200` | Serial baud rate |
|
|
91
|
+
| `CURSOR_AGENT_BEACON_THEME` | `standard` | Theme id (`standard` or custom theme name) |
|
|
92
|
+
| `CURSOR_AGENT_BEACON_THEMES_DIR` | packaged `themes/` or repo `themes/` | Root folder for theme packs |
|
|
93
|
+
| `CURSOR_AGENT_BEACON_REDACT_CONTENT` | `false` | Hide prompt/response text in status |
|
|
94
|
+
|
|
95
|
+
## Project status
|
|
96
|
+
|
|
97
|
+
| Component | Status |
|
|
98
|
+
| --- | --- |
|
|
99
|
+
| Python hook handler | โ
v0.3 |
|
|
100
|
+
| Multi-session file sink | โ
v0.3 |
|
|
101
|
+
| One-shot setup + doctor CLI | โ
v0.3 |
|
|
102
|
+
| GNOME status panel | ๐งช v0.10 pre-release |
|
|
103
|
+
| Standard GIF theme | โ
bundled |
|
|
104
|
+
| Custom GIF themes | โ
`themes/custom/` |
|
|
105
|
+
| Local bridge service | โ
v0.2 |
|
|
106
|
+
| VIEWE display firmware | ๐ planned |
|
|
107
|
+
|
|
108
|
+
See [`docs/roadmap.md`](docs/roadmap.md).
|
|
109
|
+
|
|
110
|
+
## Documentation
|
|
111
|
+
|
|
112
|
+
- [Getting Started](docs/getting-started.md)
|
|
113
|
+
- [Hooks Reference](docs/hooks.md)
|
|
114
|
+
- [GNOME Status Panel](docs/gnome-panel.md)
|
|
115
|
+
- [Architecture](docs/architecture.md)
|
|
116
|
+
- [Hardware โ VIEWE](docs/hardware-viewe.md)
|
|
117
|
+
- [Roadmap](docs/roadmap.md)
|
|
118
|
+
- [Changelog](CHANGELOG.md)
|
|
119
|
+
|
|
120
|
+
## Contributing
|
|
121
|
+
|
|
122
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md). Please read the [Code of Conduct](CODE_OF_CONDUCT.md) before participating.
|
|
123
|
+
|
|
124
|
+
Report security issues privately โ see [SECURITY.md](SECURITY.md).
|
|
125
|
+
|
|
126
|
+
## Development
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
./setup.sh
|
|
130
|
+
source .venv/bin/activate
|
|
131
|
+
pip install -e ".[dev,bridge]"
|
|
132
|
+
pytest
|
|
133
|
+
ruff check src tests
|
|
134
|
+
ruff format --check src tests
|
|
135
|
+
pyright
|
|
136
|
+
python -m build
|
|
137
|
+
cursor-agent-beacon bridge
|
|
138
|
+
cursor-agent-beacon install-hooks
|
|
139
|
+
PYTHONPATH=src python3 -m cursor_agent_beacon.cli map examples/sample-events/stop_completed.json
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Systemd user service template: [`packaging/cursor-agent-beacon-bridge.service`](packaging/cursor-agent-beacon-bridge.service)
|
|
143
|
+
|
|
144
|
+
## License
|
|
145
|
+
|
|
146
|
+
MIT โ see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# VIEWE UEDX48480021-MD80E firmware
|
|
2
|
+
|
|
3
|
+
Firmware for the **VIEWE ESP32-S3 Knob Display** (480ร480 circular, ST7701S, LVGL).
|
|
4
|
+
|
|
5
|
+
## Before you have the board
|
|
6
|
+
|
|
7
|
+
You can still prepare and test:
|
|
8
|
+
|
|
9
|
+
| Step | Command | What it validates |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| Bridge โ serial | `scripts/fake_serial_device.py` | Protocol lines without hardware |
|
|
12
|
+
| Export frames | `scripts/export_firmware_assets.py` | PNG sequences for LVGL |
|
|
13
|
+
| Protocol parser | `protocol.cpp` + unit test on PC (optional) | `STATUS\|...\` parsing |
|
|
14
|
+
|
|
15
|
+
## When the board arrives
|
|
16
|
+
|
|
17
|
+
### 1. Arduino IDE setup
|
|
18
|
+
|
|
19
|
+
1. Install [Arduino ESP32 core](https://docs.espressif.com/projects/arduino-esp32/en/latest/) (ESP32-S3).
|
|
20
|
+
2. Library Manager:
|
|
21
|
+
- `ESP32_Display_Panel` (โฅ 1.0.3)
|
|
22
|
+
- `lvgl` (8.4.x per VIEWE docs)
|
|
23
|
+
3. Clone vendor examples: [VIEWESMART/ESP32-Arduino](https://github.com/VIEWESMART/ESP32-Arduino) โ `examples/2.1inch`.
|
|
24
|
+
4. Board: **ESP32-S3**. Select the macro for `UEDX48480021-MD80E` in `ESP32_Display_Panel` config.
|
|
25
|
+
5. Confirm the **USB serial baud rate** in the vendor example (often `115200` on ESP32-S3 USB-CDC). Match `CURSOR_AGENT_BEACON_SERIAL_BAUD`.
|
|
26
|
+
|
|
27
|
+
### 2. Flash workflow
|
|
28
|
+
|
|
29
|
+
1. Open `examples/2.1inch` from VIEWESMART โ verify the panel + knob work **before** merging beacon code.
|
|
30
|
+
2. Copy initialization from the vendor example into `cursor_agent_beacon/cursor_agent_beacon.ino`.
|
|
31
|
+
3. Wire in `protocol.cpp` for serial `STATUS|state|message` lines.
|
|
32
|
+
4. Load PNG frames from `data/standard/` (SPIFFS/LittleFS) using `manifest.json`.
|
|
33
|
+
5. Map `state` โ sprite folder โ LVGL `lv_img` animation.
|
|
34
|
+
|
|
35
|
+
### 3. Connect to the bridge
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Find port (Linux)
|
|
39
|
+
ls /dev/ttyACM* /dev/ttyUSB*
|
|
40
|
+
|
|
41
|
+
export CURSOR_AGENT_BEACON_SERIAL_PORT=/dev/ttyACM0
|
|
42
|
+
export CURSOR_AGENT_BEACON_SERIAL_BAUD=115200
|
|
43
|
+
cursor-agent-beacon bridge
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Send a test status:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
export CURSOR_AGENT_BEACON_HTTP_URL=http://127.0.0.1:8765/status
|
|
50
|
+
python3 scripts/simulate_hook.py examples/sample-events/after_agent_thought.json
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Serial protocol
|
|
54
|
+
|
|
55
|
+
See [`docs/hardware-viewe.md`](../../docs/hardware-viewe.md) and Python mirror in `src/cursor_agent_beacon/protocol.py`.
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
PC โ device: STATUS|<state>|<message>
|
|
59
|
+
PC โ device: THEME|<theme_id>
|
|
60
|
+
device โ PC: EVENT|button_pressed (optional, future MCP path)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Asset layout
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
data/standard/
|
|
67
|
+
manifest.json # state โ sprite โ frame list
|
|
68
|
+
thinking/
|
|
69
|
+
frame_00.png
|
|
70
|
+
frame_01.png
|
|
71
|
+
...
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Regenerate after theme changes:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
python3 scripts/export_standard_gifs.py
|
|
78
|
+
python3 scripts/export_firmware_assets.py
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Files in this folder
|
|
82
|
+
|
|
83
|
+
| File | Purpose |
|
|
84
|
+
| --- | --- |
|
|
85
|
+
| `protocol.h` / `protocol.cpp` | Parse `STATUS\|...\` lines (portable C++) |
|
|
86
|
+
| `cursor_agent_beacon/cursor_agent_beacon.ino` | Sketch skeleton โ merge with VIEWESMART init |
|
|
87
|
+
|
|
88
|
+
## Display-only scope
|
|
89
|
+
|
|
90
|
+
This repo focuses on **showing agent status**. Knob/button `EVENT|...` lines are defined in the protocol for future use but are not required for the first end-to-end test.
|