@chat-lab/ui 0.1.0-beta.64 → 0.1.0-beta.65

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.
Files changed (33) hide show
  1. package/dist/components/Chatkit/index.cjs +68 -61
  2. package/dist/components/Chatkit/index.cjs.map +1 -1
  3. package/dist/components/Chatkit/index.d.ts.map +1 -1
  4. package/dist/components/Chatkit/index.js +68 -61
  5. package/dist/components/Chatkit/index.js.map +1 -1
  6. package/dist/components/assistant-ui/thread.cjs +38 -16
  7. package/dist/components/assistant-ui/thread.cjs.map +1 -1
  8. package/dist/components/assistant-ui/thread.d.ts.map +1 -1
  9. package/dist/components/assistant-ui/thread.js +38 -16
  10. package/dist/components/assistant-ui/thread.js.map +1 -1
  11. package/dist/core/dist/index.cjs +3 -1
  12. package/dist/core/dist/index.cjs.map +1 -1
  13. package/dist/core/dist/index.js +3 -1
  14. package/dist/core/dist/index.js.map +1 -1
  15. package/dist/hooks/useClawChat/convertHistoryMessage.cjs +41 -22
  16. package/dist/hooks/useClawChat/convertHistoryMessage.cjs.map +1 -1
  17. package/dist/hooks/useClawChat/convertHistoryMessage.d.ts.map +1 -1
  18. package/dist/hooks/useClawChat/convertHistoryMessage.js +41 -22
  19. package/dist/hooks/useClawChat/convertHistoryMessage.js.map +1 -1
  20. package/dist/hooks/useClawChat/index.cjs +9 -3
  21. package/dist/hooks/useClawChat/index.cjs.map +1 -1
  22. package/dist/hooks/useClawChat/index.d.ts.map +1 -1
  23. package/dist/hooks/useClawChat/index.js +11 -5
  24. package/dist/hooks/useClawChat/index.js.map +1 -1
  25. package/dist/hooks/useClawChat/types.d.ts +4 -2
  26. package/dist/hooks/useClawChat/types.d.ts.map +1 -1
  27. package/dist/index.css +2 -2
  28. package/dist/utils/convertToAssistantMessage.cjs +2 -2
  29. package/dist/utils/convertToAssistantMessage.cjs.map +1 -1
  30. package/dist/utils/convertToAssistantMessage.d.ts.map +1 -1
  31. package/dist/utils/convertToAssistantMessage.js +2 -2
  32. package/dist/utils/convertToAssistantMessage.js.map +1 -1
  33. package/package.json +1 -1
@@ -42,28 +42,47 @@ const getStatus = (item) => {
42
42
  return index.MessageStatus.ABORTED;
43
43
  return item.errorMessage ? index.MessageStatus.ERROR : index.MessageStatus.SUCCESS;
44
44
  };
45
- const convertHistoryMessage = (history) =>
46
- // 每条 Content 对应一条 ChatMessage,不合并
47
- history.payload.messages.map((item, index$1) => {
48
- const status = getStatus(item);
49
- return {
50
- id: `${history.id}-${index$1}`,
51
- role: item.role === 'toolResult' ? 'assistant' : item.role,
52
- threadId: history.payload.sessionId || history.payload.sessionKey,
53
- metadata: {
54
- api: item.api,
55
- provider: item.provider,
56
- model: item.model,
57
- stopReason: item.stopReason,
58
- errorMessage: item.errorMessage,
59
- },
60
- status: getStatus(item),
61
- error: status === index.MessageStatus.ERROR ? item.errorMessage : undefined,
62
- content: item.content.map(convertInnerContentToMessage),
63
- createdAt: item.timestamp || Date.now(),
64
- updatedAt: item.timestamp || Date.now(),
65
- };
66
- });
45
+ const convertHistoryMessage = (history) => {
46
+ const result = [];
47
+ history.payload.messages.forEach((item, index$1) => {
48
+ // 如果是 assistant 或 toolResult,且上一条也是 assistant,合并到同一个 message
49
+ const isAssistantContent = item.role === 'assistant' || item.role === 'toolResult';
50
+ if (isAssistantContent && result.length > 0) {
51
+ const lastMessage = result[result.length - 1];
52
+ if (lastMessage.role === 'assistant') {
53
+ // 将当前内容添加到上一条 assistant 消息的 content 中
54
+ const newContent = item.content.map(convertInnerContentToMessage);
55
+ lastMessage.content = [...lastMessage.content, ...newContent];
56
+ // 更新状态(如果有错误,使用错误状态)
57
+ const status = getStatus(item);
58
+ if (status === index.MessageStatus.ERROR) {
59
+ lastMessage.status = status;
60
+ lastMessage.error = item.errorMessage;
61
+ }
62
+ return;
63
+ }
64
+ }
65
+ const status = getStatus(item);
66
+ result.push({
67
+ id: `${history.id}-${index$1}`,
68
+ role: item.role === 'toolResult' ? 'assistant' : item.role,
69
+ threadId: history.payload.sessionId || history.payload.sessionKey,
70
+ metadata: {
71
+ api: item.api,
72
+ provider: item.provider,
73
+ model: item.model,
74
+ stopReason: item.stopReason,
75
+ errorMessage: item.errorMessage,
76
+ },
77
+ status: getStatus(item),
78
+ error: status === index.MessageStatus.ERROR ? item.errorMessage : undefined,
79
+ content: item.content.map(convertInnerContentToMessage),
80
+ createdAt: item.timestamp || Date.now(),
81
+ updatedAt: item.timestamp || Date.now(),
82
+ });
83
+ });
84
+ return result;
85
+ };
67
86
 
68
87
  module.exports = convertHistoryMessage;
