-
Notifications
You must be signed in to change notification settings - Fork 7
add textual UI - first draft #108
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: stable
Are you sure you want to change the base?
Conversation
- Implemented 6 screens: Dashboard, Scans, Assets, Findings, Activity, Agents - Real-time WebSocket activity streaming - Interactive DataTables with detail panels - Auto-refresh for all data screens (5-10s intervals) - Color-coded severity and status indicators - Keyboard navigation with Footer showing shortcuts - Fixed DataTable row selection events for all screens - Fixed WebSocket sync generator wrapping - Fixed Pydantic model attribute access - Dashboard shows recent findings (by severity) and recent scans - Agent creation with auto-generated names - Complete documentation (QUICKSTART, README, DEVELOPMENT, CLAUDE.md) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
|
Wow that was fast 😂 @k11h-de thanks for including Claude.md, it's insightful for the process. It'll take some time to go over this but one thing I think can be simplified is the difficulty with sync/async. BBOT server is natively async, so to avoid any weird wrapping / conversion, you can reach inside the bbot_server = bbot_server._instanceThis will let you use the native async functions/generators without any headache. |
You're absolutely right. Thanks for the ✅ DataService - Updated all 20+ methods to use # In __init__
if hasattr(bbot_server, '_instance'):
self._async_client = bbot_server._instance
# Then native async everywhere:
scans = [scan async for scan in self._async_client.get_scans()] # generators
agents = await self._async_client.get_agents() # direct returns✅ WebSocketService - Already using ._instance for activity streaming ✅ All TUI screens - All data access goes through these two services, so everything benefits from native async without sync wrapper overhead. One learning: I had to distinguish between API methods that are async generators (use async for) vs those that return lists directly (use await). For example:
Everything's working great now - much cleaner than the workarounds we had before! |
Add Textual-based TUI for BBOT Server
Implements a full-featured Terminal User Interface accessible via
bbctl tui launch.Features
Technical Details
Usage