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,188 +1,176 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Утилиты для обработки потоковых данных от API чата
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Обрабатывает строку данных из SSE потока
|
|
6
|
+
* @param line Строка данных из потока
|
|
7
|
+
* @param isInThinkingBlock Флаг нахождения в блоке мышления
|
|
8
|
+
* @param thinkingContent Накопленное содержимое мышления
|
|
9
|
+
* @param textContent Накопленное текстовое содержимое
|
|
10
|
+
* @param thinkingSignature Подпись блока мышления
|
|
11
|
+
* @param onToken Обработчик получения токена
|
|
12
|
+
* @returns Результат обработки
|
|
3
13
|
*/
|
|
4
14
|
export function processStreamChunk(line, isInThinkingBlock, thinkingContent, textContent, thinkingSignature, onToken) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
isInThinkingBlock,
|
|
9
|
-
thinkingContent,
|
|
10
|
-
textContent,
|
|
11
|
-
thinkingSignature,
|
|
12
|
-
isDone: false
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
const data = line.slice(5).trim();
|
|
16
|
-
// Проверяем завершение потока
|
|
17
|
-
if (data === '[DONE]') {
|
|
18
|
-
if (onToken) {
|
|
19
|
-
onToken('');
|
|
15
|
+
try {
|
|
16
|
+
if (!line.startsWith('data: ')) {
|
|
17
|
+
return { isInThinkingBlock, thinkingContent, textContent, thinkingSignature, isDone: false };
|
|
20
18
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
chunk: {
|
|
19
|
+
const data = line.slice(6).trim();
|
|
20
|
+
// Проверяем на завершение потока
|
|
21
|
+
if (data === '[DONE]') {
|
|
22
|
+
const chunk = {
|
|
23
|
+
type: 'message_stop',
|
|
27
24
|
text: '',
|
|
28
25
|
isComplete: true,
|
|
29
26
|
thinkingContent: thinkingContent.length > 0 ? thinkingContent : undefined,
|
|
30
27
|
thinkingSignature: thinkingSignature.length > 0 ? thinkingSignature : undefined
|
|
31
|
-
}
|
|
32
|
-
isDone: true
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
try {
|
|
36
|
-
const parsedData = JSON.parse(data);
|
|
37
|
-
// Обрабатываем типы событий по актуальному API Anthropic
|
|
38
|
-
if (parsedData.type === 'content_block_start' && parsedData.content_block?.type === 'thinking') {
|
|
39
|
-
const newIsInThinkingBlock = true;
|
|
40
|
-
if (onToken) {
|
|
41
|
-
onToken('[THINKING_START]');
|
|
42
|
-
}
|
|
28
|
+
};
|
|
43
29
|
return {
|
|
44
|
-
isInThinkingBlock
|
|
30
|
+
isInThinkingBlock,
|
|
45
31
|
thinkingContent,
|
|
46
32
|
textContent,
|
|
47
33
|
thinkingSignature,
|
|
48
|
-
chunk
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
34
|
+
chunk,
|
|
35
|
+
isDone: true
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// Пытаемся распарсить JSON
|
|
39
|
+
const jsonData = JSON.parse(data);
|
|
40
|
+
// Обрабатываем событие начала блока мышления
|
|
41
|
+
if (jsonData.type === 'thinking_start' ||
|
|
42
|
+
(jsonData.event === 'thinking_delta' && !isInThinkingBlock)) {
|
|
43
|
+
const chunk = {
|
|
44
|
+
type: 'content_block_start',
|
|
45
|
+
text: '',
|
|
46
|
+
isComplete: false,
|
|
47
|
+
isThinking: true
|
|
48
|
+
};
|
|
49
|
+
return {
|
|
50
|
+
isInThinkingBlock: true,
|
|
51
|
+
thinkingContent,
|
|
52
|
+
textContent,
|
|
53
|
+
thinkingSignature,
|
|
54
|
+
chunk,
|
|
53
55
|
isDone: false
|
|
54
56
|
};
|
|
55
57
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
+
// Обрабатываем дельты мышления
|
|
59
|
+
if (jsonData.event === 'thinking_delta' && jsonData.thinking && isInThinkingBlock) {
|
|
60
|
+
const newThinkingContent = thinkingContent + jsonData.thinking;
|
|
61
|
+
const chunk = {
|
|
62
|
+
type: 'content_block_delta',
|
|
63
|
+
text: jsonData.thinking,
|
|
64
|
+
isComplete: false,
|
|
65
|
+
isThinking: true
|
|
66
|
+
};
|
|
67
|
+
// Вызываем onToken если передан
|
|
58
68
|
if (onToken) {
|
|
59
|
-
onToken(
|
|
69
|
+
onToken(jsonData.thinking);
|
|
60
70
|
}
|
|
61
71
|
return {
|
|
62
|
-
isInThinkingBlock:
|
|
63
|
-
thinkingContent,
|
|
72
|
+
isInThinkingBlock: true,
|
|
73
|
+
thinkingContent: newThinkingContent,
|
|
64
74
|
textContent,
|
|
65
75
|
thinkingSignature,
|
|
66
|
-
chunk
|
|
67
|
-
text: '[THINKING_END]',
|
|
68
|
-
isComplete: false,
|
|
69
|
-
isThinking: true
|
|
70
|
-
},
|
|
76
|
+
chunk,
|
|
71
77
|
isDone: false
|
|
72
78
|
};
|
|
73
79
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (
|
|
79
|
-
|
|
80
|
-
const newTextContent = textContent + text;
|
|
81
|
-
if (onToken) {
|
|
82
|
-
onToken(text);
|
|
83
|
-
}
|
|
84
|
-
return {
|
|
85
|
-
isInThinkingBlock,
|
|
86
|
-
thinkingContent,
|
|
87
|
-
textContent: newTextContent,
|
|
88
|
-
thinkingSignature,
|
|
89
|
-
chunk: {
|
|
90
|
-
text,
|
|
91
|
-
isComplete: false,
|
|
92
|
-
isThinking: false
|
|
93
|
-
},
|
|
94
|
-
isDone: false
|
|
95
|
-
};
|
|
80
|
+
// Обрабатываем завершение мышления
|
|
81
|
+
if (jsonData.type === 'thinking_end' ||
|
|
82
|
+
(jsonData.event === 'thinking_signature' && isInThinkingBlock)) {
|
|
83
|
+
let signature = thinkingSignature;
|
|
84
|
+
if (jsonData.signature) {
|
|
85
|
+
signature = jsonData.signature;
|
|
96
86
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
textContent,
|
|
107
|
-
thinkingSignature,
|
|
108
|
-
chunk: {
|
|
109
|
-
text: thinking,
|
|
110
|
-
isComplete: false,
|
|
111
|
-
isThinking: true
|
|
112
|
-
},
|
|
113
|
-
isDone: false
|
|
114
|
-
};
|
|
87
|
+
const chunk = {
|
|
88
|
+
type: 'content_block_delta',
|
|
89
|
+
text: jsonData.text || '',
|
|
90
|
+
isComplete: false,
|
|
91
|
+
isThinking: false
|
|
92
|
+
};
|
|
93
|
+
// Вызываем onToken если есть текст и передан обработчик
|
|
94
|
+
if (jsonData.text && onToken) {
|
|
95
|
+
onToken(jsonData.text);
|
|
115
96
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
97
|
+
return {
|
|
98
|
+
isInThinkingBlock: false,
|
|
99
|
+
thinkingContent,
|
|
100
|
+
textContent: textContent + (jsonData.text || ''),
|
|
101
|
+
thinkingSignature: signature,
|
|
102
|
+
chunk,
|
|
103
|
+
isDone: false
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
// Обрабатываем текстовые дельты
|
|
107
|
+
if (jsonData.event === 'text_delta' && jsonData.text) {
|
|
108
|
+
const newTextContent = textContent + jsonData.text;
|
|
109
|
+
const chunk = {
|
|
110
|
+
type: 'content_block_delta',
|
|
111
|
+
text: jsonData.text,
|
|
112
|
+
isComplete: false,
|
|
113
|
+
isThinking: true
|
|
114
|
+
};
|
|
115
|
+
// Вызываем onToken если передан
|
|
116
|
+
if (onToken) {
|
|
117
|
+
onToken(jsonData.text);
|
|
125
118
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
119
|
+
return {
|
|
120
|
+
isInThinkingBlock,
|
|
121
|
+
thinkingContent,
|
|
122
|
+
textContent: newTextContent,
|
|
123
|
+
thinkingSignature,
|
|
124
|
+
chunk,
|
|
125
|
+
isDone: false
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
// Обрабатываем обычные текстовые данные
|
|
129
|
+
if (jsonData.content || jsonData.text || jsonData.delta) {
|
|
130
|
+
const text = jsonData.content || jsonData.text || jsonData.delta;
|
|
131
|
+
const newTextContent = textContent + text;
|
|
132
|
+
const chunk = {
|
|
133
|
+
type: 'content_block_delta',
|
|
134
|
+
text: text,
|
|
135
|
+
isComplete: false,
|
|
136
|
+
isThinking: false
|
|
137
|
+
};
|
|
138
|
+
// Вызываем onToken если передан
|
|
139
|
+
if (onToken) {
|
|
140
|
+
onToken(text);
|
|
144
141
|
}
|
|
142
|
+
return {
|
|
143
|
+
isInThinkingBlock,
|
|
144
|
+
thinkingContent,
|
|
145
|
+
textContent: newTextContent,
|
|
146
|
+
thinkingSignature,
|
|
147
|
+
chunk,
|
|
148
|
+
isDone: false
|
|
149
|
+
};
|
|
145
150
|
}
|
|
146
|
-
//
|
|
147
|
-
return {
|
|
148
|
-
isInThinkingBlock,
|
|
149
|
-
thinkingContent,
|
|
150
|
-
textContent,
|
|
151
|
-
thinkingSignature,
|
|
152
|
-
isDone: false
|
|
153
|
-
};
|
|
151
|
+
// Если ничего не обработали, возвращаем исходное состояние
|
|
152
|
+
return { isInThinkingBlock, thinkingContent, textContent, thinkingSignature, isDone: false };
|
|
154
153
|
}
|
|
155
|
-
catch (
|
|
156
|
-
console.
|
|
157
|
-
return {
|
|
158
|
-
isInThinkingBlock,
|
|
159
|
-
thinkingContent,
|
|
160
|
-
textContent,
|
|
161
|
-
thinkingSignature,
|
|
162
|
-
isDone: false
|
|
163
|
-
};
|
|
154
|
+
catch (error) {
|
|
155
|
+
console.warn('Ошибка обработки потокового чанка:', error);
|
|
156
|
+
return { isInThinkingBlock, thinkingContent, textContent, thinkingSignature, isDone: false };
|
|
164
157
|
}
|
|
165
158
|
}
|
|
166
159
|
/**
|
|
167
|
-
* Обрабатывает
|
|
160
|
+
* Обрабатывает ошибки потоковой передачи
|
|
161
|
+
* @param error Ошибка
|
|
162
|
+
* @returns Обработанная ошибка
|
|
168
163
|
*/
|
|
169
164
|
export function handleStreamError(error) {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
(
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
console.error('\n==============================================');
|
|
179
|
-
console.error('⚠️ ОШИБКА ГЕОГРАФИЧЕСКОГО ОГРАНИЧЕНИЯ API ANTHROPIC');
|
|
180
|
-
console.error('⚠️ Для работы с API Anthropic требуется VPN или прокси');
|
|
181
|
-
console.error('⚠️ Anthropic API доступен только из определенных регионов');
|
|
182
|
-
console.error('==============================================');
|
|
183
|
-
// Обогащаем объект ошибки информацией о географических ограничениях
|
|
184
|
-
errorObj.type = 'geo_restriction';
|
|
165
|
+
if (error instanceof Error) {
|
|
166
|
+
return error;
|
|
167
|
+
}
|
|
168
|
+
if (error && error.message) {
|
|
169
|
+
return new Error(error.message);
|
|
170
|
+
}
|
|
171
|
+
if (typeof error === 'string') {
|
|
172
|
+
return new Error(error);
|
|
185
173
|
}
|
|
186
|
-
return
|
|
174
|
+
return new Error('Неизвестная ошибка потоковой передачи');
|
|
187
175
|
}
|
|
188
176
|
//# 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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"}
|
|
@@ -93,7 +93,7 @@ export var WebSocketEvents;
|
|
|
93
93
|
// События буферизации
|
|
94
94
|
WebSocketEvents["BATCH_UPDATE"] = "batch_update";
|
|
95
95
|
WebSocketEvents["SEARCH_UPDATE"] = "search_update";
|
|
96
|
-
// Общие события
|
|
96
|
+
// Общие события и стандартные события Socket.IO
|
|
97
97
|
WebSocketEvents["CONNECTED"] = "connected";
|
|
98
98
|
WebSocketEvents["PONG"] = "pong";
|
|
99
99
|
// Базовое событие для широковещательной отправки
|
|
@@ -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,MAAM,CAAN,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/esm/index.js
CHANGED
|
@@ -29,6 +29,8 @@ export * from './api/agents-api.js';
|
|
|
29
29
|
export * from './api/chat-api/index.js';
|
|
30
30
|
export * from './api/models-api.js';
|
|
31
31
|
export * from './api/dependencies-api.js';
|
|
32
|
+
// Экспортируем помощники для работы с сообщениями
|
|
33
|
+
export * from './utils/message-helpers.js';
|
|
32
34
|
// Экспорт по умолчанию
|
|
33
35
|
export default CodeSolverSDK;
|
|
34
36
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,aAAa;AACb,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,4CAA4C;AAC5C,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,0CAA0C;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gDAAgD,CAAC;AAC/D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,2CAA2C,CAAC;AAE1D,uCAAuC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAE/C,2BAA2B;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAE1C,uBAAuB;AACvB,eAAe,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,aAAa;AACb,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,4CAA4C;AAC5C,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B,0CAA0C;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gDAAgD,CAAC;AAC/D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,2CAA2C,CAAC;AAE1D,uCAAuC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAE/C,2BAA2B;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAE1C,kDAAkD;AAClD,cAAc,4BAA4B,CAAC;AAE3C,uBAAuB;AACvB,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Помощники для создания complex content сообщений согласно Anthropic API
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Создает сообщение assistant с thinking и tool_use блоками
|
|
6
|
+
* @param thinkingContent Содержимое мышления
|
|
7
|
+
* @param signature Криптографическая подпись
|
|
8
|
+
* @param toolCall Вызов инструмента
|
|
9
|
+
* @returns Сообщение assistant с complex content
|
|
10
|
+
*/
|
|
11
|
+
export function createAssistantMessageWithThinking(thinkingContent, signature, toolCall) {
|
|
12
|
+
const content = [
|
|
13
|
+
{
|
|
14
|
+
type: 'thinking',
|
|
15
|
+
thinking: thinkingContent,
|
|
16
|
+
signature: signature
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
type: 'tool_use',
|
|
20
|
+
id: toolCall.id,
|
|
21
|
+
name: toolCall.name,
|
|
22
|
+
input: toolCall.input
|
|
23
|
+
}
|
|
24
|
+
];
|
|
25
|
+
return {
|
|
26
|
+
role: 'assistant',
|
|
27
|
+
content: content
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Создает сообщение user с результатом инструмента
|
|
32
|
+
* @param toolUseId ID вызова инструмента
|
|
33
|
+
* @param result Результат выполнения
|
|
34
|
+
* @param isError Флаг ошибки
|
|
35
|
+
* @returns Сообщение user с tool_result
|
|
36
|
+
*/
|
|
37
|
+
export function createToolResultMessage(toolUseId, result, isError = false) {
|
|
38
|
+
const content = [
|
|
39
|
+
{
|
|
40
|
+
type: 'tool_result',
|
|
41
|
+
tool_use_id: toolUseId,
|
|
42
|
+
content: typeof result === 'string' ? result : JSON.stringify(result),
|
|
43
|
+
is_error: isError
|
|
44
|
+
}
|
|
45
|
+
];
|
|
46
|
+
return {
|
|
47
|
+
role: 'user',
|
|
48
|
+
content: content
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Создает простое текстовое сообщение
|
|
53
|
+
* @param role Роль отправителя
|
|
54
|
+
* @param text Текст сообщения
|
|
55
|
+
* @returns Простое сообщение
|
|
56
|
+
*/
|
|
57
|
+
export function createTextMessage(role, text) {
|
|
58
|
+
return {
|
|
59
|
+
role: role,
|
|
60
|
+
content: text
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Создает сообщение assistant с текстом и мышлением
|
|
65
|
+
* @param text Основной текст ответа
|
|
66
|
+
* @param thinkingContent Содержимое мышления (опционально)
|
|
67
|
+
* @param signature Подпись мышления (опционально)
|
|
68
|
+
* @returns Сообщение assistant с complex content
|
|
69
|
+
*/
|
|
70
|
+
export function createAssistantMessage(text, thinkingContent, signature) {
|
|
71
|
+
const content = [];
|
|
72
|
+
// Добавляем thinking блок если есть
|
|
73
|
+
if (thinkingContent && signature) {
|
|
74
|
+
content.push({
|
|
75
|
+
type: 'thinking',
|
|
76
|
+
thinking: thinkingContent,
|
|
77
|
+
signature: signature
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// Добавляем текстовый блок
|
|
81
|
+
content.push({
|
|
82
|
+
type: 'text',
|
|
83
|
+
text: text
|
|
84
|
+
});
|
|
85
|
+
return {
|
|
86
|
+
role: 'assistant',
|
|
87
|
+
content: content
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Извлекает thinking блоки из сообщения
|
|
92
|
+
* @param message Сообщение с complex content
|
|
93
|
+
* @returns Массив thinking блоков
|
|
94
|
+
*/
|
|
95
|
+
export function extractThinkingBlocks(message) {
|
|
96
|
+
if (typeof message.content === 'string') {
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
99
|
+
return message.content.filter(block => block.type === 'thinking' || block.type === 'redacted_thinking');
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Извлекает tool_use блоки из сообщения
|
|
103
|
+
* @param message Сообщение с complex content
|
|
104
|
+
* @returns Массив tool_use блоков
|
|
105
|
+
*/
|
|
106
|
+
export function extractToolUseBlocks(message) {
|
|
107
|
+
if (typeof message.content === 'string') {
|
|
108
|
+
return [];
|
|
109
|
+
}
|
|
110
|
+
return message.content.filter(block => block.type === 'tool_use');
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Извлекает текстовое содержимое из сообщения
|
|
114
|
+
* @param message Сообщение
|
|
115
|
+
* @returns Текстовое содержимое
|
|
116
|
+
*/
|
|
117
|
+
export function extractTextContent(message) {
|
|
118
|
+
if (typeof message.content === 'string') {
|
|
119
|
+
return message.content;
|
|
120
|
+
}
|
|
121
|
+
const textBlocks = message.content.filter(block => block.type === 'text');
|
|
122
|
+
return textBlocks.map(block => block.text).join('');
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Проверяет, содержит ли сообщение thinking блоки
|
|
126
|
+
* @param message Сообщение для проверки
|
|
127
|
+
* @returns true если содержит thinking блоки
|
|
128
|
+
*/
|
|
129
|
+
export function hasThinkingBlocks(message) {
|
|
130
|
+
if (typeof message.content === 'string') {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
return message.content.some(block => block.type === 'thinking' || block.type === 'redacted_thinking');
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Проверяет, содержит ли сообщение tool_use блоки
|
|
137
|
+
* @param message Сообщение для проверки
|
|
138
|
+
* @returns true если содержит tool_use блоки
|
|
139
|
+
*/
|
|
140
|
+
export function hasToolUseBlocks(message) {
|
|
141
|
+
if (typeof message.content === 'string') {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
return message.content.some(block => block.type === 'tool_use');
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Создает определение инструмента для Anthropic API
|
|
148
|
+
* @param name Название инструмента
|
|
149
|
+
* @param description Описание функциональности
|
|
150
|
+
* @param properties Свойства входных параметров
|
|
151
|
+
* @param required Обязательные поля
|
|
152
|
+
* @returns Определение инструмента
|
|
153
|
+
*/
|
|
154
|
+
export function createToolDefinition(name, description, properties, required = []) {
|
|
155
|
+
return {
|
|
156
|
+
name: name,
|
|
157
|
+
description: description,
|
|
158
|
+
input_schema: {
|
|
159
|
+
type: 'object',
|
|
160
|
+
properties: properties,
|
|
161
|
+
required: required
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Создает стандартные инструменты для разработки (как в Cursor)
|
|
167
|
+
* @returns Массив стандартных инструментов
|
|
168
|
+
*/
|
|
169
|
+
export function createStandardDevelopmentTools() {
|
|
170
|
+
return [
|
|
171
|
+
createToolDefinition('edit_file', 'Редактирует содержимое файла', {
|
|
172
|
+
file_path: { type: 'string', description: 'Путь к файлу для редактирования' },
|
|
173
|
+
content: { type: 'string', description: 'Новое содержимое файла' },
|
|
174
|
+
start_line: { type: 'integer', description: 'Начальная строка для частичного редактирования' },
|
|
175
|
+
end_line: { type: 'integer', description: 'Конечная строка для частичного редактирования' }
|
|
176
|
+
}, ['file_path', 'content']),
|
|
177
|
+
createToolDefinition('read_file', 'Читает содержимое файла', {
|
|
178
|
+
file_path: { type: 'string', description: 'Путь к файлу для чтения' }
|
|
179
|
+
}, ['file_path']),
|
|
180
|
+
createToolDefinition('create_file', 'Создает новый файл', {
|
|
181
|
+
file_path: { type: 'string', description: 'Путь к новому файлу' },
|
|
182
|
+
content: { type: 'string', description: 'Содержимое файла' }
|
|
183
|
+
}, ['file_path', 'content']),
|
|
184
|
+
createToolDefinition('list_files', 'Получает список файлов в директории', {
|
|
185
|
+
directory_path: { type: 'string', description: 'Путь к директории' },
|
|
186
|
+
include_hidden: { type: 'boolean', description: 'Включать скрытые файлы' }
|
|
187
|
+
}, ['directory_path']),
|
|
188
|
+
createToolDefinition('search_files', 'Поиск в файлах по содержимому', {
|
|
189
|
+
query: { type: 'string', description: 'Поисковый запрос' },
|
|
190
|
+
file_pattern: { type: 'string', description: 'Паттерн имен файлов' },
|
|
191
|
+
case_sensitive: { type: 'boolean', description: 'Учитывать регистр' }
|
|
192
|
+
}, ['query']),
|
|
193
|
+
createToolDefinition('run_command', 'Выполняет команду в терминале', {
|
|
194
|
+
command: { type: 'string', description: 'Команда для выполнения' },
|
|
195
|
+
working_directory: { type: 'string', description: 'Рабочая директория' }
|
|
196
|
+
}, ['command'])
|
|
197
|
+
];
|
|
198
|
+
}
|
|
199
|
+
//# 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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"}
|
|
@@ -21,8 +21,6 @@ export class FileSystemWsClient extends BaseWebSocketClient {
|
|
|
21
21
|
});
|
|
22
22
|
this.sessionId = null;
|
|
23
23
|
this.projectId = null;
|
|
24
|
-
this.pingInterval = 25000; // 25 секунд по умолчанию
|
|
25
|
-
this.pingTimer = null;
|
|
26
24
|
this.SDK_VERSION = '1.0.0';
|
|
27
25
|
// Устанавливаем обработчики
|
|
28
26
|
this.onReadFile = options.onReadFile || (() => Promise.reject('Чтение файлов не реализовано'));
|
|
@@ -58,7 +56,6 @@ export class FileSystemWsClient extends BaseWebSocketClient {
|
|
|
58
56
|
});
|
|
59
57
|
if (response && response.payload) {
|
|
60
58
|
this.sessionId = response.payload.sessionId;
|
|
61
|
-
this.pingInterval = response.payload.pingInterval || 25000;
|
|
62
59
|
// Настраиваем обработчики событий
|
|
63
60
|
this.setupHandlers();
|
|
64
61
|
return true;
|
|
@@ -152,13 +149,6 @@ export class FileSystemWsClient extends BaseWebSocketClient {
|
|
|
152
149
|
});
|
|
153
150
|
}
|
|
154
151
|
});
|
|
155
|
-
// Обработчик ping
|
|
156
|
-
this.on(WebSocketEvents.PING, (data) => {
|
|
157
|
-
this.send(WebSocketEvents.PONG, {
|
|
158
|
-
requestId: data.requestId || uuidv4(),
|
|
159
|
-
timestamp: Date.now()
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
152
|
}
|
|
163
153
|
/**
|
|
164
154
|
* Уведомляет сервер об изменении файла
|