69
88
  //# sourceMappingURL=convertHistoryMessage.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"convertHistoryMessage.cjs","sources":["../../../src/hooks/useClawChat/convertHistoryMessage.ts"],"sourcesContent":["import { ChatMessage, MessageStatus } from '@chat-lab/core';\nimport {\n PushHistory,\n TextContent,\n ThinkContent,\n ToolCallContent,\n ToolResultContent,\n} from './types';\n\nconst convertInnerContentToMessage = (\n innerContent:\n | TextContent\n | ThinkContent\n | ToolCallContent\n | ToolResultContent,\n): ChatMessage['content'][number] => {\n switch (innerContent.type) {\n case 'text':\n return {\n type: 'text',\n text: innerContent.text,\n };\n case 'thinking':\n return {\n type: 'reasoning',\n text: innerContent.thinking,\n };\n case 'toolCall':\n return {\n type: 'tool_call',\n toolCallId: innerContent.id,\n toolCallName: innerContent.name,\n toolCallArgs: innerContent.arguments,\n content: null,\n };\n case 'toolResult':\n return {\n type: 'tool_call',\n toolCallId: innerContent.toolCallId,\n toolCallName: innerContent.toolName,\n toolCallArgs: {},\n content: innerContent.content.map((c) => c.text).join(''),\n };\n default:\n return {\n type: 'text',\n text: '',\n };\n }\n};\n\nconst getStatus = (item: PushHistory['payload']['messages'][number]) => {\n if (item.stopReason === 'aborted') return MessageStatus.ABORTED;\n return item.errorMessage ? MessageStatus.ERROR : MessageStatus.SUCCESS;\n};\n\nconst convertHistoryMessage = (history: PushHistory): ChatMessage[] =>\n// 每条 Content 对应一条 ChatMessage,不合并\n history.payload.messages.map((item, index) => {\n const status = getStatus(item);\n return {\n id: `${history.id}-${index}`,\n role: item.role === 'toolResult' ? 'assistant' : item.role,\n threadId: history.payload.sessionId || history.payload.sessionKey,\n metadata: {\n api: item.api,\n provider: item.provider,\n model: item.model,\n stopReason: item.stopReason,\n errorMessage: item.errorMessage,\n },\n status: getStatus(item),\n error: status === MessageStatus.ERROR ? item.errorMessage : undefined,\n content: item.content.map(convertInnerContentToMessage),\n createdAt: item.timestamp || Date.now(),\n updatedAt: item.timestamp || Date.now(),\n };\n });\nexport default convertHistoryMessage;\n"],"names":["MessageStatus","index"],"mappings":";;;;AASA,MAAM,4BAA4B,GAAG,CACnC,YAIqB,KACa;AAClC,IAAA,QAAQ,YAAY,CAAC,IAAI;AACvB,QAAA,KAAK,MAAM;YACT,OAAO;AACL,gBAAA,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,YAAY,CAAC,IAAI;aACxB,CAAC;AACJ,QAAA,KAAK,UAAU;YACb,OAAO;AACL,gBAAA,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,YAAY,CAAC,QAAQ;aAC5B,CAAC;AACJ,QAAA,KAAK,UAAU;YACb,OAAO;AACL,gBAAA,IAAI,EAAE,WAAW;gBACjB,UAAU,EAAE,YAAY,CAAC,EAAE;gBAC3B,YAAY,EAAE,YAAY,CAAC,IAAI;gBAC/B,YAAY,EAAE,YAAY,CAAC,SAAS;AACpC,gBAAA,OAAO,EAAE,IAAI;aACd,CAAC;AACJ,QAAA,KAAK,YAAY;YACf,OAAO;AACL,gBAAA,IAAI,EAAE,WAAW;gBACjB,UAAU,EAAE,YAAY,CAAC,UAAU;gBACnC,YAAY,EAAE,YAAY,CAAC,QAAQ;AACnC,gBAAA,YAAY,EAAE,EAAE;gBAChB,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;aAC1D,CAAC;AACJ,QAAA;YACE,OAAO;AACL,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,IAAI,EAAE,EAAE;aACT,CAAC;KACL;AACH,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAgD,KAAI;AACrE,IAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;QAAE,OAAOA,mBAAa,CAAC,OAAO,CAAC;AAChE,IAAA,OAAO,IAAI,CAAC,YAAY,GAAGA,mBAAa,CAAC,KAAK,GAAGA,mBAAa,CAAC,OAAO,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAAoB;AACnD;AACE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAEC,OAAK,KAAI;AAC3C,IAAA,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO;AACL,QAAA,EAAE,EAAE,CAAG,EAAA,OAAO,CAAC,EAAE,CAAA,CAAA,EAAIA,OAAK,CAAE,CAAA;AAC5B,QAAA,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,YAAY,GAAG,WAAW,GAAG,IAAI,CAAC,IAAI;QAC1D,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU;AACjE,QAAA,QAAQ,EAAE;YACR,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;AAChC,SAAA;AACD,QAAA,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC;AACvB,QAAA,KAAK,EAAE,MAAM,KAAKD,mBAAa,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,GAAG,SAAS;QACrE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;QACvD,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;QACvC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;KACxC,CAAC;AACJ,CAAC;;;;"}
