Types
All types are importable from `@arlopass/react`. This includes React-specific types and re-exports from `@arlopass/web-sdk`. ```tsx import type { MessageId, TrackedChatMessage, ToolCallInfo, SubscriptionEvent, ChatSubscribe, ChatSubscribeNoTools, ArlopassProviderProps, } from "@arlopass/react"; ``` --- ### React SDK types #### MessageId ```tsx type MessageId = string; ``` Opaque string identifier for tracked messages (UUID v4). #### TrackedChatMessage ```tsx type TrackedChatMessage = Readonly<{ id: MessageId; role: ChatRole; content: string; inResponseTo?: MessageId; status: "pending" | "streaming" | "complete" | "error"; pinned: boolean; toolCalls?: readonly ToolCallInfo[]; }>; ``` Immutable message object returned by `useChat` and `useConversation`. Extends the base `ChatMessage` with tracking metadata. #### ToolCallInfo ```tsx type ToolCallInfo = Readonly<{ toolCallId: string; name: string; arguments: Record<string, unknown>; result?: string; status: "pending" | "executing" | "complete" | "error"; }>; ``` Attached to a `TrackedChatMessage` when the assistant invokes tools. #### SubscriptionEvent ```tsx type SubscriptionEvent = | "response" | "stream" | "error" | "tool_call" | "tool_result" | "tool_priming_start" | "tool_priming_match" | "tool_priming_end"; ``` #### ChatSubscribe ```tsx type ChatSubscribe = { ( event: "response", messageId: MessageId, handler: (msg: TrackedChatMessage) => void, ): () => void; (event: "response", handler: (msg: TrackedChatMessage) => void): () => void; ( event: "stream", messageId: MessageId, handler: (delta: string, accumulated: string) => void, ): () => void; ( event: "error", handler: (error: ArlopassSDKError, messageId: MessageId | null) => void, ): () => void; ( event: "error", messageId: MessageId, handler: (error: ArlopassSDKError) => void, ): () => void; ( event: "tool_call", handler: ( toolCallId: string, name: string, args: Record<string, unknown>, messageId: MessageId, ) => void, ): () => void; ( event: "tool_call", messageId: MessageId, handler: ( toolCallId: string, name: string, args: Record<string, unknown>, ) => void, ): () => void; ( event: "tool_result", handler: ( toolCallId: string, name: string, result: string, messageId: MessageId, ) => void, ): () => void; ( event: "tool_result", messageId: MessageId, handler: (toolCallId: string, name: string, result: string) => void, ): () => void; (event: "tool_priming_start", handler: (message: string) => void): () => void; ( event: "tool_priming_match", handler: (tools: readonly string[]) => void, ): () => void; (event: "tool_priming_end", handler: () => void): () => void; }; ``` Overloaded subscribe function returned by `useConversation`. Supports targeted subscriptions by message ID. #### ChatSubscribeNoTools ```tsx type ChatSubscribeNoTools = { ( event: "response", messageId: MessageId, handler: (msg: TrackedChatMessage) => void, ): () => void; (event: "response", handler: (msg: TrackedChatMessage) => void): () => void; ( event: "stream", messageId: MessageId, handler: (delta: string, accumulated: string) => void, ): () => void; ( event: "error", handler: (error: ArlopassSDKError, messageId: MessageId | null) => void, ): () => void; ( event: "error", messageId: MessageId, handler: (error: ArlopassSDKError) => void, ): () => void; }; ``` Restricted subscribe type returned by `useChat` (no tool events). #### ArlopassProviderProps ```tsx type ArlopassProviderProps = Readonly<{ appId?: string; appSuffix?: string; appName?: string; appDescription?: string; appIcon?: string; defaultProvider?: string; defaultModel?: string; autoConnect?: boolean; onError?: (error: ArlopassSDKError) => void; children: React.ReactNode; }>; ``` #### ClientSnapshot ```tsx type ClientSnapshot = Readonly<{ state: ClientState; sessionId: string | null; selectedProvider: Readonly<{ providerId: string; modelId: string }> | null; providers: readonly ProviderDescriptor[]; error: ArlopassSDKError | null; }>; ``` Internal store snapshot exposed by the provider context. --- ### Re-exported from @arlopass/web-sdk These types are re-exported so you only need the `@arlopass/react` package. ```tsx // Re-exported from @arlopass/web-sdk — no need to install web-sdk separately import type { ChatMessage, ChatRole, ClientState, ProviderDescriptor, SelectProviderInput, ChatOperationOptions, ChatStreamEvent, ArlopassSDKError, ArlopassStateError, ArlopassTransport, ToolDefinition, ConversationStreamEvent, ToolCall, ToolResult, ToolCallEvent, ToolResultEvent, ToolPrimingStartEvent, ToolPrimingMatchEvent, ToolPrimingEndEvent, } from "@arlopass/react"; ``` #### ChatMessage ```tsx type ChatMessage = Readonly<{ role: ChatRole; content: string }>; ``` #### ChatRole ```tsx type ChatRole = "system" | "user" | "assistant"; ``` #### ClientState ```tsx type ClientState = | "disconnected" | "connecting" | "connected" | "degraded" | "reconnecting" | "failed"; ``` #### ProviderDescriptor ```tsx type ProviderDescriptor = Readonly<{ providerId: string; providerName: string; models: readonly string[]; }>; ``` #### SelectProviderInput ```tsx type SelectProviderInput = Readonly<{ providerId: string; modelId: string }>; ``` #### ToolDefinition ```tsx type ToolDefinition = Readonly<{ name: string; description: string; parameters?: ToolParameterSchema; handler?: (args: Record<string, unknown>) => Promise<string> | string; }>; ```All types are importable from @arlopass/react. This includes React-specific types and re-exports from @arlopass/web-sdk.
import type {
MessageId,
TrackedChatMessage,
ToolCallInfo,
SubscriptionEvent,
ChatSubscribe,
ChatSubscribeNoTools,
ArlopassProviderProps,
} from "@arlopass/react";
React SDK types
MessageId
type MessageId = string;
Opaque string identifier for tracked messages (UUID v4).
TrackedChatMessage
type TrackedChatMessage = Readonly<{
id: MessageId;
role: ChatRole;
content: string;
inResponseTo?: MessageId;
status: "pending" | "streaming" | "complete" | "error";
pinned: boolean;
toolCalls?: readonly ToolCallInfo[];
}>;
Immutable message object returned by useChat and useConversation. Extends the base ChatMessage with tracking metadata.
ToolCallInfo
type ToolCallInfo = Readonly<{
toolCallId: string;
name: string;
arguments: Record<string, unknown>;
result?: string;
status: "pending" | "executing" | "complete" | "error";
}>;
Attached to a TrackedChatMessage when the assistant invokes tools.
SubscriptionEvent
type SubscriptionEvent =
| "response"
| "stream"
| "error"
| "tool_call"
| "tool_result"
| "tool_priming_start"
| "tool_priming_match"
| "tool_priming_end";
ChatSubscribe
type ChatSubscribe = {
(
event: "response",
messageId: MessageId,
handler: (msg: TrackedChatMessage) => void,
): () => void;
(event: "response", handler: (msg: TrackedChatMessage) => void): () => void;
(
event: "stream",
messageId: MessageId,
handler: (delta: string, accumulated: string) => void,
): () => void;
(
event: "error",
handler: (error: ArlopassSDKError, messageId: MessageId | null) => void,
): () => void;
(
event: "error",
messageId: MessageId,
handler: (error: ArlopassSDKError) => void,
): () => void;
(
event: "tool_call",
handler: (
toolCallId: string,
name: string,
args: Record<string, unknown>,
messageId: MessageId,
) => void,
): () => void;
(
event: "tool_call",
messageId: MessageId,
handler: (
toolCallId: string,
name: string,
args: Record<string, unknown>,
) => void,
): () => void;
(
event: "tool_result",
handler: (
toolCallId: string,
name: string,
result: string,
messageId: MessageId,
) => void,
): () => void;
(
event: "tool_result",
messageId: MessageId,
handler: (toolCallId: string, name: string, result: string) => void,
): () => void;
(event: "tool_priming_start", handler: (message: string) => void): () => void;
(
event: "tool_priming_match",
handler: (tools: readonly string[]) => void,
): () => void;
(event: "tool_priming_end", handler: () => void): () => void;
};
Overloaded subscribe function returned by useConversation. Supports targeted subscriptions by message ID.
ChatSubscribeNoTools
type ChatSubscribeNoTools = {
(
event: "response",
messageId: MessageId,
handler: (msg: TrackedChatMessage) => void,
): () => void;
(event: "response", handler: (msg: TrackedChatMessage) => void): () => void;
(
event: "stream",
messageId: MessageId,
handler: (delta: string, accumulated: string) => void,
): () => void;
(
event: "error",
handler: (error: ArlopassSDKError, messageId: MessageId | null) => void,
): () => void;
(
event: "error",
messageId: MessageId,
handler: (error: ArlopassSDKError) => void,
): () => void;
};
Restricted subscribe type returned by useChat (no tool events).
ArlopassProviderProps
type ArlopassProviderProps = Readonly<{
appId?: string;
appSuffix?: string;
appName?: string;
appDescription?: string;
appIcon?: string;
defaultProvider?: string;
defaultModel?: string;
autoConnect?: boolean;
onError?: (error: ArlopassSDKError) => void;
children: React.ReactNode;
}>;
ClientSnapshot
type ClientSnapshot = Readonly<{
state: ClientState;
sessionId: string | null;
selectedProvider: Readonly<{ providerId: string; modelId: string }> | null;
providers: readonly ProviderDescriptor[];
error: ArlopassSDKError | null;
}>;
Internal store snapshot exposed by the provider context.
Re-exported from @arlopass/web-sdk
These types are re-exported so you only need the @arlopass/react package.
// Re-exported from @arlopass/web-sdk — no need to install web-sdk separately
import type {
ChatMessage,
ChatRole,
ClientState,
ProviderDescriptor,
SelectProviderInput,
ChatOperationOptions,
ChatStreamEvent,
ArlopassSDKError,
ArlopassStateError,
ArlopassTransport,
ToolDefinition,
ConversationStreamEvent,
ToolCall,
ToolResult,
ToolCallEvent,
ToolResultEvent,
ToolPrimingStartEvent,
ToolPrimingMatchEvent,
ToolPrimingEndEvent,
} from "@arlopass/react";
ChatMessage
type ChatMessage = Readonly<{ role: ChatRole; content: string }>;
ChatRole
type ChatRole = "system" | "user" | "assistant";
ClientState
type ClientState =
| "disconnected"
| "connecting"
| "connected"
| "degraded"
| "reconnecting"
| "failed";
ProviderDescriptor
type ProviderDescriptor = Readonly<{
providerId: string;
providerName: string;
models: readonly string[];
}>;
SelectProviderInput
type SelectProviderInput = Readonly<{ providerId: string; modelId: string }>;
ToolDefinition
type ToolDefinition = Readonly<{
name: string;
description: string;
parameters?: ToolParameterSchema;
handler?: (args: Record<string, unknown>) => Promise<string> | string;
}>;