Repository navigation
v0.3.0 — Custom pages + writable data
First release to use Wave 2.1 Custom pages — PM Essentials now ships four full-screen plugin pages that exercise the complete plugin UI surface in EvoNexus.
Added
Full-screen pages
ui/pages/company.js— Company configuration form (name, logo, timezone, fiscal year)ui/pages/projects.js— Full CRUD for pm_essentials_projectsui/pages/kanban.js— HTML5-native drag-and-drop sprint kanban (no external libs, respectsconnect-src 'self'CSP)ui/pages/reports.js— Velocity bar chart + status breakdown via Canvas 2D (no CDN)
Routes: /plugins-ui/pm-essentials/<company|projects|kanban|reports>
Sidebar group: PM Essentials (collapsible, order 10).
New capabilities
ui_pages— declares pages viaui_entry_points.pages[]+sidebar_groups[]writable_data— CRUD endpoints with column allowlist and optional JSON Schema validationpm_essentials_projects(POST / PUT / DELETE)pm_essentials_tasks(PUT only, used by kanban drag-drop)
New SQL tables
pm_essentials_company_config(single-row, upsert via writable_data)pm_essentials_projectspm_essentials_sprintspm_essentials_tasks
Requires
EvoNexus core with Wave 2.1 schema support (branch feature/plugins-v1, merge pending):
- New Pydantic classes:
PluginPage,PluginSidebarGroup,PluginWritableResource - Endpoints:
GET /api/plugin-ui-registry,POST/PUT/DELETE /api/plugins/<slug>/data/<resource_id> GET /api/tickets?source_plugin=<slug>filter- Catch-all route
/plugins-ui/:slug/*+PluginPageHost - CSP hardening (
connect-src 'self')
Installs cleanly on older cores — ui_pages and writable_data capabilities are optional; pages simply won't appear until the core is updated.
Notes
- Plugin pages are loaded via dynamic
import()into the host scope (Shadow DOM inside each Custom Element). Session cookie is shared same-origin. - Plugin state is namespaced in
localStorageasplugin:pm-essentials:*. - Navigation via
window.EvoNexus.navigate()SDK (nowindow.locationhacks).