Skip to content
ALTAIRA LABS
DocsBlog

ArenaDevSession CRD

Enterprise

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.

apiVersion: omnia.altairalabs.ai/v1alpha1
kind: ArenaDevSession

Short name: ads (e.g. kubectl get ads).

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
sequenceDiagram
participant PE as Project Editor
participant DS as ArenaDevSession
participant Pod as Dev Console Pod
PE->>DS: Click "Test Agent"
DS->>Pod: Create Pod + Service
Pod-->>DS: Status: Ready
DS-->>PE: WebSocket URL
PE-)Pod: WebSocket connection
Note over PE,Pod: Idle timeout expires
DS->>Pod: Delete session (cleanup)

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"

The workspace name for reference and labeling.

spec:
workspace: "my-workspace"

How long the session can be idle before automatic cleanup. Default: 30m.

spec:
idleTimeout: 1h

Override the default dev console image. Typically not needed.

spec:
image: ghcr.io/altairalabs/omnia-arena-dev-console:custom

Override the default resource requests/limits for the dev console pod.

spec:
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
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

The WebSocket URL to connect to the dev console.

Format: ws://arena-dev-console-{name}.{namespace}.svc:8080/ws

The name of the Kubernetes Service created for the dev console.

Timestamp of the last client activity. Used for idle timeout cleanup.

When the dev console became ready.

Type Description
Ready Overall readiness of the session
PodReady Dev console pod is running
ServiceReady Service is created

The dev console uses a WebSocket protocol for real-time communication. Connect to the endpoint from status.endpoint.

ws://arena-dev-console-{session-name}.{namespace}.svc:8080/ws

From the dashboard, connections are proxied through the WebSocket proxy service.

Send a message to the agent:

{
"type": "chat",
"content": "Hello, how can you help me?",
"timestamp": "2025-01-16T10:00:00Z"
}

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"
}

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"
}

Clear the conversation history:

{
"type": "chat",
"content": "",
"metadata": {
"reset": "true"
},
"timestamp": "2025-01-16T10:00:00Z"
}

Change the active provider:

{
"type": "chat",
"content": "",
"metadata": {
"provider": "my-openai-provider"
},
"timestamp": "2025-01-16T10:00:00Z"
}

Sent when connection is established:

{
"type": "connected",
"session_id": "abc123",
"timestamp": "2025-01-16T10:00:00Z"
}

Partial response content (streaming):

{
"type": "chunk",
"content": "Hello! I'm here to ",
"timestamp": "2025-01-16T10:00:00Z"
}

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"
}

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"
}

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"
}

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"
}

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.

# Created by dashboard when user clicks "Test Agent"
apiVersion: omnia.altairalabs.ai/v1alpha1
kind: ArenaDevSession
metadata:
name: dev-session-abc123
namespace: workspace-ns
labels:
app.kubernetes.io/managed-by: omnia-dashboard
arena.omnia.altairalabs.ai/project-id: my-chatbot
spec:
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"

Sessions are automatically cleaned up when:

  1. Idle timeout expires - No WebSocket activity for the configured duration
  2. User closes the session - Dashboard deletes the resource
  3. Workspace is deleted - Owner references cascade deletion

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: IfNotPresent