@chat-lab/ui 0.1.0-beta.77 → 0.1.0-beta.78

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.
@@ -46,16 +46,6 @@ const useClawChat = ({ onAction, onAbort, }) => {
46
46
  },
47
47
  });
48
48
  }
49
- if (types.isPushStreamAborted(msg)
50
- || types.isPushStreamDone(msg)
51
- || types.isPushStreamError(msg)) {
52
- currentRunIdRef.current = lodashEs.without(currentRunIdRef.current, msg.payload.runId);
53
- // 手动设置 sending 状态,显示小圆圈
54
- if (thread) {
55
- controllerRef.current?.setSending(thread.id, false);
56
- controllerRef.current?.setLoading(thread.id, false);
57
- }
58
- }
59
49
  if (types.isPushGatewayEvent(msg)) {
60
50
  controllerRef.current?.addMessage(thread?.id, {
61
51
  id: uuid.v4(),
@@ -66,6 +56,16 @@ const useClawChat = ({ onAction, onAbort, }) => {
66
56
  status: index.MessageStatus.SUCCESS,
67
57
  });
68
58
  }
59
+ if (types.isPushStreamAborted(msg)
60
+ || types.isPushStreamDone(msg)
61
+ || types.isPushStreamError(msg)) {
62
+ currentRunIdRef.current = lodashEs.without(currentRunIdRef.current, msg.payload.runId);
63
+ // 手动设置 sending 状态,显示小圆圈
64
+ if (thread) {
65
+ controllerRef.current?.setSending(thread.id, false);
66
+ controllerRef.current?.setLoading(thread.id, false);
67
+ }
68
+ }
69
69
  pushMessageImplRef.current(msg);
70
70
  });
