@ant-design/agentic-ui 2.30.21 → 2.30.23

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 (107) hide show
  1. package/dist/Bubble/MessagesContent/MarkdownPreview.d.ts +0 -58
  2. package/dist/Bubble/MessagesContent/MarkdownPreview.js +79 -155
  3. package/dist/Bubble/OpenAIMessageBubble/index.d.ts +11 -0
  4. package/dist/Bubble/OpenAIMessageBubble/index.js +8 -0
  5. package/dist/Bubble/OpenAIMessageBubble/mapOllamaMessages.d.ts +7 -0
  6. package/dist/Bubble/OpenAIMessageBubble/mapOllamaMessages.js +136 -0
  7. package/dist/Bubble/OpenAIMessageBubble/mapOpenAIMessages.d.ts +8 -0
  8. package/dist/Bubble/OpenAIMessageBubble/mapOpenAIMessages.js +156 -0
  9. package/dist/Bubble/OpenAIMessageBubble/mapOpenClawMessages.d.ts +8 -0
  10. package/dist/Bubble/OpenAIMessageBubble/mapOpenClawMessages.js +127 -0
  11. package/dist/Bubble/OpenAIMessageBubble/normalizeOllamaMessages.d.ts +16 -0
  12. package/dist/Bubble/OpenAIMessageBubble/normalizeOllamaMessages.js +110 -0
  13. package/dist/Bubble/OpenAIMessageBubble/normalizeOpenClawMessages.d.ts +10 -0
  14. package/dist/Bubble/OpenAIMessageBubble/normalizeOpenClawMessages.js +61 -0
  15. package/dist/Bubble/OpenAIMessageBubble/ollamaTypes.d.ts +48 -0
  16. package/dist/Bubble/OpenAIMessageBubble/ollamaTypes.js +1 -0
  17. package/dist/Bubble/OpenAIMessageBubble/openClawTypes.d.ts +27 -0
  18. package/dist/Bubble/OpenAIMessageBubble/openClawTypes.js +1 -0
  19. package/dist/Bubble/OpenAIMessageBubble/types.d.ts +71 -0
  20. package/dist/Bubble/OpenAIMessageBubble/types.js +1 -0
  21. package/dist/Bubble/OpenAIMessageBubble/useOllamaMessageBubbleData.d.ts +7 -0
  22. package/dist/Bubble/OpenAIMessageBubble/useOllamaMessageBubbleData.js +23 -0
  23. package/dist/Bubble/OpenAIMessageBubble/useOpenAIMessageBubbleData.d.ts +6 -0
  24. package/dist/Bubble/OpenAIMessageBubble/useOpenAIMessageBubbleData.js +20 -0
  25. package/dist/Bubble/OpenAIMessageBubble/useOpenClawMessageBubbleData.d.ts +7 -0
  26. package/dist/Bubble/OpenAIMessageBubble/useOpenClawMessageBubbleData.js +22 -0
  27. package/dist/Bubble/index.d.ts +2 -0
  28. package/dist/Bubble/index.js +1 -0
  29. package/dist/Hooks/useAutoScroll.js +6 -4
  30. package/dist/MarkdownEditor/BaseMarkdownEditor.d.ts +1 -50
  31. package/dist/MarkdownEditor/BaseMarkdownEditor.js +11 -55
  32. package/dist/MarkdownEditor/editor/Editor.js +35 -21
  33. package/dist/MarkdownEditor/editor/elements/Code/index.js +1 -0
  34. package/dist/MarkdownEditor/editor/elements/Table/SimpleTable.js +5 -1
  35. package/dist/MarkdownEditor/editor/elements/Table/commands/tableCommands.js +24 -8
  36. package/dist/MarkdownEditor/editor/elements/index.js +18 -14
  37. package/dist/MarkdownEditor/editor/plugins/elements.d.ts +2 -0
  38. package/dist/MarkdownEditor/editor/plugins/elements.js +4 -2
  39. package/dist/MarkdownEditor/editor/plugins/handlePaste.js +46 -35
  40. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/backspace.js +133 -133
  41. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/enter.js +156 -140
  42. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/match.d.ts +2 -1
  43. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/match.js +23 -4
  44. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/tab.js +40 -36
  45. package/dist/MarkdownEditor/editor/plugins/useKeyboard.js +46 -44
  46. package/dist/MarkdownEditor/editor/plugins/withCodeTagPlugin.js +1 -13
  47. package/dist/MarkdownEditor/editor/store.d.ts +15 -1
  48. package/dist/MarkdownEditor/editor/store.js +45 -34
  49. package/dist/MarkdownEditor/editor/tools/InsertAutocomplete.js +15 -11
  50. package/dist/MarkdownEditor/editor/utils/editorCommands.js +98 -17
  51. package/dist/MarkdownEditor/editor/utils/editorUtils.d.ts +11 -0
  52. package/dist/MarkdownEditor/editor/utils/editorUtils.js +43 -6
  53. package/dist/MarkdownEditor/editor/utils/keyboard.js +14 -12
  54. package/dist/MarkdownEditor/types.d.ts +36 -414
  55. package/dist/MarkdownEditor/types.js +1 -4
  56. package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/AttachmentFileListItem.d.ts +1 -1
  57. package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/AttachmentFileListItem.js +4 -5
  58. package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/index.d.ts +1 -1
  59. package/dist/MarkdownInputField/AttachmentButton/index.d.ts +1 -1
  60. package/dist/MarkdownInputField/MarkdownInputField.js +8 -1
  61. package/dist/MarkdownInputField/SendActions/index.js +7 -4
  62. package/dist/MarkdownInputField/SendButton/index.d.ts +6 -0
  63. package/dist/MarkdownInputField/SendButton/index.js +6 -0
  64. package/dist/MarkdownInputField/hooks/useMarkdownInputFieldHandlers.d.ts +2 -1
  65. package/dist/MarkdownInputField/hooks/useMarkdownInputFieldHandlers.js +12 -3
  66. package/dist/MarkdownInputField/hooks/useMarkdownInputFieldRefs.d.ts +1 -0
  67. package/dist/MarkdownInputField/hooks/useMarkdownInputFieldRefs.js +36 -5
  68. package/dist/MarkdownInputField/utils/renderHelpers.js +5 -0
  69. package/dist/MarkdownRenderer/AnimationText.d.ts +1 -5
  70. package/dist/MarkdownRenderer/AnimationText.js +2 -8
  71. package/dist/MarkdownRenderer/CharacterQueue.d.ts +0 -2
  72. package/dist/MarkdownRenderer/CharacterQueue.js +2 -2
  73. package/dist/MarkdownRenderer/FncRefForMarkdown.d.ts +24 -0
  74. package/dist/MarkdownRenderer/FncRefForMarkdown.js +65 -0
  75. package/dist/MarkdownRenderer/MarkdownRenderer.d.ts +1 -9
  76. package/dist/MarkdownRenderer/MarkdownRenderer.js +25 -18
  77. package/dist/MarkdownRenderer/StreamingCursor.d.ts +4 -0
  78. package/dist/MarkdownRenderer/StreamingCursor.js +20 -0
  79. package/dist/MarkdownRenderer/extractFootnoteDefinitions.d.ts +13 -0
  80. package/dist/MarkdownRenderer/extractFootnoteDefinitions.js +40 -0
  81. package/dist/MarkdownRenderer/markdownReactShared.d.ts +11 -38
  82. package/dist/MarkdownRenderer/markdownReactShared.js +28 -54
  83. package/dist/MarkdownRenderer/renderers/ChartRenderer.js +9 -1
  84. package/dist/MarkdownRenderer/renderers/CodeRenderer.d.ts +4 -1
  85. package/dist/MarkdownRenderer/renderers/CodeRenderer.js +27 -3
  86. package/dist/MarkdownRenderer/renderers/SchemaRenderer.d.ts +2 -0
  87. package/dist/MarkdownRenderer/renderers/SchemaRenderer.js +33 -5
  88. package/dist/MarkdownRenderer/streaming/MarkdownBlockPiece.d.ts +1 -3
  89. package/dist/MarkdownRenderer/streaming/MarkdownBlockPiece.js +16 -28
  90. package/dist/MarkdownRenderer/streaming/useStreamingMarkdownReact.js +2 -1
  91. package/dist/MarkdownRenderer/style.js +18 -0
  92. package/dist/MarkdownRenderer/types.d.ts +17 -93
  93. package/dist/MarkdownRenderer/useMarkdownToReact.js +1 -1
  94. package/dist/MarkdownRenderer/useStreaming.d.ts +1 -10
  95. package/dist/MarkdownRenderer/useStreaming.js +5 -13
  96. package/dist/Plugins/mermaid/MermaidRendererImpl.js +481 -7
  97. package/dist/Plugins/mermaid/style.js +71 -22
  98. package/dist/Plugins/mermaid/useMermaidRender.d.ts +2 -1
  99. package/dist/Plugins/mermaid/useMermaidRender.js +41 -13
  100. package/dist/Plugins/mermaid/utils.d.ts +16 -0
  101. package/dist/Plugins/mermaid/utils.js +197 -5
  102. package/dist/ThoughtChainList/MarkdownEditor.d.ts +1 -35
  103. package/dist/ThoughtChainList/MarkdownEditor.js +5 -44
  104. package/dist/Workspace/Browser/index.js +19 -1
  105. package/dist/Workspace/RealtimeFollow/index.d.ts +3 -0
  106. package/dist/Workspace/RealtimeFollow/index.js +5 -3
  107. package/package.json +8 -7
