@xpert-ai/chatkit-types 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1095,6 +1095,17 @@ export declare type Row = {
1095
1095
  id?: string;
1096
1096
  } & BoxBaseProps;
1097
1097
 
1098
+ export declare type RuntimeCapabilitiesSelection = {
1099
+ mode: 'allowlist';
1100
+ skills: {
1101
+ workspaceId?: string;
1102
+ ids: string[];
1103
+ };
1104
+ plugins: {
1105
+ nodeKeys: string[];
1106
+ };
1107
+ };
1108
+
1098
1109
  export declare type Select = {
1099
1110
  type: 'Select';
1100
1111
  key?: string;
@@ -1127,6 +1138,7 @@ export declare type SendUserMessageParams = {
1127
1138
  toolChoice?: ToolChoice;
1128
1139
  model?: string;
1129
1140
  planMode?: boolean;
1141
+ runtimeCapabilities?: RuntimeCapabilitiesSelection;
1130
1142
  trigger?: WorkflowTriggerParams;
1131
1143
  followUpMode?: 'default' | FollowUpBehavior;
1132
1144
  };
@@ -1221,6 +1233,7 @@ export declare type TChatRequestHuman = {
1221
1233
  references?: ChatKitReference[];
1222
1234
  referenceComposition?: ChatKitReferenceCompositionMode;
1223
1235
  planMode?: boolean;
1236
+ runtimeCapabilities?: RuntimeCapabilitiesSelection;
1224
1237
  [key: string]: unknown;
1225
1238
  };
1226
1239
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/interrupt.ts","../src/message.ts"],"sourcesContent":["import { type ToolCall } from '@langchain/core/messages/tool';\n\nexport const REQUEST_USER_INPUT_TOOL_NAME = 'request_user_input';\nexport type RequestUserInputToolName = typeof REQUEST_USER_INPUT_TOOL_NAME;\nexport const REQUEST_USER_INPUT_RESULT_TYPE = 'request_user_input_result';\nexport type RequestUserInputResultType = typeof REQUEST_USER_INPUT_RESULT_TYPE;\nexport const REQUEST_USER_INPUT_RESULT_PURPOSE_PLAN_CLARIFICATION =\n 'plan_clarification';\nexport const REQUEST_USER_INPUT_RESULT_PURPOSE_IMPLEMENTATION_CONFIRMATION =\n 'implementation_confirmation';\nexport type RequestUserInputResultPurpose =\n | typeof REQUEST_USER_INPUT_RESULT_PURPOSE_PLAN_CLARIFICATION\n | typeof REQUEST_USER_INPUT_RESULT_PURPOSE_IMPLEMENTATION_CONFIRMATION;\n\nexport interface RequestUserInputOption {\n label: string;\n description: string;\n}\n\nexport interface RequestUserInputQuestion {\n id: string;\n header: string;\n question: string;\n options: RequestUserInputOption[];\n}\n\nexport interface RequestUserInputParams {\n questions: RequestUserInputQuestion[];\n}\n\nexport type RequestUserInputToolArgs = RequestUserInputParams;\n\nexport type RequestUserInputAnswerType = 'option' | 'other';\n\nexport interface RequestUserInputAnswer {\n id: string;\n question: string;\n value: string;\n type: RequestUserInputAnswerType;\n label?: string;\n description?: string;\n}\n\nexport interface RequestUserInputResult {\n type: RequestUserInputResultType;\n purpose: RequestUserInputResultPurpose;\n answers: RequestUserInputAnswer[];\n}\n\nexport type RequestUserInputToolCall = ToolCall & {\n name: RequestUserInputToolName;\n args: RequestUserInputToolArgs;\n id: string;\n type?: 'tool_call';\n};\n\nexport interface ClientToolRequest {\n clientToolCalls: ToolCall[];\n}\n\nexport interface ToolCallRequest {\n toolCalls: ToolCall[];\n}\n\nexport type InterruptRequest = ToolCallRequest | ClientToolRequest;\n\nexport interface LangGraphInterrupt<TValue = unknown> {\n id: string;\n value: TValue;\n when?: string;\n resumable?: boolean;\n ns?: string[];\n}\n\nexport interface LangGraphInterruptTask<TValue = unknown> {\n id: string;\n name: string;\n path: Array<string | number>;\n interrupts: Array<LangGraphInterrupt<TValue>>;\n}\n\nexport interface LangGraphInterruptPayload<TValue = unknown> {\n tasks: Array<LangGraphInterruptTask<TValue>>;\n}\n\nexport type ClientToolInterrupt<\n TRequest extends ClientToolRequest = ClientToolRequest,\n> = LangGraphInterrupt<TRequest>;\n\nexport type ClientToolInterruptTask<\n TRequest extends ClientToolRequest = ClientToolRequest,\n> = LangGraphInterruptTask<TRequest>;\n\nexport type ClientToolInterruptPayload<\n TRequest extends ClientToolRequest = ClientToolRequest,\n> = LangGraphInterruptPayload<TRequest>;\n\nexport type ToolCallInterrupt<\n TRequest extends ToolCallRequest = ToolCallRequest,\n> = LangGraphInterrupt<TRequest>;\n\nexport type ToolCallInterruptTask<\n TRequest extends ToolCallRequest = ToolCallRequest,\n> = LangGraphInterruptTask<TRequest>;\n\nexport type ToolCallInterruptPayload<\n TRequest extends ToolCallRequest = ToolCallRequest,\n> = LangGraphInterruptPayload<TRequest>;\n\n/**\n * When an interrupt occurs during task execution, the system generates an InterruptPayload.\n *\n * Ordinary tool-call interrupts use `toolCalls`; ChatKit client-tool middleware\n * uses `clientToolCalls` so the UI can route those calls to the client.\n```json\n{\n \"type\": \"event\",\n \"event\": \"on_interrupt\",\n \"data\": {\n \"tasks\": [\n {\n \"id\": \"9c4d2ac5-8808-5b6f-855c-4d48aa3d77a7\",\n \"name\": \"Middleware_wPzR2bIXqE_after_model\",\n \"path\": [\"__pregel_pull\", \"Middleware_wPzR2bIXqE_after_model\"],\n \"interrupts\": [\n {\n \"id\": \"b42f7887d65e57ed11cf08b8927763db\",\n \"value\": {\n \"toolCalls\": [\n {\n \"name\": \"getUserStation\",\n \"args\": {\n \"input\": \"Query the site selected by the user\"\n },\n \"id\": \"call_00_swcaUjIaACXOHHaZyNmQB3Vm\",\n \"type\": \"tool_call\"\n }\n ]\n }\n }\n ]\n }\n ]\n }\n}\n```\n */\nexport interface InterruptPayload extends LangGraphInterruptPayload<InterruptRequest> {}\n\nexport interface ClientToolMessageInput {\n content: unknown;\n name?: string;\n tool_call_id?: string;\n status?: 'success' | 'error';\n artifact?: unknown;\n}\n\nexport interface ClientToolResponse {\n toolMessages: ClientToolMessageInput[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function isClientToolRequest(\n value: unknown,\n): value is ClientToolRequest {\n return isRecord(value) && Array.isArray(value.clientToolCalls);\n}\n\nexport function isToolCallRequest(value: unknown): value is ToolCallRequest {\n return isRecord(value) && Array.isArray(value.toolCalls);\n}\n\nexport function isInterruptRequest(value: unknown): value is InterruptRequest {\n return isToolCallRequest(value) || isClientToolRequest(value);\n}\n\nexport function isLangGraphInterrupt(\n value: unknown,\n): value is LangGraphInterrupt {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n Object.prototype.hasOwnProperty.call(value, 'value')\n );\n}\n\nexport function isLangGraphInterruptTask(\n value: unknown,\n): value is LangGraphInterruptTask {\n if (\n !isRecord(value) ||\n typeof value.id !== 'string' ||\n typeof value.name !== 'string' ||\n !Array.isArray(value.path) ||\n !Array.isArray(value.interrupts)\n ) {\n return false;\n }\n\n return (\n value.path.every(\n (item) => typeof item === 'string' || typeof item === 'number',\n ) && value.interrupts.every(isLangGraphInterrupt)\n );\n}\n\nexport function isLangGraphInterruptPayload(\n value: unknown,\n): value is LangGraphInterruptPayload {\n return (\n isRecord(value) &&\n Array.isArray(value.tasks) &&\n value.tasks.every(isLangGraphInterruptTask)\n );\n}\n\nexport function isClientToolInterrupt(\n value: unknown,\n): value is ClientToolInterrupt {\n return isLangGraphInterrupt(value) && isClientToolRequest(value.value);\n}\n\nexport function isClientToolInterruptTask(\n value: unknown,\n): value is ClientToolInterruptTask {\n return (\n isLangGraphInterruptTask(value) &&\n value.interrupts.every(isClientToolInterrupt)\n );\n}\n\nexport function isClientToolInterruptPayload(\n value: unknown,\n): value is ClientToolInterruptPayload {\n return (\n isLangGraphInterruptPayload(value) &&\n value.tasks.every(isClientToolInterruptTask)\n );\n}\n\nexport function isToolCallInterrupt(\n value: unknown,\n): value is ToolCallInterrupt {\n return isLangGraphInterrupt(value) && isToolCallRequest(value.value);\n}\n\nexport function isToolCallInterruptTask(\n value: unknown,\n): value is ToolCallInterruptTask {\n return (\n isLangGraphInterruptTask(value) &&\n value.interrupts.every(isToolCallInterrupt)\n );\n}\n\nexport function isToolCallInterruptPayload(\n value: unknown,\n): value is ToolCallInterruptPayload {\n return (\n isLangGraphInterruptPayload(value) &&\n value.tasks.every(isToolCallInterruptTask)\n );\n}\n","import type { ToolCall } from '@langchain/core/messages/tool';\nimport { Types } from '@a2ui/lit/0.8';\nimport type { FollowUpBehavior } from './options';\n\nexport enum ChatMessageTypeEnum {\n // LOG = 'log',\n MESSAGE = 'message',\n EVENT = 'event',\n}\n\n/**\n * https://js.langchain.com/docs/how_to/streaming/#event-reference\n */\nexport enum ChatMessageEventTypeEnum {\n ON_CONVERSATION_START = 'on_conversation_start',\n ON_CONVERSATION_END = 'on_conversation_end',\n ON_MESSAGE_START = 'on_message_start',\n ON_MESSAGE_END = 'on_message_end',\n ON_TOOL_START = 'on_tool_start',\n ON_TOOL_END = 'on_tool_end',\n ON_TOOL_ERROR = 'on_tool_error',\n /**\n * Step message in tool call\n */\n ON_TOOL_MESSAGE = 'on_tool_message',\n ON_AGENT_START = 'on_agent_start',\n ON_AGENT_END = 'on_agent_end',\n ON_RETRIEVER_START = 'on_retriever_start',\n ON_RETRIEVER_END = 'on_retriever_end',\n ON_RETRIEVER_ERROR = 'on_retriever_error',\n ON_INTERRUPT = 'on_interrupt',\n ON_ERROR = 'on_error',\n ON_CHAT_EVENT = 'on_chat_event',\n\n ON_CLIENT_EFFECT = 'on_client_effect',\n}\n\n/**\n * Encapsulate multi-agent message events\n */\nexport interface ChatEventEnvelope<T = unknown> {\n type: ChatMessageTypeEnum;\n event?: ChatMessageEventTypeEnum;\n tags: string[];\n data: T;\n}\n\n/**\n * Category of step message: determines the display components of computer use\n */\nexport enum ChatMessageStepCategory {\n /**\n * List of items: urls, files, etc.\n */\n List = 'list',\n /**\n * Websearch results\n */\n WebSearch = 'web_search',\n /**\n * Files list\n */\n Files = 'files',\n /**\n * View a file\n */\n File = 'file',\n /**\n * Program Execution\n */\n Program = 'program',\n /**\n * Iframe\n */\n Iframe = 'iframe',\n\n Memory = 'memory',\n\n Tasks = 'tasks',\n\n /**\n * Knowledges (knowledge base retriever results)\n */\n Knowledges = 'knowledges',\n}\n\n/**\n * Step message type, in canvas and ai message.\n */\nexport type TChatMessageStep<T = any> = TMessageComponent<\n TMessageComponentStep<T>\n>;\n\nexport type ImageDetail = 'auto' | 'low' | 'high';\nexport type MessageContentText = {\n type: 'text';\n text: string;\n};\nexport type MessageContentImageUrl = {\n type: 'image_url';\n image_url:\n | string\n | {\n url: string;\n detail?: ImageDetail;\n };\n};\n\n/**\n * Similar to {@link MessageContentText} | {@link MessageContentImageUrl}, which together form {@link MessageContentComplex}\n */\nexport type TMessageContentComponent<T extends object = object> = {\n id: string;\n type: 'component';\n data: TMessageComponent<T>;\n xpertName?: string;\n agentKey?: string;\n};\n\n/**\n * Defines the data type of the sub-message of `component` type in the message `content` {@link MessageContentComplex}\n */\nexport type TMessageComponent<T extends object = object> = T & {\n id?: string;\n category: 'Dashboard' | 'Computer' | 'Tool';\n type?: string;\n created_date?: Date | string;\n};\n\nexport type TMessageComponentWidgetItem = {\n name: string;\n config: Types.Surface;\n values?: Record<string, unknown>;\n};\n\nexport type TMessageComponentWidgetData = {\n type: 'Widget';\n mode?: string;\n widgets: TMessageComponentWidgetItem[];\n executionId?: string;\n};\n\nexport type TMessageComponentWidget =\n TMessageComponent<TMessageComponentWidgetData>;\n\nexport type TMessageContentWidget =\n TMessageContentComponent<TMessageComponentWidgetData>;\n\nexport type TMessageContentText = {\n id?: string;\n xpertName?: string;\n agentKey?: string;\n type: 'text';\n text: string;\n};\nexport type TMessageContentMemory = {\n id?: string;\n agentKey?: string;\n type: 'memory';\n data: any[];\n};\nexport type TMessageContentReasoning = {\n id?: string;\n xpertName?: string;\n agentKey?: string;\n type: 'reasoning';\n text: string;\n};\n/**\n * Enhance {@link MessageContentComplex} in Langchain.js\n */\nexport type TMessageContentComplex = (\n | TMessageContentText\n | TMessageContentReasoning\n | MessageContentImageUrl\n | TMessageContentComponent\n | TMessageContentMemory\n | (Record<string, any> & {\n type?: 'text' | 'image_url' | string;\n })\n | (Record<string, any> & {\n type?: never;\n })\n) & {\n id?: string;\n xpertName?: string;\n agentKey?: string;\n created_date?: Date | string;\n};\n\n/**\n * Enhance {@link MessageContent} in Langchain.js\n *\n * @deprecated use {@link TMessageItems} instead\n */\nexport type TMessageContent = string | TMessageContentComplex[];\n\nexport type TMessageComponentIframe = {\n type: 'iframe';\n title: string;\n url?: string;\n data?: {\n url?: string;\n };\n};\n\nexport type TMessageComponentStep<T = unknown> = {\n type: ChatMessageStepCategory;\n toolset: string;\n toolset_id: string;\n tool?: string;\n title: string;\n message: string;\n status: 'success' | 'fail' | 'running';\n created_date: Date | string;\n end_date: Date | string;\n error?: string;\n data?: T;\n input?: any;\n output?: unknown;\n artifact?: any;\n};\n\n/**\n * Data type for chat event message\n */\nexport type TChatEventMessage = {\n type?: string;\n title?: string;\n message?: string;\n status?: 'success' | 'fail' | 'running';\n created_date?: Date | string;\n end_date?: Date | string;\n error?: string;\n};\n\nexport interface ChatkitMessage {\n status?: string;\n content: TMessageItems | string;\n reasoning?: TMessageContentReasoning[];\n type: 'user' | 'assistant' | 'system' | 'tool' | 'event';\n id: string;\n followUpMode?: FollowUpBehavior;\n followUpStatus?: 'pending' | 'consumed' | 'canceled';\n targetExecutionId?: string | null;\n visibleAt?: string | Date | null;\n}\n\nexport type TMessageItems = TMessageContentComplex[];\n\nexport type ChatKitReferenceBase = {\n id?: string;\n label?: string;\n text: string;\n};\n\nexport type ChatKitCodeReference = ChatKitReferenceBase & {\n type: 'code';\n path: string;\n startLine: number;\n endLine: number;\n language?: string;\n taskId?: string;\n};\n\nexport type ChatKitQuoteReference = ChatKitReferenceBase & {\n type: 'quote';\n messageId?: string;\n source?: string;\n};\n\nexport type ChatKitImageReference = ChatKitReferenceBase & {\n type: 'image';\n fileId?: string;\n url?: string;\n mimeType?: string;\n name?: string;\n size?: number;\n width?: number;\n height?: number;\n};\n\nexport type ChatKitReference =\n | ChatKitCodeReference\n | ChatKitQuoteReference\n | ChatKitImageReference;\n\nexport type ChatKitReferenceCompositionMode = 'compose' | 'preserve';\n\nexport const STATE_VARIABLE_HUMAN = 'human';\n\n/**\n * Human input message, include parameters and attachments\n */\nexport type TChatRequestHuman = {\n input?: string;\n files?: Partial<File>[];\n references?: ChatKitReference[];\n referenceComposition?: ChatKitReferenceCompositionMode;\n planMode?: boolean;\n [key: string]: unknown;\n};\n\n/**\n * Command to resume with streaming after human decision\n */\nexport type TInterruptCommand = {\n resume?: any;\n update?: any;\n toolCalls?: ToolCall[];\n agentKey?: string;\n};\n\nexport type TChatRequest = {\n /**\n * The human input, include parameters\n */\n input: TChatRequestHuman;\n /**\n * Custom graph state\n */\n state?: { [STATE_VARIABLE_HUMAN]: TChatRequestHuman } & Record<string, any>;\n agentKey?: string;\n projectId?: string;\n conversationId?: string;\n environmentId?: string;\n id?: string;\n executionId?: string;\n confirm?: boolean;\n command?: TInterruptCommand;\n retry?: boolean;\n followUpMode?: FollowUpBehavior;\n /**\n * PRO: Sandbox Environment Id\n * PRO: @description Sandbox environment ID to force using the specified container.\n */\n sandboxEnvironmentId?: string;\n};\n\n/**\n * Data type for client effect message\n */\nexport type TClientEeffectMessage = {\n name: string;\n args: Record<string, any>;\n tool_call_id?: string;\n agentKey?: string;\n created_date?: Date | string;\n};\n\n// Thread context usage\nexport type TThreadContextUsageMetrics = {\n contextTokens: number;\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n embedTokens?: number;\n totalPrice?: number;\n currency?: string | null;\n};\n\nexport type TThreadContextUsageEvent = {\n type: 'thread_context_usage';\n threadId: string;\n runId: string | null;\n agentKey: string;\n updatedAt: string;\n usage: TThreadContextUsageMetrics;\n};\n\nexport const CHAT_EVENT_TYPE_FOLLOW_UP_CONSUMED = 'follow_up_consumed' as const;\n\nexport type TFollowUpConsumedEvent = TChatEventMessage & {\n type: typeof CHAT_EVENT_TYPE_FOLLOW_UP_CONSUMED;\n mode: 'queue' | 'steer';\n messageIds: string[];\n clientMessageIds?: string[];\n executionId?: string | null;\n visibleAt?: string | null;\n};\n"],"names":["ChatMessageTypeEnum","ChatMessageEventTypeEnum","ChatMessageStepCategory"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/interrupt.ts","../src/message.ts"],"sourcesContent":["import { type ToolCall } from '@langchain/core/messages/tool';\n\nexport const REQUEST_USER_INPUT_TOOL_NAME = 'request_user_input';\nexport type RequestUserInputToolName = typeof REQUEST_USER_INPUT_TOOL_NAME;\nexport const REQUEST_USER_INPUT_RESULT_TYPE = 'request_user_input_result';\nexport type RequestUserInputResultType = typeof REQUEST_USER_INPUT_RESULT_TYPE;\nexport const REQUEST_USER_INPUT_RESULT_PURPOSE_PLAN_CLARIFICATION =\n 'plan_clarification';\nexport const REQUEST_USER_INPUT_RESULT_PURPOSE_IMPLEMENTATION_CONFIRMATION =\n 'implementation_confirmation';\nexport type RequestUserInputResultPurpose =\n | typeof REQUEST_USER_INPUT_RESULT_PURPOSE_PLAN_CLARIFICATION\n | typeof REQUEST_USER_INPUT_RESULT_PURPOSE_IMPLEMENTATION_CONFIRMATION;\n\nexport interface RequestUserInputOption {\n label: string;\n description: string;\n}\n\nexport interface RequestUserInputQuestion {\n id: string;\n header: string;\n question: string;\n options: RequestUserInputOption[];\n}\n\nexport interface RequestUserInputParams {\n questions: RequestUserInputQuestion[];\n}\n\nexport type RequestUserInputToolArgs = RequestUserInputParams;\n\nexport type RequestUserInputAnswerType = 'option' | 'other';\n\nexport interface RequestUserInputAnswer {\n id: string;\n question: string;\n value: string;\n type: RequestUserInputAnswerType;\n label?: string;\n description?: string;\n}\n\nexport interface RequestUserInputResult {\n type: RequestUserInputResultType;\n purpose: RequestUserInputResultPurpose;\n answers: RequestUserInputAnswer[];\n}\n\nexport type RequestUserInputToolCall = ToolCall & {\n name: RequestUserInputToolName;\n args: RequestUserInputToolArgs;\n id: string;\n type?: 'tool_call';\n};\n\nexport interface ClientToolRequest {\n clientToolCalls: ToolCall[];\n}\n\nexport interface ToolCallRequest {\n toolCalls: ToolCall[];\n}\n\nexport type InterruptRequest = ToolCallRequest | ClientToolRequest;\n\nexport interface LangGraphInterrupt<TValue = unknown> {\n id: string;\n value: TValue;\n when?: string;\n resumable?: boolean;\n ns?: string[];\n}\n\nexport interface LangGraphInterruptTask<TValue = unknown> {\n id: string;\n name: string;\n path: Array<string | number>;\n interrupts: Array<LangGraphInterrupt<TValue>>;\n}\n\nexport interface LangGraphInterruptPayload<TValue = unknown> {\n tasks: Array<LangGraphInterruptTask<TValue>>;\n}\n\nexport type ClientToolInterrupt<\n TRequest extends ClientToolRequest = ClientToolRequest,\n> = LangGraphInterrupt<TRequest>;\n\nexport type ClientToolInterruptTask<\n TRequest extends ClientToolRequest = ClientToolRequest,\n> = LangGraphInterruptTask<TRequest>;\n\nexport type ClientToolInterruptPayload<\n TRequest extends ClientToolRequest = ClientToolRequest,\n> = LangGraphInterruptPayload<TRequest>;\n\nexport type ToolCallInterrupt<\n TRequest extends ToolCallRequest = ToolCallRequest,\n> = LangGraphInterrupt<TRequest>;\n\nexport type ToolCallInterruptTask<\n TRequest extends ToolCallRequest = ToolCallRequest,\n> = LangGraphInterruptTask<TRequest>;\n\nexport type ToolCallInterruptPayload<\n TRequest extends ToolCallRequest = ToolCallRequest,\n> = LangGraphInterruptPayload<TRequest>;\n\n/**\n * When an interrupt occurs during task execution, the system generates an InterruptPayload.\n *\n * Ordinary tool-call interrupts use `toolCalls`; ChatKit client-tool middleware\n * uses `clientToolCalls` so the UI can route those calls to the client.\n```json\n{\n \"type\": \"event\",\n \"event\": \"on_interrupt\",\n \"data\": {\n \"tasks\": [\n {\n \"id\": \"9c4d2ac5-8808-5b6f-855c-4d48aa3d77a7\",\n \"name\": \"Middleware_wPzR2bIXqE_after_model\",\n \"path\": [\"__pregel_pull\", \"Middleware_wPzR2bIXqE_after_model\"],\n \"interrupts\": [\n {\n \"id\": \"b42f7887d65e57ed11cf08b8927763db\",\n \"value\": {\n \"toolCalls\": [\n {\n \"name\": \"getUserStation\",\n \"args\": {\n \"input\": \"Query the site selected by the user\"\n },\n \"id\": \"call_00_swcaUjIaACXOHHaZyNmQB3Vm\",\n \"type\": \"tool_call\"\n }\n ]\n }\n }\n ]\n }\n ]\n }\n}\n```\n */\nexport interface InterruptPayload extends LangGraphInterruptPayload<InterruptRequest> {}\n\nexport interface ClientToolMessageInput {\n content: unknown;\n name?: string;\n tool_call_id?: string;\n status?: 'success' | 'error';\n artifact?: unknown;\n}\n\nexport interface ClientToolResponse {\n toolMessages: ClientToolMessageInput[];\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function isClientToolRequest(\n value: unknown,\n): value is ClientToolRequest {\n return isRecord(value) && Array.isArray(value.clientToolCalls);\n}\n\nexport function isToolCallRequest(value: unknown): value is ToolCallRequest {\n return isRecord(value) && Array.isArray(value.toolCalls);\n}\n\nexport function isInterruptRequest(value: unknown): value is InterruptRequest {\n return isToolCallRequest(value) || isClientToolRequest(value);\n}\n\nexport function isLangGraphInterrupt(\n value: unknown,\n): value is LangGraphInterrupt {\n return (\n isRecord(value) &&\n typeof value.id === 'string' &&\n Object.prototype.hasOwnProperty.call(value, 'value')\n );\n}\n\nexport function isLangGraphInterruptTask(\n value: unknown,\n): value is LangGraphInterruptTask {\n if (\n !isRecord(value) ||\n typeof value.id !== 'string' ||\n typeof value.name !== 'string' ||\n !Array.isArray(value.path) ||\n !Array.isArray(value.interrupts)\n ) {\n return false;\n }\n\n return (\n value.path.every(\n (item) => typeof item === 'string' || typeof item === 'number',\n ) && value.interrupts.every(isLangGraphInterrupt)\n );\n}\n\nexport function isLangGraphInterruptPayload(\n value: unknown,\n): value is LangGraphInterruptPayload {\n return (\n isRecord(value) &&\n Array.isArray(value.tasks) &&\n value.tasks.every(isLangGraphInterruptTask)\n );\n}\n\nexport function isClientToolInterrupt(\n value: unknown,\n): value is ClientToolInterrupt {\n return isLangGraphInterrupt(value) && isClientToolRequest(value.value);\n}\n\nexport function isClientToolInterruptTask(\n value: unknown,\n): value is ClientToolInterruptTask {\n return (\n isLangGraphInterruptTask(value) &&\n value.interrupts.every(isClientToolInterrupt)\n );\n}\n\nexport function isClientToolInterruptPayload(\n value: unknown,\n): value is ClientToolInterruptPayload {\n return (\n isLangGraphInterruptPayload(value) &&\n value.tasks.every(isClientToolInterruptTask)\n );\n}\n\nexport function isToolCallInterrupt(\n value: unknown,\n): value is ToolCallInterrupt {\n return isLangGraphInterrupt(value) && isToolCallRequest(value.value);\n}\n\nexport function isToolCallInterruptTask(\n value: unknown,\n): value is ToolCallInterruptTask {\n return (\n isLangGraphInterruptTask(value) &&\n value.interrupts.every(isToolCallInterrupt)\n );\n}\n\nexport function isToolCallInterruptPayload(\n value: unknown,\n): value is ToolCallInterruptPayload {\n return (\n isLangGraphInterruptPayload(value) &&\n value.tasks.every(isToolCallInterruptTask)\n );\n}\n","import type { ToolCall } from '@langchain/core/messages/tool';\nimport { Types } from '@a2ui/lit/0.8';\nimport type { FollowUpBehavior } from './options';\n\nexport enum ChatMessageTypeEnum {\n // LOG = 'log',\n MESSAGE = 'message',\n EVENT = 'event',\n}\n\n/**\n * https://js.langchain.com/docs/how_to/streaming/#event-reference\n */\nexport enum ChatMessageEventTypeEnum {\n ON_CONVERSATION_START = 'on_conversation_start',\n ON_CONVERSATION_END = 'on_conversation_end',\n ON_MESSAGE_START = 'on_message_start',\n ON_MESSAGE_END = 'on_message_end',\n ON_TOOL_START = 'on_tool_start',\n ON_TOOL_END = 'on_tool_end',\n ON_TOOL_ERROR = 'on_tool_error',\n /**\n * Step message in tool call\n */\n ON_TOOL_MESSAGE = 'on_tool_message',\n ON_AGENT_START = 'on_agent_start',\n ON_AGENT_END = 'on_agent_end',\n ON_RETRIEVER_START = 'on_retriever_start',\n ON_RETRIEVER_END = 'on_retriever_end',\n ON_RETRIEVER_ERROR = 'on_retriever_error',\n ON_INTERRUPT = 'on_interrupt',\n ON_ERROR = 'on_error',\n ON_CHAT_EVENT = 'on_chat_event',\n\n ON_CLIENT_EFFECT = 'on_client_effect',\n}\n\n/**\n * Encapsulate multi-agent message events\n */\nexport interface ChatEventEnvelope<T = unknown> {\n type: ChatMessageTypeEnum;\n event?: ChatMessageEventTypeEnum;\n tags: string[];\n data: T;\n}\n\n/**\n * Category of step message: determines the display components of computer use\n */\nexport enum ChatMessageStepCategory {\n /**\n * List of items: urls, files, etc.\n */\n List = 'list',\n /**\n * Websearch results\n */\n WebSearch = 'web_search',\n /**\n * Files list\n */\n Files = 'files',\n /**\n * View a file\n */\n File = 'file',\n /**\n * Program Execution\n */\n Program = 'program',\n /**\n * Iframe\n */\n Iframe = 'iframe',\n\n Memory = 'memory',\n\n Tasks = 'tasks',\n\n /**\n * Knowledges (knowledge base retriever results)\n */\n Knowledges = 'knowledges',\n}\n\n/**\n * Step message type, in canvas and ai message.\n */\nexport type TChatMessageStep<T = any> = TMessageComponent<\n TMessageComponentStep<T>\n>;\n\nexport type ImageDetail = 'auto' | 'low' | 'high';\nexport type MessageContentText = {\n type: 'text';\n text: string;\n};\nexport type MessageContentImageUrl = {\n type: 'image_url';\n image_url:\n | string\n | {\n url: string;\n detail?: ImageDetail;\n };\n};\n\n/**\n * Similar to {@link MessageContentText} | {@link MessageContentImageUrl}, which together form {@link MessageContentComplex}\n */\nexport type TMessageContentComponent<T extends object = object> = {\n id: string;\n type: 'component';\n data: TMessageComponent<T>;\n xpertName?: string;\n agentKey?: string;\n};\n\n/**\n * Defines the data type of the sub-message of `component` type in the message `content` {@link MessageContentComplex}\n */\nexport type TMessageComponent<T extends object = object> = T & {\n id?: string;\n category: 'Dashboard' | 'Computer' | 'Tool';\n type?: string;\n created_date?: Date | string;\n};\n\nexport type TMessageComponentWidgetItem = {\n name: string;\n config: Types.Surface;\n values?: Record<string, unknown>;\n};\n\nexport type TMessageComponentWidgetData = {\n type: 'Widget';\n mode?: string;\n widgets: TMessageComponentWidgetItem[];\n executionId?: string;\n};\n\nexport type TMessageComponentWidget =\n TMessageComponent<TMessageComponentWidgetData>;\n\nexport type TMessageContentWidget =\n TMessageContentComponent<TMessageComponentWidgetData>;\n\nexport type TMessageContentText = {\n id?: string;\n xpertName?: string;\n agentKey?: string;\n type: 'text';\n text: string;\n};\nexport type TMessageContentMemory = {\n id?: string;\n agentKey?: string;\n type: 'memory';\n data: any[];\n};\nexport type TMessageContentReasoning = {\n id?: string;\n xpertName?: string;\n agentKey?: string;\n type: 'reasoning';\n text: string;\n};\n/**\n * Enhance {@link MessageContentComplex} in Langchain.js\n */\nexport type TMessageContentComplex = (\n | TMessageContentText\n | TMessageContentReasoning\n | MessageContentImageUrl\n | TMessageContentComponent\n | TMessageContentMemory\n | (Record<string, any> & {\n type?: 'text' | 'image_url' | string;\n })\n | (Record<string, any> & {\n type?: never;\n })\n) & {\n id?: string;\n xpertName?: string;\n agentKey?: string;\n created_date?: Date | string;\n};\n\n/**\n * Enhance {@link MessageContent} in Langchain.js\n *\n * @deprecated use {@link TMessageItems} instead\n */\nexport type TMessageContent = string | TMessageContentComplex[];\n\nexport type TMessageComponentIframe = {\n type: 'iframe';\n title: string;\n url?: string;\n data?: {\n url?: string;\n };\n};\n\nexport type TMessageComponentStep<T = unknown> = {\n type: ChatMessageStepCategory;\n toolset: string;\n toolset_id: string;\n tool?: string;\n title: string;\n message: string;\n status: 'success' | 'fail' | 'running';\n created_date: Date | string;\n end_date: Date | string;\n error?: string;\n data?: T;\n input?: any;\n output?: unknown;\n artifact?: any;\n};\n\n/**\n * Data type for chat event message\n */\nexport type TChatEventMessage = {\n type?: string;\n title?: string;\n message?: string;\n status?: 'success' | 'fail' | 'running';\n created_date?: Date | string;\n end_date?: Date | string;\n error?: string;\n};\n\nexport interface ChatkitMessage {\n status?: string;\n content: TMessageItems | string;\n reasoning?: TMessageContentReasoning[];\n type: 'user' | 'assistant' | 'system' | 'tool' | 'event';\n id: string;\n followUpMode?: FollowUpBehavior;\n followUpStatus?: 'pending' | 'consumed' | 'canceled';\n targetExecutionId?: string | null;\n visibleAt?: string | Date | null;\n}\n\nexport type TMessageItems = TMessageContentComplex[];\n\nexport type ChatKitReferenceBase = {\n id?: string;\n label?: string;\n text: string;\n};\n\nexport type ChatKitCodeReference = ChatKitReferenceBase & {\n type: 'code';\n path: string;\n startLine: number;\n endLine: number;\n language?: string;\n taskId?: string;\n};\n\nexport type ChatKitQuoteReference = ChatKitReferenceBase & {\n type: 'quote';\n messageId?: string;\n source?: string;\n};\n\nexport type ChatKitImageReference = ChatKitReferenceBase & {\n type: 'image';\n fileId?: string;\n url?: string;\n mimeType?: string;\n name?: string;\n size?: number;\n width?: number;\n height?: number;\n};\n\nexport type ChatKitReference =\n | ChatKitCodeReference\n | ChatKitQuoteReference\n | ChatKitImageReference;\n\nexport type ChatKitReferenceCompositionMode = 'compose' | 'preserve';\n\nexport type RuntimeCapabilitiesSelection = {\n mode: 'allowlist';\n skills: {\n workspaceId?: string;\n ids: string[];\n };\n plugins: {\n nodeKeys: string[];\n };\n};\n\nexport const STATE_VARIABLE_HUMAN = 'human';\n\n/**\n * Human input message, include parameters and attachments\n */\nexport type TChatRequestHuman = {\n input?: string;\n files?: Partial<File>[];\n references?: ChatKitReference[];\n referenceComposition?: ChatKitReferenceCompositionMode;\n planMode?: boolean;\n runtimeCapabilities?: RuntimeCapabilitiesSelection;\n [key: string]: unknown;\n};\n\n/**\n * Command to resume with streaming after human decision\n */\nexport type TInterruptCommand = {\n resume?: any;\n update?: any;\n toolCalls?: ToolCall[];\n agentKey?: string;\n};\n\nexport type TChatRequest = {\n /**\n * The human input, include parameters\n */\n input: TChatRequestHuman;\n /**\n * Custom graph state\n */\n state?: { [STATE_VARIABLE_HUMAN]: TChatRequestHuman } & Record<string, any>;\n agentKey?: string;\n projectId?: string;\n conversationId?: string;\n environmentId?: string;\n id?: string;\n executionId?: string;\n confirm?: boolean;\n command?: TInterruptCommand;\n retry?: boolean;\n followUpMode?: FollowUpBehavior;\n /**\n * PRO: Sandbox Environment Id\n * PRO: @description Sandbox environment ID to force using the specified container.\n */\n sandboxEnvironmentId?: string;\n};\n\n/**\n * Data type for client effect message\n */\nexport type TClientEeffectMessage = {\n name: string;\n args: Record<string, any>;\n tool_call_id?: string;\n agentKey?: string;\n created_date?: Date | string;\n};\n\n// Thread context usage\nexport type TThreadContextUsageMetrics = {\n contextTokens: number;\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n embedTokens?: number;\n totalPrice?: number;\n currency?: string | null;\n};\n\nexport type TThreadContextUsageEvent = {\n type: 'thread_context_usage';\n threadId: string;\n runId: string | null;\n agentKey: string;\n updatedAt: string;\n usage: TThreadContextUsageMetrics;\n};\n\nexport const CHAT_EVENT_TYPE_FOLLOW_UP_CONSUMED = 'follow_up_consumed' as const;\n\nexport type TFollowUpConsumedEvent = TChatEventMessage & {\n type: typeof CHAT_EVENT_TYPE_FOLLOW_UP_CONSUMED;\n mode: 'queue' | 'steer';\n messageIds: string[];\n clientMessageIds?: string[];\n executionId?: string | null;\n visibleAt?: string | null;\n};\n"],"names":["ChatMessageTypeEnum","ChatMessageEventTypeEnum","ChatMessageStepCategory"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xpert-ai/chatkit-types",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Type definitions for the ChatKit.",
5
5
  "sideEffects": false,
6
6
  "type": "module",