Skip to main content
The Palyra Web Console is a React-based operator dashboard organized into functional domains. It provides a unified interface for managing the palyrad daemon, monitoring agent execution, and configuring system-wide security and connectivity settings. The navigation system uses a grouped rail model defined in apps/web/src/console/navigation.ts. Navigation entries are categorized into five primary groups: Chat, Observability, Control, Agent, and Settings apps/web/src/console/navigation.ts#5-20. The ConsoleSidebarNav component renders the navigation rail using metadata from CONSOLE_NAV_GROUPS apps/web/src/console/components/layout/ConsoleSidebarNav.tsx#29-30. It utilizes react-router-dom for path-based routing, mapping internal section IDs to URL segments apps/web/src/console/navigation.ts#54-74. Navigation Logic Flow:
  1. Metadata Definition: CONSOLE_SECTIONS defines the ID, label, and detail for every dashboard area apps/web/src/console/sectionMetadata.ts#1-33.
  2. Path Resolution: getSectionPath(section) maps IDs like cron to paths like /control/routines apps/web/src/console/navigation.ts#101-103.
  3. Reverse Lookup: findSectionByPath(pathname) handles incoming URLs and aliases (e.g., /control defaults to overview) to set the active application state apps/web/src/console/navigation.ts#113-129.

Code Entity Mapping: Navigation

The following diagram bridges the UI navigation concepts to the underlying TypeScript definitions.
UI GroupInternal Group IDSection IDs
Chatchatchat
Observabilitycontroloverview, sessions, usage, logs, inventory, support
Controloperationsapprovals, cron, channels, browser
Agentagentagents, skills, memory
Settingssettingsauth, access, config, secrets, operations
Sources: apps/web/src/console/navigation.ts#26-52, apps/web/src/console/sectionMetadata.ts#1-33

Console Sections

The ConsoleSectionContent component acts as a high-level router, switching between React components based on the app.section state apps/web/src/console/ConsoleSectionContent.tsx#26-98.

1. Observability Domain

2. Control Domain

3. Agent & Settings Domain

Data Flow: Section State & API

Dashboard sections are backed by specialized hooks that interact with the ConsoleApiClient.

Section Lifecycle Diagram

This diagram illustrates how a section (e.g., Config) transitions from a UI request to a gRPC/HTTP call and back to the state. Sources: apps/web/src/console/hooks/useConfigDomain.ts#118-156, apps/web/src/console/sections/ConfigSection.tsx

Implementation Detail: The Overview Aggregator

The Overview section is unique as it performs a parallel “burst” of requests to populate the dashboard posture using Promise.allSettled apps/web/src/console/hooks/useOverviewDomain.ts#25-33.
Data PointAPI MethodState Variable
CapabilitiesgetCapabilityCatalog()overviewCatalog
DeploymentgetDeploymentPosture()overviewDeployment
ApprovalslistApprovals()overviewApprovals
DiagnosticsgetDiagnostics()overviewDiagnostics
UsagegetUsageInsights()overviewUsageInsights
Sources: apps/web/src/console/hooks/useOverviewDomain.ts#25-65

Security and Reveal Flows

Sensitive data (secrets, logs, payloads) follows a “Deliberate Reveal” pattern.
  1. Masking by Default: Secrets and sensitive config paths are redacted in the initial state apps/web/src/console/sections/SecretsSection.tsx#72-74.
  2. Explicit Action: The user must click “Reveal” which triggers revealSecretValue(key) apps/web/src/console/sections/SecretsSection.tsx#166-167.
  3. Global Toggle: The revealSensitiveValues flag in ConsoleAppState controls whether revealed values are actually rendered in the UI apps/web/src/console/sections/SecretsSection.tsx#183-184.
Sources: apps/web/src/console/sections/SecretsSection.tsx#32-37, apps/web/src/console/hooks/useConfigDomain.ts#238-259