ArenaDevSession CRD
The ArenaDevSession custom resource represents an ephemeral interactive testing session for an Arena project. When created, the controller deploys a dev console pod that allows real-time chat testing with your agent configuration.
API Version
Section titled “API Version”apiVersion: omnia.altairalabs.ai/v1alpha1kind: ArenaDevSessionOverview
Section titled “Overview”ArenaDevSession provides:
- Ephemeral dev consoles: Per-session pods for isolated testing
- Hot reload: Update agent configuration without reconnecting
- Provider integration: Uses workspace Provider CRDs for credentials
- Automatic cleanup: Sessions are deleted after idle timeout
How It Works
Section titled “How It Works”Project Editor ArenaDevSession Dev Console Pod │ │ │ │ Click "Test Agent" │ │ │─────────────────────────────▶│ │ │ │ Create Pod + Service │ │ │───────────────────────────▶│ │ │ │ │ │◀── Status: Ready ──────────│ │◀──── WebSocket URL ──────────│ │ │ │ │ │════════════ WebSocket Connection ═════════════════════════│ │ │ │ │ Idle timeout expires │ │ │ │ Delete session │ │ │───────────────────────────▶│ (cleanup)Spec Fields
Section titled “Spec Fields”projectId
Section titled “projectId”The ID of the Arena project being tested. This corresponds to the project directory in the workspace filesystem.
| Field | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | Arena project identifier |
spec: projectId: "my-chatbot-project"workspace
Section titled “workspace”The workspace name for reference and labeling.
spec: workspace: "my-workspace"idleTimeout
Section titled “idleTimeout”How long the session can be idle before automatic cleanup. Default: 30m.
spec: idleTimeout: 1hOverride the default dev console image. Typically not needed.
spec: image: ghcr.io/altairalabs/omnia-arena-dev-console:customresources
Section titled “resources”Override the default resource requests/limits for the dev console pod.
spec: resources: requests: cpu: 100m memory: 128Mi limits: cpu: 500m memory: 512MiStatus Fields
Section titled “Status Fields”| Value | Description |
|---|---|
Pending | Session is waiting to be processed |
Starting | Dev console pod is being created |
Ready | Dev console is ready for connections |
Stopping | Session is being cleaned up |
Stopped | Session has been cleaned up |
Failed | Session failed to start |
endpoint
Section titled “endpoint”The WebSocket URL to connect to the dev console.
Format: ws://arena-dev-console-{name}.{namespace}.svc:8080/ws
serviceName
Section titled “serviceName”The name of the Kubernetes Service created for the dev console.
lastActivityAt
Section titled “lastActivityAt”Timestamp of the last client activity. Used for idle timeout cleanup.
startedAt
Section titled “startedAt”When the dev console became ready.
conditions
Section titled “conditions”| Type | Description |
|---|---|
Ready | Overall readiness of the session |
PodReady | Dev console pod is running |
ServiceReady | Service is created |
WebSocket Protocol
Section titled “WebSocket Protocol”The dev console uses a WebSocket protocol for real-time communication. Connect to the endpoint from status.endpoint.
Connection URL
Section titled “Connection URL”ws://arena-dev-console-{session-name}.{namespace}.svc:8080/wsFrom the dashboard, connections are proxied through the WebSocket proxy service.
Client Messages
Section titled “Client Messages”Chat Message
Section titled “Chat Message”Send a message to the agent:
{ "type": "chat", "content": "Hello, how can you help me?", "timestamp": "2025-01-16T10:00:00Z"}Chat with Attachments
Section titled “Chat with Attachments”Send a message with file attachments:
{ "type": "chat", "content": "What's in this image?", "parts": [ { "type": "text", "text": "What's in this image?" }, { "type": "image", "media": { "data": "base64-encoded-image-data", "mime_type": "image/jpeg" } } ], "timestamp": "2025-01-16T10:00:00Z"}Reload Configuration
Section titled “Reload Configuration”Hot reload the agent configuration after making changes:
{ "type": "chat", "content": "/path/to/arena.config.yaml", "metadata": { "reload": "true" }, "timestamp": "2025-01-16T10:00:00Z"}Reset Conversation
Section titled “Reset Conversation”Clear the conversation history:
{ "type": "chat", "content": "", "metadata": { "reset": "true" }, "timestamp": "2025-01-16T10:00:00Z"}Switch Provider
Section titled “Switch Provider”Change the active provider:
{ "type": "chat", "content": "", "metadata": { "provider": "my-openai-provider" }, "timestamp": "2025-01-16T10:00:00Z"}Server Messages
Section titled “Server Messages”Connected
Section titled “Connected”Sent when connection is established:
{ "type": "connected", "session_id": "abc123", "timestamp": "2025-01-16T10:00:00Z"}Streaming Chunk
Section titled “Streaming Chunk”Partial response content (streaming):
{ "type": "chunk", "content": "Hello! I'm here to ", "timestamp": "2025-01-16T10:00:00Z"}Message Complete
Section titled “Message Complete”Full response with all parts:
{ "type": "done", "content": "Hello! I'm here to help you.", "parts": [ { "type": "text", "text": "Hello! I'm here to help you." } ], "timestamp": "2025-01-16T10:00:00Z"}Tool Call
Section titled “Tool Call”When the agent calls a tool:
{ "type": "tool_call", "tool_call": { "id": "call_123", "name": "get_weather", "arguments": "{\"city\": \"San Francisco\"}" }, "timestamp": "2025-01-16T10:00:00Z"}Tool Result
Section titled “Tool Result”Result of a tool execution:
{ "type": "tool_result", "tool_result": { "id": "call_123", "result": "{\"temperature\": 72, \"conditions\": \"sunny\"}", "error": null }, "timestamp": "2025-01-16T10:00:00Z"}Reloaded
Section titled “Reloaded”Confirmation that configuration was reloaded:
{ "type": "reloaded", "timestamp": "2025-01-16T10:00:00Z"}Error message:
{ "type": "error", "error": { "message": "Provider connection failed", "code": "PROVIDER_ERROR" }, "timestamp": "2025-01-16T10:00:00Z"}Provider Integration
Section titled “Provider Integration”The dev console automatically resolves Provider CRDs from the workspace namespace. Provider credentials are mounted as environment variables in the dev console pod.
Supported provider types:
- OpenAI
- Anthropic
- Google (Gemini)
- Azure OpenAI
- Ollama
- Custom HTTP providers
See Provider CRD for configuration details.
Example Session Lifecycle
Section titled “Example Session Lifecycle”# Created by dashboard when user clicks "Test Agent"apiVersion: omnia.altairalabs.ai/v1alpha1kind: ArenaDevSessionmetadata: name: dev-session-abc123 namespace: workspace-ns labels: app.kubernetes.io/managed-by: omnia-dashboard arena.omnia.altairalabs.ai/project-id: my-chatbotspec: projectId: my-chatbot workspace: my-workspace idleTimeout: 30m
status: phase: Ready endpoint: ws://arena-dev-console-dev-session-abc123.workspace-ns.svc:8080/ws serviceName: arena-dev-console-dev-session-abc123 startedAt: "2025-01-16T10:00:00Z" lastActivityAt: "2025-01-16T10:30:00Z"Cleanup
Section titled “Cleanup”Sessions are automatically cleaned up when:
- Idle timeout expires - No WebSocket activity for the configured duration
- User closes the session - Dashboard deletes the resource
- Workspace is deleted - Owner references cascade deletion
Helm Configuration
Section titled “Helm Configuration”Configure the dev console image in your Helm values:
enterprise: arena: devConsole: image: repository: ghcr.io/altairalabs/omnia-arena-dev-console tag: "" # Defaults to Chart appVersion pullPolicy: IfNotPresentRelated Resources
Section titled “Related Resources”- Project Editor: Where dev sessions are started
- Provider: LLM provider configuration
- WebSocket Protocol: Base WebSocket message types
- PromptKit Documentation: Agent configuration format