@@ -0,0 +1,156 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
14
+ function _object_spread(target) {
15
+ for(var i = 1; i < arguments.length; i++){
16
+ var source = arguments[i] != null ? arguments[i] : {};
17
+ var ownKeys = Object.keys(source);
18
+ if (typeof Object.getOwnPropertySymbols === "function") {
19
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
20
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
21
+ }));
22
+ }
23
+ ownKeys.forEach(function(key) {
24
+ _define_property(target, key, source[key]);
25
+ });
26
+ }
27
+ return target;
28
+ }
29
+ var DEFAULT_TOOL_ROLE = 'assistant';
30
+ /** @internal exported for OpenClaw 归一化复用 */ export function extractTextFromContent(content) {
31
+ if (content === undefined || content === null) {
32
+ return '';
33
+ }
34
+ if (typeof content === 'string') {
35
+ return content;
36
+ }
37
+ var parts = [];
38
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
39
+ try {
40
+ for(var _iterator = content[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
41
+ var part = _step.value;
42
+ if (part.type === 'text' && typeof part.text === 'string') {
43
+ parts.push(part.text);
44
+ continue;
45
+ }
46
+ if ('refusal' in part && typeof part.refusal === 'string') {
47
+ parts.push(part.refusal);
48
+ continue;
49
+ }
50
+ if (part.type === 'image_url') {
51
+ parts.push('[image]');
52
+ continue;
53
+ }
54
+ parts.push("[".concat(part.type, "]"));
55
+ }
56
+ } catch (err) {
57
+ _didIteratorError = true;
58
+ _iteratorError = err;
59
+ } finally{
60
+ try {
61
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
62
+ _iterator.return();
63
+ }
64
+ } finally{
65
+ if (_didIteratorError) {
66
+ throw _iteratorError;
67
+ }
68
+ }
69
+ }
70
+ return parts.join('\n');
71
+ }
72
+ function mapOpenAIRoleToRoleType(msg, toolRoleAs) {
73
+ switch(msg.role){
74
+ case 'user':
75
+ return 'user';
76
+ case 'system':
77
+ return 'system';
78
+ case 'assistant':
79
+ return 'assistant';
80
+ case 'tool':
81
+ case 'function':
82
+ return toolRoleAs;
83
+ default:
84
+ return 'assistant';
85
+ }
86
+ }
87
+ function appendAssistantExtras(msg, base, appendToolCalls) {
88
+ var _msg_tool_calls;
89
+ if (!appendToolCalls) {
90
+ return base;
91
+ }
92
+ var out = base;
93
+ if ((_msg_tool_calls = msg.tool_calls) === null || _msg_tool_calls === void 0 ? void 0 : _msg_tool_calls.length) {
94
+ out += "\n\n[tool_calls]\n".concat(JSON.stringify(msg.tool_calls, null, 2));
95
+ }
96
+ if (msg.function_call) {
97
+ out += "\n\n[function_call]\n".concat(JSON.stringify(msg.function_call, null, 2));
98
+ }
99
+ return out;
100
+ }
101
+ function defaultGetMessageId(msg, index) {
102
+ var _msg_id;
103
+ return (_msg_id = msg.id) !== null && _msg_id !== void 0 ? _msg_id : "openai-msg-".concat(index);
104
+ }
105
+ /**
106
+ * 将 OpenAI Chat Completions 风格的 messages 转为 MessageBubbleData[]
107
+ */ export function mapOpenAIMessagesToMessageBubbleData(messages, options, mapMessage) {
108
+ var _ref = options !== null && options !== void 0 ? options : {}, _ref_baseTime = _ref.baseTime, baseTime = _ref_baseTime === void 0 ? Date.now() : _ref_baseTime, _ref_timeStepMs = _ref.timeStepMs, timeStepMs = _ref_timeStepMs === void 0 ? 1 : _ref_timeStepMs, _ref_bumpUpdateAtOnLastMessage = _ref.bumpUpdateAtOnLastMessage, bumpUpdateAtOnLastMessage = _ref_bumpUpdateAtOnLastMessage === void 0 ? false : _ref_bumpUpdateAtOnLastMessage, _ref_getMessageId = _ref.getMessageId, getMessageId = _ref_getMessageId === void 0 ? defaultGetMessageId : _ref_getMessageId, _ref_toolRoleAs = _ref.toolRoleAs, toolRoleAs = _ref_toolRoleAs === void 0 ? DEFAULT_TOOL_ROLE : _ref_toolRoleAs, _ref_appendToolCallsToContent = _ref.appendToolCallsToContent, appendToolCallsToContent = _ref_appendToolCallsToContent === void 0 ? true : _ref_appendToolCallsToContent, _ref_preserveRawInExtra = _ref.preserveRawInExtra, preserveRawInExtra = _ref_preserveRawInExtra === void 0 ? true : _ref_preserveRawInExtra;
109
+ var lastIndex = messages.length - 1;
110
+ return messages.map(function(msg, index) {
111
+ var id = getMessageId(msg, index);
112
+ var role = mapOpenAIRoleToRoleType(msg, toolRoleAs);
113
+ var createAt = baseTime + index * timeStepMs;
114
+ var updateAt = createAt;
115
+ if (bumpUpdateAtOnLastMessage && index === lastIndex) {
116
+ updateAt = Date.now();
117
+ }
118
+ var text = '';
119
+ if (msg.role === 'assistant') {
120
+ var a = msg;
121
+ text = extractTextFromContent(a.content);
122
+ text = appendAssistantExtras(a, text, appendToolCallsToContent);
123
+ } else if (msg.role === 'user' || msg.role === 'system') {
124
+ text = extractTextFromContent(msg.content);
125
+ } else if (msg.role === 'tool') {
126
+ var _msg_content;
127
+ var prefix = msg.tool_call_id ? "[tool_call_id: ".concat(msg.tool_call_id, "]\n") : '';
128
+ text = prefix + ((_msg_content = msg.content) !== null && _msg_content !== void 0 ? _msg_content : '');
129
+ } else if (msg.role === 'function') {
130
+ var _msg_content1;
131
+ var prefix1 = msg.name ? "[function: ".concat(msg.name, "]\n") : '';
132
+ text = prefix1 + ((_msg_content1 = msg.content) !== null && _msg_content1 !== void 0 ? _msg_content1 : '');
133
+ }
134
+ var originContent = text;
135
+ var extra = preserveRawInExtra ? {
136
+ openai: {
137
+ role: msg.role,
138
+ raw: msg
139
+ }
140
+ } : {};
141
+ var draft = _object_spread({
142
+ id: id,
143
+ role: role,
144
+ content: text,
145
+ originContent: originContent,
146
+ createAt: createAt,
147
+ updateAt: updateAt
148
+ }, Object.keys(extra).length ? {
149
+ extra: extra
150
+ } : {});
151
+ if (mapMessage) {
152
+ draft = mapMessage(msg, index, draft);
153
+ }
154
+ return draft;
155
+ });
156
+ }
@@ -0,0 +1,8 @@
1
+ import type { MessageBubbleData } from '../../Types/message';
2
+ import type { OpenAIMessagesMapMessage } from './types';
3
+ import type { OpenClawChatMessage, OpenClawMessagesMapOptions } from './openClawTypes';
4
+ /**
5
+ * 将 OpenClaw 会话 / transcript 风格的 `messages` 转为 `MessageBubbleData[]`
6
+ *(内部先归一化为 OpenAI 形状再复用 {@link mapOpenAIMessagesToMessageBubbleData})。
7
+ */
8
+ export declare function mapOpenClawMessagesToMessageBubbleData(messages: OpenClawChatMessage[], options?: OpenClawMessagesMapOptions, mapMessage?: OpenAIMessagesMapMessage): MessageBubbleData[];
@@ -0,0 +1,127 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
14
+ function _object_spread(target) {
15
+ for(var i = 1; i < arguments.length; i++){
16
+ var source = arguments[i] != null ? arguments[i] : {};
17
+ var ownKeys = Object.keys(source);
18
+ if (typeof Object.getOwnPropertySymbols === "function") {
19
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
20
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
21
+ }));
22
+ }
23
+ ownKeys.forEach(function(key) {
24
+ _define_property(target, key, source[key]);
25
+ });
26
+ }
27
+ return target;
28
+ }
29
+ function ownKeys(object, enumerableOnly) {
30
+ var keys = Object.keys(object);
31
+ if (Object.getOwnPropertySymbols) {
32
+ var symbols = Object.getOwnPropertySymbols(object);
33
+ if (enumerableOnly) {
34
+ symbols = symbols.filter(function(sym) {
35
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
36
+ });
37
+ }
38
+ keys.push.apply(keys, symbols);
39
+ }
40
+ return keys;
41
+ }
42
+ function _object_spread_props(target, source) {
43
+ source = source != null ? source : {};
44
+ if (Object.getOwnPropertyDescriptors) {
45
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
46
+ } else {
47
+ ownKeys(Object(source)).forEach(function(key) {
48
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
49
+ });
50
+ }
51
+ return target;
52
+ }
53
+ function _object_without_properties(source, excluded) {
54
+ if (source == null) return {};
55
+ var target = {}, sourceKeys, key, i;
56
+ if (typeof Reflect !== "undefined" && Reflect.ownKeys) {
57
+ sourceKeys = Reflect.ownKeys(source);
58
+ for(i = 0; i < sourceKeys.length; i++){
59
+ key = sourceKeys[i];
60
+ if (excluded.indexOf(key) >= 0) continue;
61
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
62
+ target[key] = source[key];
63
+ }
64
+ return target;
65
+ }
66
+ target = _object_without_properties_loose(source, excluded);
67
+ if (Object.getOwnPropertySymbols) {
68
+ sourceKeys = Object.getOwnPropertySymbols(source);
69
+ for(i = 0; i < sourceKeys.length; i++){
70
+ key = sourceKeys[i];
71
+ if (excluded.indexOf(key) >= 0) continue;
72
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
73
+ target[key] = source[key];
74
+ }
75
+ }
76
+ return target;
77
+ }
78
+ function _object_without_properties_loose(source, excluded) {
79
+ if (source == null) return {};
80
+ var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i;
81
+ for(i = 0; i < sourceKeys.length; i++){
82
+ key = sourceKeys[i];
83
+ if (excluded.indexOf(key) >= 0) continue;
84
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
85
+ target[key] = source[key];
86
+ }
87
+ return target;
88
+ }
89
+ import { mapOpenAIMessagesToMessageBubbleData } from "./mapOpenAIMessages";
90
+ import { normalizeOpenClawMessagesToOpenAI } from "./normalizeOpenClawMessages";
91
+ /**
92
+ * 将 OpenClaw 会话 / transcript 风格的 `messages` 转为 `MessageBubbleData[]`
93
+ *(内部先归一化为 OpenAI 形状再复用 {@link mapOpenAIMessagesToMessageBubbleData})。
94
+ */ export function mapOpenClawMessagesToMessageBubbleData(messages, options, mapMessage) {
95
+ var openai = normalizeOpenClawMessagesToOpenAI(messages);
96
+ var _ref = options !== null && options !== void 0 ? options : {}, _ref_useOpenClawTimestamps = _ref.useOpenClawTimestamps, useOpenClawTimestamps = _ref_useOpenClawTimestamps === void 0 ? true : _ref_useOpenClawTimestamps, _ref_preserveOpenClawRawInExtra = _ref.preserveOpenClawRawInExtra, preserveOpenClawRawInExtra = _ref_preserveOpenClawRawInExtra === void 0 ? true : _ref_preserveOpenClawRawInExtra, rest = _object_without_properties(_ref, [
97
+ "useOpenClawTimestamps",
98
+ "preserveOpenClawRawInExtra"
99
+ ]);
100
+ if (!useOpenClawTimestamps && !preserveOpenClawRawInExtra && !mapMessage) {
101
+ return mapOpenAIMessagesToMessageBubbleData(openai, rest);
102
+ }
103
+ var innerMap = function innerMap(msg, index, draft) {
104
+ var d = draft;
105
+ var rawClaw = messages[index];
106
+ if (useOpenClawTimestamps && rawClaw && typeof rawClaw.timestamp === 'number' && Number.isFinite(rawClaw.timestamp)) {
107
+ d = _object_spread_props(_object_spread({}, d), {
108
+ createAt: rawClaw.timestamp,
109
+ updateAt: rawClaw.timestamp
110
+ });
111
+ }
112
+ if (preserveOpenClawRawInExtra && rawClaw) {
113
+ d = _object_spread_props(_object_spread({}, d), {
114
+ extra: _object_spread_props(_object_spread({}, d.extra), {
115
+ openclaw: {
116
+ raw: rawClaw
117
+ }
118
+ })
119
+ });
120
+ }
121
+ if (mapMessage) {
122
+ d = mapMessage(msg, index, d);
123
+ }
124
+ return d;
125
+ };
126
+ return mapOpenAIMessagesToMessageBubbleData(openai, rest, innerMap);
127
+ }
@@ -0,0 +1,16 @@
1
+ import type { OpenAIChatMessage } from './types';
2
+ import type { OllamaChatMessage } from './ollamaTypes';
3
+ /**
4
+ * 将单条 Ollama `ChatMessage` 转为 {@link OpenAIChatMessage},供统一映射层使用。
5
+ */
6
+ export declare function normalizeOllamaMessageToOpenAI(msg: OllamaChatMessage, options?: {
7
+ appendThinkingToContent?: boolean;
8
+ appendImagesPlaceholder?: boolean;
9
+ }): OpenAIChatMessage;
10
+ /**
11
+ * 批量将 Ollama `messages` 转为 OpenAI 形状
12
+ */
13
+ export declare function normalizeOllamaMessagesToOpenAI(messages: OllamaChatMessage[], options?: {
14
+ appendThinkingToContent?: boolean;
15
+ appendImagesPlaceholder?: boolean;
16
+ }): OpenAIChatMessage[];
@@ -0,0 +1,110 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
14
+ function _object_spread(target) {
15
+ for(var i = 1; i < arguments.length; i++){
16
+ var source = arguments[i] != null ? arguments[i] : {};
17
+ var ownKeys = Object.keys(source);
18
+ if (typeof Object.getOwnPropertySymbols === "function") {
19
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
20
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
21
+ }));
22
+ }
23
+ ownKeys.forEach(function(key) {
24
+ _define_property(target, key, source[key]);
25
+ });
26
+ }
27
+ return target;
28
+ }
29
+ function ownKeys(object, enumerableOnly) {
30
+ var keys = Object.keys(object);
31
+ if (Object.getOwnPropertySymbols) {
32
+ var symbols = Object.getOwnPropertySymbols(object);
33
+ if (enumerableOnly) {
34
+ symbols = symbols.filter(function(sym) {
35
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
36
+ });
37
+ }
38
+ keys.push.apply(keys, symbols);
39
+ }
40
+ return keys;
41
+ }
42
+ function _object_spread_props(target, source) {
43
+ source = source != null ? source : {};
44
+ if (Object.getOwnPropertyDescriptors) {
45
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
46
+ } else {
47
+ ownKeys(Object(source)).forEach(function(key) {
48
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
49
+ });
50
+ }
51
+ return target;
52
+ }
53
+ function buildDisplayContent(msg, appendThinking, appendImagesPlaceholder) {
54
+ var _msg_content;
55
+ var text = (_msg_content = msg.content) !== null && _msg_content !== void 0 ? _msg_content : '';
56
+ if (appendThinking && msg.thinking) {
57
+ text += "".concat(text ? '\n\n' : '', "[thinking]\n").concat(msg.thinking);
58
+ }
59
+ if (appendImagesPlaceholder && msg.images && msg.images.length > 0) {
60
+ text += "".concat(text ? '\n\n' : '', "[images: ").concat(msg.images.length, " attached]");
61
+ }
62
+ return text;
63
+ }
64
+ /**
65
+ * 将单条 Ollama `ChatMessage` 转为 {@link OpenAIChatMessage},供统一映射层使用。
66
+ */ export function normalizeOllamaMessageToOpenAI(msg, options) {
67
+ var appendThinking = (options === null || options === void 0 ? void 0 : options.appendThinkingToContent) !== false;
68
+ var appendImages = (options === null || options === void 0 ? void 0 : options.appendImagesPlaceholder) !== false;
69
+ var content = buildDisplayContent(msg, appendThinking, appendImages);
70
+ var base = {
71
+ id: msg.id
72
+ };
73
+ if (msg.role === 'assistant') {
74
+ var _msg_tool_calls;
75
+ return _object_spread(_object_spread_props(_object_spread({}, base), {
76
+ role: 'assistant',
77
+ content: content
78
+ }), ((_msg_tool_calls = msg.tool_calls) === null || _msg_tool_calls === void 0 ? void 0 : _msg_tool_calls.length) ? {
79
+ tool_calls: msg.tool_calls
80
+ } : {});
81
+ }
82
+ if (msg.role === 'tool') {
83
+ var prefix = msg.tool_name ? "[tool_name: ".concat(msg.tool_name, "]\n") : '';
84
+ return _object_spread(_object_spread_props(_object_spread({}, base), {
85
+ role: 'tool',
86
+ content: prefix + content
87
+ }), msg.tool_call_id ? {
88
+ tool_call_id: msg.tool_call_id
89
+ } : {}, msg.tool_name ? {
90
+ name: msg.tool_name
91
+ } : {});
92
+ }
93
+ if (msg.role === 'system') {
94
+ return _object_spread_props(_object_spread({}, base), {
95
+ role: 'system',
96
+ content: content
97
+ });
98
+ }
99
+ return _object_spread_props(_object_spread({}, base), {
100
+ role: 'user',
101
+ content: content
102
+ });
103
+ }
104
+ /**
105
+ * 批量将 Ollama `messages` 转为 OpenAI 形状
106
+ */ export function normalizeOllamaMessagesToOpenAI(messages, options) {
107
+ return messages.map(function(m) {
108
+ return normalizeOllamaMessageToOpenAI(m, options);
109
+ });
110
+ }
@@ -0,0 +1,10 @@
1
+ import type { OpenAIChatMessage } from './types';
2
+ import type { OpenClawChatMessage } from './openClawTypes';
3
+ /**
4
+ * 将单条 OpenClaw 风格消息转为可与 {@link mapOpenAIMessagesToMessageBubbleData} 兼容的 OpenAI 形状(`toolResult` → `tool`)。
5
+ */
6
+ export declare function normalizeOpenClawMessageToOpenAI(msg: OpenClawChatMessage): OpenAIChatMessage;
7
+ /**
8
+ * 批量将 OpenClaw transcript 消息转为 OpenAI Chat Completions 兼容结构
9
+ */
10
+ export declare function normalizeOpenClawMessagesToOpenAI(messages: OpenClawChatMessage[]): OpenAIChatMessage[];
@@ -0,0 +1,61 @@
1
+ function _object_without_properties(source, excluded) {
2
+ if (source == null) return {};
3
+ var target = {}, sourceKeys, key, i;
4
+ if (typeof Reflect !== "undefined" && Reflect.ownKeys) {
5
+ sourceKeys = Reflect.ownKeys(source);
6
+ for(i = 0; i < sourceKeys.length; i++){
7
+ key = sourceKeys[i];
8
+ if (excluded.indexOf(key) >= 0) continue;
9
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
10
+ target[key] = source[key];
11
+ }
12
+ return target;
13
+ }
14
+ target = _object_without_properties_loose(source, excluded);
15
+ if (Object.getOwnPropertySymbols) {
16
+ sourceKeys = Object.getOwnPropertySymbols(source);
17
+ for(i = 0; i < sourceKeys.length; i++){
18
+ key = sourceKeys[i];
19
+ if (excluded.indexOf(key) >= 0) continue;
20
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
21
+ target[key] = source[key];
22
+ }
23
+ }
24
+ return target;
25
+ }
26
+ function _object_without_properties_loose(source, excluded) {
27
+ if (source == null) return {};
28
+ var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i;
29
+ for(i = 0; i < sourceKeys.length; i++){
30
+ key = sourceKeys[i];
31
+ if (excluded.indexOf(key) >= 0) continue;
32
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
33
+ target[key] = source[key];
34
+ }
35
+ return target;
36
+ }
37
+ import { extractTextFromContent } from "./mapOpenAIMessages";
38
+ /**
39
+ * 将单条 OpenClaw 风格消息转为可与 {@link mapOpenAIMessagesToMessageBubbleData} 兼容的 OpenAI 形状(`toolResult` → `tool`)。
40
+ */ export function normalizeOpenClawMessageToOpenAI(msg) {
41
+ if (msg.role === 'toolResult') {
42
+ var m = msg;
43
+ var content = m.content === undefined || m.content === null ? '' : typeof m.content === 'string' ? m.content : extractTextFromContent(m.content);
44
+ return {
45
+ role: 'tool',
46
+ id: m.id,
47
+ name: m.name,
48
+ content: content,
49
+ tool_call_id: m.tool_call_id
50
+ };
51
+ }
52
+ var _ts = msg.timestamp, rest = _object_without_properties(msg, [
53
+ "timestamp"
54
+ ]);
55
+ return rest;
56
+ }
57
+ /**
58
+ * 批量将 OpenClaw transcript 消息转为 OpenAI Chat Completions 兼容结构
59
+ */ export function normalizeOpenClawMessagesToOpenAI(messages) {
60
+ return messages.map(normalizeOpenClawMessageToOpenAI);
61
+ }
@@ -0,0 +1,48 @@
1
+ import type { OpenAIMessagesMapOptions } from './types';
2
+ /**
3
+ * Ollama Chat API 中 ToolCall(见官方 OpenAPI `ToolCall`)
4
+ */
5
+ export interface OllamaToolCall {
6
+ function?: {
7
+ name: string;
8
+ description?: string;
9
+ arguments?: Record<string, unknown>;
10
+ };
11
+ /** 部分实现会带 id */
12
+ id?: string;
13
+ type?: string;
14
+ }
15
+ /**
16
+ * Ollama POST /api/chat 请求体中的单条 `messages[]`(见官方 `ChatMessage`)
17
+ */
18
+ export interface OllamaChatMessage {
19
+ role: 'system' | 'user' | 'assistant' | 'tool';
20
+ /** 流式片段可能为空字符串 */
21
+ content: string;
22
+ /** 客户端为稳定列表 key 可带 id */
23
+ id?: string;
24
+ /** 多模态:base64 图片列表 */
25
+ images?: string[];
26
+ /** assistant 上模型发起的工具调用 */
27
+ tool_calls?: OllamaToolCall[];
28
+ /** `think` 开启时的思考过程(流式或完整响应) */
29
+ thinking?: string;
30
+ /** `role: tool` 时常用,与 OpenAI 的 tool 名称对应 */
31
+ tool_name?: string;
32
+ tool_call_id?: string;
33
+ }
34
+ /** Ollama 映射选项 */
35
+ export interface OllamaMessagesMapOptions extends OpenAIMessagesMapOptions {
36
+ /**
37
+ * 为 true(默认)时,将 `thinking` 拼入展示用正文(映射后的 OpenAI assistant 文本)
38
+ */
39
+ appendThinkingToContent?: boolean;
40
+ /**
41
+ * 为 true(默认)时,若有 `images`,在正文中追加占位说明(不嵌入 base64)
42
+ */
43
+ appendImagesPlaceholder?: boolean;
44
+ /**
45
+ * 为 true(默认)时,在 `extra.ollama.raw` 保留原始 Ollama 消息
46
+ */
47
+ preserveOllamaRawInExtra?: boolean;
48
+ }
@@ -0,0 +1 @@
1
+ /** Ollama 映射选项 */ export { };
@@ -0,0 +1,27 @@
1
+ import type { OpenAIChatContentPart, OpenAIChatMessageAssistant, OpenAIChatMessageFunction, OpenAIChatMessageSystem, OpenAIChatMessageTool, OpenAIChatMessageUser, OpenAIMessagesMapOptions } from './types';
2
+ /**
3
+ * OpenClaw 会话 / transcript 常见字段:毫秒时间戳
4
+ */
5
+ export type OpenClawChatMeta = {
6
+ id?: string;
7
+ timestamp?: number;
8
+ name?: string;
9
+ };
10
+ /** OpenClaw transcript 中工具结果常用 `toolResult`,与 OpenAI 的 `tool` 对应 */
11
+ export interface OpenClawChatMessageToolResult extends OpenClawChatMeta {
12
+ role: 'toolResult';
13
+ content: string | OpenAIChatContentPart[] | null;
14
+ tool_call_id?: string;
15
+ }
16
+ export type OpenClawChatMessage = (OpenAIChatMessageSystem & OpenClawChatMeta) | (OpenAIChatMessageUser & OpenClawChatMeta) | (OpenAIChatMessageAssistant & OpenClawChatMeta) | (OpenAIChatMessageTool & OpenClawChatMeta) | (OpenAIChatMessageFunction & OpenClawChatMeta) | OpenClawChatMessageToolResult;
17
+ /** OpenClaw 映射选项(在 OpenAI 选项基础上增加 transcript 行为) */
18
+ export interface OpenClawMessagesMapOptions extends OpenAIMessagesMapOptions {
19
+ /**
20
+ * 为 true(默认)时,若消息含 `timestamp`(毫秒),写入 `createAt` / `updateAt`
21
+ */
22
+ useOpenClawTimestamps?: boolean;
23
+ /**
24
+ * 为 true(默认)时,在 `extra.openclaw.raw` 保留原始 OpenClaw 消息
25
+ */
26
+ preserveOpenClawRawInExtra?: boolean;
27
+ }
@@ -0,0 +1 @@
1
+ /** OpenClaw 映射选项(在 OpenAI 选项基础上增加 transcript 行为) */ export { };
@@ -0,0 +1,71 @@
1
+ import type { MessageBubbleData } from '../../Types/message';
2
+ import type { RoleType } from '../../Types/common';
3
+ /**
4
+ * OpenAI Chat Completions 风格的多段 content(与官方结构兼容,库内自建)
5
+ */
6
+ export interface OpenAIChatTextPart {
7
+ type: 'text';
8
+ text: string;
9
+ }
10
+ export interface OpenAIChatRefusalPart {
11
+ type?: 'refusal';
12
+ refusal?: string;
13
+ }
14
+ /** 多模态等其它 part 以弱类型保留 */
15
+ export interface OpenAIChatContentPartFallback {
16
+ type: string;
17
+ [key: string]: unknown;
18
+ }
19
+ export type OpenAIChatContentPart = OpenAIChatTextPart | OpenAIChatRefusalPart | OpenAIChatContentPartFallback;
20
+ export interface OpenAIChatMessageBase {
21
+ id?: string;
22
+ name?: string;
23
+ tool_calls?: unknown[];
24
+ function_call?: {
25
+ name?: string;
26
+ arguments?: string;
27
+ } | null;
28
+ }
29
+ export interface OpenAIChatMessageSystem extends OpenAIChatMessageBase {
30
+ role: 'system';
31
+ content: string | null;
32
+ }
33
+ export interface OpenAIChatMessageUser extends OpenAIChatMessageBase {
34
+ role: 'user';
35
+ content: string | OpenAIChatContentPart[] | null;
36
+ }
37
+ export interface OpenAIChatMessageAssistant extends OpenAIChatMessageBase {
38
+ role: 'assistant';
39
+ content: string | OpenAIChatContentPart[] | null;
40
+ tool_calls?: unknown[];
41
+ function_call?: OpenAIChatMessageBase['function_call'];
42
+ }
43
+ export interface OpenAIChatMessageTool extends OpenAIChatMessageBase {
44
+ role: 'tool';
45
+ content: string | null;
46
+ tool_call_id?: string;
47
+ }
48
+ export interface OpenAIChatMessageFunction extends OpenAIChatMessageBase {
49
+ role: 'function';
50
+ content: string | null;
51
+ name?: string;
52
+ }
53
+ export type OpenAIChatMessage = OpenAIChatMessageSystem | OpenAIChatMessageUser | OpenAIChatMessageAssistant | OpenAIChatMessageTool | OpenAIChatMessageFunction;
54
+ /** 单条映射覆盖 */
55
+ export type OpenAIMessagesMapMessage = (msg: OpenAIChatMessage, index: number, draft: MessageBubbleData) => MessageBubbleData;
56
+ export interface OpenAIMessagesMapOptions {
57
+ /** createAt / updateAt 基准(毫秒) */
58
+ baseTime?: number;
59
+ /** 第 i 条:createAt = baseTime + i * timeStepMs */
60
+ timeStepMs?: number;
61
+ /** 为 true 时最后一条的 updateAt 使用 Date.now()(流式可选) */
62
+ bumpUpdateAtOnLastMessage?: boolean;
63
+ /** 生成 MessageBubbleData.id,默认不用 content,避免 SSE 抖动 */
64
+ getMessageId?: (msg: OpenAIChatMessage, index: number) => string;
65
+ /** tool / function 行映射到的 RoleType */
66
+ toolRoleAs?: RoleType;
67
+ /** assistant 是否将 tool_calls 等拼入展示文案 */
68
+ appendToolCallsToContent?: boolean;
69
+ /** 在 extra.openai 中保留原始 role 与 raw */
70
+ preserveRawInExtra?: boolean;
71
+ }
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,7 @@
1
+ import type { MessageBubbleData } from '../../Types/message';
2
+ import type { OpenAIMessagesMapMessage } from './types';
3
+ import type { OllamaChatMessage, OllamaMessagesMapOptions } from './ollamaTypes';
4
+ /**
5
+ * 将 Ollama `/api/chat` 的 messages 转为 MessageBubbleData[](与 {@link mapOllamaMessagesToMessageBubbleData} 一致,带 memo)。
6
+ */
7
+ export declare function useOllamaMessageBubbleData(messages: OllamaChatMessage[], mapOptions?: OllamaMessagesMapOptions, mapMessage?: OpenAIMessagesMapMessage): MessageBubbleData[];