Skip to content

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.

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

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
Project Editor ArenaDevSession Dev Console Pod
│ │ │
│ Click "Test Agent" │ │
│─────────────────────────────▶│ │
│ │ Create Pod + Service │
│ │───────────────────────────▶│
│ │ │
│ │◀── Status: Ready ──────────│
│◀──── WebSocket URL ──────────│ │
│ │ │
│════════════ WebSocket Connection ═════════════════════════│
│ │ │
│ Idle timeout expires │ │
│ │ Delete session │
│ │───────────────────────────▶│ (cleanup)

The ID of the Arena project being tested. This corresponds to the project directory in the workspace filesystem.

FieldTypeRequiredDescription
projectIdstringYesArena 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
ValueDescription
PendingSession is waiting to be processed
StartingDev console pod is being created
ReadyDev console is ready for connections
StoppingSession is being cleaned up
StoppedSession has been cleaned up
FailedSession 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.

TypeDescription
ReadyOverall readiness of the session
PodReadyDev console pod is running
ServiceReadyService 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