> Last validated: 2026-03-08 — programmatically verified against running codebase (36 features, 128 tests pass)
Complete inventory of every feature in PraisonAIUI: what's implemented, what's partial, and what's missing.
These features are registered, healthy, and serving API routes right now.
| # | Feature Name | Description | Routes | CLI | Health | Frontend View | Source File |
|---|-------------|-------------|--------|-----|--------|--------------|------------|
| 1 | agents_crud | Agent create, update, delete management | 8 | ✅ | ✅ ok | agents.js | agents.py |
agents_crud
agents.js
agents.py
| 2 | approvals | Tool-execution approval management | 10 | ✅ | ✅ ok | approvals.js | approvals.py |
approvals
approvals.js
approvals.py
| 3 | attachments | File upload and attachment management for chat | 3 | ❌ | ✅ ok | — | attachments.py |
attachments
attachments.py
| 4 | auth | Multi-mode authentication (API key, session, password) | 10 | ✅ | ✅ ok | — | auth.py |
auth
auth.py
| 5 | browser_automation | Browser automation via CDP/Playwright | 2 | ❌ | ✅ ok | — | browser_automation.py |
browser_automation
browser_automation.py
| 6 | channels | Multi-platform messaging channels (Discord, Slack, Telegram, etc.) | 9 | ✅ | ✅ ok | channels.js | channels.py |
channels
channels.js
channels.py
| 7 | chat | Real-time agent chat with WebSocket streaming | 4 | ❌ | ✅ ok | chat.js | chat.py |
chat
chat.js
chat.py
| 8 | config_hot_reload | File-watcher for live config changes | 4 | ❌ | ✅ ok | — | config_hot_reload.py |
config_hot_reload
config_hot_reload.py
| 9 | config_runtime | Live runtime configuration (get, set, patch) | 11 | ✅ | ✅ ok | config.js | config_runtime.py |
config_runtime
config.js
config_runtime.py
| 10 | hooks | Pre/post operation hook management | 6 | ✅ | ✅ ok | — | hooks.py |
hooks
hooks.py
| 11 | jobs | Async job submission and monitoring | 9 | ✅ | ✅ ok | — | jobs.py |
jobs
jobs.py
| 12 | logs | Real-time log streaming with WebSocket | 4 | ✅ | ✅ ok | logs.js | logs.py |
logs
logs.js
logs.py
| 13 | memory | Agent memory management (short, long, entity) | 6 | ✅ | ✅ ok | — | memory.py |
memory
memory.py
| 14 | model_fallback | Model fallback chain configuration | 2 | ❌ | ✅ ok | — | model_fallback.py |
model_fallback
model_fallback.py
| 15 | nodes | Execution nodes and connected instances | 10 | ✅ | ✅ ok | nodes.js | nodes.py |
nodes
nodes.js
nodes.py
| 16 | openai_api | OpenAI-compatible API (/v1/*) | 17 | ✅ | ⚠️ degraded | — | openai_api.py |
openai_api
/v1/*
openai_api.py
| 17 | protocol | WebSocket protocol versioning and negotiation | 2 | ❌ | ✅ ok | — | protocol_version.py |
protocol
protocol_version.py
| 18 | schedules | Scheduled job management (cron, interval, one-shot) | 9 | ✅ | ✅ ok | schedules.js | schedules.py |
schedules
schedules.js
schedules.py
| 19 | sessions_ext | Extended session management (state, context, labels) | 10 | ✅ | ✅ ok | sessions.js | sessions_ext.py |
sessions_ext
sessions.js
sessions_ext.py
| 20 | skills | Agent tool and skill management | 8 | ✅ | ✅ ok | skills.js | skills.py |
skills
skills.js
skills.py
| 21 | subagents | Subagent spawning tree view and hierarchy | 2 | ❌ | ✅ ok | — | subagents.py |
subagents
subagents.py
| 22 | theme | Theme system with light/dark/custom support | 2 | ❌ | ✅ ok | — | theme.py |
theme
theme.py
| 23 | usage | Token usage and cost analytics | 9 | ✅ | ✅ ok | usage.js | usage.py |
usage
usage.js
usage.py
| 24 | workflows | Multi-step workflow management (Pipeline, Route, Parallel, Loop) | 8 | ✅ | ✅ ok | — | workflows.py |
workflows
workflows.py
| 25 | tts | Text-to-speech synthesis (browser or OpenAI) | 2 | ❌ | ✅ ok | — | tts.py |
tts
tts.py
| 26 | marketplace | Plugin marketplace (browse, search, install, uninstall) | 5 | ❌ | ✅ ok | — | marketplace.py |
marketplace
marketplace.py
| 27 | code_execution | Sandboxed code execution (Python, JS, Bash) | 2 | ❌ | ✅ ok | — | code_execution.py |
code_execution
code_execution.py
| 28 | pwa | Progressive Web App (manifest, service worker) | 3 | ❌ | ✅ ok | — | pwa.py |
pwa
pwa.py
| 29 | i18n | Internationalization (en, es, fr locales) | 5 | ❌ | ✅ ok | — | i18n.py |
i18n
i18n.py
| 30 | device_pairing | Device pairing via short hex codes | 4 | ❌ | ✅ ok | — | device_pairing.py |
device_pairing
device_pairing.py
| 31 | media_analysis | Image analysis, OCR, object detection | 3 | ❌ | ✅ ok | — | media_analysis.py |
media_analysis
media_analysis.py
| 32 | guardrails | Input/output safety guardrails, violation tracking | 4 | ✅ | ✅ ok | guardrails.js | guardrails.py |
guardrails
guardrails.js
guardrails.py
| 33 | eval | Agent evaluation, accuracy scoring, judge models | 5 | ❌ | ✅ ok | eval.js | eval.py |
eval
eval.js
eval.py
| 34 | telemetry | Performance metrics, profiling, monitoring | 6 | ✅ | ✅ ok | telemetry.js | telemetry.py |
telemetry
telemetry.js
telemetry.py
| 35 | tracing | Distributed tracing, span recording, observability | 5 | ❌ | ✅ ok | tracing.js | tracing.py |
tracing
tracing.js
tracing.py
| 36 | security | Security monitoring, audit logging, access control | 4 | ✅ | ✅ ok | security.js | security.py |
security
security.js
security.py
---
All located in src/praisonaiui/templates/frontend/plugins/views/:
src/praisonaiui/templates/frontend/plugins/views/
| View | File | Routes It Consumes |
|------|------|--------------------|
| Overview | overview.js | Aggregates from multiple features |
overview.js
| Agents | agents.js | /api/agents/definitions/* |
/api/agents/definitions/*
| Approvals | approvals.js | /api/approvals/* |
/api/approvals/*
| Channels | channels.js | /api/channels/* |
/api/channels/*
| Chat | chat.js | /api/chat/* (WebSocket + REST) |
/api/chat/*
| Config | config.js | /api/config/runtime/* |
/api/config/runtime/*
| Logs | logs.js | /api/logs/* (WebSocket) |
/api/logs/*
| Nodes | nodes.js | /api/nodes/*, /api/instances/* |
/api/nodes/*
/api/instances/*
| Schedules | schedules.js | /api/schedules/* |
/api/schedules/*
| Sessions | sessions.js | /api/sessions/* |
/api/sessions/*
| Skills | skills.js | /api/skills/* |
/api/skills/*
| Usage | usage.js | /api/usage/* |
/api/usage/*
| Guardrails | guardrails.js | /api/guardrails/* |
/api/guardrails/*
| Eval | eval.js | /api/eval/* |
/api/eval/*
| Telemetry | telemetry.js | /api/telemetry/* |
/api/telemetry/*
| Traces | tracing.js | /api/traces/* |
/api/traces/*
| Security | security.js | /api/security/* |
/api/security/*
| Endpoint | Method | Feature |
|----------|--------|---------|
| /api/chat/send | POST | chat |
/api/chat/send
| /api/chat/history/{session_id} | GET | chat |
/api/chat/history/{session_id}
| /api/chat/abort | POST | chat |
/api/chat/abort
| /api/chat/ws | WebSocket | chat |
/api/chat/ws
| /api/chat/attachments | POST | attachments |
/api/chat/attachments
| /api/chat/attachments/{session_id} | GET | attachments |
/api/chat/attachments/{session_id}
| /api/chat/attachments/{attachment_id} | DELETE | attachments |
/api/chat/attachments/{attachment_id}
| /api/channels | GET | channels |
/api/channels
| /api/channels | POST | channels |
| /api/channels/platforms | GET | channels |
/api/channels/platforms
| /api/channels/{channel_id} | GET | channels |
/api/channels/{channel_id}
| /api/channels/{channel_id} | PUT | channels |
| /api/channels/{channel_id} | DELETE | channels |
| /api/channels/{channel_id}/toggle | POST | channels |
/api/channels/{channel_id}/toggle
| /api/channels/{channel_id}/status | GET | channels |
/api/channels/{channel_id}/status
| /api/channels/{channel_id}/restart | POST | channels |
/api/channels/{channel_id}/restart
| /api/protocol | GET | protocol |
/api/protocol
| /api/protocol/negotiate | POST | protocol |
/api/protocol/negotiate
| /api/subagents | GET | subagents |
/api/subagents
| /api/subagents/{session_id} | GET | subagents |
/api/subagents/{session_id}
| /api/agents/definitions | GET | agents_crud |
/api/agents/definitions
| /api/agents/definitions | POST | agents_crud |
| /api/agents/definitions/{agent_id} | GET | agents_crud |
/api/agents/definitions/{agent_id}
| /api/agents/definitions/{agent_id} | PUT | agents_crud |
| /api/agents/definitions/{agent_id} | DELETE | agents_crud |
| /api/agents/models | GET | agents_crud |
/api/agents/models
| /api/agents/duplicate/{agent_id} | POST | agents_crud |
/api/agents/duplicate/{agent_id}
| /api/agents/run/{agent_id} | POST | agents_crud |
/api/agents/run/{agent_id}
| /api/approvals | GET | approvals |
/api/approvals
| /api/approvals | POST | approvals |
| /api/approvals/pending | GET | approvals |
/api/approvals/pending
| /api/approvals/history | GET | approvals |
/api/approvals/history
| /api/approvals/policies | GET | approvals |
/api/approvals/policies
| /api/approvals/policies | POST | approvals |
| /api/approvals/stream | WebSocket | approvals |
/api/approvals/stream
| /api/approvals/{approval_id} | GET | approvals |
/api/approvals/{approval_id}
| /api/approvals/{approval_id}/approve | POST | approvals |
/api/approvals/{approval_id}/approve
| /api/approvals/{approval_id}/deny | POST | approvals |
/api/approvals/{approval_id}/deny
| /api/sessions | GET | sessions_ext |
/api/sessions
| /api/sessions/{session_id}/state | GET | sessions_ext |
/api/sessions/{session_id}/state
| /api/sessions/{session_id}/state | PUT | sessions_ext |
| /api/sessions/{session_id}/context | GET | sessions_ext |
/api/sessions/{session_id}/context
| /api/sessions/{session_id}/compact | POST | sessions_ext |
/api/sessions/{session_id}/compact
| /api/sessions/{session_id}/reset | POST | sessions_ext |
/api/sessions/{session_id}/reset
| /api/sessions/{session_id}/preview | GET | sessions_ext |
/api/sessions/{session_id}/preview
| /api/sessions/{session_id}/labels | GET | sessions_ext |
/api/sessions/{session_id}/labels
| /api/sessions/{session_id}/labels | PUT | sessions_ext |
| /api/sessions/{session_id}/usage | GET | sessions_ext |
/api/sessions/{session_id}/usage
| /api/memory | GET | memory |
/api/memory
| /api/memory | POST | memory |
| /api/memory | DELETE | memory |
| /api/memory/search | POST | memory |
/api/memory/search
| /api/memory/{memory_id} | GET | memory |
/api/memory/{memory_id}
| /api/memory/{memory_id} | DELETE | memory |
| /api/config/runtime | GET | config_runtime |
/api/config/runtime
| /api/config/runtime | PUT | config_runtime |
| /api/config/runtime | PATCH | config_runtime |
| /api/config/runtime/history | GET | config_runtime |
/api/config/runtime/history
| /api/config/runtime/{key} | GET | config_runtime |
/api/config/runtime/{key}
| /api/config/runtime/{key} | PUT | config_runtime |
| /api/config/runtime/{key} | DELETE | config_runtime |
| /api/config/schema | GET | config_runtime |
/api/config/schema
| /api/config/validate | POST | config_runtime |
/api/config/validate
| /api/config/apply | POST | config_runtime |
/api/config/apply
| /api/config/defaults | POST | config_runtime |
/api/config/defaults
| /api/config/watcher | GET | config_hot_reload |
/api/config/watcher
| /api/config/watcher/start | POST | config_hot_reload |
/api/config/watcher/start
| /api/config/watcher/stop | POST | config_hot_reload |
/api/config/watcher/stop
| /api/config/reload | POST | config_hot_reload |
/api/config/reload
| /api/auth/status | GET | auth |
/api/auth/status
| /api/auth/config | GET | auth |
/api/auth/config
| /api/auth/config | PUT | auth |
| /api/auth/keys | GET | auth |
/api/auth/keys
| /api/auth/keys | POST | auth |
| /api/auth/keys/{key_id} | DELETE | auth |
/api/auth/keys/{key_id}
| /api/auth/login | POST | auth |
/api/auth/login
| /api/auth/logout | POST | auth |
/api/auth/logout
| /api/auth/sessions | GET | auth |
/api/auth/sessions
| /api/auth/password | POST | auth |
/api/auth/password
| /api/theme | GET | theme |
/api/theme
| /api/theme | PUT | theme |
| /api/models | GET | model_fallback |
/api/models
| /api/models/fallback | PUT | model_fallback |
/api/models/fallback
| /api/browser/status | GET | browser_automation |
/api/browser/status
| /api/browser/run | POST | browser_automation |
/api/browser/run
| /api/hooks | GET | hooks |
/api/hooks
| /api/hooks | POST | hooks |
| /api/jobs | GET | jobs |
/api/jobs
| /api/jobs | POST | jobs |
| /api/jobs/stats | GET | jobs |
/api/jobs/stats
| /api/jobs/{job_id} | GET | jobs |
/api/jobs/{job_id}
| /api/jobs/{job_id} | DELETE | jobs |
| /api/jobs/{job_id}/status | GET | jobs |
/api/jobs/{job_id}/status
| /api/jobs/{job_id}/result | GET | jobs |
/api/jobs/{job_id}/result
| /api/jobs/{job_id}/cancel | POST | jobs |
/api/jobs/{job_id}/cancel
| /api/jobs/{job_id}/stream | WebSocket | jobs |
/api/jobs/{job_id}/stream
| /api/schedules | GET | schedules |
/api/schedules
| /api/schedules | POST | schedules |
| /api/schedules/{job_id} | GET | schedules |
/api/schedules/{job_id}
| /api/schedules/{job_id} | PUT | schedules |
| /api/schedules/{job_id} | DELETE | schedules |
| /api/schedules/{job_id}/toggle | POST | schedules |
/api/schedules/{job_id}/toggle
| /api/schedules/{job_id}/run | POST | schedules |
/api/schedules/{job_id}/run
| /api/schedules/{job_id}/stop | POST | schedules |
/api/schedules/{job_id}/stop
| /api/schedules/{job_id}/stats | GET | schedules |
/api/schedules/{job_id}/stats
| /api/workflows | GET | workflows |
/api/workflows
| /api/workflows | POST | workflows |
| /api/workflows/runs | GET | workflows |
/api/workflows/runs
| /api/workflows/runs/{run_id} | GET | workflows |
/api/workflows/runs/{run_id}
| /api/workflows/{workflow_id} | GET | workflows |
/api/workflows/{workflow_id}
| /api/workflows/{workflow_id} | DELETE | workflows |
| /api/workflows/{workflow_id}/run | POST | workflows |
/api/workflows/{workflow_id}/run
| /api/workflows/{workflow_id}/status | GET | workflows |
/api/workflows/{workflow_id}/status
| /v1 | GET | openai_api |
/v1
| /v1/chat/completions | POST | openai_api |
/v1/chat/completions
| /v1/completions | POST | openai_api |
/v1/completions
| /v1/embeddings | POST | openai_api |
/v1/embeddings
| /v1/images/generations | POST | openai_api |
/v1/images/generations
| /v1/audio/transcriptions | POST | openai_api |
/v1/audio/transcriptions
| /v1/audio/speech | POST | openai_api |
/v1/audio/speech
| /v1/moderations | POST | openai_api |
/v1/moderations
| /v1/models | GET | openai_api |
/v1/models
| /v1/models/{model_id} | GET | openai_api |
/v1/models/{model_id}
| /v1/responses | POST | openai_api |
/v1/responses
| /v1/files | GET | openai_api |
/v1/files
| /v1/files | POST | openai_api |
| /v1/files/{file_id} | GET | openai_api |
/v1/files/{file_id}
| /v1/files/{file_id} | DELETE | openai_api |
| /v1/assistants | GET | openai_api |
/v1/assistants
| /v1/assistants | POST | openai_api |
| /api/logs/stream | WebSocket | logs |
/api/logs/stream
| /api/logs/levels | GET | logs |
/api/logs/levels
| /api/logs/clear | POST | logs |
/api/logs/clear
| /api/logs/stats | GET | logs |
/api/logs/stats
| /api/usage | GET | usage |
/api/usage
| /api/usage/summary | GET | usage |
/api/usage/summary
| /api/usage/details | GET | usage |
/api/usage/details
| /api/usage/models | GET | usage |
/api/usage/models
| /api/usage/sessions | GET | usage |
/api/usage/sessions
| /api/usage/agents | GET | usage |
/api/usage/agents
| /api/usage/timeseries | GET | usage |
/api/usage/timeseries
| /api/usage/costs | GET | usage |
/api/usage/costs
| /api/usage/track | POST | usage |
/api/usage/track
| /api/nodes | GET | nodes |
/api/nodes
| /api/nodes | POST | nodes |
| /api/nodes/instances | GET | nodes |
/api/nodes/instances
| /api/instances | GET | nodes |
/api/instances
All previously identified gaps have been implemented with protocol-driven architecture:
| Feature | Implementation | Docs |
|---------|----------------|------|
| memory | MemoryProtocol → SimpleMemoryManager / SDKMemoryManager | Memory API |
MemoryProtocol
SimpleMemoryManager
SDKMemoryManager
| media_analysis | MediaAnalysisProtocol → VisionAnalysisManager (SDK VisionAgent) | Media Analysis |
MediaAnalysisProtocol
VisionAnalysisManager
| tts | TTSProtocol → BrowserTTSManager / OpenAITTSManager | TTS |
TTSProtocol
BrowserTTSManager
OpenAITTSManager
| marketplace | MarketplaceProtocol → LocalMarketplaceManager | Marketplace |
MarketplaceProtocol
LocalMarketplaceManager
| code_execution | CodeExecutionProtocol → SandboxExecutionManager | Code Execution |
CodeExecutionProtocol
SandboxExecutionManager
| pwa | PWAProtocol → DefaultPWAManager | PWA |
PWAProtocol
DefaultPWAManager
| i18n | I18nProtocol → JSONLocaleManager | i18n |
I18nProtocol
JSONLocaleManager
| device_pairing | PairingProtocol → DefaultPairingManager | Device Pairing |
PairingProtocol
DefaultPairingManager
> Numbers in parentheses = API route count per feature