solver-sdk 2.0.2 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/api/chat-api/index.js +205 -171
- package/dist/cjs/api/chat-api/index.js.map +1 -1
- package/dist/cjs/api/chat-api/models.js +1 -1
- package/dist/cjs/api/chat-api/stream-utils.js +139 -151
- package/dist/cjs/api/chat-api/stream-utils.js.map +1 -1
- package/dist/cjs/constants/websocket-events.constants.js +1 -1
- package/dist/cjs/constants/websocket-events.constants.js.map +1 -1
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/utils/message-helpers.js +212 -0
- package/dist/cjs/utils/message-helpers.js.map +1 -0
- package/dist/cjs/ws/filesystem-ws-client.js +0 -10
- package/dist/cjs/ws/filesystem-ws-client.js.map +1 -1
- package/dist/esm/api/chat-api/index.js +207 -151
- package/dist/esm/api/chat-api/index.js.map +1 -1
- package/dist/esm/api/chat-api/models.js +1 -1
- package/dist/esm/api/chat-api/stream-utils.js +139 -151
- package/dist/esm/api/chat-api/stream-utils.js.map +1 -1
- package/dist/esm/constants/websocket-events.constants.js +1 -1
- package/dist/esm/constants/websocket-events.constants.js.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/utils/message-helpers.js +199 -0
- package/dist/esm/utils/message-helpers.js.map +1 -0
- package/dist/esm/ws/filesystem-ws-client.js +0 -10
- package/dist/esm/ws/filesystem-ws-client.js.map +1 -1
- package/dist/types/api/chat-api/index.d.ts +23 -8
- package/dist/types/api/chat-api/index.d.ts.map +1 -1
- package/dist/types/api/chat-api/interfaces.d.ts +125 -8
- package/dist/types/api/chat-api/interfaces.d.ts.map +1 -1
- package/dist/types/api/chat-api/models.d.ts +163 -43
- package/dist/types/api/chat-api/models.d.ts.map +1 -1
- package/dist/types/api/chat-api/stream-utils.d.ts +19 -16
- package/dist/types/api/chat-api/stream-utils.d.ts.map +1 -1
- package/dist/types/constants/websocket-events.constants.d.ts +2 -2
- package/dist/types/constants/websocket-events.constants.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/utils/message-helpers.d.ts +84 -0
- package/dist/types/utils/message-helpers.d.ts.map +1 -0
- package/dist/types/ws/filesystem-ws-client.d.ts +0 -2
- package/dist/types/ws/filesystem-ws-client.d.ts.map +1 -1
- package/docs/API_REFERENCE.md +38 -166
- package/docs/AUTHENTICATION.md +37 -59
- package/docs/ERROR_HANDLING.md +124 -191
- package/docs/INTEGRATION_EXAMPLES.md +38 -52
- package/docs/PING_PONG.md +79 -178
- package/docs/README.md +7 -3
- package/docs/WEBSOCKET.md +66 -37
- package/package.json +7 -2
- package/docs/advanced/PING_PONG.md +0 -212
|
@@ -1,192 +1,180 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Утилиты для обработки потоковых данных от API чата
|
|
4
|
+
*/
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.processStreamChunk = processStreamChunk;
|
|
4
7
|
exports.handleStreamError = handleStreamError;
|
|
5
8
|
/**
|
|
6
|
-
* Обрабатывает
|
|
9
|
+
* Обрабатывает строку данных из SSE потока
|
|
10
|
+
* @param line Строка данных из потока
|
|
11
|
+
* @param isInThinkingBlock Флаг нахождения в блоке мышления
|
|
12
|
+
* @param thinkingContent Накопленное содержимое мышления
|
|
13
|
+
* @param textContent Накопленное текстовое содержимое
|
|
14
|
+
* @param thinkingSignature Подпись блока мышления
|
|
15
|
+
* @param onToken Обработчик получения токена
|
|
16
|
+
* @returns Результат обработки
|
|
7
17
|
*/
|
|
8
18
|
function processStreamChunk(line, isInThinkingBlock, thinkingContent, textContent, thinkingSignature, onToken) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
isInThinkingBlock,
|
|
13
|
-
thinkingContent,
|
|
14
|
-
textContent,
|
|
15
|
-
thinkingSignature,
|
|
16
|
-
isDone: false
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
const data = line.slice(5).trim();
|
|
20
|
-
// Проверяем завершение потока
|
|
21
|
-
if (data === '[DONE]') {
|
|
22
|
-
if (onToken) {
|
|
23
|
-
onToken('');
|
|
19
|
+
try {
|
|
20
|
+
if (!line.startsWith('data: ')) {
|
|
21
|
+
return { isInThinkingBlock, thinkingContent, textContent, thinkingSignature, isDone: false };
|
|
24
22
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
chunk: {
|
|
23
|
+
const data = line.slice(6).trim();
|
|
24
|
+
// Проверяем на завершение потока
|
|
25
|
+
if (data === '[DONE]') {
|
|
26
|
+
const chunk = {
|
|
27
|
+
type: 'message_stop',
|
|
31
28
|
text: '',
|
|
32
29
|
isComplete: true,
|
|
33
30
|
thinkingContent: thinkingContent.length > 0 ? thinkingContent : undefined,
|
|
34
31
|
thinkingSignature: thinkingSignature.length > 0 ? thinkingSignature : undefined
|
|
35
|
-
}
|
|
36
|
-
isDone: true
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
try {
|
|
40
|
-
const parsedData = JSON.parse(data);
|
|
41
|
-
// Обрабатываем типы событий по актуальному API Anthropic
|
|
42
|
-
if (parsedData.type === 'content_block_start' && parsedData.content_block?.type === 'thinking') {
|
|
43
|
-
const newIsInThinkingBlock = true;
|
|
44
|
-
if (onToken) {
|
|
45
|
-
onToken('[THINKING_START]');
|
|
46
|
-
}
|
|
32
|
+
};
|
|
47
33
|
return {
|
|
48
|
-
isInThinkingBlock
|
|
34
|
+
isInThinkingBlock,
|
|
49
35
|
thinkingContent,
|
|
50
36
|
textContent,
|
|
51
37
|
thinkingSignature,
|
|
52
|
-
chunk
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
38
|
+
chunk,
|
|
39
|
+
isDone: true
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// Пытаемся распарсить JSON
|
|
43
|
+
const jsonData = JSON.parse(data);
|
|
44
|
+
// Обрабатываем событие начала блока мышления
|
|
45
|
+
if (jsonData.type === 'thinking_start' ||
|
|
46
|
+
(jsonData.event === 'thinking_delta' && !isInThinkingBlock)) {
|
|
47
|
+
const chunk = {
|
|
48
|
+
type: 'content_block_start',
|
|
49
|
+
text: '',
|
|
50
|
+
isComplete: false,
|
|
51
|
+
isThinking: true
|
|
52
|
+
};
|
|
53
|
+
return {
|
|
54
|
+
isInThinkingBlock: true,
|
|
55
|
+
thinkingContent,
|
|
56
|
+
textContent,
|
|
57
|
+
thinkingSignature,
|
|
58
|
+
chunk,
|
|
57
59
|
isDone: false
|
|
58
60
|
};
|
|
59
61
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
// Обрабатываем дельты мышления
|
|
63
|
+
if (jsonData.event === 'thinking_delta' && jsonData.thinking && isInThinkingBlock) {
|
|
64
|
+
const newThinkingContent = thinkingContent + jsonData.thinking;
|
|
65
|
+
const chunk = {
|
|
66
|
+
type: 'content_block_delta',
|
|
67
|
+
text: jsonData.thinking,
|
|
68
|
+
isComplete: false,
|
|
69
|
+
isThinking: true
|
|
70
|
+
};
|
|
71
|
+
// Вызываем onToken если передан
|
|
62
72
|
if (onToken) {
|
|
63
|
-
onToken(
|
|
73
|
+
onToken(jsonData.thinking);
|
|
64
74
|
}
|
|
65
75
|
return {
|
|
66
|
-
isInThinkingBlock:
|
|
67
|
-
thinkingContent,
|
|
76
|
+
isInThinkingBlock: true,
|
|
77
|
+
thinkingContent: newThinkingContent,
|
|
68
78
|
textContent,
|
|
69
79
|
thinkingSignature,
|
|
70
|
-
chunk
|
|
71
|
-
text: '[THINKING_END]',
|
|
72
|
-
isComplete: false,
|
|
73
|
-
isThinking: true
|
|
74
|
-
},
|
|
80
|
+
chunk,
|
|
75
81
|
isDone: false
|
|
76
82
|
};
|
|
77
83
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
if (
|
|
83
|
-
|
|
84
|
-
const newTextContent = textContent + text;
|
|
85
|
-
if (onToken) {
|
|
86
|
-
onToken(text);
|
|
87
|
-
}
|
|
88
|
-
return {
|
|
89
|
-
isInThinkingBlock,
|
|
90
|
-
thinkingContent,
|
|
91
|
-
textContent: newTextContent,
|
|
92
|
-
thinkingSignature,
|
|
93
|
-
chunk: {
|
|
94
|
-
text,
|
|
95
|
-
isComplete: false,
|
|
96
|
-
isThinking: false
|
|
97
|
-
},
|
|
98
|
-
isDone: false
|
|
99
|
-
};
|
|
84
|
+
// Обрабатываем завершение мышления
|
|
85
|
+
if (jsonData.type === 'thinking_end' ||
|
|
86
|
+
(jsonData.event === 'thinking_signature' && isInThinkingBlock)) {
|
|
87
|
+
let signature = thinkingSignature;
|
|
88
|
+
if (jsonData.signature) {
|
|
89
|
+
signature = jsonData.signature;
|
|
100
90
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
textContent,
|
|
111
|
-
thinkingSignature,
|
|
112
|
-
chunk: {
|
|
113
|
-
text: thinking,
|
|
114
|
-
isComplete: false,
|
|
115
|
-
isThinking: true
|
|
116
|
-
},
|
|
117
|
-
isDone: false
|
|
118
|
-
};
|
|
91
|
+
const chunk = {
|
|
92
|
+
type: 'content_block_delta',
|
|
93
|
+
text: jsonData.text || '',
|
|
94
|
+
isComplete: false,
|
|
95
|
+
isThinking: false
|
|
96
|
+
};
|
|
97
|
+
// Вызываем onToken если есть текст и передан обработчик
|
|
98
|
+
if (jsonData.text && onToken) {
|
|
99
|
+
onToken(jsonData.text);
|
|
119
100
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
101
|
+
return {
|
|
102
|
+
isInThinkingBlock: false,
|
|
103
|
+
thinkingContent,
|
|
104
|
+
textContent: textContent + (jsonData.text || ''),
|
|
105
|
+
thinkingSignature: signature,
|
|
106
|
+
chunk,
|
|
107
|
+
isDone: false
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
// Обрабатываем текстовые дельты
|
|
111
|
+
if (jsonData.event === 'text_delta' && jsonData.text) {
|
|
112
|
+
const newTextContent = textContent + jsonData.text;
|
|
113
|
+
const chunk = {
|
|
114
|
+
type: 'content_block_delta',
|
|
115
|
+
text: jsonData.text,
|
|
116
|
+
isComplete: false,
|
|
117
|
+
isThinking: true
|
|
118
|
+
};
|
|
119
|
+
// Вызываем onToken если передан
|
|
120
|
+
if (onToken) {
|
|
121
|
+
onToken(jsonData.text);
|
|
129
122
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
123
|
+
return {
|
|
124
|
+
isInThinkingBlock,
|
|
125
|
+
thinkingContent,
|
|
126
|
+
textContent: newTextContent,
|
|
127
|
+
thinkingSignature,
|
|
128
|
+
chunk,
|
|
129
|
+
isDone: false
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
// Обрабатываем обычные текстовые данные
|
|
133
|
+
if (jsonData.content || jsonData.text || jsonData.delta) {
|
|
134
|
+
const text = jsonData.content || jsonData.text || jsonData.delta;
|
|
135
|
+
const newTextContent = textContent + text;
|
|
136
|
+
const chunk = {
|
|
137
|
+
type: 'content_block_delta',
|
|
138
|
+
text: text,
|
|
139
|
+
isComplete: false,
|
|
140
|
+
isThinking: false
|
|
141
|
+
};
|
|
142
|
+
// Вызываем onToken если передан
|
|
143
|
+
if (onToken) {
|
|
144
|
+
onToken(text);
|
|
148
145
|
}
|
|
146
|
+
return {
|
|
147
|
+
isInThinkingBlock,
|
|
148
|
+
thinkingContent,
|
|
149
|
+
textContent: newTextContent,
|
|
150
|
+
thinkingSignature,
|
|
151
|
+
chunk,
|
|
152
|
+
isDone: false
|
|
153
|
+
};
|
|
149
154
|
}
|
|
150
|
-
//
|
|
151
|
-
return {
|
|
152
|
-
isInThinkingBlock,
|
|
153
|
-
thinkingContent,
|
|
154
|
-
textContent,
|
|
155
|
-
thinkingSignature,
|
|
156
|
-
isDone: false
|
|
157
|
-
};
|
|
155
|
+
// Если ничего не обработали, возвращаем исходное состояние
|
|
156
|
+
return { isInThinkingBlock, thinkingContent, textContent, thinkingSignature, isDone: false };
|
|
158
157
|
}
|
|
159
|
-
catch (
|
|
160
|
-
console.
|
|
161
|
-
return {
|
|
162
|
-
isInThinkingBlock,
|
|
163
|
-
thinkingContent,
|
|
164
|
-
textContent,
|
|
165
|
-
thinkingSignature,
|
|
166
|
-
isDone: false
|
|
167
|
-
};
|
|
158
|
+
catch (error) {
|
|
159
|
+
console.warn('Ошибка обработки потокового чанка:', error);
|
|
160
|
+
return { isInThinkingBlock, thinkingContent, textContent, thinkingSignature, isDone: false };
|
|
168
161
|
}
|
|
169
162
|
}
|
|
170
163
|
/**
|
|
171
|
-
* Обрабатывает
|
|
164
|
+
* Обрабатывает ошибки потоковой передачи
|
|
165
|
+
* @param error Ошибка
|
|
166
|
+
* @returns Обработанная ошибка
|
|
172
167
|
*/
|
|
173
168
|
function handleStreamError(error) {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
(
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
console.error('\n==============================================');
|
|
183
|
-
console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
|
|
184
|
-
console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
|
|
185
|
-
console.error('⚠️ Anthropic API доступен только из определенных регионов');
|
|
186
|
-
console.error('==============================================');
|
|
187
|
-
// Обогащаем объект ошибки информацией о географических ограничениях
|
|
188
|
-
errorObj.type = 'geo_restriction';
|
|
169
|
+
if (error instanceof Error) {
|
|
170
|
+
return error;
|
|
171
|
+
}
|
|
172
|
+
if (error && error.message) {
|
|
173
|
+
return new Error(error.message);
|
|
174
|
+
}
|
|
175
|
+
if (typeof error === 'string') {
|
|
176
|
+
return new Error(error);
|
|
189
177
|
}
|
|
190
|
-
return
|
|
178
|
+
return new Error('Неизвестная ошибка потоковой передачи');
|
|
191
179
|
}
|
|
192
180
|
//# sourceMappingURL=stream-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../../../../src/api/chat-api/stream-utils.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../../../../src/api/chat-api/stream-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -96,7 +96,7 @@ var WebSocketEvents;
|
|
|
96
96
|
// События буферизации
|
|
97
97
|
WebSocketEvents["BATCH_UPDATE"] = "batch_update";
|
|
98
98
|
WebSocketEvents["SEARCH_UPDATE"] = "search_update";
|
|
99
|
-
// Общие события
|
|
99
|
+
// Общие события и стандартные события Socket.IO
|
|
100
100
|
WebSocketEvents["CONNECTED"] = "connected";
|
|
101
101
|
WebSocketEvents["PONG"] = "pong";
|
|
102
102
|
// Базовое событие для широковещательной отправки
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-events.constants.js","sourceRoot":"","sources":["../../../src/constants/websocket-events.constants.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH;;GAEG;AACH,IAAY,eAwHX;AAxHD,WAAY,eAAe;IACzB,sCAAsC;IACtC,sCAAmB,CAAA;IACnB,4CAAyB,CAAA;IACzB,gDAA6B,CAAA;IAC7B,kDAA+B,CAAA;IAC/B,gEAA6C,CAAA;IAC7C,0CAAuB,CAAA;IACvB,sDAAmC,CAAA;IAEnC,oCAAoC;IACpC,gDAA6B,CAAA;IAC7B,kDAA+B,CAAA;IAC/B,oDAAiC,CAAA;IACjC,sDAAmC,CAAA;IACnC,kDAA+B,CAAA;IAC/B,0DAAuC,CAAA;IACvC,0DAAuC,CAAA;IACvC,oDAAiC,CAAA;IACjC,gDAA6B,CAAA;IAC7B,sDAAmC,CAAA;IACnC,8DAA2C,CAAA;IAE3C,8BAA8B;IAC9B,gCAAa,CAAA;IACb,oCAAiB,CAAA;IACjB,0CAAuB,CAAA;IACvB,0DAAuC,CAAA;IACvC,kDAA+B,CAAA;IAC/B,kCAAe,CAAA;IACf,gCAAa,CAAA;IAEb,0BAA0B;IAC1B,oDAAiC,CAAA;IACjC,wDAAqC,CAAA;IACrC,sDAAmC,CAAA;IACnC,oDAAiC,CAAA;IACjC,wDAAqC,CAAA;IACrC,0DAAuC,CAAA;IACvC,sDAAmC,CAAA;IACnC,0DAAuC,CAAA;IACvC,wDAAqC,CAAA;IACrC,8DAA2C,CAAA;IAC3C,4DAAyC,CAAA;IACzC,4DAAyC,CAAA;IACzC,sDAAmC,CAAA;IAEnC,oCAAoC;IACpC,oEAAiD,CAAA;IACjD,wDAAqC,CAAA;IACrC,sEAAmD,CAAA;IACnD,4DAAyC,CAAA;IACzC,gDAA6B,CAAA;IAC7B,gDAA6B,CAAA;IAE7B,2BAA2B;IAC3B,0DAAuC,CAAA;IACvC,4DAAyC,CAAA;IACzC,gEAA6C,CAAA;IAC7C,0DAAuC,CAAA;IAEvC,sBAAsB;IACtB,4DAAyC,CAAA;IACzC,8DAA2C,CAAA;IAC3C,kDAA+B,CAAA;IAE/B,qBAAqB;IACrB,0DAAuC,CAAA;IACvC,4EAAyD,CAAA;IACzD,gEAA6C,CAAA;IAC7C,8DAA2C,CAAA;IAE3C,wCAAwC;IACxC,sDAAmC,CAAA;IACnC,sDAAmC,CAAA;IACnC,0CAAuB,CAAA;IACvB,kDAA+B,CAAA;IAC/B,wDAAqC,CAAA;IAErC,+BAA+B;IAC/B,gCAAa,CAAA;IACb,sCAAmB,CAAA;IACnB,4CAAyB,CAAA;IACzB,0CAAuB,CAAA;IACvB,4DAAyC,CAAA;IACzC,4CAAyB,CAAA;IACzB,8DAA2C,CAAA;IAC3C,8CAA2B,CAAA;IAC3B,kDAA+B,CAAA;IAC/B,gDAA6B,CAAA;IAE7B,iBAAiB;IACjB,8CAA2B,CAAA;IAE3B,sBAAsB;IACtB,gDAA6B,CAAA;IAC7B,kDAA+B,CAAA;IAE/B,
|
|
1
|
+
{"version":3,"file":"websocket-events.constants.js","sourceRoot":"","sources":["../../../src/constants/websocket-events.constants.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -45,6 +45,8 @@ __exportStar(require("./api/agents-api.js"), exports);
|
|
|
45
45
|
__exportStar(require("./api/chat-api/index.js"), exports);
|
|
46
46
|
__exportStar(require("./api/models-api.js"), exports);
|
|
47
47
|
__exportStar(require("./api/dependencies-api.js"), exports);
|
|
48
|
+
// Экспортируем помощники для работы с сообщениями
|
|
49
|
+
__exportStar(require("./utils/message-helpers.js"), exports);
|
|
48
50
|
// Экспорт по умолчанию
|
|
49
51
|
exports.default = code_solver_sdk_js_1.CodeSolverSDK;
|
|
50
52
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6DAAqD;AAU5C,8FAVA,kCAAa,OAUA;AARtB,6FAA4E;AAUnE,gGAVA,+CAAe,OAUA;AATxB,2DAAoD;AAU3C,2FAVA,2BAAU,OAUA;AATnB,qEAA8D;AAUrD,gGAVA,qCAAe,OAUA;AARxB,aAAa;AACA,QAAA,OAAO,GAAG,OAAO,CAAC;AAS/B,0CAA0C;AAC1C,8DAA4C;AAC5C,iFAA+D;AAC/D,gFAA8D;AAC9D,4EAA0D;AAE1D,uCAAuC;AACvC,6DAA2C;AAC3C,8DAA4C;AAC5C,+DAA6C;AAC7C,iEAA+C;AAE/C,2BAA2B;AAC3B,wDAAsC;AACtC,sDAAoC;AACpC,yDAAuC;AACvC,uDAAqC;AACrC,iEAA+C;AAC/C,sDAAoC;AACpC,0DAAwC;AACxC,sDAAoC;AACpC,4DAA0C;AAE1C,uBAAuB;AACvB,kBAAe,kCAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6DAAqD;AAU5C,8FAVA,kCAAa,OAUA;AARtB,6FAA4E;AAUnE,gGAVA,+CAAe,OAUA;AATxB,2DAAoD;AAU3C,2FAVA,2BAAU,OAUA;AATnB,qEAA8D;AAUrD,gGAVA,qCAAe,OAUA;AARxB,aAAa;AACA,QAAA,OAAO,GAAG,OAAO,CAAC;AAS/B,0CAA0C;AAC1C,8DAA4C;AAC5C,iFAA+D;AAC/D,gFAA8D;AAC9D,4EAA0D;AAE1D,uCAAuC;AACvC,6DAA2C;AAC3C,8DAA4C;AAC5C,+DAA6C;AAC7C,iEAA+C;AAE/C,2BAA2B;AAC3B,wDAAsC;AACtC,sDAAoC;AACpC,yDAAuC;AACvC,uDAAqC;AACrC,iEAA+C;AAC/C,sDAAoC;AACpC,0DAAwC;AACxC,sDAAoC;AACpC,4DAA0C;AAE1C,kDAAkD;AAClD,6DAA2C;AAE3C,uBAAuB;AACvB,kBAAe,kCAAa,CAAC"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Помощники для создания complex content сообщений согласно Anthropic API
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createAssistantMessageWithThinking = createAssistantMessageWithThinking;
|
|
7
|
+
exports.createToolResultMessage = createToolResultMessage;
|
|
8
|
+
exports.createTextMessage = createTextMessage;
|
|
9
|
+
exports.createAssistantMessage = createAssistantMessage;
|
|
10
|
+
exports.extractThinkingBlocks = extractThinkingBlocks;
|
|
11
|
+
exports.extractToolUseBlocks = extractToolUseBlocks;
|
|
12
|
+
exports.extractTextContent = extractTextContent;
|
|
13
|
+
exports.hasThinkingBlocks = hasThinkingBlocks;
|
|
14
|
+
exports.hasToolUseBlocks = hasToolUseBlocks;
|
|
15
|
+
exports.createToolDefinition = createToolDefinition;
|
|
16
|
+
exports.createStandardDevelopmentTools = createStandardDevelopmentTools;
|
|
17
|
+
/**
|
|
18
|
+
* Создает сообщение assistant с thinking и tool_use блоками
|
|
19
|
+
* @param thinkingContent Содержимое мышления
|
|
20
|
+
* @param signature Криптографическая подпись
|
|
21
|
+
* @param toolCall Вызов инструмента
|
|
22
|
+
* @returns Сообщение assistant с complex content
|
|
23
|
+
*/
|
|
24
|
+
function createAssistantMessageWithThinking(thinkingContent, signature, toolCall) {
|
|
25
|
+
const content = [
|
|
26
|
+
{
|
|
27
|
+
type: 'thinking',
|
|
28
|
+
thinking: thinkingContent,
|
|
29
|
+
signature: signature
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
type: 'tool_use',
|
|
33
|
+
id: toolCall.id,
|
|
34
|
+
name: toolCall.name,
|
|
35
|
+
input: toolCall.input
|
|
36
|
+
}
|
|
37
|
+
];
|
|
38
|
+
return {
|
|
39
|
+
role: 'assistant',
|
|
40
|
+
content: content
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Создает сообщение user с результатом инструмента
|
|
45
|
+
* @param toolUseId ID вызова инструмента
|
|
46
|
+
* @param result Результат выполнения
|
|
47
|
+
* @param isError Флаг ошибки
|
|
48
|
+
* @returns Сообщение user с tool_result
|
|
49
|
+
*/
|
|
50
|
+
function createToolResultMessage(toolUseId, result, isError = false) {
|
|
51
|
+
const content = [
|
|
52
|
+
{
|
|
53
|
+
type: 'tool_result',
|
|
54
|
+
tool_use_id: toolUseId,
|
|
55
|
+
content: typeof result === 'string' ? result : JSON.stringify(result),
|
|
56
|
+
is_error: isError
|
|
57
|
+
}
|
|
58
|
+
];
|
|
59
|
+
return {
|
|
60
|
+
role: 'user',
|
|
61
|
+
content: content
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Создает простое текстовое сообщение
|
|
66
|
+
* @param role Роль отправителя
|
|
67
|
+
* @param text Текст сообщения
|
|
68
|
+
* @returns Простое сообщение
|
|
69
|
+
*/
|
|
70
|
+
function createTextMessage(role, text) {
|
|
71
|
+
return {
|
|
72
|
+
role: role,
|
|
73
|
+
content: text
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Создает сообщение assistant с текстом и мышлением
|
|
78
|
+
* @param text Основной текст ответа
|
|
79
|
+
* @param thinkingContent Содержимое мышления (опционально)
|
|
80
|
+
* @param signature Подпись мышления (опционально)
|
|
81
|
+
* @returns Сообщение assistant с complex content
|
|
82
|
+
*/
|
|
83
|
+
function createAssistantMessage(text, thinkingContent, signature) {
|
|
84
|
+
const content = [];
|
|
85
|
+
// Добавляем thinking блок если есть
|
|
86
|
+
if (thinkingContent && signature) {
|
|
87
|
+
content.push({
|
|
88
|
+
type: 'thinking',
|
|
89
|
+
thinking: thinkingContent,
|
|
90
|
+
signature: signature
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
// Добавляем текстовый блок
|
|
94
|
+
content.push({
|
|
95
|
+
type: 'text',
|
|
96
|
+
text: text
|
|
97
|
+
});
|
|
98
|
+
return {
|
|
99
|
+
role: 'assistant',
|
|
100
|
+
content: content
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Извлекает thinking блоки из сообщения
|
|
105
|
+
* @param message Сообщение с complex content
|
|
106
|
+
* @returns Массив thinking блоков
|
|
107
|
+
*/
|
|
108
|
+
function extractThinkingBlocks(message) {
|
|
109
|
+
if (typeof message.content === 'string') {
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
return message.content.filter(block => block.type === 'thinking' || block.type === 'redacted_thinking');
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Извлекает tool_use блоки из сообщения
|
|
116
|
+
* @param message Сообщение с complex content
|
|
117
|
+
* @returns Массив tool_use блоков
|
|
118
|
+
*/
|
|
119
|
+
function extractToolUseBlocks(message) {
|
|
120
|
+
if (typeof message.content === 'string') {
|
|
121
|
+
return [];
|
|
122
|
+
}
|
|
123
|
+
return message.content.filter(block => block.type === 'tool_use');
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Извлекает текстовое содержимое из сообщения
|
|
127
|
+
* @param message Сообщение
|
|
128
|
+
* @returns Текстовое содержимое
|
|
129
|
+
*/
|
|
130
|
+
function extractTextContent(message) {
|
|
131
|
+
if (typeof message.content === 'string') {
|
|
132
|
+
return message.content;
|
|
133
|
+
}
|
|
134
|
+
const textBlocks = message.content.filter(block => block.type === 'text');
|
|
135
|
+
return textBlocks.map(block => block.text).join('');
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Проверяет, содержит ли сообщение thinking блоки
|
|
139
|
+
* @param message Сообщение для проверки
|
|
140
|
+
* @returns true если содержит thinking блоки
|
|
141
|
+
*/
|
|
142
|
+
function hasThinkingBlocks(message) {
|
|
143
|
+
if (typeof message.content === 'string') {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
return message.content.some(block => block.type === 'thinking' || block.type === 'redacted_thinking');
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Проверяет, содержит ли сообщение tool_use блоки
|
|
150
|
+
* @param message Сообщение для проверки
|
|
151
|
+
* @returns true если содержит tool_use блоки
|
|
152
|
+
*/
|
|
153
|
+
function hasToolUseBlocks(message) {
|
|
154
|
+
if (typeof message.content === 'string') {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
return message.content.some(block => block.type === 'tool_use');
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Создает определение инструмента для Anthropic API
|
|
161
|
+
* @param name Название инструмента
|
|
162
|
+
* @param description Описание функциональности
|
|
163
|
+
* @param properties Свойства входных параметров
|
|
164
|
+
* @param required Обязательные поля
|
|
165
|
+
* @returns Определение инструмента
|
|
166
|
+
*/
|
|
167
|
+
function createToolDefinition(name, description, properties, required = []) {
|
|
168
|
+
return {
|
|
169
|
+
name: name,
|
|
170
|
+
description: description,
|
|
171
|
+
input_schema: {
|
|
172
|
+
type: 'object',
|
|
173
|
+
properties: properties,
|
|
174
|
+
required: required
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Создает стандартные инструменты для разработки (как в Cursor)
|
|
180
|
+
* @returns Массив стандартных инструментов
|
|
181
|
+
*/
|
|
182
|
+
function createStandardDevelopmentTools() {
|
|
183
|
+
return [
|
|
184
|
+
createToolDefinition('edit_file', 'Редактирует содержимое файла', {
|
|
185
|
+
file_path: { type: 'string', description: 'Путь к файлу для редактирования' },
|
|
186
|
+
content: { type: 'string', description: 'Новое содержимое файла' },
|
|
187
|
+
start_line: { type: 'integer', description: 'Начальная строка для частичного редактирования' },
|
|
188
|
+
end_line: { type: 'integer', description: 'Конечная строка для частичного редактирования' }
|
|
189
|
+
}, ['file_path', 'content']),
|
|
190
|
+
createToolDefinition('read_file', 'Читает содержимое файла', {
|
|
191
|
+
file_path: { type: 'string', description: 'Путь к файлу для чтения' }
|
|
192
|
+
}, ['file_path']),
|
|
193
|
+
createToolDefinition('create_file', 'Создает новый файл', {
|
|
194
|
+
file_path: { type: 'string', description: 'Путь к новому файлу' },
|
|
195
|
+
content: { type: 'string', description: 'Содержимое файла' }
|
|
196
|
+
}, ['file_path', 'content']),
|
|
197
|
+
createToolDefinition('list_files', 'Получает список файлов в директории', {
|
|
198
|
+
directory_path: { type: 'string', description: 'Путь к директории' },
|
|
199
|
+
include_hidden: { type: 'boolean', description: 'Включать скрытые файлы' }
|
|
200
|
+
}, ['directory_path']),
|
|
201
|
+
createToolDefinition('search_files', 'Поиск в файлах по содержимому', {
|
|
202
|
+
query: { type: 'string', description: 'Поисковый запрос' },
|
|
203
|
+
file_pattern: { type: 'string', description: 'Паттерн имен файлов' },
|
|
204
|
+
case_sensitive: { type: 'boolean', description: 'Учитывать регистр' }
|
|
205
|
+
}, ['query']),
|
|
206
|
+
createToolDefinition('run_command', 'Выполняет команду в терминале', {
|
|
207
|
+
command: { type: 'string', description: 'Команда для выполнения' },
|
|
208
|
+
working_directory: { type: 'string', description: 'Рабочая директория' }
|
|
209
|
+
}, ['command'])
|
|
210
|
+
];
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=message-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-helpers.js","sourceRoot":"","sources":["../../../src/utils/message-helpers.ts"],"names":[],"mappings":"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"}
|