71
71
  const pushHistory = ahooks.useMemoizedFn((msg) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/hooks/useClawChat/index.ts"],"sourcesContent":["import {\n ChatController,\n createThreadManagerStateWithDefault,\n ThreadMessageManager,\n ProtocolEnum,\n createMetaData,\n MessageStatus,\n} from '@chat-lab/core';\nimport { useRef, useState } from 'react';\nimport { useMemoizedFn } from 'ahooks';\nimport { uniq, without } from 'lodash-es';\nimport { v4 as uuid } from 'uuid';\nimport {\n UseClawChatReturn,\n OnAction,\n ClawChatStatus,\n PushMessageImpl,\n PushHistory,\n isPushStreamStart,\n isPushStreamDone,\n isPushStreamError,\n isPushStreamAborted,\n isPushGatewayEvent,\n} from './types';\nimport { createClawCompletion } from './clawCompletion';\nimport ClawProtocolAdaptor from './ClawProtocolAdaptor';\nimport convertHistoryMessage from './convertHistoryMessage';\nimport { ClawPlugin } from './clawPlugin';\n\nexport * from './types';\nexport { default as ClawProtocolAdaptor } from './ClawProtocolAdaptor';\nexport * from './ClawProtocolAdaptor';\n\n/**\n * useClawChat Hook\n * 用于与 ClawClient 进行双向通信\n *\n * @param onAction - 处理来自 Chat 组件的用户操作\n * @returns {UseClawChatReturn} - 包含 controller、pushMessage 和 setClawChatStatus\n */\n\nexport const useClawChat = ({\n onAction,\n onAbort,\n}: {\n onAction: OnAction;\n onAbort: (runId: string) => void;\n}): UseClawChatReturn => {\n const controllerRef = useRef<ChatController | null>(null);\n const currentRunIdRef = useRef<string[]>([]);\n\n const clawPluginRef = useRef<ClawPlugin>();\n\n const pushMessageImplRef = useRef<(msg: PushMessageImpl) => void>(() => {});\n /**\n * 推送消息到 Chat 组件\n * 由 ClawClient 调用\n */\n const pushMessage = useMemoizedFn((msg: PushMessageImpl) => {\n // 获取当前线程\n const thread = controllerRef.current?.getCurrentThread();\n // 更新整个消息历史\n if (isPushStreamStart(msg)) {\n currentRunIdRef.current = uniq([\n ...currentRunIdRef.current,\n msg.payload.runId,\n ]);\n // 手动设置 sending 状态,显示小圆圈\n if (thread) {\n controllerRef.current?.setSending(thread.id, true);\n }\n controllerRef.current?.triggerCompletion({\n extraRequestOptions: {\n meta: { shouldSendMessage: false, runId: msg.payload.runId },\n },\n });\n }\n if (\n isPushStreamAborted(msg)\n || isPushStreamDone(msg)\n || isPushStreamError(msg)\n ) {\n currentRunIdRef.current = without(\n currentRunIdRef.current,\n msg.payload.runId,\n );\n // 手动设置 sending 状态,显示小圆圈\n if (thread) {\n controllerRef.current?.setSending(thread.id, false);\n controllerRef.current?.setLoading(thread.id, false);\n }\n }\n if (isPushGatewayEvent(msg)) {\n controllerRef.current?.addMessage(thread?.id, {\n id: uuid(),\n content: msg.payload.message.content,\n role: 'assistant',\n threadId: thread?.id,\n metadata: {},\n status: MessageStatus.SUCCESS,\n });\n }\n\n pushMessageImplRef.current(msg);\n });\n\n const pushHistory = useMemoizedFn((msg: PushHistory) => {\n // 更新整个消息历史\n // pushMessageImplRef.current(msg);\n const thread = controllerRef.current?.getCurrentThread();\n if (thread) {\n controllerRef.current?.updateThread(thread.id, {\n messages: convertHistoryMessage(msg),\n });\n }\n });\n\n // 初始化 ChatController\n if (!controllerRef.current) {\n const state = createThreadManagerStateWithDefault();\n const storeManager = new ThreadMessageManager(state);\n const clawPlugin = new ClawPlugin({\n onSend: async (text) => {\n await onAction({\n message: text,\n });\n },\n });\n clawPluginRef.current = clawPlugin;\n // 创建 completion 函数\n const { clawCompletion, pushMessageImpl } = createClawCompletion(\n onAction,\n () => {\n if (currentRunIdRef.current) {\n currentRunIdRef.current.forEach((runId) => onAbort(runId));\n }\n },\n );\n pushMessageImplRef.current = pushMessageImpl;\n\n // 创建 Claw Protocol Adaptor\n const clawProtocolAdaptor = new ClawProtocolAdaptor({\n protocol: ProtocolEnum.CUSTOM,\n protocolName: 'Claw',\n } as any);\n\n controllerRef.current = new ChatController({\n requestOptions: {\n api: 'default',\n headers: {\n Authorization: 'Bearer ',\n },\n meta: {\n shouldSendMessage: true,\n shouldReceived: false,\n },\n // 使用自定义 completion\n completions: clawCompletion,\n },\n protocolOptions: {\n protocol: ProtocolEnum.CUSTOM,\n protocolName: 'Claw',\n protocolAdaptor: clawProtocolAdaptor,\n } as any,\n storeManager,\n metaData: createMetaData({\n clawStatus: { status: false, reason: 'uninitialized' },\n }),\n plugins: [clawPlugin],\n });\n }\n\n const handleClawChatStatus = useMemoizedFn((status: ClawChatStatus) => {\n if (controllerRef.current) {\n controllerRef.current.metaData.clawStatus = status;\n }\n });\n\n return {\n controllerRef,\n pushMessage,\n pushHistory,\n setClawChatStatus: handleClawChatStatus,\n };\n};\n"],"names":["useRef","useMemoizedFn","isPushStreamStart","uniq","isPushStreamAborted","isPushStreamDone","isPushStreamError","without","isPushGatewayEvent","uuid","MessageStatus","createThreadManagerStateWithDefault","ThreadMessageManager","clawPlugin","ClawPlugin","clawCompletion","createClawCompletion","ProtocolEnum","ChatController","createMetaData"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/hooks/useClawChat/index.ts"],"sourcesContent":["import {\n ChatController,\n createThreadManagerStateWithDefault,\n ThreadMessageManager,\n ProtocolEnum,\n createMetaData,\n MessageStatus,\n} from '@chat-lab/core';\nimport { useRef, useState } from 'react';\nimport { useMemoizedFn } from 'ahooks';\nimport { uniq, without } from 'lodash-es';\nimport { v4 as uuid } from 'uuid';\nimport {\n UseClawChatReturn,\n OnAction,\n ClawChatStatus,\n PushMessageImpl,\n PushHistory,\n isPushStreamStart,\n isPushStreamDone,\n isPushStreamError,\n isPushStreamAborted,\n isPushGatewayEvent,\n} from './types';\nimport { createClawCompletion } from './clawCompletion';\nimport ClawProtocolAdaptor from './ClawProtocolAdaptor';\nimport convertHistoryMessage from './convertHistoryMessage';\nimport { ClawPlugin } from './clawPlugin';\n\nexport * from './types';\nexport { default as ClawProtocolAdaptor } from './ClawProtocolAdaptor';\nexport * from './ClawProtocolAdaptor';\n\n/**\n * useClawChat Hook\n * 用于与 ClawClient 进行双向通信\n *\n * @param onAction - 处理来自 Chat 组件的用户操作\n * @returns {UseClawChatReturn} - 包含 controller、pushMessage 和 setClawChatStatus\n */\n\nexport const useClawChat = ({\n onAction,\n onAbort,\n}: {\n onAction: OnAction;\n onAbort: (runId: string) => void;\n}): UseClawChatReturn => {\n const controllerRef = useRef<ChatController | null>(null);\n const currentRunIdRef = useRef<string[]>([]);\n\n const clawPluginRef = useRef<ClawPlugin>();\n\n const pushMessageImplRef = useRef<(msg: PushMessageImpl) => void>(() => {});\n /**\n * 推送消息到 Chat 组件\n * 由 ClawClient 调用\n */\n const pushMessage = useMemoizedFn((msg: PushMessageImpl) => {\n // 获取当前线程\n const thread = controllerRef.current?.getCurrentThread();\n // 更新整个消息历史\n if (isPushStreamStart(msg)) {\n currentRunIdRef.current = uniq([\n ...currentRunIdRef.current,\n msg.payload.runId,\n ]);\n // 手动设置 sending 状态,显示小圆圈\n if (thread) {\n controllerRef.current?.setSending(thread.id, true);\n }\n controllerRef.current?.triggerCompletion({\n extraRequestOptions: {\n meta: { shouldSendMessage: false, runId: msg.payload.runId },\n },\n });\n }\n if (isPushGatewayEvent(msg)) {\n controllerRef.current?.addMessage(thread?.id, {\n id: uuid(),\n content: msg.payload.message.content,\n role: 'assistant',\n threadId: thread?.id,\n metadata: {},\n status: MessageStatus.SUCCESS,\n });\n }\n if (\n isPushStreamAborted(msg)\n || isPushStreamDone(msg)\n || isPushStreamError(msg)\n ) {\n currentRunIdRef.current = without(\n currentRunIdRef.current,\n msg.payload.runId,\n );\n // 手动设置 sending 状态,显示小圆圈\n if (thread) {\n controllerRef.current?.setSending(thread.id, false);\n controllerRef.current?.setLoading(thread.id, false);\n }\n }\n\n pushMessageImplRef.current(msg);\n });\n\n const pushHistory = useMemoizedFn((msg: PushHistory) => {\n // 更新整个消息历史\n // pushMessageImplRef.current(msg);\n const thread = controllerRef.current?.getCurrentThread();\n if (thread) {\n controllerRef.current?.updateThread(thread.id, {\n messages: convertHistoryMessage(msg),\n });\n }\n });\n\n // 初始化 ChatController\n if (!controllerRef.current) {\n const state = createThreadManagerStateWithDefault();\n const storeManager = new ThreadMessageManager(state);\n const clawPlugin = new ClawPlugin({\n onSend: async (text) => {\n await onAction({\n message: text,\n });\n },\n });\n clawPluginRef.current = clawPlugin;\n // 创建 completion 函数\n const { clawCompletion, pushMessageImpl } = createClawCompletion(\n onAction,\n () => {\n if (currentRunIdRef.current) {\n currentRunIdRef.current.forEach((runId) => onAbort(runId));\n }\n },\n );\n pushMessageImplRef.current = pushMessageImpl;\n\n // 创建 Claw Protocol Adaptor\n const clawProtocolAdaptor = new ClawProtocolAdaptor({\n protocol: ProtocolEnum.CUSTOM,\n protocolName: 'Claw',\n } as any);\n\n controllerRef.current = new ChatController({\n requestOptions: {\n api: 'default',\n headers: {\n Authorization: 'Bearer ',\n },\n meta: {\n shouldSendMessage: true,\n shouldReceived: false,\n },\n // 使用自定义 completion\n completions: clawCompletion,\n },\n protocolOptions: {\n protocol: ProtocolEnum.CUSTOM,\n protocolName: 'Claw',\n protocolAdaptor: clawProtocolAdaptor,\n } as any,\n storeManager,\n metaData: createMetaData({\n clawStatus: { status: false, reason: 'uninitialized' },\n }),\n plugins: [clawPlugin],\n });\n }\n\n const handleClawChatStatus = useMemoizedFn((status: ClawChatStatus) => {\n if (controllerRef.current) {\n controllerRef.current.metaData.clawStatus = status;\n }\n });\n\n return {\n controllerRef,\n pushMessage,\n pushHistory,\n setClawChatStatus: handleClawChatStatus,\n };\n};\n"],"names":["useRef","useMemoizedFn","isPushStreamStart","uniq","isPushGatewayEvent","uuid","MessageStatus","isPushStreamAborted","isPushStreamDone","isPushStreamError","without","createThreadManagerStateWithDefault","ThreadMessageManager","clawPlugin","ClawPlugin","clawCompletion","createClawCompletion","ProtocolEnum","ChatController","createMetaData"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { useRef } from 'react';
3
3
  import { useMemoizedFn } from 'ahooks';
4
4
  import { uniq, without } from 'lodash-es';
5
5
  import { v4 } from 'uuid';
6
- import { isPushStreamStart, isPushStreamAborted, isPushStreamDone, isPushStreamError, isPushGatewayEvent } from './types.js';
6
+ import { isPushStreamStart, isPushGatewayEvent, isPushStreamAborted, isPushStreamDone, isPushStreamError } from './types.js';
7
7
  export { isPushSteamDelta } from './types.js';
8
8
  import { createClawCompletion } from './clawCompletion.js';
9
9
  import ClawProtocolAdaptor from './ClawProtocolAdaptor.js';
@@ -45,16 +45,6 @@ const useClawChat = ({ onAction, onAbort, }) => {
45
45
  },
46
46
  });
47
47
  }
48
- if (isPushStreamAborted(msg)
49
- || isPushStreamDone(msg)
50
- || isPushStreamError(msg)) {
51
- currentRunIdRef.current = without(currentRunIdRef.current, msg.payload.runId);
52
- // 手动设置 sending 状态,显示小圆圈
53
- if (thread) {
54
- controllerRef.current?.setSending(thread.id, false);
55
- controllerRef.current?.setLoading(thread.id, false);
56
- }
57
- }
58
48
  if (isPushGatewayEvent(msg)) {
59
49
  controllerRef.current?.addMessage(thread?.id, {
60
50
  id: v4(),
@@ -65,6 +55,16 @@ const useClawChat = ({ onAction, onAbort, }) => {
65
55
  status: MessageStatus.SUCCESS,
66
56
  });
67
57
  }
58
+ if (isPushStreamAborted(msg)
59
+ || isPushStreamDone(msg)
60
+ || isPushStreamError(msg)) {
61
+ currentRunIdRef.current = without(currentRunIdRef.current, msg.payload.runId);
62
+ // 手动设置 sending 状态,显示小圆圈
63
+ if (thread) {
64
+ controllerRef.current?.setSending(thread.id, false);
65
+ controllerRef.current?.setLoading(thread.id, false);
66
+ }
67
+ }
68
68
  pushMessageImplRef.current(msg);
69
69
  });