1
+ {"version":3,"file":"convertHistoryMessage.cjs","sources":["../../../src/hooks/useClawChat/convertHistoryMessage.ts"],"sourcesContent":["import { ChatMessage, MessageStatus } from '@chat-lab/core';\nimport {\n PushHistory,\n TextContent,\n ThinkContent,\n ToolCallContent,\n ToolResultContent,\n} from './types';\n\nconst convertInnerContentToMessage = (\n innerContent:\n | TextContent\n | ThinkContent\n | ToolCallContent\n | ToolResultContent,\n): ChatMessage['content'][number] => {\n switch (innerContent.type) {\n case 'text':\n return {\n type: 'text',\n text: innerContent.text,\n };\n case 'thinking':\n return {\n type: 'reasoning',\n text: innerContent.thinking,\n };\n case 'toolCall':\n return {\n type: 'tool_call',\n toolCallId: innerContent.id,\n toolCallName: innerContent.name,\n toolCallArgs: innerContent.arguments,\n content: null,\n };\n case 'toolResult':\n return {\n type: 'tool_call',\n toolCallId: innerContent.toolCallId,\n toolCallName: innerContent.toolName,\n toolCallArgs: {},\n content: innerContent.content.map((c) => c.text).join(''),\n };\n default:\n return {\n type: 'text',\n text: '',\n };\n }\n};\n\nconst getStatus = (item: PushHistory['payload']['messages'][number]) => {\n if (item.stopReason === 'aborted') return MessageStatus.ABORTED;\n return item.errorMessage ? MessageStatus.ERROR : MessageStatus.SUCCESS;\n};\n\nconst convertHistoryMessage = (history: PushHistory): ChatMessage[] => {\n const result: ChatMessage[] = [];\n\n history.payload.messages.forEach((item, index) => {\n // 如果是 assistant 或 toolResult,且上一条也是 assistant,合并到同一个 message\n const isAssistantContent = item.role === 'assistant' || item.role === 'toolResult';\n if (isAssistantContent && result.length > 0) {\n const lastMessage = result[result.length - 1];\n if (lastMessage.role === 'assistant') {\n // 将当前内容添加到上一条 assistant 消息的 content 中\n const newContent = item.content.map(convertInnerContentToMessage);\n lastMessage.content = [...lastMessage.content, ...newContent];\n // 更新状态(如果有错误,使用错误状态)\n const status = getStatus(item);\n if (status === MessageStatus.ERROR) {\n lastMessage.status = status;\n lastMessage.error = item.errorMessage;\n }\n return;\n }\n }\n\n const status = getStatus(item);\n result.push({\n id: `${history.id}-${index}`,\n role: item.role === 'toolResult' ? 'assistant' : item.role,\n threadId: history.payload.sessionId || history.payload.sessionKey,\n metadata: {\n api: item.api,\n provider: item.provider,\n model: item.model,\n stopReason: item.stopReason,\n errorMessage: item.errorMessage,\n },\n status: getStatus(item),\n error: status === MessageStatus.ERROR ? item.errorMessage : undefined,\n content: item.content.map(convertInnerContentToMessage),\n createdAt: item.timestamp || Date.now(),\n updatedAt: item.timestamp || Date.now(),\n });\n });\n\n return result;\n};\nexport default convertHistoryMessage;\n"],"names":["MessageStatus","index"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"convertHistoryMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/useClawChat/convertHistoryMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAiB,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EACL,WAAW,EAKZ,MAAM,SAAS,CAAC;AAiDjB,QAAA,MAAM,qBAAqB,GAAI,SAAS,WAAW,KAAG,WAAW,EAqB7D,CAAC;AACL,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"convertHistoryMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/useClawChat/convertHistoryMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAiB,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EACL,WAAW,EAKZ,MAAM,SAAS,CAAC;AAiDjB,QAAA,MAAM,qBAAqB,GAAI,SAAS,WAAW,KAAG,WAAW,EA2ChE,CAAC;AACF,eAAe,qBAAqB,CAAC"}
@@ -40,28 +40,47 @@ const getStatus = (item) => {
40
40
  return MessageStatus.ABORTED;
41
41
  return item.errorMessage ? MessageStatus.ERROR : MessageStatus.SUCCESS;
42
42
  };
43
- const convertHistoryMessage = (history) =>
44
- // 每条 Content 对应一条 ChatMessage,不合并
45
- history.payload.messages.map((item, index) => {
46
- const status = getStatus(item);
47
- return {
48
- id: `${history.id}-${index}`,
49
- role: item.role === 'toolResult' ? 'assistant' : item.role,
50
- threadId: history.payload.sessionId || history.payload.sessionKey,
51
- metadata: {
52
- api: item.api,
53
- provider: item.provider,
54
- model: item.model,
55
- stopReason: item.stopReason,
56
- errorMessage: item.errorMessage,
57
- },
58
- status: getStatus(item),
59
- error: status === MessageStatus.ERROR ? item.errorMessage : undefined,
60
- content: item.content.map(convertInnerContentToMessage),
61
- createdAt: item.timestamp || Date.now(),
62
- updatedAt: item.timestamp || Date.now(),
63
- };
64
- });
43
+ const convertHistoryMessage = (history) => {
44
+ const result = [];
45
+ history.payload.messages.forEach((item, index) => {
46
+ // 如果是 assistant 或 toolResult,且上一条也是 assistant,合并到同一个 message
47
+ const isAssistantContent = item.role === 'assistant' || item.role === 'toolResult';
48
+ if (isAssistantContent && result.length > 0) {
49
+ const lastMessage = result[result.length - 1];
50
+ if (lastMessage.role === 'assistant') {
51
+ // 将当前内容添加到上一条 assistant 消息的 content 中
52
+ const newContent = item.content.map(convertInnerContentToMessage);
53
+ lastMessage.content = [...lastMessage.content, ...newContent];
54
+ // 更新状态(如果有错误,使用错误状态)
55
+ const status = getStatus(item);
56
+ if (status === MessageStatus.ERROR) {
57
+ lastMessage.status = status;
58
+ lastMessage.error = item.errorMessage;
59
+ }
60
+ return;
61
+ }
62
+ }
63
+ const status = getStatus(item);
64
+ result.push({
65
+ id: `${history.id}-${index}`,
66
+ role: item.role === 'toolResult' ? 'assistant' : item.role,
67
+ threadId: history.payload.sessionId || history.payload.sessionKey,
68
+ metadata: {
69
+ api: item.api,
70
+ provider: item.provider,
71
+ model: item.model,
72
+ stopReason: item.stopReason,
73
+ errorMessage: item.errorMessage,
74
+ },
75
+ status: getStatus(item),
76
+ error: status === MessageStatus.ERROR ? item.errorMessage : undefined,
77
+ content: item.content.map(convertInnerContentToMessage),
78
+ createdAt: item.timestamp || Date.now(),
79
+ updatedAt: item.timestamp || Date.now(),
80
+ });
81
+ });
82
+ return result;
83
+ };
65
84
 
66
85
  export { convertHistoryMessage as default };
67
86
  //# sourceMappingURL=convertHistoryMessage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"convertHistoryMessage.js","sources":["../../../src/hooks/useClawChat/convertHistoryMessage.ts"],"sourcesContent":["import { ChatMessage, MessageStatus } from '@chat-lab/core';\nimport {\n PushHistory,\n TextContent,\n ThinkContent,\n ToolCallContent,\n ToolResultContent,\n} from './types';\n\nconst convertInnerContentToMessage = (\n innerContent:\n | TextContent\n | ThinkContent\n | ToolCallContent\n | ToolResultContent,\n): ChatMessage['content'][number] => {\n switch (innerContent.type) {\n case 'text':\n return {\n type: 'text',\n text: innerContent.text,\n };\n case 'thinking':\n return {\n type: 'reasoning',\n text: innerContent.thinking,\n };\n case 'toolCall':\n return {\n type: 'tool_call',\n toolCallId: innerContent.id,\n toolCallName: innerContent.name,\n toolCallArgs: innerContent.arguments,\n content: null,\n };\n case 'toolResult':\n return {\n type: 'tool_call',\n toolCallId: innerContent.toolCallId,\n toolCallName: innerContent.toolName,\n toolCallArgs: {},\n content: innerContent.content.map((c) => c.text).join(''),\n };\n default:\n return {\n type: 'text',\n text: '',\n };\n }\n};\n\nconst getStatus = (item: PushHistory['payload']['messages'][number]) => {\n if (item.stopReason === 'aborted') return MessageStatus.ABORTED;\n return item.errorMessage ? MessageStatus.ERROR : MessageStatus.SUCCESS;\n};\n\nconst convertHistoryMessage = (history: PushHistory): ChatMessage[] =>\n// 每条 Content 对应一条 ChatMessage,不合并\n history.payload.messages.map((item, index) => {\n const status = getStatus(item);\n return {\n id: `${history.id}-${index}`,\n role: item.role === 'toolResult' ? 'assistant' : item.role,\n threadId: history.payload.sessionId || history.payload.sessionKey,\n metadata: {\n api: item.api,\n provider: item.provider,\n model: item.model,\n stopReason: item.stopReason,\n errorMessage: item.errorMessage,\n },\n status: getStatus(item),\n error: status === MessageStatus.ERROR ? item.errorMessage : undefined,\n content: item.content.map(convertInnerContentToMessage),\n createdAt: item.timestamp || Date.now(),\n updatedAt: item.timestamp || Date.now(),\n };\n });\nexport default convertHistoryMessage;\n"],"names":[],"mappings":";;AASA,MAAM,4BAA4B,GAAG,CACnC,YAIqB,KACa;AAClC,IAAA,QAAQ,YAAY,CAAC,IAAI;AACvB,QAAA,KAAK,MAAM;YACT,OAAO;AACL,gBAAA,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,YAAY,CAAC,IAAI;aACxB,CAAC;AACJ,QAAA,KAAK,UAAU;YACb,OAAO;AACL,gBAAA,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,YAAY,CAAC,QAAQ;aAC5B,CAAC;AACJ,QAAA,KAAK,UAAU;YACb,OAAO;AACL,gBAAA,IAAI,EAAE,WAAW;gBACjB,UAAU,EAAE,YAAY,CAAC,EAAE;gBAC3B,YAAY,EAAE,YAAY,CAAC,IAAI;gBAC/B,YAAY,EAAE,YAAY,CAAC,SAAS;AACpC,gBAAA,OAAO,EAAE,IAAI;aACd,CAAC;AACJ,QAAA,KAAK,YAAY;YACf,OAAO;AACL,gBAAA,IAAI,EAAE,WAAW;gBACjB,UAAU,EAAE,YAAY,CAAC,UAAU;gBACnC,YAAY,EAAE,YAAY,CAAC,QAAQ;AACnC,gBAAA,YAAY,EAAE,EAAE;gBAChB,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;aAC1D,CAAC;AACJ,QAAA;YACE,OAAO;AACL,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,IAAI,EAAE,EAAE;aACT,CAAC;KACL;AACH,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAgD,KAAI;AACrE,IAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;QAAE,OAAO,aAAa,CAAC,OAAO,CAAC;AAChE,IAAA,OAAO,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAAoB;AACnD;AACE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAC3C,IAAA,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO;AACL,QAAA,EAAE,EAAE,CAAG,EAAA,OAAO,CAAC,EAAE,CAAA,CAAA,EAAI,KAAK,CAAE,CAAA;AAC5B,QAAA,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,YAAY,GAAG,WAAW,GAAG,IAAI,CAAC,IAAI;QAC1D,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU;AACjE,QAAA,QAAQ,EAAE;YACR,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;AAChC,SAAA;AACD,QAAA,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC;AACvB,QAAA,KAAK,EAAE,MAAM,KAAK,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,GAAG,SAAS;QACrE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;QACvD,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;QACvC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;KACxC,CAAC;AACJ,CAAC;;;;"}
1
+ {"version":3,"file":"convertHistoryMessage.js","sources":["../../../src/hooks/useClawChat/convertHistoryMessage.ts"],"sourcesContent":["import { ChatMessage, MessageStatus } from '@chat-lab/core';\nimport {\n PushHistory,\n TextContent,\n ThinkContent,\n ToolCallContent,\n ToolResultContent,\n} from './types';\n\nconst convertInnerContentToMessage = (\n innerContent:\n | TextContent\n | ThinkContent\n | ToolCallContent\n | ToolResultContent,\n): ChatMessage['content'][number] => {\n switch (innerContent.type) {\n case 'text':\n return {\n type: 'text',\n text: innerContent.text,\n };\n case 'thinking':\n return {\n type: 'reasoning',\n text: innerContent.thinking,\n };\n case 'toolCall':\n return {\n type: 'tool_call',\n toolCallId: innerContent.id,\n toolCallName: innerContent.name,\n toolCallArgs: innerContent.arguments,\n content: null,\n };\n case 'toolResult':\n return {\n type: 'tool_call',\n toolCallId: innerContent.toolCallId,\n toolCallName: innerContent.toolName,\n toolCallArgs: {},\n content: innerContent.content.map((c) => c.text).join(''),\n };\n default:\n return {\n type: 'text',\n text: '',\n };\n }\n};\n\nconst getStatus = (item: PushHistory['payload']['messages'][number]) => {\n if (item.stopReason === 'aborted') return MessageStatus.ABORTED;\n return item.errorMessage ? MessageStatus.ERROR : MessageStatus.SUCCESS;\n};\n\nconst convertHistoryMessage = (history: PushHistory): ChatMessage[] => {\n const result: ChatMessage[] = [];\n\n history.payload.messages.forEach((item, index) => {\n // 如果是 assistant 或 toolResult,且上一条也是 assistant,合并到同一个 message\n const isAssistantContent = item.role === 'assistant' || item.role === 'toolResult';\n if (isAssistantContent && result.length > 0) {\n const lastMessage = result[result.length - 1];\n if (lastMessage.role === 'assistant') {\n // 将当前内容添加到上一条 assistant 消息的 content 中\n const newContent = item.content.map(convertInnerContentToMessage);\n lastMessage.content = [...lastMessage.content, ...newContent];\n // 更新状态(如果有错误,使用错误状态)\n const status = getStatus(item);\n if (status === MessageStatus.ERROR) {\n lastMessage.status = status;\n lastMessage.error = item.errorMessage;\n }\n return;\n }\n }\n\n const status = getStatus(item);\n result.push({\n id: `${history.id}-${index}`,\n role: item.role === 'toolResult' ? 'assistant' : item.role,\n threadId: history.payload.sessionId || history.payload.sessionKey,\n metadata: {\n api: item.api,\n provider: item.provider,\n model: item.model,\n stopReason: item.stopReason,\n errorMessage: item.errorMessage,\n },\n status: getStatus(item),\n error: status === MessageStatus.ERROR ? item.errorMessage : undefined,\n content: item.content.map(convertInnerContentToMessage),\n createdAt: item.timestamp || Date.now(),\n updatedAt: item.timestamp || Date.now(),\n });\n });\n\n return result;\n};\nexport default convertHistoryMessage;\n"],"names":[],"mappings":";;AASA,MAAM,4BAA4B,GAAG,CACnC,YAIqB,KACa;AAClC,IAAA,QAAQ,YAAY,CAAC,IAAI;AACvB,QAAA,KAAK,MAAM;YACT,OAAO;AACL,gBAAA,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,YAAY,CAAC,IAAI;aACxB,CAAC;AACJ,QAAA,KAAK,UAAU;YACb,OAAO;AACL,gBAAA,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,YAAY,CAAC,QAAQ;aAC5B,CAAC;AACJ,QAAA,KAAK,UAAU;YACb,OAAO;AACL,gBAAA,IAAI,EAAE,WAAW;gBACjB,UAAU,EAAE,YAAY,CAAC,EAAE;gBAC3B,YAAY,EAAE,YAAY,CAAC,IAAI;gBAC/B,YAAY,EAAE,YAAY,CAAC,SAAS;AACpC,gBAAA,OAAO,EAAE,IAAI;aACd,CAAC;AACJ,QAAA,KAAK,YAAY;YACf,OAAO;AACL,gBAAA,IAAI,EAAE,WAAW;gBACjB,UAAU,EAAE,YAAY,CAAC,UAAU;gBACnC,YAAY,EAAE,YAAY,CAAC,QAAQ;AACnC,gBAAA,YAAY,EAAE,EAAE;gBAChB,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;aAC1D,CAAC;AACJ,QAAA;YACE,OAAO;AACL,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,IAAI,EAAE,EAAE;aACT,CAAC;KACL;AACH,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAgD,KAAI;AACrE,IAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;QAAE,OAAO,aAAa,CAAC,OAAO,CAAC;AAChE,IAAA,OAAO,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,OAAoB,KAAmB;IACpE,MAAM,MAAM,GAAkB,EAAE,CAAC;AAEjC,IAAA,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;;AAE/C,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC;QACnF,IAAI,kBAAkB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9C,YAAA,IAAI,WAAW,CAAC,IAAI,KAAK,WAAW,EAAE;;gBAEpC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAClE,gBAAA,WAAW,CAAC,OAAO,GAAG,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;;AAE9D,gBAAA,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAC/B,gBAAA,IAAI,MAAM,KAAK,aAAa,CAAC,KAAK,EAAE;AAClC,oBAAA,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;AAC5B,oBAAA,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;iBACvC;gBACD,OAAO;aACR;SACF;AAED,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC;AACV,YAAA,EAAE,EAAE,CAAG,EAAA,OAAO,CAAC,EAAE,CAAA,CAAA,EAAI,KAAK,CAAE,CAAA;AAC5B,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,YAAY,GAAG,WAAW,GAAG,IAAI,CAAC,IAAI;YAC1D,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU;AACjE,YAAA,QAAQ,EAAE;gBACR,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;AAChC,aAAA;AACD,YAAA,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC;AACvB,YAAA,KAAK,EAAE,MAAM,KAAK,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,GAAG,SAAS;YACrE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;YACvD,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;YACvC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;AACxC,SAAA,CAAC,CAAC;AACL,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,MAAM,CAAC;AAChB;;;;"}
@@ -18,7 +18,6 @@ var convertHistoryMessage = require('./convertHistoryMessage.cjs');
18
18
  const useClawChat = ({ onAction, onAbort, }) => {
19
19
  const controllerRef = React.useRef(null);
20
20
  const currentRunIdRef = React.useRef(null);
21
- const [clawChatStatus, setClawChatStatus] = React.useState('idle');
22
21
  const pushMessageImplRef = React.useRef(() => { });
23
22
  /**
24
23
  * 推送消息到 Chat 组件
@@ -99,14 +98,21 @@ const useClawChat = ({ onAction, onAbort, }) => {
99
98
  protocolAdaptor: clawProtocolAdaptor,
100
99
  },
101
100
  storeManager,
101
+ metaData: index.createMetaData({
102
+ clawStatus: { status: false, reason: 'uninitialized' },
103
+ }),
102
104
  });
103
105
  }
106
+ const handleClawChatStatus = ahooks.useMemoizedFn((status) => {
107
+ if (controllerRef.current) {
108
+ controllerRef.current.metaData.clawStatus = status;
109
+ }
110
+ });
104
111
  return {
105
112
  controllerRef,
106
113
  pushMessage,
107
114
  pushHistory,
108
- setClawChatStatus,
109
- clawChatStatus,
115
+ setClawChatStatus: handleClawChatStatus,
110
116
  };
111
117
  };
112
118
 
@@ -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} from '@chat-lab/core';\nimport { useRef, useState } from 'react';\nimport { useMemoizedFn } from 'ahooks';\nimport {\n UseClawChatReturn,\n OnAction,\n ClawChatStatus,\n PushMessageImpl,\n PushHistory,\n isPushStreamStart,\n isPushStreamDone,\n isPushStreamError,\n isPushStreamAborted,\n} from './types';\nimport { createClawCompletion } from './clawCompletion';\nimport ClawProtocolAdaptor from './ClawProtocolAdaptor';\nimport convertHistoryMessage from './convertHistoryMessage';\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 */\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 | null>(null);\n const [clawChatStatus, setClawChatStatus] = useState<ClawChatStatus>('idle');\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 = msg.payload.runId;\n // 手动设置 sending 状态,显示小圆圈\n if (thread) {\n controllerRef.current?.setSending(thread.id, true);\n }\n const assistantMessage = thread?.messages.findLast(\n (message) => message.role === 'assistant',\n );\n controllerRef.current?.triggerCompletion({\n assistantMessage,\n extraRequestOptions: {\n meta: { shouldSendMessage: false },\n },\n });\n }\n if (\n isPushStreamAborted(msg)\n || isPushStreamDone(msg)\n || isPushStreamError(msg)\n ) {\n currentRunIdRef.current = null;\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\n // 创建 completion 函数\n const { clawCompletion, pushMessageImpl } = createClawCompletion(\n onAction,\n () => {\n if (currentRunIdRef.current) {\n onAbort(currentRunIdRef.current);\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: true,\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 });\n }\n\n return {\n controllerRef,\n pushMessage,\n pushHistory,\n setClawChatStatus,\n clawChatStatus,\n };\n};\n"],"names":["useRef","useState","useMemoizedFn","isPushStreamStart","isPushStreamAborted","isPushStreamDone","isPushStreamError","createThreadManagerStateWithDefault","ThreadMessageManager","clawCompletion","createClawCompletion","ProtocolEnum","ChatController"],"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} from '@chat-lab/core';\nimport { useRef, useState } from 'react';\nimport { useMemoizedFn } from 'ahooks';\nimport {\n UseClawChatReturn,\n OnAction,\n ClawChatStatus,\n PushMessageImpl,\n PushHistory,\n isPushStreamStart,\n isPushStreamDone,\n isPushStreamError,\n isPushStreamAborted,\n} from './types';\nimport { createClawCompletion } from './clawCompletion';\nimport ClawProtocolAdaptor from './ClawProtocolAdaptor';\nimport convertHistoryMessage from './convertHistoryMessage';\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 | null>(null);\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 = msg.payload.runId;\n // 手动设置 sending 状态,显示小圆圈\n if (thread) {\n controllerRef.current?.setSending(thread.id, true);\n }\n const assistantMessage = thread?.messages.findLast(\n (message) => message.role === 'assistant',\n );\n controllerRef.current?.triggerCompletion({\n assistantMessage,\n extraRequestOptions: {\n meta: { shouldSendMessage: false },\n },\n });\n }\n if (\n isPushStreamAborted(msg)\n || isPushStreamDone(msg)\n || isPushStreamError(msg)\n ) {\n currentRunIdRef.current = null;\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\n // 创建 completion 函数\n const { clawCompletion, pushMessageImpl } = createClawCompletion(\n onAction,\n () => {\n if (currentRunIdRef.current) {\n onAbort(currentRunIdRef.current);\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: true,\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 });\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","isPushStreamAborted","isPushStreamDone","isPushStreamError","createThreadManagerStateWithDefault","ThreadMessageManager","clawCompletion","createClawCompletion","ProtocolEnum","ChatController","createMetaData"],"mappings":";;;;;;;;;;AA4BA;;;;;;AAMG;AAEU,MAAA,WAAW,GAAG,CAAC,EAC1B,QAAQ,EACR,OAAO,GAIR,KAAuB;AACtB,IAAA,MAAM,aAAa,GAAGA,YAAM,CAAwB,IAAI,CAAC,CAAC;AAC1D,IAAA,MAAM,eAAe,GAAGA,YAAM,CAAgB,IAAI,CAAC,CAAC;IAEpD,MAAM,kBAAkB,GAAGA,YAAM,CAAiC,MAAK,GAAG,CAAC,CAAC;AAC5E;;;AAGG;AACH,IAAA,MAAM,WAAW,GAAGC,oBAAa,CAAC,CAAC,GAAoB,KAAI;;QAEzD,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC;;AAEzD,QAAA,IAAIC,uBAAiB,CAAC,GAAG,CAAC,EAAE;YAC1B,eAAe,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;;YAE5C,IAAI,MAAM,EAAE;gBACV,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;aACpD;AACD,YAAA,MAAM,gBAAgB,GAAG,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAChD,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,KAAK,WAAW,CAC1C,CAAC;AACF,YAAA,aAAa,CAAC,OAAO,EAAE,iBAAiB,CAAC;gBACvC,gBAAgB;AAChB,gBAAA,mBAAmB,EAAE;AACnB,oBAAA,IAAI,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE;AACnC,iBAAA;AACF,aAAA,CAAC,CAAC;SACJ;QACD,IACEC,yBAAmB,CAAC,GAAG,CAAC;eACrBC,sBAAgB,CAAC,GAAG,CAAC;AACrB,eAAAC,uBAAiB,CAAC,GAAG,CAAC,EACzB;AACA,YAAA,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;;YAE/B,IAAI,MAAM,EAAE;gBACV,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpD,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;aACrD;SACF;AAED,QAAA,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAClC,KAAC,CAAC,CAAC;AAEH,IAAA,MAAM,WAAW,GAAGJ,oBAAa,CAAC,CAAC,GAAgB,KAAI;;;QAGrD,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC;QACzD,IAAI,MAAM,EAAE;YACV,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE;AAC7C,gBAAA,QAAQ,EAAE,qBAAqB,CAAC,GAAG,CAAC;AACrC,aAAA,CAAC,CAAC;SACJ;AACH,KAAC,CAAC,CAAC;;AAGH,IAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;AAC1B,QAAA,MAAM,KAAK,GAAGK,yCAAmC,EAAE,CAAC;AACpD,QAAA,MAAM,YAAY,GAAG,IAAIC,0BAAoB,CAAC,KAAK,CAAC,CAAC;;QAGrD,MAAM,kBAAEC,gBAAc,EAAE,eAAe,EAAE,GAAGC,mCAAoB,CAC9D,QAAQ,EACR,MAAK;AACH,YAAA,IAAI,eAAe,CAAC,OAAO,EAAE;AAC3B,gBAAA,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;aAClC;AACH,SAAC,CACF,CAAC;AACF,QAAA,kBAAkB,CAAC,OAAO,GAAG,eAAe,CAAC;;AAG7C,QAAA,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CAAC;YAClD,QAAQ,EAAEC,kBAAY,CAAC,MAAM;AAC7B,YAAA,YAAY,EAAE,MAAM;AACd,SAAA,CAAC,CAAC;AAEV,QAAA,aAAa,CAAC,OAAO,GAAG,IAAIC,oBAAc,CAAC;AACzC,YAAA,cAAc,EAAE;AACd,gBAAA,GAAG,EAAE,SAAS;AACd,gBAAA,OAAO,EAAE;AACP,oBAAA,aAAa,EAAE,SAAS;AACzB,iBAAA;AACD,gBAAA,IAAI,EAAE;AACJ,oBAAA,iBAAiB,EAAE,IAAI;AACvB,oBAAA,cAAc,EAAE,IAAI;AACrB,iBAAA;;AAED,gBAAA,WAAW,EAAEH,gBAAc;AAC5B,aAAA;AACD,YAAA,eAAe,EAAE;gBACf,QAAQ,EAAEE,kBAAY,CAAC,MAAM;AAC7B,gBAAA,YAAY,EAAE,MAAM;AACpB,gBAAA,eAAe,EAAE,mBAAmB;AAC9B,aAAA;YACR,YAAY;YACZ,QAAQ,EAAEE,oBAAc,CAAC;gBACvB,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE;aACvD,CAAC;AACH,SAAA,CAAC,CAAC;KACJ;AAED,IAAA,MAAM,oBAAoB,GAAGX,oBAAa,CAAC,CAAC,MAAsB,KAAI;AACpE,QAAA,IAAI,aAAa,CAAC,OAAO,EAAE;YACzB,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC;SACpD;AACH,KAAC,CAAC,CAAC;IAEH,OAAO;QACL,aAAa;QACb,WAAW;QACX,WAAW;AACX,QAAA,iBAAiB,EAAE,oBAAoB;KACxC,CAAC;AACJ;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useClawChat/index.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,iBAAiB,EACjB,QAAQ,EAQT,MAAM,SAAS,CAAC;AAKjB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,cAAc,uBAAuB,CAAC;AAEtC;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GAAI,wBAGzB;IACD,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC,KAAG,iBA4GH,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useClawChat/index.ts"],"names":[],"mappings":"AASA,OAAO,EACL,iBAAiB,EACjB,QAAQ,EAQT,MAAM,SAAS,CAAC;AAKjB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,cAAc,uBAAuB,CAAC;AAEtC;;;;;;GAMG;AAEH,eAAO,MAAM,WAAW,GAAI,wBAGzB;IACD,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC,KAAG,iBAmHH,CAAC"}
@@ -1,5 +1,5 @@
1
- import { createThreadManagerStateWithDefault, ProtocolEnum, ChatController, ThreadMessageManager } from '../../core/dist/index.js';
2
- import { useRef, useState } from 'react';
1
+ import { createThreadManagerStateWithDefault, ProtocolEnum, ChatController, createMetaData, ThreadMessageManager } from '../../core/dist/index.js';
2
+ import { useRef } from 'react';
3
3
  import { useMemoizedFn } from 'ahooks';
4
4
  import { isPushStreamStart, isPushStreamAborted, isPushStreamDone, isPushStreamError } from './types.js';
5
5
  export { isPushSteamDelta } from './types.js';
@@ -17,7 +17,6 @@ import convertHistoryMessage from './convertHistoryMessage.js';
17
17
  const useClawChat = ({ onAction, onAbort, }) => {
18
18
  const controllerRef = useRef(null);
19
19
  const currentRunIdRef = useRef(null);
20
- const [clawChatStatus, setClawChatStatus] = useState('idle');
21
20
  const pushMessageImplRef = useRef(() => { });
22
21
  /**
23
22
  * 推送消息到 Chat 组件
@@ -98,14 +97,21 @@ const useClawChat = ({ onAction, onAbort, }) => {
98
97
  protocolAdaptor: clawProtocolAdaptor,
99
98
  },
100
99
  storeManager,
100
+ metaData: createMetaData({
101
+ clawStatus: { status: false, reason: 'uninitialized' },
102
+ }),
101
103
  });
102
104
  }
105
+ const handleClawChatStatus = useMemoizedFn((status) => {
106
+ if (controllerRef.current) {
107
+ controllerRef.current.metaData.clawStatus = status;
108
+ }
109
+ });
103
110
  return {
104
111
  controllerRef,
105
112
  pushMessage,
106
113
  pushHistory,
107
- setClawChatStatus,
108
- clawChatStatus,
114
+ setClawChatStatus: handleClawChatStatus,
109
115
  };
110
116
  };
111
117
 
@@ -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} from '@chat-lab/core';\nimport { useRef, useState } from 'react';\nimport { useMemoizedFn } from 'ahooks';\nimport {\n UseClawChatReturn,\n OnAction,\n ClawChatStatus,\n PushMessageImpl,\n PushHistory,\n isPushStreamStart,\n isPushStreamDone,\n isPushStreamError,\n isPushStreamAborted,\n} from './types';\nimport { createClawCompletion } from './clawCompletion';\nimport ClawProtocolAdaptor from './ClawProtocolAdaptor';\nimport convertHistoryMessage from './convertHistoryMessage';\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 */\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 | null>(null);\n const [clawChatStatus, setClawChatStatus] = useState<ClawChatStatus>('idle');\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 = msg.payload.runId;\n // 手动设置 sending 状态,显示小圆圈\n if (thread) {\n controllerRef.current?.setSending(thread.id, true);\n }\n const assistantMessage = thread?.messages.findLast(\n (message) => message.role === 'assistant',\n );\n controllerRef.current?.triggerCompletion({\n assistantMessage,\n extraRequestOptions: {\n meta: { shouldSendMessage: false },\n },\n });\n }\n if (\n isPushStreamAborted(msg)\n || isPushStreamDone(msg)\n || isPushStreamError(msg)\n ) {\n currentRunIdRef.current = null;\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\n // 创建 completion 函数\n const { clawCompletion, pushMessageImpl } = createClawCompletion(\n onAction,\n () => {\n if (currentRunIdRef.current) {\n onAbort(currentRunIdRef.current);\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: true,\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 });\n }\n\n return {\n controllerRef,\n pushMessage,\n pushHistory,\n setClawChatStatus,\n clawChatStatus,\n };\n};\n"],"names":[],"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} from '@chat-lab/core';\nimport { useRef, useState } from 'react';\nimport { useMemoizedFn } from 'ahooks';\nimport {\n UseClawChatReturn,\n OnAction,\n ClawChatStatus,\n PushMessageImpl,\n PushHistory,\n isPushStreamStart,\n isPushStreamDone,\n isPushStreamError,\n isPushStreamAborted,\n} from './types';\nimport { createClawCompletion } from './clawCompletion';\nimport ClawProtocolAdaptor from './ClawProtocolAdaptor';\nimport convertHistoryMessage from './convertHistoryMessage';\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 | null>(null);\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 = msg.payload.runId;\n // 手动设置 sending 状态,显示小圆圈\n if (thread) {\n controllerRef.current?.setSending(thread.id, true);\n }\n const assistantMessage = thread?.messages.findLast(\n (message) => message.role === 'assistant',\n );\n controllerRef.current?.triggerCompletion({\n assistantMessage,\n extraRequestOptions: {\n meta: { shouldSendMessage: false },\n },\n });\n }\n if (\n isPushStreamAborted(msg)\n || isPushStreamDone(msg)\n || isPushStreamError(msg)\n ) {\n currentRunIdRef.current = null;\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\n // 创建 completion 函数\n const { clawCompletion, pushMessageImpl } = createClawCompletion(\n onAction,\n () => {\n if (currentRunIdRef.current) {\n onAbort(currentRunIdRef.current);\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: true,\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 });\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":[],"mappings":"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"}
@@ -147,13 +147,15 @@ export declare const isPushSteamDelta: (msg: PushMessageImpl) => msg is PushStre
147
147
  export declare const isPushStreamDone: (msg: PushMessageImpl) => msg is PushStreamDone;
148
148
  export declare const isPushStreamAborted: (msg: PushMessageImpl) => msg is PushStreamAborted;
149
149
  export declare const isPushStreamError: (msg: PushMessageImpl) => msg is PushStreamError;
150
- export type ClawChatStatus = 'running' | 'disabled' | 'idle';
150
+ export interface ClawChatStatus {
151
+ status: boolean;
152
+ reason?: string;
153
+ }
151
154
  export interface UseClawChatReturn {
152
155
  controllerRef: RefObject<ChatController | null>;
153
156
  pushMessage: (msg: PushMessageImpl) => void;
154
157
  pushHistory: (msg: PushHistory) => void;
155
158
  setClawChatStatus: (status: ClawChatStatus) => void;
156
- clawChatStatus: ClawChatStatus;
157
159
  }
158
160
  export type OnAction = (action: ChatAction) => void;
159
161
  export {};
@@ -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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"}