modifywithai.
Import
Copy
import type {
ActionDefinition,
ActionOption,
ToolAction,
UseAssistantOptions,
UseAssistantReturn,
DynamicButton,
DynamicButtonGroup,
DynamicUITree,
ChatStatus,
} from "modifywithai"
Action Types
ActionDefinition
Copy
interface ActionDefinition {
name: string
description: string
options?: Record<string, ActionOption>
approvalRequired?: boolean
}
ActionOption
Copy
interface ActionOption {
type: "string" | "number" | "boolean"
description?: string
required?: boolean
}
ToolAction
Copy
interface ToolAction {
name: string
options?: Record<string, unknown>
}
Hook Types
UseAssistantOptions
Copy
interface UseAssistantOptions {
availableActions: ActionDefinition[]
tokenEndpoint?: string
apiUrl?: string
endUserId?: string
getContext?: () => Record<string, unknown>
onAction?: (action: ToolAction) => void
onError?: (error: Error) => void
}
UseAssistantReturn
Copy
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
Copy
type ChatStatus = "ready" | "streaming" | "submitted" | "error"
Dynamic UI Types
DynamicButton
Copy
interface DynamicButton {
id: string
label: string
icon?: string
variant?: "default" | "destructive" | "outline" | "secondary" | "ghost"
actions: ToolAction[]
}
DynamicButtonGroup
Copy
interface DynamicButtonGroup {
id: string
label?: string
direction?: "horizontal" | "vertical"
}
DynamicUITree
Copy
interface DynamicUITree {
root: string
elements: Record<string, DynamicUIElement>
}
DynamicUIElement
Copy
interface DynamicUIElement {
key: string
type: "DynamicButton" | "DynamicButtonGroup"
props: Record<string, unknown>
children?: string[]
parentKey?: string
}
UseDynamicUIReturn
Copy
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
Copy
interface Message {
id: string
role: "user" | "assistant" | "system"
parts: MessagePart[]
createdAt?: Date
}
MessagePart
Copy
type MessagePart =
| { type: "text"; text: string }
| { type: "tool-invocation"; toolInvocation: ToolInvocation }
ToolInvocation
Copy
interface ToolInvocation {
toolCallId: string
toolName: string
args: Record<string, unknown>
state: "partial-call" | "call" | "result"
result?: unknown
}
Token Types
TokenRequest
Copy
interface TokenRequest {
endUserId?: string
availableActions: ActionDefinition[]
context?: Record<string, unknown>
}
TokenResponse
Copy
interface TokenResponse {
token: string
expiresAt: string // ISO date string
}
CreateAssistantTokenHandlerOptions
Copy
interface CreateAssistantTokenHandlerOptions {
appId: string
apiKey?: string
apiUrl?: string
getEndUserId?: (request: Request) => Promise<string | null>
}