Skip to main content
All TypeScript types exported from modifywithai.

Import

import type {
    ActionDefinition,
    ActionOption,
    ToolAction,
    UseAssistantOptions,
    UseAssistantReturn,
    DynamicButton,
    DynamicButtonGroup,
    DynamicUITree,
    ChatStatus,
} from "modifywithai"

Action Types

ActionDefinition

interface ActionDefinition {
    name: string
    description: string
    options?: Record<string, ActionOption>
    approvalRequired?: boolean
}

ActionOption

interface ActionOption {
    type: "string" | "number" | "boolean"
    description?: string
    required?: boolean
}

ToolAction

interface ToolAction {
    name: string
    options?: Record<string, unknown>
}

Hook Types

UseAssistantOptions

interface UseAssistantOptions {
    availableActions: ActionDefinition[]
    tokenEndpoint?: string
    apiUrl?: string
    endUserId?: string
    getContext?: () => Record<string, unknown>
    onAction?: (action: ToolAction) => void
    onError?: (error: Error) => void
}

UseAssistantReturn

interface UseAssistantReturn {
    // Messages
    messages: Message[]
    sendMessage: (text: string) => void

    // Status
    status: ChatStatus
    error: Error | null
    isReady: boolean
    tokenError: Error | null

    // Input
    input: string
    setInput: (value: string) => void
    handleSubmit: (e: FormEvent) => void

    // Token
    refreshToken: () => Promise<void>

    // Approval
    addToolApprovalResponse: (toolCallId: string, approved: boolean) => void
}

ChatStatus

type ChatStatus = "ready" | "streaming" | "submitted" | "error"

Dynamic UI Types

DynamicButton

interface DynamicButton {
    id: string
    label: string
    icon?: string
    variant?: "default" | "destructive" | "outline" | "secondary" | "ghost"
    actions: ToolAction[]
}

DynamicButtonGroup

interface DynamicButtonGroup {
    id: string
    label?: string
    direction?: "horizontal" | "vertical"
}

DynamicUITree

interface DynamicUITree {
    root: string
    elements: Record<string, DynamicUIElement>
}

DynamicUIElement

interface DynamicUIElement {
    key: string
    type: "DynamicButton" | "DynamicButtonGroup"
    props: Record<string, unknown>
    children?: string[]
    parentKey?: string
}

UseDynamicUIReturn

interface UseDynamicUIReturn {
    tree: DynamicUITree | null
    isLoading: boolean
    addButton: (button: DynamicButton) => void
    removeButton: (id: string) => void
    updateButton: (id: string, updates: Partial<DynamicButton>) => void
    addGroup: (group: DynamicButtonGroup) => void
    removeGroup: (id: string) => void
    clearAll: () => void
}

Message Types

Message

interface Message {
    id: string
    role: "user" | "assistant" | "system"
    parts: MessagePart[]
    createdAt?: Date
}

MessagePart

type MessagePart =
    | { type: "text"; text: string }
    | { type: "tool-invocation"; toolInvocation: ToolInvocation }

ToolInvocation

interface ToolInvocation {
    toolCallId: string
    toolName: string
    args: Record<string, unknown>
    state: "partial-call" | "call" | "result"
    result?: unknown
}

Token Types

TokenRequest

interface TokenRequest {
    endUserId?: string
    availableActions: ActionDefinition[]
    context?: Record<string, unknown>
}

TokenResponse

interface TokenResponse {
    token: string
    expiresAt: string // ISO date string
}

CreateAssistantTokenHandlerOptions

interface CreateAssistantTokenHandlerOptions {
    appId: string
    apiKey?: string
    apiUrl?: string
    getEndUserId?: (request: Request) => Promise<string | null>
}