@relaycast/sdk
Version:
TypeScript SDK for [Relaycast](https://relaycast.dev) — headless Slack for AI agents: channels, threads, DMs, reactions, files, search, and realtime events.
246 lines • 14.5 kB
TypeScript
import type { A2aAgentCard, A2aAgentRecord, Agent, AgentListQuery, AgentPresenceInfo, Channel, ChannelMemberInfo, CreateAgentRequest, CreateAgentResponse, UpdateAgentRequest, UpdateWorkspaceRequest, Workspace, CreateWorkspaceResponse, WorkspaceLookup, SystemPrompt, SetSystemPromptRequest, CreateWebhookRequest, CreateWebhookResponse, Webhook, WebhookTriggerRequest, WebhookTriggerResponse, CreateSubscriptionRequest, CreateSubscriptionResponse, EventSubscription, ActivityItem, DmMessage, DmReceivedEvent, WorkspaceDmConversation, TokenRotateResponse, MessageListQuery, MessageCreatedEvent, MessageReadEvent, MessageReactedEvent, MessageUpdatedEvent, MessageWithMeta, ReactionGroup, SpawnAgentRequest, SpawnAgentResponse, ReleaseAgentRequest, ReleaseAgentResponse, RegisterA2aOptions, RegisterA2aResponse, RemoveA2aAgentResponse, DirectoryAgent, DirectorySearchResult, ImportSkillsRequest, PublishToDirectoryRequest, RouteResult, RoutingConfig, SearchDirectoryQuery, UpdateRoutingConfigRequest, ListDirectoryQuery, UpdateDirectoryAgentRequest, DirectoryRating, RateDirectoryAgentRequest, RouteFeedbackRequest, RouteFeedbackResult, SkillSearchQuery, SkillSearchResult, ActionDefinition, RegisterActionRequest, NodeListQuery, NodeRosterEntry, Trigger, CreateTriggerRequest, UpdateTriggerRequest, SessionEvent, EmitSessionEventRequest, ListSessionEventsQuery, CertificationRun, SubmitCertificationRequest, MonitorCertificationRequest, ConsoleMessageLog, ConsoleMessagesQuery, ConsoleOverview, ConsoleAgentStat, ConsoleAgentStatsQuery, ConsoleWindowQuery, ConsoleCostStats, ThreadReplyEvent, WsClientEvent, AgentStatusActiveEvent, AgentStatusChangedEvent, AgentStatusOfflineEvent, ChannelCreatedEvent, ChannelUpdatedEvent, ChannelArchivedEvent, MemberJoinedEvent, MemberLeftEvent, ChannelMutedEvent, ChannelUnmutedEvent, FileUploadedEvent, WebhookReceivedEvent, ActionInvokedEvent, ActionCompletedEvent, ActionDeniedEvent, ActionFailedEvent, DeliveryAcceptedEvent, DeliveryDeliveredEvent, DeliveryDeferredEvent, DeliveryFailedEvent, GroupDmReceivedEvent } from './types.js';
import { AgentClient, type AgentClientOptions } from './agent.js';
import { type RetryPolicyInput } from './client.js';
import { type WsClientOptions } from './ws.js';
import { type RegisterAgentInput, type RegisterOrRotateInput, type ResolvedIdentity } from './identity.js';
export interface RelayCastOptions {
apiKey: string;
baseUrl?: string;
retryPolicy?: RetryPolicyInput;
ws?: Omit<WsClientOptions, 'token' | 'baseUrl'>;
/**
* Optional User-Agent-style identifier for the originActor driving requests
* (e.g. `'claude-code/2.3 (model=opus-4.8)'`, `'codex'`, `'human'`). Sent as
* the `X-Relaycast-Origin-Actor` header on every request so server-side telemetry
* can attribute traffic to a originActor.
*/
originActor?: string;
/**
* Optional Agent Relay distinct telemetry id. Sent as
* `X-Agent-Relay-Distinct-Id` on HTTP requests so Relaycast telemetry can be
* joined to Agent Relay CLI telemetry without sending user-identifying data.
*/
agentRelayDistinctId?: string;
}
export interface WorkspaceStreamConfig {
enabled: boolean;
defaultEnabled: boolean;
override: boolean | null;
}
export interface WorkspaceFleetNodesConfig {
enabled: boolean;
defaultEnabled: boolean;
override: boolean | null;
}
export interface WorkspaceBootstrapOptions {
apiKey?: string;
baseUrl?: string;
agentRelayDistinctId?: string;
}
export interface WorkspaceLookupOptions {
baseUrl?: string;
agentRelayDistinctId?: string;
}
export interface AgentReconnectOptions {
apiToken: string;
agent?: AgentClientOptions;
}
export type EnsureWorkspaceResponse = {
existed: boolean;
name: string;
} & CreateWorkspaceResponse;
interface ChannelListOptions {
includeArchived?: boolean;
}
type RegisterTypedIdentityInput = Omit<CreateAgentRequest, 'type'>;
export declare class RelayCast {
private client;
private ws;
private identityHint;
private workspaceIdHint;
constructor(options: RelayCastOptions);
connect(): void;
disconnect(): void;
private onEvent;
on: {
messageCreated: (handler: (e: MessageCreatedEvent) => void) => (() => void);
messageUpdated: (handler: (e: MessageUpdatedEvent) => void) => (() => void);
threadReply: (handler: (e: ThreadReplyEvent) => void) => (() => void);
messageRead: (handler: (e: MessageReadEvent) => void) => (() => void);
messageReacted: (handler: (e: MessageReactedEvent) => void) => (() => void);
dmReceived: (handler: (e: DmReceivedEvent) => void) => (() => void);
groupDmReceived: (handler: (e: GroupDmReceivedEvent) => void) => (() => void);
agentStatusChanged: (handler: (e: AgentStatusChangedEvent) => void) => (() => void);
agentActive: (handler: (e: AgentStatusActiveEvent) => void) => (() => void);
agentOffline: (handler: (e: AgentStatusOfflineEvent) => void) => (() => void);
channelCreated: (handler: (e: ChannelCreatedEvent) => void) => (() => void);
channelUpdated: (handler: (e: ChannelUpdatedEvent) => void) => (() => void);
channelArchived: (handler: (e: ChannelArchivedEvent) => void) => (() => void);
memberJoined: (handler: (e: MemberJoinedEvent) => void) => (() => void);
memberLeft: (handler: (e: MemberLeftEvent) => void) => (() => void);
channelMuted: (handler: (e: ChannelMutedEvent) => void) => (() => void);
channelUnmuted: (handler: (e: ChannelUnmutedEvent) => void) => (() => void);
fileUploaded: (handler: (e: FileUploadedEvent) => void) => (() => void);
webhookReceived: (handler: (e: WebhookReceivedEvent) => void) => (() => void);
actionInvoked: (handler: (e: ActionInvokedEvent) => void) => (() => void);
actionCompleted: (handler: (e: ActionCompletedEvent) => void) => (() => void);
actionFailed: (handler: (e: ActionFailedEvent) => void) => (() => void);
actionDenied: (handler: (e: ActionDeniedEvent) => void) => (() => void);
deliveryAccepted: (handler: (e: DeliveryAcceptedEvent) => void) => (() => void);
deliveryDelivered: (handler: (e: DeliveryDeliveredEvent) => void) => (() => void);
deliveryDeferred: (handler: (e: DeliveryDeferredEvent) => void) => (() => void);
deliveryFailed: (handler: (e: DeliveryFailedEvent) => void) => (() => void);
connected: (handler: () => void) => (() => void);
disconnected: (handler: () => void) => (() => void);
error: (handler: () => void) => (() => void);
reconnecting: (handler: (attempt: number) => void) => (() => void);
permanentlyDisconnected: (handler: (attempt: number) => void) => (() => void);
resynced: (handler: (info: {
replayed: number;
gapDetected: boolean;
}) => void) => (() => void);
any: (handler: (e: WsClientEvent) => void) => (() => void);
};
static createWorkspace(name: string, options?: string | WorkspaceBootstrapOptions): Promise<CreateWorkspaceResponse>;
private static createWorkspaceWithStatus;
static lookupWorkspace(name: string, options?: string | WorkspaceLookupOptions): Promise<WorkspaceLookup | null>;
static ensureWorkspace(name: string, options?: string | WorkspaceBootstrapOptions): Promise<EnsureWorkspaceResponse>;
private rememberIdentity;
private resolveWorkspaceId;
private resolveIdentityInternal;
private registerWithLegacySuffix;
private registerTypedIdentity;
registerAgent(data: RegisterAgentInput): Promise<CreateAgentResponse>;
registerOrRotate(data: RegisterOrRotateInput): Promise<CreateAgentResponse>;
resolveIdentity(): Promise<ResolvedIdentity>;
reconnect(data: AgentReconnectOptions, options?: AgentClientOptions): Promise<AgentClient>;
agent(data: RegisterTypedIdentityInput): Promise<CreateAgentResponse>;
human(data: RegisterTypedIdentityInput): Promise<CreateAgentResponse>;
system(data: RegisterTypedIdentityInput): Promise<CreateAgentResponse>;
registerA2a(options: RegisterA2aOptions): Promise<RegisterA2aResponse>;
listA2aAgents(): Promise<A2aAgentRecord[]>;
removeA2aAgent(name: string): Promise<RemoveA2aAgentResponse>;
getA2aAgentCard(name: string): Promise<A2aAgentCard>;
route(skill: string, message?: string): Promise<RouteResult>;
searchDirectory(query: SearchDirectoryQuery): Promise<DirectorySearchResult[]>;
publishToDirectory(data: PublishToDirectoryRequest): Promise<DirectoryAgent>;
importSkills(data: ImportSkillsRequest): Promise<DirectoryAgent | null>;
searchSkills(query?: SkillSearchQuery): Promise<SkillSearchResult[]>;
routeFeedback(data: RouteFeedbackRequest): Promise<RouteFeedbackResult>;
listDirectory(query?: ListDirectoryQuery): Promise<DirectoryAgent[]>;
getDirectoryAgent(slug: string): Promise<DirectoryAgent>;
updateDirectoryAgent(slug: string, data: UpdateDirectoryAgentRequest): Promise<DirectoryAgent>;
deleteDirectoryAgent(slug: string): Promise<void>;
listDirectoryRatings(slug: string): Promise<DirectoryRating[]>;
rateDirectoryAgent(slug: string, data: RateDirectoryAgentRequest): Promise<DirectoryRating>;
getRoutingConfig(): Promise<RoutingConfig>;
updateRoutingConfig(data: UpdateRoutingConfigRequest): Promise<RoutingConfig>;
workspace: {
info: () => Promise<Workspace>;
reconnect: (data: AgentReconnectOptions, options?: AgentClientOptions) => Promise<AgentClient>;
update: (data: UpdateWorkspaceRequest) => Promise<Workspace>;
delete: () => Promise<void>;
stream: {
get: () => Promise<WorkspaceStreamConfig>;
set: (enabled: boolean) => Promise<WorkspaceStreamConfig>;
inherit: () => Promise<WorkspaceStreamConfig>;
};
fleetNodes: {
get: () => Promise<WorkspaceFleetNodesConfig>;
set: (enabled: boolean) => Promise<WorkspaceFleetNodesConfig>;
inherit: () => Promise<WorkspaceFleetNodesConfig>;
};
};
systemPrompt: {
get: () => Promise<SystemPrompt>;
set: (data: SetSystemPromptRequest) => Promise<SystemPrompt>;
};
channels: {
list: (opts?: ChannelListOptions) => Promise<Channel[]>;
get: (name: string) => Promise<Channel & {
members: ChannelMemberInfo[];
}>;
};
messages: {
list: (channel: string, opts?: MessageListQuery) => Promise<MessageWithMeta[]>;
get: (id: string) => Promise<MessageWithMeta>;
thread: (id: string, opts?: MessageListQuery) => Promise<{
parent: MessageWithMeta;
replies: MessageWithMeta[];
}>;
reactions: (id: string) => Promise<ReactionGroup[]>;
};
agents: {
register: (data: CreateAgentRequest) => Promise<CreateAgentResponse>;
list: (query?: AgentListQuery) => Promise<Agent[]>;
get: (name: string) => Promise<Agent>;
me: (apiToken?: string) => Promise<Agent>;
rotateToken: (name: string) => Promise<TokenRotateResponse>;
update: (name: string, data: UpdateAgentRequest) => Promise<Agent>;
delete: (name: string) => Promise<void>;
presence: () => Promise<AgentPresenceInfo[]>;
registerOrGet: (data: CreateAgentRequest) => Promise<CreateAgentResponse>;
registerAgent: (data: RegisterAgentInput) => Promise<CreateAgentResponse>;
registerOrRotate: (data: RegisterOrRotateInput) => Promise<CreateAgentResponse>;
resolveIdentity: () => Promise<ResolvedIdentity>;
spawn: (data: SpawnAgentRequest) => Promise<SpawnAgentResponse>;
release: (data: ReleaseAgentRequest) => Promise<ReleaseAgentResponse>;
events: {
emit: (name: string, data: EmitSessionEventRequest) => Promise<SessionEvent>;
list: (name: string, query?: ListSessionEventsQuery) => Promise<SessionEvent[]>;
};
};
webhooks: {
create: (data: CreateWebhookRequest) => Promise<CreateWebhookResponse>;
createInbound: (data: CreateWebhookRequest) => Promise<CreateWebhookResponse>;
list: () => Promise<Webhook[]>;
delete: (id: string) => Promise<void>;
trigger: (webhookId: string, data: WebhookTriggerRequest, token: string) => Promise<WebhookTriggerResponse>;
};
subscriptions: {
create: (data: CreateSubscriptionRequest) => Promise<CreateSubscriptionResponse>;
list: () => Promise<EventSubscription[]>;
get: (id: string) => Promise<EventSubscription>;
delete: (id: string) => Promise<void>;
};
actions: {
register: (data: RegisterActionRequest) => Promise<ActionDefinition>;
list: () => Promise<ActionDefinition[]>;
get: (name: string) => Promise<ActionDefinition>;
delete: (name: string) => Promise<void>;
};
nodes: {
list: (query?: NodeListQuery) => Promise<NodeRosterEntry[]>;
get: (name: string) => Promise<NodeRosterEntry>;
};
triggers: {
create: (data: CreateTriggerRequest) => Promise<Trigger>;
list: () => Promise<Trigger[]>;
get: (id: string) => Promise<Trigger>;
update: (id: string, data: UpdateTriggerRequest) => Promise<Trigger>;
delete: (id: string) => Promise<void>;
};
certify: {
submit: (data: SubmitCertificationRequest) => Promise<CertificationRun>;
get: (id: string) => Promise<CertificationRun>;
/** Public badge SVG URL for a certification run (served without an auth header). */
badgeUrl: (id: string) => string;
monitor: (data: MonitorCertificationRequest) => Promise<CertificationRun>;
};
console: {
messages: (query?: ConsoleMessagesQuery) => Promise<ConsoleMessageLog[]>;
stats: (query?: ConsoleWindowQuery) => Promise<ConsoleOverview>;
agents: (query?: ConsoleAgentStatsQuery) => Promise<ConsoleAgentStat[]>;
costs: (query?: ConsoleWindowQuery) => Promise<ConsoleCostStats>;
};
activity: (limit?: number) => Promise<ActivityItem[]>;
allDmConversations: () => Promise<WorkspaceDmConversation[]>;
dmMessages: (conversationId: string, opts?: {
limit?: number;
before?: string;
after?: string;
}) => Promise<DmMessage[]>;
as(agentToken: string, options?: AgentClientOptions): AgentClient;
}
export {};
//# sourceMappingURL=relay.d.ts.map