70
70
  const pushHistory = useMemoizedFn((msg) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/hooks/useClawChat/index.ts"],"sourcesContent":["import {\n ChatController,\n createThreadManagerStateWithDefault,\n ThreadMessageManager,\n ProtocolEnum,\n createMetaData,\n MessageStatus,\n} from '@chat-lab/core';\nimport { useRef, useState } from 'react';\nimport { useMemoizedFn } from 'ahooks';\nimport { uniq, without } from 'lodash-es';\nimport { v4 as uuid } from 'uuid';\nimport {\n UseClawChatReturn,\n OnAction,\n ClawChatStatus,\n PushMessageImpl,\n PushHistory,\n isPushStreamStart,\n isPushStreamDone,\n isPushStreamError,\n isPushStreamAborted,\n isPushGatewayEvent,\n} from './types';\nimport { createClawCompletion } from './clawCompletion';\nimport ClawProtocolAdaptor from './ClawProtocolAdaptor';\nimport convertHistoryMessage from './convertHistoryMessage';\nimport { ClawPlugin } from './clawPlugin';\n\nexport * from './types';\nexport { default as ClawProtocolAdaptor } from './ClawProtocolAdaptor';\nexport * from './ClawProtocolAdaptor';\n\n/**\n * useClawChat Hook\n * 用于与 ClawClient 进行双向通信\n *\n * @param onAction - 处理来自 Chat 组件的用户操作\n * @returns {UseClawChatReturn} - 包含 controller、pushMessage 和 setClawChatStatus\n */\n\nexport const useClawChat = ({\n onAction,\n onAbort,\n}: {\n onAction: OnAction;\n onAbort: (runId: string) => void;\n}): UseClawChatReturn => {\n const controllerRef = useRef<ChatController | null>(null);\n const currentRunIdRef = useRef<string[]>([]);\n\n const clawPluginRef = useRef<ClawPlugin>();\n\n const pushMessageImplRef = useRef<(msg: PushMessageImpl) => void>(() => {});\n /**\n * 推送消息到 Chat 组件\n * 由 ClawClient 调用\n */\n const pushMessage = useMemoizedFn((msg: PushMessageImpl) => {\n // 获取当前线程\n const thread = controllerRef.current?.getCurrentThread();\n // 更新整个消息历史\n if (isPushStreamStart(msg)) {\n currentRunIdRef.current = uniq([\n ...currentRunIdRef.current,\n msg.payload.runId,\n ]);\n // 手动设置 sending 状态,显示小圆圈\n if (thread) {\n controllerRef.current?.setSending(thread.id, true);\n }\n controllerRef.current?.triggerCompletion({\n extraRequestOptions: {\n meta: { shouldSendMessage: false, runId: msg.payload.runId },\n },\n });\n }\n if (\n isPushStreamAborted(msg)\n || isPushStreamDone(msg)\n || isPushStreamError(msg)\n ) {\n currentRunIdRef.current = without(\n currentRunIdRef.current,\n msg.payload.runId,\n );\n // 手动设置 sending 状态,显示小圆圈\n if (thread) {\n controllerRef.current?.setSending(thread.id, false);\n controllerRef.current?.setLoading(thread.id, false);\n }\n }\n if (isPushGatewayEvent(msg)) {\n controllerRef.current?.addMessage(thread?.id, {\n id: uuid(),\n content: msg.payload.message.content,\n role: 'assistant',\n threadId: thread?.id,\n metadata: {},\n status: MessageStatus.SUCCESS,\n });\n }\n\n pushMessageImplRef.current(msg);\n });\n\n const pushHistory = useMemoizedFn((msg: PushHistory) => {\n // 更新整个消息历史\n // pushMessageImplRef.current(msg);\n const thread = controllerRef.current?.getCurrentThread();\n if (thread) {\n controllerRef.current?.updateThread(thread.id, {\n messages: convertHistoryMessage(msg),\n });\n }\n });\n\n // 初始化 ChatController\n if (!controllerRef.current) {\n const state = createThreadManagerStateWithDefault();\n const storeManager = new ThreadMessageManager(state);\n const clawPlugin = new ClawPlugin({\n onSend: async (text) => {\n await onAction({\n message: text,\n });\n },\n });\n clawPluginRef.current = clawPlugin;\n // 创建 completion 函数\n const { clawCompletion, pushMessageImpl } = createClawCompletion(\n onAction,\n () => {\n if (currentRunIdRef.current) {\n currentRunIdRef.current.forEach((runId) => onAbort(runId));\n }\n },\n );\n pushMessageImplRef.current = pushMessageImpl;\n\n // 创建 Claw Protocol Adaptor\n const clawProtocolAdaptor = new ClawProtocolAdaptor({\n protocol: ProtocolEnum.CUSTOM,\n protocolName: 'Claw',\n } as any);\n\n controllerRef.current = new ChatController({\n requestOptions: {\n api: 'default',\n headers: {\n Authorization: 'Bearer ',\n },\n meta: {\n shouldSendMessage: true,\n shouldReceived: false,\n },\n // 使用自定义 completion\n completions: clawCompletion,\n },\n protocolOptions: {\n protocol: ProtocolEnum.CUSTOM,\n protocolName: 'Claw',\n protocolAdaptor: clawProtocolAdaptor,\n } as any,\n storeManager,\n metaData: createMetaData({\n clawStatus: { status: false, reason: 'uninitialized' },\n }),\n plugins: [clawPlugin],\n });\n }\n\n const handleClawChatStatus = useMemoizedFn((status: ClawChatStatus) => {\n if (controllerRef.current) {\n controllerRef.current.metaData.clawStatus = status;\n }\n });\n\n return {\n controllerRef,\n pushMessage,\n pushHistory,\n setClawChatStatus: handleClawChatStatus,\n };\n};\n"],"names":["uuid"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/hooks/useClawChat/index.ts"],"sourcesContent":["import {\n ChatController,\n createThreadManagerStateWithDefault,\n ThreadMessageManager,\n ProtocolEnum,\n createMetaData,\n MessageStatus,\n} from '@chat-lab/core';\nimport { useRef, useState } from 'react';\nimport { useMemoizedFn } from 'ahooks';\nimport { uniq, without } from 'lodash-es';\nimport { v4 as uuid } from 'uuid';\nimport {\n UseClawChatReturn,\n OnAction,\n ClawChatStatus,\n PushMessageImpl,\n PushHistory,\n isPushStreamStart,\n isPushStreamDone,\n isPushStreamError,\n isPushStreamAborted,\n isPushGatewayEvent,\n} from './types';\nimport { createClawCompletion } from './clawCompletion';\nimport ClawProtocolAdaptor from './ClawProtocolAdaptor';\nimport convertHistoryMessage from './convertHistoryMessage';\nimport { ClawPlugin } from './clawPlugin';\n\nexport * from './types';\nexport { default as ClawProtocolAdaptor } from './ClawProtocolAdaptor';\nexport * from './ClawProtocolAdaptor';\n\n/**\n * useClawChat Hook\n * 用于与 ClawClient 进行双向通信\n *\n * @param onAction - 处理来自 Chat 组件的用户操作\n * @returns {UseClawChatReturn} - 包含 controller、pushMessage 和 setClawChatStatus\n */\n\nexport const useClawChat = ({\n onAction,\n onAbort,\n}: {\n onAction: OnAction;\n onAbort: (runId: string) => void;\n}): UseClawChatReturn => {\n const controllerRef = useRef<ChatController | null>(null);\n const currentRunIdRef = useRef<string[]>([]);\n\n const clawPluginRef = useRef<ClawPlugin>();\n\n const pushMessageImplRef = useRef<(msg: PushMessageImpl) => void>(() => {});\n /**\n * 推送消息到 Chat 组件\n * 由 ClawClient 调用\n */\n const pushMessage = useMemoizedFn((msg: PushMessageImpl) => {\n // 获取当前线程\n const thread = controllerRef.current?.getCurrentThread();\n // 更新整个消息历史\n if (isPushStreamStart(msg)) {\n currentRunIdRef.current = uniq([\n ...currentRunIdRef.current,\n msg.payload.runId,\n ]);\n // 手动设置 sending 状态,显示小圆圈\n if (thread) {\n controllerRef.current?.setSending(thread.id, true);\n }\n controllerRef.current?.triggerCompletion({\n extraRequestOptions: {\n meta: { shouldSendMessage: false, runId: msg.payload.runId },\n },\n });\n }\n if (isPushGatewayEvent(msg)) {\n controllerRef.current?.addMessage(thread?.id, {\n id: uuid(),\n content: msg.payload.message.content,\n role: 'assistant',\n threadId: thread?.id,\n metadata: {},\n status: MessageStatus.SUCCESS,\n });\n }\n if (\n isPushStreamAborted(msg)\n || isPushStreamDone(msg)\n || isPushStreamError(msg)\n ) {\n currentRunIdRef.current = without(\n currentRunIdRef.current,\n msg.payload.runId,\n );\n // 手动设置 sending 状态,显示小圆圈\n if (thread) {\n controllerRef.current?.setSending(thread.id, false);\n controllerRef.current?.setLoading(thread.id, false);\n }\n }\n\n pushMessageImplRef.current(msg);\n });\n\n const pushHistory = useMemoizedFn((msg: PushHistory) => {\n // 更新整个消息历史\n // pushMessageImplRef.current(msg);\n const thread = controllerRef.current?.getCurrentThread();\n if (thread) {\n controllerRef.current?.updateThread(thread.id, {\n messages: convertHistoryMessage(msg),\n });\n }\n });\n\n // 初始化 ChatController\n if (!controllerRef.current) {\n const state = createThreadManagerStateWithDefault();\n const storeManager = new ThreadMessageManager(state);\n const clawPlugin = new ClawPlugin({\n onSend: async (text) => {\n await onAction({\n message: text,\n });\n },\n });\n clawPluginRef.current = clawPlugin;\n // 创建 completion 函数\n const { clawCompletion, pushMessageImpl } = createClawCompletion(\n onAction,\n () => {\n if (currentRunIdRef.current) {\n currentRunIdRef.current.forEach((runId) => onAbort(runId));\n }\n },\n );\n pushMessageImplRef.current = pushMessageImpl;\n\n // 创建 Claw Protocol Adaptor\n const clawProtocolAdaptor = new ClawProtocolAdaptor({\n protocol: ProtocolEnum.CUSTOM,\n protocolName: 'Claw',\n } as any);\n\n controllerRef.current = new ChatController({\n requestOptions: {\n api: 'default',\n headers: {\n Authorization: 'Bearer ',\n },\n meta: {\n shouldSendMessage: true,\n shouldReceived: false,\n },\n // 使用自定义 completion\n completions: clawCompletion,\n },\n protocolOptions: {\n protocol: ProtocolEnum.CUSTOM,\n protocolName: 'Claw',\n protocolAdaptor: clawProtocolAdaptor,\n } as any,\n storeManager,\n metaData: createMetaData({\n clawStatus: { status: false, reason: 'uninitialized' },\n }),\n plugins: [clawPlugin],\n });\n }\n\n const handleClawChatStatus = useMemoizedFn((status: ClawChatStatus) => {\n if (controllerRef.current) {\n controllerRef.current.metaData.clawStatus = status;\n }\n });\n\n return {\n controllerRef,\n pushMessage,\n pushHistory,\n setClawChatStatus: handleClawChatStatus,\n };\n};\n"],"names":["uuid"],"mappings":"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"}
@@ -4,7 +4,7 @@ const isPushGatewayEvent = (msg) => msg.type === 'event'
4
4
  && msg.event === 'chat'
5
5
  && msg.payload.state === 'final'
6
6
  && msg.payload.message.role === 'assistant'
7
- && msg.payload.model === 'gateway-injected';
7
+ && msg.payload.message.model === 'gateway-injected';
8
8
  const isPushStreamStart = (msg) => msg.type === 'event'
9
9
  && msg.event === 'agent'
10
10
  && msg.payload.stream === 'lifecycle'
@@ -1 +1 @@
1
- {"version":3,"file":"types.cjs","sources":["../../../src/hooks/useClawChat/types.ts"],"sourcesContent":["import { ChatController } from '@chat-lab/core';\nimport { RefObject } from 'react';\n\nexport interface TextContent {\n type: 'text';\n text: string;\n}\nexport interface ThinkContent {\n type: 'thinking';\n thinking: string;\n}\nexport interface ToolCallContent {\n type: 'toolCall';\n id: string;\n name: string;\n arguments: Record<string, any>;\n}\n\nexport interface ToolResultContent {\n type: 'toolResult';\n toolCallId: string;\n toolName: string;\n content: TextContent[];\n isError: boolean;\n timestamp: number;\n}\n\ninterface ChatMessageContent {\n type: string; // text thinking toolCall image\n // text 类型特有字段\n text?: string; // 文本内容\n // thinking 类型特有字段\n thinking?: string; // 思考内容\n // toolCall 类型特有字段\n name?: string; // 工具名称\n id?: string; // 工具调用 ID\n arguments?: string; // 工具调用参数\n // image 类型特有字段\n content?: string; // 图片 Base64 编码\n uri?: string; // 图片 URI\n}\n\nexport type Content = {\n role: string; // user assistant toolResult\n content: ChatMessageContent[];\n timestamp: number;\n};\nexport interface ActionSend {\n type: 'send';\n message: string;\n thinking?: 'none' | 'low' | 'medium' | 'high';\n attachments?: Array<{\n type: 'image';\n mimeType: string;\n content: string; // base64 or uri\n }>;\n}\n\nexport interface ActionAbort {\n type: 'abort';\n runId?: string;\n}\n// ===== ChatAction Types =====\nexport type ChatAction = {\n message: string;\n thinking?: 'none' | 'low' | 'medium' | 'high';\n attachments?: Array<{\n type: 'image';\n mimeType: string;\n content: string;\n }>;\n};\n\nexport interface PushHistory {\n type: 'res';\n id: string;\n payload: {\n sessionKey: string;\n sessionId: string;\n messages: Content[];\n };\n thinkingLevel?: string;\n}\n\nexport interface PushStreamStart {\n type: 'event';\n event: 'agent';\n payload: {\n runId: string;\n stream: 'lifecycle';\n data: {\n phase: 'end';\n endedAt: number;\n };\n sessionKey: string;\n seq: number;\n ts: number;\n };\n seq: number;\n}\n\nexport interface PushStreamDelta {\n type: 'event';\n event: 'agent';\n payload: {\n runId: string;\n stream: 'assistant' | 'lifecycle';\n data: {\n text?: string; // 全量\n delta?: string; // 增量\n phase?: 'start';\n endedAt?: number;\n };\n sessionKey: string;\n seq: number;\n ts: number;\n };\n seq: number;\n}\nexport interface PushStreamDone {\n type: 'event';\n event: 'chat';\n seq: number;\n payload: {\n runId: string;\n sessionKey: string;\n seq: number;\n state: 'final';\n message: {\n role: string;\n content: TextContent[];\n timestamp: number;\n stopReason?: 'stop';\n };\n };\n}\n\nexport interface PushStreamAborted {\n type: 'event';\n event: 'chat';\n payload: {\n runId: string;\n sessionKey: string;\n seq: number;\n state: 'aborted';\n message: {\n role: string;\n content: TextContent[];\n timestamp?: number;\n };\n };\n}\n\nexport interface PushStreamError {\n type: 'event';\n event: 'chat';\n payload: {\n runId: string;\n sessionKey: string;\n seq: number;\n state: 'error';\n errorMessage: string;\n };\n}\n\nexport interface PushGatewayEvent {\n type: 'event';\n event: 'chat';\n payload: {\n runId: string;\n sessionKey: string;\n seq: number;\n state: 'final';\n message: {\n role: 'assistant';\n content: [\n {\n type: 'text';\n text: string;\n },\n ];\n timestamp: number;\n stopReason: 'stop';\n api: 'openai-responses';\n provider: 'openclaw';\n model: 'gateway-injected';\n };\n };\n seq: 91074;\n}\n\n// ===== PushMessage Types =====\nexport type PushMessage =\n | PushHistory\n | PushStreamDelta\n | PushStreamDone\n | PushStreamAborted\n | PushStreamError\n | PushGatewayEvent;\n\nexport type PushMessageImpl =\n | PushStreamStart\n | PushStreamDelta\n | PushStreamDone\n | PushStreamAborted\n | PushStreamError;\n\nexport const isPushGatewayEvent = (\n msg: PushMessageImpl,\n): msg is PushGatewayEvent => msg.type === 'event'\n && msg.event === 'chat'\n && msg.payload.state === 'final'\n && msg.payload.message.role === 'assistant'\n && (msg.payload as any).model === 'gateway-injected';\n\nexport const isPushStreamStart = (\n msg: PushMessageImpl,\n): msg is PushStreamStart => msg.type === 'event'\n && msg.event === 'agent'\n && msg.payload.stream === 'lifecycle'\n && msg.payload.data.phase === 'start';\n\nexport const isPushSteamDelta = (\n msg: PushMessageImpl,\n): msg is PushStreamDelta => msg.type === 'event'\n && msg.event === 'agent'\n && msg.payload.stream === 'assistant'\n && msg.payload.data.delta !== '';\n\nexport const isPushStreamDone = (msg: PushMessageImpl): msg is PushStreamDone => msg.type === 'event' && msg.event === 'chat' && msg.payload.state === 'final';\n\nexport const isPushStreamAborted = (\n msg: PushMessageImpl,\n): msg is PushStreamAborted => msg.type === 'event'\n && msg.event === 'chat'\n && msg.payload.state === 'aborted';\n\nexport const isPushStreamError = (\n msg: PushMessageImpl,\n): msg is PushStreamError => msg.type === 'event' && msg.event === 'chat' && msg.payload.state === 'error';\n\nexport interface ClawChatStatus {\n status: boolean;\n reason?: string;\n}\n// ===== Hook Return Type =====\nexport interface UseClawChatReturn {\n controllerRef: RefObject<ChatController | null>;\n pushMessage: (msg: PushMessageImpl) => void;\n pushHistory: (msg: PushHistory) => void;\n setClawChatStatus: (status: ClawChatStatus) => void;\n}\n\nexport type OnAction = (action: ChatAction) => void;\n"],"names":[],"mappings":";;AA+MO,MAAM,kBAAkB,GAAG,CAChC,GAAoB,KACQ,GAAG,CAAC,IAAI,KAAK,OAAO;OAC7C,GAAG,CAAC,KAAK,KAAK,MAAM;AACpB,OAAA,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO;AAC7B,OAAA,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;AACvC,OAAA,GAAG,CAAC,OAAe,CAAC,KAAK,KAAK,mBAAmB;AAEhD,MAAM,iBAAiB,GAAG,CAC/B,GAAoB,KACO,GAAG,CAAC,IAAI,KAAK,OAAO;OAC5C,GAAG,CAAC,KAAK,KAAK,OAAO;AACrB,OAAA,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW;OAClC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ;AAEjC,MAAM,gBAAgB,GAAG,CAC9B,GAAoB,KACO,GAAG,CAAC,IAAI,KAAK,OAAO;OAC5C,GAAG,CAAC,KAAK,KAAK,OAAO;AACrB,OAAA,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW;OAClC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG;AAE5B,MAAM,gBAAgB,GAAG,CAAC,GAAoB,KAA4B,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ;AAExJ,MAAM,mBAAmB,GAAG,CACjC,GAAoB,KACS,GAAG,CAAC,IAAI,KAAK,OAAO;OAC9C,GAAG,CAAC,KAAK,KAAK,MAAM;AACpB,OAAA,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,UAAU;AAE9B,MAAM,iBAAiB,GAAG,CAC/B,GAAoB,KACO,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK;;;;;;;;;"}
1
+ {"version":3,"file":"types.cjs","sources":["../../../src/hooks/useClawChat/types.ts"],"sourcesContent":["import { ChatController } from '@chat-lab/core';\nimport { RefObject } from 'react';\n\nexport interface TextContent {\n type: 'text';\n text: string;\n}\nexport interface ThinkContent {\n type: 'thinking';\n thinking: string;\n}\nexport interface ToolCallContent {\n type: 'toolCall';\n id: string;\n name: string;\n arguments: Record<string, any>;\n}\n\nexport interface ToolResultContent {\n type: 'toolResult';\n toolCallId: string;\n toolName: string;\n content: TextContent[];\n isError: boolean;\n timestamp: number;\n}\n\ninterface ChatMessageContent {\n type: string; // text thinking toolCall image\n // text 类型特有字段\n text?: string; // 文本内容\n // thinking 类型特有字段\n thinking?: string; // 思考内容\n // toolCall 类型特有字段\n name?: string; // 工具名称\n id?: string; // 工具调用 ID\n arguments?: string; // 工具调用参数\n // image 类型特有字段\n content?: string; // 图片 Base64 编码\n uri?: string; // 图片 URI\n}\n\nexport type Content = {\n role: string; // user assistant toolResult\n content: ChatMessageContent[];\n timestamp: number;\n};\nexport interface ActionSend {\n type: 'send';\n message: string;\n thinking?: 'none' | 'low' | 'medium' | 'high';\n attachments?: Array<{\n type: 'image';\n mimeType: string;\n content: string; // base64 or uri\n }>;\n}\n\nexport interface ActionAbort {\n type: 'abort';\n runId?: string;\n}\n// ===== ChatAction Types =====\nexport type ChatAction = {\n message: string;\n thinking?: 'none' | 'low' | 'medium' | 'high';\n attachments?: Array<{\n type: 'image';\n mimeType: string;\n content: string;\n }>;\n};\n\nexport interface PushHistory {\n type: 'res';\n id: string;\n payload: {\n sessionKey: string;\n sessionId: string;\n messages: Content[];\n };\n thinkingLevel?: string;\n}\n\nexport interface PushStreamStart {\n type: 'event';\n event: 'agent';\n payload: {\n runId: string;\n stream: 'lifecycle';\n data: {\n phase: 'end';\n endedAt: number;\n };\n sessionKey: string;\n seq: number;\n ts: number;\n };\n seq: number;\n}\n\nexport interface PushStreamDelta {\n type: 'event';\n event: 'agent';\n payload: {\n runId: string;\n stream: 'assistant' | 'lifecycle';\n data: {\n text?: string; // 全量\n delta?: string; // 增量\n phase?: 'start';\n endedAt?: number;\n };\n sessionKey: string;\n seq: number;\n ts: number;\n };\n seq: number;\n}\nexport interface PushStreamDone {\n type: 'event';\n event: 'chat';\n seq: number;\n payload: {\n runId: string;\n sessionKey: string;\n seq: number;\n state: 'final';\n message: {\n role: string;\n content: TextContent[];\n timestamp: number;\n stopReason?: 'stop';\n };\n };\n}\n\nexport interface PushStreamAborted {\n type: 'event';\n event: 'chat';\n payload: {\n runId: string;\n sessionKey: string;\n seq: number;\n state: 'aborted';\n message: {\n role: string;\n content: TextContent[];\n timestamp?: number;\n };\n };\n}\n\nexport interface PushStreamError {\n type: 'event';\n event: 'chat';\n payload: {\n runId: string;\n sessionKey: string;\n seq: number;\n state: 'error';\n errorMessage: string;\n };\n}\n\nexport interface PushGatewayEvent {\n type: 'event';\n event: 'chat';\n payload: {\n runId: string;\n sessionKey: string;\n seq: number;\n state: 'final';\n message: {\n role: 'assistant';\n content: [\n {\n type: 'text';\n text: string;\n },\n ];\n timestamp: number;\n stopReason: 'stop';\n api: 'openai-responses';\n provider: 'openclaw';\n model: 'gateway-injected';\n };\n };\n seq: 91074;\n}\n\n// ===== PushMessage Types =====\nexport type PushMessage =\n | PushHistory\n | PushStreamDelta\n | PushStreamDone\n | PushStreamAborted\n | PushStreamError\n | PushGatewayEvent;\n\nexport type PushMessageImpl =\n | PushStreamStart\n | PushStreamDelta\n | PushStreamDone\n | PushStreamAborted\n | PushStreamError;\n\nexport const isPushGatewayEvent = (\n msg: PushMessageImpl,\n): msg is PushGatewayEvent => msg.type === 'event'\n && msg.event === 'chat'\n && msg.payload.state === 'final'\n && msg.payload.message.role === 'assistant'\n && (msg.payload.message as any).model === 'gateway-injected';\n\nexport const isPushStreamStart = (\n msg: PushMessageImpl,\n): msg is PushStreamStart => msg.type === 'event'\n && msg.event === 'agent'\n && msg.payload.stream === 'lifecycle'\n && msg.payload.data.phase === 'start';\n\nexport const isPushSteamDelta = (\n msg: PushMessageImpl,\n): msg is PushStreamDelta => msg.type === 'event'\n && msg.event === 'agent'\n && msg.payload.stream === 'assistant'\n && msg.payload.data.delta !== '';\n\nexport const isPushStreamDone = (msg: PushMessageImpl): msg is PushStreamDone => msg.type === 'event' && msg.event === 'chat' && msg.payload.state === 'final';\n\nexport const isPushStreamAborted = (\n msg: PushMessageImpl,\n): msg is PushStreamAborted => msg.type === 'event'\n && msg.event === 'chat'\n && msg.payload.state === 'aborted';\n\nexport const isPushStreamError = (\n msg: PushMessageImpl,\n): msg is PushStreamError => msg.type === 'event' && msg.event === 'chat' && msg.payload.state === 'error';\n\nexport interface ClawChatStatus {\n status: boolean;\n reason?: string;\n}\n// ===== Hook Return Type =====\nexport interface UseClawChatReturn {\n controllerRef: RefObject<ChatController | null>;\n pushMessage: (msg: PushMessageImpl) => void;\n pushHistory: (msg: PushHistory) => void;\n setClawChatStatus: (status: ClawChatStatus) => void;\n}\n\nexport type OnAction = (action: ChatAction) => void;\n"],"names":[],"mappings":";;AA+MO,MAAM,kBAAkB,GAAG,CAChC,GAAoB,KACQ,GAAG,CAAC,IAAI,KAAK,OAAO;OAC7C,GAAG,CAAC,KAAK,KAAK,MAAM;AACpB,OAAA,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO;AAC7B,OAAA,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;OACvC,GAAG,CAAC,OAAO,CAAC,OAAe,CAAC,KAAK,KAAK,mBAAmB;AAExD,MAAM,iBAAiB,GAAG,CAC/B,GAAoB,KACO,GAAG,CAAC,IAAI,KAAK,OAAO;OAC5C,GAAG,CAAC,KAAK,KAAK,OAAO;AACrB,OAAA,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW;OAClC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ;AAEjC,MAAM,gBAAgB,GAAG,CAC9B,GAAoB,KACO,GAAG,CAAC,IAAI,KAAK,OAAO;OAC5C,GAAG,CAAC,KAAK,KAAK,OAAO;AACrB,OAAA,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW;OAClC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG;AAE5B,MAAM,gBAAgB,GAAG,CAAC,GAAoB,KAA4B,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ;AAExJ,MAAM,mBAAmB,GAAG,CACjC,GAAoB,KACS,GAAG,CAAC,IAAI,KAAK,OAAO;OAC9C,GAAG,CAAC,KAAK,KAAK,MAAM;AACpB,OAAA,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,UAAU;AAE9B,MAAM,iBAAiB,GAAG,CAC/B,GAAoB,KACO,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useClawChat/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useClawChat/types.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ const isPushGatewayEvent = (msg) => msg.type === 'event'
2
2
  && msg.event === 'chat'
3
3
  && msg.payload.state === 'final'
4
4
  && msg.payload.message.role === 'assistant'
5
- && msg.payload.model === 'gateway-injected';
5
+ && msg.payload.message.model === 'gateway-injected';
6
6
  const isPushStreamStart = (msg) => msg.type === 'event'
7
7
  && msg.event === 'agent'
8
8
  && msg.payload.stream === 'lifecycle'
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../src/hooks/useClawChat/types.ts"],"sourcesContent":["import { ChatController } from '@chat-lab/core';\nimport { RefObject } from 'react';\n\nexport interface TextContent {\n type: 'text';\n text: string;\n}\nexport interface ThinkContent {\n type: 'thinking';\n thinking: string;\n}\nexport interface ToolCallContent {\n type: 'toolCall';\n id: string;\n name: string;\n arguments: Record<string, any>;\n}\n\nexport interface ToolResultContent {\n type: 'toolResult';\n toolCallId: string;\n toolName: string;\n content: TextContent[];\n isError: boolean;\n timestamp: number;\n}\n\ninterface ChatMessageContent {\n type: string; // text thinking toolCall image\n // text 类型特有字段\n text?: string; // 文本内容\n // thinking 类型特有字段\n thinking?: string; // 思考内容\n // toolCall 类型特有字段\n name?: string; // 工具名称\n id?: string; // 工具调用 ID\n arguments?: string; // 工具调用参数\n // image 类型特有字段\n content?: string; // 图片 Base64 编码\n uri?: string; // 图片 URI\n}\n\nexport type Content = {\n role: string; // user assistant toolResult\n content: ChatMessageContent[];\n timestamp: number;\n};\nexport interface ActionSend {\n type: 'send';\n message: string;\n thinking?: 'none' | 'low' | 'medium' | 'high';\n attachments?: Array<{\n type: 'image';\n mimeType: string;\n content: string; // base64 or uri\n }>;\n}\n\nexport interface ActionAbort {\n type: 'abort';\n runId?: string;\n}\n// ===== ChatAction Types =====\nexport type ChatAction = {\n message: string;\n thinking?: 'none' | 'low' | 'medium' | 'high';\n attachments?: Array<{\n type: 'image';\n mimeType: string;\n content: string;\n }>;\n};\n\nexport interface PushHistory {\n type: 'res';\n id: string;\n payload: {\n sessionKey: string;\n sessionId: string;\n messages: Content[];\n };\n thinkingLevel?: string;\n}\n\nexport interface PushStreamStart {\n type: 'event';\n event: 'agent';\n payload: {\n runId: string;\n stream: 'lifecycle';\n data: {\n phase: 'end';\n endedAt: number;\n };\n sessionKey: string;\n seq: number;\n ts: number;\n };\n seq: number;\n}\n\nexport interface PushStreamDelta {\n type: 'event';\n event: 'agent';\n payload: {\n runId: string;\n stream: 'assistant' | 'lifecycle';\n data: {\n text?: string; // 全量\n delta?: string; // 增量\n phase?: 'start';\n endedAt?: number;\n };\n sessionKey: string;\n seq: number;\n ts: number;\n };\n seq: number;\n}\nexport interface PushStreamDone {\n type: 'event';\n event: 'chat';\n seq: number;\n payload: {\n runId: string;\n sessionKey: string;\n seq: number;\n state: 'final';\n message: {\n role: string;\n content: TextContent[];\n timestamp: number;\n stopReason?: 'stop';\n };\n };\n}\n\nexport interface PushStreamAborted {\n type: 'event';\n event: 'chat';\n payload: {\n runId: string;\n sessionKey: string;\n seq: number;\n state: 'aborted';\n message: {\n role: string;\n content: TextContent[];\n timestamp?: number;\n };\n };\n}\n\nexport interface PushStreamError {\n type: 'event';\n event: 'chat';\n payload: {\n runId: string;\n sessionKey: string;\n seq: number;\n state: 'error';\n errorMessage: string;\n };\n}\n\nexport interface PushGatewayEvent {\n type: 'event';\n event: 'chat';\n payload: {\n runId: string;\n sessionKey: string;\n seq: number;\n state: 'final';\n message: {\n role: 'assistant';\n content: [\n {\n type: 'text';\n text: string;\n },\n ];\n timestamp: number;\n stopReason: 'stop';\n api: 'openai-responses';\n provider: 'openclaw';\n model: 'gateway-injected';\n };\n };\n seq: 91074;\n}\n\n// ===== PushMessage Types =====\nexport type PushMessage =\n | PushHistory\n | PushStreamDelta\n | PushStreamDone\n | PushStreamAborted\n | PushStreamError\n | PushGatewayEvent;\n\nexport type PushMessageImpl =\n | PushStreamStart\n | PushStreamDelta\n | PushStreamDone\n | PushStreamAborted\n | PushStreamError;\n\nexport const isPushGatewayEvent = (\n msg: PushMessageImpl,\n): msg is PushGatewayEvent => msg.type === 'event'\n && msg.event === 'chat'\n && msg.payload.state === 'final'\n && msg.payload.message.role === 'assistant'\n && (msg.payload as any).model === 'gateway-injected';\n\nexport const isPushStreamStart = (\n msg: PushMessageImpl,\n): msg is PushStreamStart => msg.type === 'event'\n && msg.event === 'agent'\n && msg.payload.stream === 'lifecycle'\n && msg.payload.data.phase === 'start';\n\nexport const isPushSteamDelta = (\n msg: PushMessageImpl,\n): msg is PushStreamDelta => msg.type === 'event'\n && msg.event === 'agent'\n && msg.payload.stream === 'assistant'\n && msg.payload.data.delta !== '';\n\nexport const isPushStreamDone = (msg: PushMessageImpl): msg is PushStreamDone => msg.type === 'event' && msg.event === 'chat' && msg.payload.state === 'final';\n\nexport const isPushStreamAborted = (\n msg: PushMessageImpl,\n): msg is PushStreamAborted => msg.type === 'event'\n && msg.event === 'chat'\n && msg.payload.state === 'aborted';\n\nexport const isPushStreamError = (\n msg: PushMessageImpl,\n): msg is PushStreamError => msg.type === 'event' && msg.event === 'chat' && msg.payload.state === 'error';\n\nexport interface ClawChatStatus {\n status: boolean;\n reason?: string;\n}\n// ===== Hook Return Type =====\nexport interface UseClawChatReturn {\n controllerRef: RefObject<ChatController | null>;\n pushMessage: (msg: PushMessageImpl) => void;\n pushHistory: (msg: PushHistory) => void;\n setClawChatStatus: (status: ClawChatStatus) => void;\n}\n\nexport type OnAction = (action: ChatAction) => void;\n"],"names":[],"mappings":"AA+MO,MAAM,kBAAkB,GAAG,CAChC,GAAoB,KACQ,GAAG,CAAC,IAAI,KAAK,OAAO;OAC7C,GAAG,CAAC,KAAK,KAAK,MAAM;AACpB,OAAA,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO;AAC7B,OAAA,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;AACvC,OAAA,GAAG,CAAC,OAAe,CAAC,KAAK,KAAK,mBAAmB;AAEhD,MAAM,iBAAiB,GAAG,CAC/B,GAAoB,KACO,GAAG,CAAC,IAAI,KAAK,OAAO;OAC5C,GAAG,CAAC,KAAK,KAAK,OAAO;AACrB,OAAA,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW;OAClC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ;AAEjC,MAAM,gBAAgB,GAAG,CAC9B,GAAoB,KACO,GAAG,CAAC,IAAI,KAAK,OAAO;OAC5C,GAAG,CAAC,KAAK,KAAK,OAAO;AACrB,OAAA,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW;OAClC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG;AAE5B,MAAM,gBAAgB,GAAG,CAAC,GAAoB,KAA4B,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ;AAExJ,MAAM,mBAAmB,GAAG,CACjC,GAAoB,KACS,GAAG,CAAC,IAAI,KAAK,OAAO;OAC9C,GAAG,CAAC,KAAK,KAAK,MAAM;AACpB,OAAA,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,UAAU;AAE9B,MAAM,iBAAiB,GAAG,CAC/B,GAAoB,KACO,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../../../src/hooks/useClawChat/types.ts"],"sourcesContent":["import { ChatController } from '@chat-lab/core';\nimport { RefObject } from 'react';\n\nexport interface TextContent {\n type: 'text';\n text: string;\n}\nexport interface ThinkContent {\n type: 'thinking';\n thinking: string;\n}\nexport interface ToolCallContent {\n type: 'toolCall';\n id: string;\n name: string;\n arguments: Record<string, any>;\n}\n\nexport interface ToolResultContent {\n type: 'toolResult';\n toolCallId: string;\n toolName: string;\n content: TextContent[];\n isError: boolean;\n timestamp: number;\n}\n\ninterface ChatMessageContent {\n type: string; // text thinking toolCall image\n // text 类型特有字段\n text?: string; // 文本内容\n // thinking 类型特有字段\n thinking?: string; // 思考内容\n // toolCall 类型特有字段\n name?: string; // 工具名称\n id?: string; // 工具调用 ID\n arguments?: string; // 工具调用参数\n // image 类型特有字段\n content?: string; // 图片 Base64 编码\n uri?: string; // 图片 URI\n}\n\nexport type Content = {\n role: string; // user assistant toolResult\n content: ChatMessageContent[];\n timestamp: number;\n};\nexport interface ActionSend {\n type: 'send';\n message: string;\n thinking?: 'none' | 'low' | 'medium' | 'high';\n attachments?: Array<{\n type: 'image';\n mimeType: string;\n content: string; // base64 or uri\n }>;\n}\n\nexport interface ActionAbort {\n type: 'abort';\n runId?: string;\n}\n// ===== ChatAction Types =====\nexport type ChatAction = {\n message: string;\n thinking?: 'none' | 'low' | 'medium' | 'high';\n attachments?: Array<{\n type: 'image';\n mimeType: string;\n content: string;\n }>;\n};\n\nexport interface PushHistory {\n type: 'res';\n id: string;\n payload: {\n sessionKey: string;\n sessionId: string;\n messages: Content[];\n };\n thinkingLevel?: string;\n}\n\nexport interface PushStreamStart {\n type: 'event';\n event: 'agent';\n payload: {\n runId: string;\n stream: 'lifecycle';\n data: {\n phase: 'end';\n endedAt: number;\n };\n sessionKey: string;\n seq: number;\n ts: number;\n };\n seq: number;\n}\n\nexport interface PushStreamDelta {\n type: 'event';\n event: 'agent';\n payload: {\n runId: string;\n stream: 'assistant' | 'lifecycle';\n data: {\n text?: string; // 全量\n delta?: string; // 增量\n phase?: 'start';\n endedAt?: number;\n };\n sessionKey: string;\n seq: number;\n ts: number;\n };\n seq: number;\n}\nexport interface PushStreamDone {\n type: 'event';\n event: 'chat';\n seq: number;\n payload: {\n runId: string;\n sessionKey: string;\n seq: number;\n state: 'final';\n message: {\n role: string;\n content: TextContent[];\n timestamp: number;\n stopReason?: 'stop';\n };\n };\n}\n\nexport interface PushStreamAborted {\n type: 'event';\n event: 'chat';\n payload: {\n runId: string;\n sessionKey: string;\n seq: number;\n state: 'aborted';\n message: {\n role: string;\n content: TextContent[];\n timestamp?: number;\n };\n };\n}\n\nexport interface PushStreamError {\n type: 'event';\n event: 'chat';\n payload: {\n runId: string;\n sessionKey: string;\n seq: number;\n state: 'error';\n errorMessage: string;\n };\n}\n\nexport interface PushGatewayEvent {\n type: 'event';\n event: 'chat';\n payload: {\n runId: string;\n sessionKey: string;\n seq: number;\n state: 'final';\n message: {\n role: 'assistant';\n content: [\n {\n type: 'text';\n text: string;\n },\n ];\n timestamp: number;\n stopReason: 'stop';\n api: 'openai-responses';\n provider: 'openclaw';\n model: 'gateway-injected';\n };\n };\n seq: 91074;\n}\n\n// ===== PushMessage Types =====\nexport type PushMessage =\n | PushHistory\n | PushStreamDelta\n | PushStreamDone\n | PushStreamAborted\n | PushStreamError\n | PushGatewayEvent;\n\nexport type PushMessageImpl =\n | PushStreamStart\n | PushStreamDelta\n | PushStreamDone\n | PushStreamAborted\n | PushStreamError;\n\nexport const isPushGatewayEvent = (\n msg: PushMessageImpl,\n): msg is PushGatewayEvent => msg.type === 'event'\n && msg.event === 'chat'\n && msg.payload.state === 'final'\n && msg.payload.message.role === 'assistant'\n && (msg.payload.message as any).model === 'gateway-injected';\n\nexport const isPushStreamStart = (\n msg: PushMessageImpl,\n): msg is PushStreamStart => msg.type === 'event'\n && msg.event === 'agent'\n && msg.payload.stream === 'lifecycle'\n && msg.payload.data.phase === 'start';\n\nexport const isPushSteamDelta = (\n msg: PushMessageImpl,\n): msg is PushStreamDelta => msg.type === 'event'\n && msg.event === 'agent'\n && msg.payload.stream === 'assistant'\n && msg.payload.data.delta !== '';\n\nexport const isPushStreamDone = (msg: PushMessageImpl): msg is PushStreamDone => msg.type === 'event' && msg.event === 'chat' && msg.payload.state === 'final';\n\nexport const isPushStreamAborted = (\n msg: PushMessageImpl,\n): msg is PushStreamAborted => msg.type === 'event'\n && msg.event === 'chat'\n && msg.payload.state === 'aborted';\n\nexport const isPushStreamError = (\n msg: PushMessageImpl,\n): msg is PushStreamError => msg.type === 'event' && msg.event === 'chat' && msg.payload.state === 'error';\n\nexport interface ClawChatStatus {\n status: boolean;\n reason?: string;\n}\n// ===== Hook Return Type =====\nexport interface UseClawChatReturn {\n controllerRef: RefObject<ChatController | null>;\n pushMessage: (msg: PushMessageImpl) => void;\n pushHistory: (msg: PushHistory) => void;\n setClawChatStatus: (status: ClawChatStatus) => void;\n}\n\nexport type OnAction = (action: ChatAction) => void;\n"],"names":[],"mappings":"AA+MO,MAAM,kBAAkB,GAAG,CAChC,GAAoB,KACQ,GAAG,CAAC,IAAI,KAAK,OAAO;OAC7C,GAAG,CAAC,KAAK,KAAK,MAAM;AACpB,OAAA,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO;AAC7B,OAAA,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;OACvC,GAAG,CAAC,OAAO,CAAC,OAAe,CAAC,KAAK,KAAK,mBAAmB;AAExD,MAAM,iBAAiB,GAAG,CAC/B,GAAoB,KACO,GAAG,CAAC,IAAI,KAAK,OAAO;OAC5C,GAAG,CAAC,KAAK,KAAK,OAAO;AACrB,OAAA,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW;OAClC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ;AAEjC,MAAM,gBAAgB,GAAG,CAC9B,GAAoB,KACO,GAAG,CAAC,IAAI,KAAK,OAAO;OAC5C,GAAG,CAAC,KAAK,KAAK,OAAO;AACrB,OAAA,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW;OAClC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG;AAE5B,MAAM,gBAAgB,GAAG,CAAC,GAAoB,KAA4B,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ;AAExJ,MAAM,mBAAmB,GAAG,CACjC,GAAoB,KACS,GAAG,CAAC,IAAI,KAAK,OAAO;OAC9C,GAAG,CAAC,KAAK,KAAK,MAAM;AACpB,OAAA,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,UAAU;AAE9B,MAAM,iBAAiB,GAAG,CAC/B,GAAoB,KACO,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chat-lab/ui",
3
- "version": "0.1.0-beta.77",
3
+ "version": "0.1.0-beta.78",
4
4
  "type": "module",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/index.d.ts",