feat: Web Admin Dashboard — plugin-contributed panels via Starlette #43
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Competitor
Kind/Documentation
Kind/Enhancement
Kind/Epic
Kind/Feature
Kind/Security
Kind/Story
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Scope/Core
Scope/Cross-Plugin
Scope/Plugin-System
Scope/Single-Plugin
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
ultanio/cobot#43
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
A built-in web admin dashboard where every plugin contributes panels, settings, and actions. Same pattern as
register_commands()/wizard_section()— plugins declare what to show, the framework renders it.Stack
Plugin Extension Points
3 new methods on
Pluginbase class:web_panels() — Dashboard Cards
Plugins return structured data, framework renders it. No HTML from plugins.
Panel content kinds:
kv(key-value),table,log,chart,form,markdown.Data is snapshot-based: plugins update an atomic snapshot in their loop, web reads last snapshot. No cross-thread calls.
web_settings() — Configuration UI
Framework generates forms, validates, writes to
cobot.yml.Hot-reload where possible. If a change requires restart, show a banner.
web_routes() — Custom Actions
Namespaced automatically:
/api/plugins/{plugin_id}/...What Each Plugin Contributes
Live Streaming
SSE (Server-Sent Events) for real-time data: log lines, status changes. HTMX has native SSE support (
hx-ext="sse").Auth
None for now. Bind to
127.0.0.1only.Config
Phases
web_panels()— read-only statusweb_settings()— config via browser (hot-reload + restart detection)web_routes()— custom actionsDesign Decisions
/api/plugins/{id}/...prevents collisions (same approach as CLI plugin groups).nazim referenced this issue2026-02-20 17:27:34 +00:00