Studio Types
Studio config, agent config, capabilities, and error response contracts.
Import from @anvia/studio.
Config Types
type StudioCapability =
| "agents"
| "approvals"
| "knowledge"
| "memory"
| "mcps"
| "observability"
| "pipelines"
| "sessions"
| "status"
| "tools"
| "traces";
type StudioAgent = {
id: string;
agent: Agent;
name?: string;
description?: string;
quickPrompts?: string[];
metadata?: JsonObject;
};
type StudioAgentConfig = {
id: string;
name?: string;
description?: string;
quickPrompts: string[];
metadata?: JsonObject;
};
type StudioAgentRuntimeSummary = {
id: string;
name?: string;
description?: string;
model?: JsonValue;
toolCount: number;
staticToolCount: number;
dynamicToolCount: number;
approvalToolCount: number;
mcpToolCount: number;
staticContextCount: number;
dynamicContextCount: number;
observerCount: number;
hasMemory: boolean;
hasHook: boolean;
hasOutputSchema: boolean;
defaultMaxTurns?: number;
metadata?: JsonObject;
};
type StudioTarget = Agent | Pipeline<unknown, unknown>;
type StudioPipeline = {
id: string;
pipeline: Pipeline<unknown, unknown>;
name?: string;
description?: string;
metadata?: JsonObject;
};
type StudioPipelineConfig = {
id: string;
name?: string;
description?: string;
metadata?: JsonObject;
stageCount: number;
edgeCount: number;
hasParallelStages: boolean;
agentCount: number;
extractorCount: number;
};
type StudioPipelineDetail = StudioPipelineConfig & {
graph: PipelineGraph;
};
type StudioCapabilityConfig = {
enabled: boolean;
reason?: string;
};
type StudioConfig = {
id: string;
name?: string;
description?: string;
version?: string;
agents: StudioAgentConfig[];
models?: StudioModelsConfig;
pipelines: StudioPipelineConfig[];
evals: StudioEvalSuiteConfig[];
chat: { quickPrompts: Record<string, string[]> };
capabilities: Partial<Record<StudioCapability, StudioCapabilityConfig>>;
unsupportedCapabilities: StudioCapability[];
};Purpose: configuration returned by Studio runtime and HTTP config endpoints.
Return behavior: Studio.config() returns StudioConfig. Pipelines are top-level Studio targets beside agents.
Notable errors: none directly.
Model Configuration Types
type StudioModelRef = string | { provider: string; model: string };
type StudioModelModality = "text" | "image" | "document" | "audio" | "video";
type StudioModelModalities = {
input: StudioModelModality[];
output?: StudioModelModality[];
};
type StudioModelDefinition = {
id: string;
name?: string;
description?: string;
modalities?: StudioModelModalities;
capabilities?: Partial<CompletionModelCapabilities>;
metadata?: JsonObject;
};
type StudioModelProvider = {
id: string;
name?: string;
defaultModel?: string;
models?: StudioModelDefinition[];
createCompletionModel(model: string): CompletionModel | StreamingCompletionModel;
listModels?: () => Promise<ModelList>;
metadata?: JsonObject;
};
type StudioAgentModelPolicy = {
default?: StudioModelRef;
allowed?: Array<StudioModelRef | `${string}:*`>;
};
type StudioModelConfig = {
providers: StudioModelProvider[];
default?: StudioModelRef;
agents?: Record<string, StudioAgentModelPolicy>;
};
type StudioModelSummary = StudioModelDefinition & {
ref: string;
providerId: string;
providerName?: string;
};
type StudioModelProviderConfig = {
id: string;
name?: string;
defaultModel?: string;
models: StudioModelSummary[];
metadata?: JsonObject;
warning?: string;
};
type StudioAgentModelPolicyConfig = {
default?: string;
allowed?: string[];
};
type StudioModelsConfig = {
providers: StudioModelProviderConfig[];
default?: string;
agents: Record<string, StudioAgentModelPolicyConfig>;
};
type StudioAgentModelsSummary = {
agentId: string;
defaultModel?: string;
models: StudioModelSummary[];
warnings?: JsonObject[];
};Purpose: configure the provider/model menu Studio exposes for agent runs. StudioModelProvider bridges human-facing model metadata to runtime CompletionModel instances. StudioModelModalities records whether a model accepts text, image, document, audio, or video input and which output modalities it can produce.
Return behavior: StudioModelConfig is accepted through new Studio(targets, { models }). StudioModelsConfig appears on GET /config; StudioAgentModelsSummary appears on GET /agents/:agentId/models; StudioModelSummary values use canonical provider:model refs for UI selection and HTTP run requests.
Notable errors: run requests that select a model outside an agent's StudioAgentModelPolicy return bad_request. Unsupported modality selections are reported as warnings when metadata is available.
Tool Metadata Types
type StudioAgentToolSource = "static" | "dynamic";
type StudioAgentToolApprovalMetadata = {
required: boolean;
reason?: string;
rejectMessage?: string;
};
type StudioAgentToolMetadata = {
agentId: string;
name: string;
description: string;
parameters: JsonObject;
source: StudioAgentToolSource;
approval: StudioAgentToolApprovalMetadata;
};
type StudioAgentToolsSummary = {
agentId: string;
tools: StudioAgentToolMetadata[];
};
type StudioToolRunRequest = {
args: JsonValue;
context?: JsonObject;
};
type StudioToolRunResponse = {
agentId: string;
toolName: string;
result?: JsonValue;
error?: JsonValue;
status: "success" | "error";
durationMs: number;
startedAt: string;
endedAt: string;
events: JsonValue[];
};
type StudioAgentMcpToolMetadata = {
name: string;
description: string;
parameters: JsonObject;
source: StudioAgentToolSource;
};
type StudioAgentMcpServerMetadata = {
agentId: string;
name: string;
toolCount: number;
tools: StudioAgentMcpToolMetadata[];
};
type StudioAgentMcpsSummary = {
agentId: string;
servers: StudioAgentMcpServerMetadata[];
};
type StudioTranscriptAttachment = {
kind: "image" | "document";
name?: string;
mediaType?: string;
data?: string;
url?: string;
};Purpose: metadata returned by GET /agents/:agentId/tools and used by the Studio Tools inspector.
Return behavior: static tools come from agent.toolSet; dynamic tools are listed when the dynamic tool index exposes its underlying ToolSet. Direct tool runs use POST /agents/:agentId/tools/:toolName/runs.
Notable errors: unknown agents return not_found.
GET /agents/:agentId/mcps returns the MCP subset grouped by server name. MCP metadata is available for tools registered through .mcp(...).
Memory and Status Types
type StudioMemoryUserSummary = {
userId: string;
conversationCount: number;
agentIds: string[];
lastInteractionAt: string;
};
type StudioMemoryConversationSummary = {
id: string;
userId: string;
agentId: string;
title?: string;
createdAt: string;
updatedAt: string;
messageCount: number;
metadata?: JsonObject;
};
type StudioMemoryConversationsPage = {
conversations: StudioMemoryConversationSummary[];
total: number;
};
type StudioMemoryUsersPage = {
users: StudioMemoryUserSummary[];
total: number;
};
type StudioMemoryConversationMessages = {
conversation: StudioMemoryConversationSummary;
messages: Message[];
transcript: StudioTranscriptEntry[];
};
type StudioMemoryConversationSteps = {
conversation: StudioMemoryConversationSummary;
steps: StudioTranscriptEntry[];
};
type StudioStatusSummary = {
runner: {
id: string;
name?: string;
version?: string;
};
storage: {
sessions?: string;
traces?: string;
pipelineLogs?: string;
pipelineRuns?: string;
};
counts: {
agents: number;
pipelines: number;
sessions?: number;
traces?: number;
pipelineRuns?: number;
};
capabilities: Partial<Record<StudioCapability, StudioCapabilityConfig>>;
generatedAt: string;
};
type StudioEvalSuite = RunEvalSuiteOptions<unknown, unknown, unknown> & {
id?: string;
description?: string;
metadata?: JsonObject;
};
type StudioEvalSuiteConfig = {
id: string;
name: string;
description?: string;
caseCount: number;
metricNames: string[];
concurrency?: number;
metadata?: JsonObject;
};
type StudioEvalRunRequest = {
concurrency?: number;
};
type StudioEvalRunResponse = {
runId: string;
suiteId: string;
startedAt: string;
endedAt: string;
durationMs: number;
result: JsonObject;
};Purpose: response contracts for Memory, Status, direct tool runs, eval runs, and richer agent runtime inspection routes.
Return behavior: Memory routes summarize the active Studio session store; Status returns a compact runtime snapshot.
Register eval suites with new Studio(targets, { evals: [...] }). Studio lists their case and metric counts and runs them through POST /evals/:evalId/runs.
Notable errors: unsupported or missing stores return unsupported_capability or not_found from route handlers.
Run Types
type AgentRunRequest = {
message: string | Message;
history?: Message[];
sessionId?: string;
model?: StudioModelRef;
stream?: boolean;
maxTurns?: number;
toolConcurrency?: number;
metadata?: JsonObject;
trace?: AgentTraceOptions;
};
type AgentRunResponse = PromptResponse;
type AgentRunStreamEvent =
| AgentStreamEvent
| StudioToolApprovalRequestEvent
| StudioToolApprovalResultEvent
| StudioToolQuestionRequestEvent
| StudioToolQuestionResultEvent
| StudioSessionLogEvent
| StudioPipelineLogEvent
| StudioPipelineFinalEvent;
type StudioObservabilityEventType = "session_log" | "pipeline_log" | "trace";
type StudioObservabilityEvent =
| {
type: "session_log";
log: StudioSessionLogEntry;
}
| {
type: "pipeline_log";
log: StudioPipelineLogEntry;
}
| {
type: "trace";
trace: StudioTraceSummary;
};Purpose: HTTP request and response contracts for Studio agent runs.
Return behavior: non-streaming agent runs return AgentRunResponse; streaming agent runs emit newline-delimited AgentRunStreamEvent values. session_log and pipeline_log events are Studio-owned metadata-only runtime logs.
GET /observability/events emits newline-delimited StudioObservabilityEvent values. Use the optional type query string to subscribe to session_log, pipeline_log, trace, or a comma-separated subset.
Notable errors: invalid run request bodies return bad_request; unsupported stores or capabilities return unsupported_capability.
Pipeline Run Types
type StudioPipelineLogLevel = "debug" | "info" | "warn" | "error";
type StudioPipelineLogCategory =
| "pipeline"
| "run"
| "stage"
| "parallel"
| "agent"
| "extractor"
| "api";
type StudioPipelineLogEntry = {
id: string;
pipelineId: string;
runId?: string;
sequence: number;
timestamp: string;
level: StudioPipelineLogLevel;
category: StudioPipelineLogCategory;
event: string;
message: string;
metadata?: JsonObject;
};
type StudioPipelineLogAppendInput = {
pipelineId: string;
runId?: string;
level: StudioPipelineLogLevel;
category: StudioPipelineLogCategory;
event: string;
message: string;
metadata?: JsonObject;
};
type StudioPipelineLogListOptions = {
pipelineId: string;
limit: number;
after?: number;
};
type StudioPipelineLogEvent = {
type: "pipeline_log";
log: StudioPipelineLogEntry;
};
type StudioPipelineFinalEvent = {
type: "pipeline_final";
runId: string;
pipelineId: string;
output: JsonValue;
};
type StudioPipelineRunRequest = {
input: JsonValue;
stream?: boolean;
metadata?: JsonObject;
};
type StudioPipelineReplayRequest = {
stream?: boolean;
metadata?: JsonObject;
};
type StudioPipelineRunResponse = {
runId: string;
pipelineId: string;
output: JsonValue;
};Purpose: HTTP request, response, stream, and persisted log contracts for Studio pipeline runs.
Return behavior: non-streaming pipeline runs return StudioPipelineRunResponse; streaming runs emit pipeline_log events and one pipeline_final event.
Notable errors: Studio HTTP pipeline inputs must be JSON-compatible. Use direct pipeline.run(...) for non-JSON inputs.
Knowledge Types
type StudioKnowledgeSourceKind = "static_context" | "dynamic_context" | "dynamic_tools";
type StudioKnowledgeSourceSummary = {
kind: StudioKnowledgeSourceKind;
count: number;
};
type StudioStaticKnowledgeDocument = {
id: string;
text: string;
additionalProps?: JsonObject;
};
type StudioKnowledgeEvidenceDocument = {
id?: string;
text?: string;
additionalProps?: JsonObject;
};
type StudioKnowledgeEvidence = {
traceId: string;
sessionId: string;
observationId: string;
observationName: string;
turn: number;
startedAt: string;
query?: string;
documentCount: number;
toolCount: number;
documents: StudioKnowledgeEvidenceDocument[];
tools: string[];
};
type StudioAgentKnowledgeConfig = {
agentId: string;
agentName?: string;
sources: StudioKnowledgeSourceSummary[];
staticContext: StudioStaticKnowledgeDocument[];
};
type StudioKnowledgeItemKind = "static_context" | "dynamic_context" | "dynamic_tool";
type StudioKnowledgeItem = {
id: string;
kind: StudioKnowledgeItemKind;
text?: string;
document?: JsonValue;
toolName?: string;
description?: string;
parameterKeys?: string[];
metadata?: JsonObject;
};
type StudioKnowledgeItemsPage = {
agentId: string;
sourceId: string;
kind: StudioKnowledgeSourceKind;
inspectable: boolean;
items: StudioKnowledgeItem[];
nextCursor?: string;
totalCount?: number;
message?: string;
};
type StudioKnowledgeSummary = {
agents: StudioAgentKnowledgeConfig[];
evidence: StudioKnowledgeEvidence[];
};Purpose: summarize each agent's inspectable static context, dynamic context, dynamic tools, and recent trace evidence.
Return behavior: GET /knowledge returns StudioKnowledgeSummary; source item routes return StudioKnowledgeItemsPage.
Notable errors: invalid limit query values return bad_request.
Pipeline Run Persistence Types
type StudioPipelineRunStatus = "running" | "success" | "error";
type StudioPipelineRunRecord = {
runId: string;
pipelineId: string;
status: StudioPipelineRunStatus;
input: JsonValue;
output?: JsonValue;
error?: JsonValue;
metadata?: JsonObject;
startedAt: string;
endedAt?: string;
durationMs?: number;
};
type StudioPipelineRunSaveInput = {
runId: string;
pipelineId: string;
status: StudioPipelineRunStatus;
input: JsonValue;
output?: JsonValue;
error?: JsonValue;
metadata?: JsonObject;
startedAt: string;
endedAt?: string;
durationMs?: number;
};
type StudioPipelineRunListOptions = {
pipelineId: string;
limit: number;
};
type StudioPipelineRunGetOptions = {
pipelineId: string;
runId: string;
};
type StudioPipelineRunStore = {
savePipelineRun(
input: StudioPipelineRunSaveInput,
): StudioPipelineRunRecord | Promise<StudioPipelineRunRecord>;
getPipelineRun(
options: StudioPipelineRunGetOptions,
): StudioPipelineRunRecord | undefined | Promise<StudioPipelineRunRecord | undefined>;
listPipelineRuns(
options: StudioPipelineRunListOptions,
): StudioPipelineRunRecord[] | Promise<StudioPipelineRunRecord[]>;
};Purpose: persistence contract for Studio pipeline run history.
Return behavior: stores normalize saved run input into StudioPipelineRunRecord values, load exact records by pipeline and run id, and list recent records per pipeline.
Notable errors: store failures surface through the Studio runtime or HTTP route handling the pipeline request.
Error Types
type StudioErrorCode =
| "bad_request"
| "conflict"
| "not_found"
| "unsupported_capability"
| "internal_error";
type StudioErrorResponse = {
error: {
code: StudioErrorCode;
message: string;
details?: JsonValue;
};
};Purpose: normalized Studio HTTP error shape.
Return behavior: returned by API routes on request or runtime failures.
Notable errors: internal_error responses serialize thrown errors into details when available.
