@hileeon/mcc 0.1.8 → 0.2.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/README.md +229 -127
- package/dist/accounts/store.d.ts +12 -0
- package/dist/accounts/store.d.ts.map +1 -1
- package/dist/accounts/store.js.map +1 -1
- package/dist/commands/launch.d.ts +9 -0
- package/dist/commands/launch.d.ts.map +1 -0
- package/dist/commands/launch.js +162 -0
- package/dist/commands/launch.js.map +1 -0
- package/dist/commands/mcp.d.ts +9 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +112 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/profile-test.d.ts +17 -0
- package/dist/commands/profile-test.d.ts.map +1 -0
- package/dist/commands/profile-test.js +188 -0
- package/dist/commands/profile-test.js.map +1 -0
- package/dist/commands/profile.d.ts +8 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +125 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/core/model-router.d.ts.map +1 -1
- package/dist/core/model-router.js +36 -3
- package/dist/core/model-router.js.map +1 -1
- package/dist/{dashboard-server.d.ts → dashboard/server.d.ts} +1 -1
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/{dashboard-server.js → dashboard/server.js} +254 -48
- package/dist/dashboard/server.js.map +1 -0
- package/dist/mcc.d.ts +4 -2
- package/dist/mcc.d.ts.map +1 -1
- package/dist/mcc.js +127 -408
- package/dist/mcc.js.map +1 -1
- package/dist/mcp/installer.d.ts.map +1 -1
- package/dist/mcp/installer.js +5 -2
- package/dist/mcp/installer.js.map +1 -1
- package/dist/mcp/mcp-config.d.ts +33 -3
- package/dist/mcp/mcp-config.d.ts.map +1 -1
- package/dist/mcp/mcp-config.js +81 -29
- package/dist/mcp/mcp-config.js.map +1 -1
- package/dist/proxy/proxy-daemon.d.ts +1 -1
- package/dist/proxy/proxy-daemon.d.ts.map +1 -1
- package/dist/proxy/proxy-daemon.js +27 -7
- package/dist/proxy/proxy-daemon.js.map +1 -1
- package/dist/proxy/proxy-entry.js +11 -4
- package/dist/proxy/proxy-entry.js.map +1 -1
- package/dist/proxy/proxy-paths.d.ts +1 -0
- package/dist/proxy/proxy-paths.d.ts.map +1 -1
- package/dist/proxy/proxy-paths.js.map +1 -1
- package/dist/proxy/proxy-server.d.ts +1 -0
- package/dist/proxy/proxy-server.d.ts.map +1 -1
- package/dist/proxy/proxy-server.js +114 -6
- package/dist/proxy/proxy-server.js.map +1 -1
- package/dist/shared/config.d.ts +15 -0
- package/dist/shared/config.d.ts.map +1 -0
- package/dist/shared/config.js +79 -0
- package/dist/shared/config.js.map +1 -0
- package/dist/shared/logger.d.ts +23 -18
- package/dist/shared/logger.d.ts.map +1 -1
- package/dist/shared/logger.js +17 -178
- package/dist/shared/logger.js.map +1 -1
- package/dist/shared/provider-preset-catalog.d.ts +8 -2
- package/dist/shared/provider-preset-catalog.d.ts.map +1 -1
- package/dist/shared/provider-preset-catalog.js +61 -31
- package/dist/shared/provider-preset-catalog.js.map +1 -1
- package/dist/shared/test-image.d.ts +15 -0
- package/dist/shared/test-image.d.ts.map +1 -0
- package/dist/shared/test-image.js +89 -0
- package/dist/shared/test-image.js.map +1 -0
- package/dist/ui/assets/index-7kowlJw9.js +40 -0
- package/dist/ui/assets/index-DnC-lskL.css +1 -0
- package/dist/ui/index.html +21 -13
- package/dist/update.d.ts +31 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +196 -0
- package/dist/update.js.map +1 -0
- package/lib/mcp/mcc-image-analysis-server.cjs +454 -454
- package/lib/mcp/mcc-websearch-server.cjs +339 -339
- package/lib/mcp-hooks/image-analysis-runtime.cjs +563 -510
- package/lib/mcp-hooks/image-analyzer-transformer.cjs +526 -526
- package/lib/mcp-hooks/websearch-transformer.cjs +1597 -1421
- package/lib/proxy/config/config-loader-facade.js +24 -24
- package/lib/proxy/glmt/delta-accumulator.js +362 -362
- package/lib/proxy/glmt/glmt-transformer.js +203 -203
- package/lib/proxy/glmt/index.js +40 -40
- package/lib/proxy/glmt/locale-enforcer.js +68 -68
- package/lib/proxy/glmt/pipeline/content-transformer.js +161 -161
- package/lib/proxy/glmt/pipeline/index.js +19 -19
- package/lib/proxy/glmt/pipeline/request-transformer.js +115 -115
- package/lib/proxy/glmt/pipeline/response-builder.js +204 -204
- package/lib/proxy/glmt/pipeline/stream-parser.js +233 -233
- package/lib/proxy/glmt/pipeline/tool-call-handler.js +77 -77
- package/lib/proxy/glmt/pipeline/types.js +5 -5
- package/lib/proxy/glmt/reasoning-enforcer.js +150 -150
- package/lib/proxy/glmt/sse-parser.js +101 -101
- package/lib/proxy/services/logging.js +13 -13
- package/lib/proxy/transformers/request-transformer.js +471 -471
- package/lib/proxy/transformers/sse-stream-transformer.js +198 -198
- package/lib/shared/logger.cjs +160 -138
- package/package.json +58 -41
- package/dist/dashboard-server.d.ts.map +0 -1
- package/dist/dashboard-server.js.map +0 -1
- package/dist/ui/assets/index-B16lhKZ6.js +0 -40
- package/dist/ui/assets/index-jEfiB6-h.css +0 -1
|
@@ -1,205 +1,205 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* ResponseBuilder - Create SSE events for Anthropic streaming format
|
|
4
|
-
*
|
|
5
|
-
* Responsibilities:
|
|
6
|
-
* - Create message_start, message_delta, message_stop events
|
|
7
|
-
* - Create content_block_start, content_block_delta, content_block_stop events
|
|
8
|
-
* - Generate thinking signatures
|
|
9
|
-
* - Map stop reasons between formats
|
|
10
|
-
*/
|
|
11
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
-
if (k2 === undefined) k2 = k;
|
|
13
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
-
}
|
|
17
|
-
Object.defineProperty(o, k2, desc);
|
|
18
|
-
}) : (function(o, m, k, k2) {
|
|
19
|
-
if (k2 === undefined) k2 = k;
|
|
20
|
-
o[k2] = m[k];
|
|
21
|
-
}));
|
|
22
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
-
}) : function(o, v) {
|
|
25
|
-
o["default"] = v;
|
|
26
|
-
});
|
|
27
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
-
exports.ResponseBuilder = void 0;
|
|
36
|
-
const crypto = __importStar(require("crypto"));
|
|
37
|
-
class ResponseBuilder {
|
|
38
|
-
constructor(verbose = false) {
|
|
39
|
-
this.verbose = verbose;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Create message_start event
|
|
43
|
-
*/
|
|
44
|
-
createMessageStartEvent(accumulator) {
|
|
45
|
-
return {
|
|
46
|
-
event: 'message_start',
|
|
47
|
-
data: {
|
|
48
|
-
type: 'message_start',
|
|
49
|
-
message: {
|
|
50
|
-
id: accumulator.getMessageId(),
|
|
51
|
-
type: 'message',
|
|
52
|
-
role: accumulator.getRole(),
|
|
53
|
-
content: [],
|
|
54
|
-
model: accumulator.getModel() || 'glm-5',
|
|
55
|
-
stop_reason: null,
|
|
56
|
-
usage: {
|
|
57
|
-
input_tokens: accumulator.getInputTokens(),
|
|
58
|
-
output_tokens: 0,
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Create content_block_start event
|
|
66
|
-
*/
|
|
67
|
-
createContentBlockStartEvent(block) {
|
|
68
|
-
return {
|
|
69
|
-
event: 'content_block_start',
|
|
70
|
-
data: {
|
|
71
|
-
type: 'content_block_start',
|
|
72
|
-
index: block.index,
|
|
73
|
-
content_block: {
|
|
74
|
-
type: block.type,
|
|
75
|
-
[block.type]: '',
|
|
76
|
-
},
|
|
77
|
-
},
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Create thinking_delta event
|
|
82
|
-
*/
|
|
83
|
-
createThinkingDeltaEvent(block, delta) {
|
|
84
|
-
return {
|
|
85
|
-
event: 'content_block_delta',
|
|
86
|
-
data: {
|
|
87
|
-
type: 'content_block_delta',
|
|
88
|
-
index: block.index,
|
|
89
|
-
delta: {
|
|
90
|
-
type: 'thinking_delta',
|
|
91
|
-
thinking: delta,
|
|
92
|
-
},
|
|
93
|
-
},
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Create text_delta event
|
|
98
|
-
*/
|
|
99
|
-
createTextDeltaEvent(block, delta) {
|
|
100
|
-
return {
|
|
101
|
-
event: 'content_block_delta',
|
|
102
|
-
data: {
|
|
103
|
-
type: 'content_block_delta',
|
|
104
|
-
index: block.index,
|
|
105
|
-
delta: {
|
|
106
|
-
type: 'text_delta',
|
|
107
|
-
text: delta,
|
|
108
|
-
},
|
|
109
|
-
},
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Create thinking signature delta event
|
|
114
|
-
*/
|
|
115
|
-
createSignatureDeltaEvent(block) {
|
|
116
|
-
// FIX: Guard against empty content (signature timing race)
|
|
117
|
-
if (!block.content || block.content.length === 0) {
|
|
118
|
-
if (this.verbose) {
|
|
119
|
-
console.error(`[ResponseBuilder] WARNING: Skipping signature for empty thinking block ${block.index}`);
|
|
120
|
-
console.error(`This indicates a race condition - signature requested before content accumulated`);
|
|
121
|
-
}
|
|
122
|
-
return null;
|
|
123
|
-
}
|
|
124
|
-
const signature = this.generateThinkingSignature(block.content);
|
|
125
|
-
if (this.verbose) {
|
|
126
|
-
console.error(`[ResponseBuilder] Generating signature for block ${block.index}: ${block.content.length} chars`);
|
|
127
|
-
}
|
|
128
|
-
return {
|
|
129
|
-
event: 'content_block_delta',
|
|
130
|
-
data: {
|
|
131
|
-
type: 'content_block_delta',
|
|
132
|
-
index: block.index,
|
|
133
|
-
delta: {
|
|
134
|
-
type: 'thinking_signature_delta',
|
|
135
|
-
signature: signature,
|
|
136
|
-
},
|
|
137
|
-
},
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Create content_block_stop event
|
|
142
|
-
*/
|
|
143
|
-
createContentBlockStopEvent(block) {
|
|
144
|
-
return {
|
|
145
|
-
event: 'content_block_stop',
|
|
146
|
-
data: {
|
|
147
|
-
type: 'content_block_stop',
|
|
148
|
-
index: block.index,
|
|
149
|
-
},
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Generate finalization events (message_delta + message_stop)
|
|
154
|
-
*/
|
|
155
|
-
createFinalizationEvents(accumulator, stopReason) {
|
|
156
|
-
return [
|
|
157
|
-
{
|
|
158
|
-
event: 'message_delta',
|
|
159
|
-
data: {
|
|
160
|
-
type: 'message_delta',
|
|
161
|
-
delta: {
|
|
162
|
-
stop_reason: stopReason,
|
|
163
|
-
},
|
|
164
|
-
usage: {
|
|
165
|
-
input_tokens: accumulator.getInputTokens(),
|
|
166
|
-
output_tokens: accumulator.getOutputTokens(),
|
|
167
|
-
},
|
|
168
|
-
},
|
|
169
|
-
},
|
|
170
|
-
{
|
|
171
|
-
event: 'message_stop',
|
|
172
|
-
data: {
|
|
173
|
-
type: 'message_stop',
|
|
174
|
-
},
|
|
175
|
-
},
|
|
176
|
-
];
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Generate thinking signature for Claude Code UI
|
|
180
|
-
*/
|
|
181
|
-
generateThinkingSignature(thinking) {
|
|
182
|
-
// Generate signature hash
|
|
183
|
-
const hash = crypto.createHash('sha256').update(thinking).digest('hex').substring(0, 16);
|
|
184
|
-
return {
|
|
185
|
-
type: 'thinking_signature',
|
|
186
|
-
hash: hash,
|
|
187
|
-
length: thinking.length,
|
|
188
|
-
timestamp: Date.now(),
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Map OpenAI stop reason to Anthropic stop reason
|
|
193
|
-
*/
|
|
194
|
-
mapStopReason(openaiReason) {
|
|
195
|
-
const mapping = {
|
|
196
|
-
stop: 'end_turn',
|
|
197
|
-
length: 'max_tokens',
|
|
198
|
-
tool_calls: 'tool_use',
|
|
199
|
-
content_filter: 'stop_sequence',
|
|
200
|
-
};
|
|
201
|
-
return mapping[openaiReason] || 'end_turn';
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
exports.ResponseBuilder = ResponseBuilder;
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ResponseBuilder - Create SSE events for Anthropic streaming format
|
|
4
|
+
*
|
|
5
|
+
* Responsibilities:
|
|
6
|
+
* - Create message_start, message_delta, message_stop events
|
|
7
|
+
* - Create content_block_start, content_block_delta, content_block_stop events
|
|
8
|
+
* - Generate thinking signatures
|
|
9
|
+
* - Map stop reasons between formats
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.ResponseBuilder = void 0;
|
|
36
|
+
const crypto = __importStar(require("crypto"));
|
|
37
|
+
class ResponseBuilder {
|
|
38
|
+
constructor(verbose = false) {
|
|
39
|
+
this.verbose = verbose;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create message_start event
|
|
43
|
+
*/
|
|
44
|
+
createMessageStartEvent(accumulator) {
|
|
45
|
+
return {
|
|
46
|
+
event: 'message_start',
|
|
47
|
+
data: {
|
|
48
|
+
type: 'message_start',
|
|
49
|
+
message: {
|
|
50
|
+
id: accumulator.getMessageId(),
|
|
51
|
+
type: 'message',
|
|
52
|
+
role: accumulator.getRole(),
|
|
53
|
+
content: [],
|
|
54
|
+
model: accumulator.getModel() || 'glm-5',
|
|
55
|
+
stop_reason: null,
|
|
56
|
+
usage: {
|
|
57
|
+
input_tokens: accumulator.getInputTokens(),
|
|
58
|
+
output_tokens: 0,
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create content_block_start event
|
|
66
|
+
*/
|
|
67
|
+
createContentBlockStartEvent(block) {
|
|
68
|
+
return {
|
|
69
|
+
event: 'content_block_start',
|
|
70
|
+
data: {
|
|
71
|
+
type: 'content_block_start',
|
|
72
|
+
index: block.index,
|
|
73
|
+
content_block: {
|
|
74
|
+
type: block.type,
|
|
75
|
+
[block.type]: '',
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Create thinking_delta event
|
|
82
|
+
*/
|
|
83
|
+
createThinkingDeltaEvent(block, delta) {
|
|
84
|
+
return {
|
|
85
|
+
event: 'content_block_delta',
|
|
86
|
+
data: {
|
|
87
|
+
type: 'content_block_delta',
|
|
88
|
+
index: block.index,
|
|
89
|
+
delta: {
|
|
90
|
+
type: 'thinking_delta',
|
|
91
|
+
thinking: delta,
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Create text_delta event
|
|
98
|
+
*/
|
|
99
|
+
createTextDeltaEvent(block, delta) {
|
|
100
|
+
return {
|
|
101
|
+
event: 'content_block_delta',
|
|
102
|
+
data: {
|
|
103
|
+
type: 'content_block_delta',
|
|
104
|
+
index: block.index,
|
|
105
|
+
delta: {
|
|
106
|
+
type: 'text_delta',
|
|
107
|
+
text: delta,
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Create thinking signature delta event
|
|
114
|
+
*/
|
|
115
|
+
createSignatureDeltaEvent(block) {
|
|
116
|
+
// FIX: Guard against empty content (signature timing race)
|
|
117
|
+
if (!block.content || block.content.length === 0) {
|
|
118
|
+
if (this.verbose) {
|
|
119
|
+
console.error(`[ResponseBuilder] WARNING: Skipping signature for empty thinking block ${block.index}`);
|
|
120
|
+
console.error(`This indicates a race condition - signature requested before content accumulated`);
|
|
121
|
+
}
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
const signature = this.generateThinkingSignature(block.content);
|
|
125
|
+
if (this.verbose) {
|
|
126
|
+
console.error(`[ResponseBuilder] Generating signature for block ${block.index}: ${block.content.length} chars`);
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
event: 'content_block_delta',
|
|
130
|
+
data: {
|
|
131
|
+
type: 'content_block_delta',
|
|
132
|
+
index: block.index,
|
|
133
|
+
delta: {
|
|
134
|
+
type: 'thinking_signature_delta',
|
|
135
|
+
signature: signature,
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Create content_block_stop event
|
|
142
|
+
*/
|
|
143
|
+
createContentBlockStopEvent(block) {
|
|
144
|
+
return {
|
|
145
|
+
event: 'content_block_stop',
|
|
146
|
+
data: {
|
|
147
|
+
type: 'content_block_stop',
|
|
148
|
+
index: block.index,
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Generate finalization events (message_delta + message_stop)
|
|
154
|
+
*/
|
|
155
|
+
createFinalizationEvents(accumulator, stopReason) {
|
|
156
|
+
return [
|
|
157
|
+
{
|
|
158
|
+
event: 'message_delta',
|
|
159
|
+
data: {
|
|
160
|
+
type: 'message_delta',
|
|
161
|
+
delta: {
|
|
162
|
+
stop_reason: stopReason,
|
|
163
|
+
},
|
|
164
|
+
usage: {
|
|
165
|
+
input_tokens: accumulator.getInputTokens(),
|
|
166
|
+
output_tokens: accumulator.getOutputTokens(),
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
event: 'message_stop',
|
|
172
|
+
data: {
|
|
173
|
+
type: 'message_stop',
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
];
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Generate thinking signature for Claude Code UI
|
|
180
|
+
*/
|
|
181
|
+
generateThinkingSignature(thinking) {
|
|
182
|
+
// Generate signature hash
|
|
183
|
+
const hash = crypto.createHash('sha256').update(thinking).digest('hex').substring(0, 16);
|
|
184
|
+
return {
|
|
185
|
+
type: 'thinking_signature',
|
|
186
|
+
hash: hash,
|
|
187
|
+
length: thinking.length,
|
|
188
|
+
timestamp: Date.now(),
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Map OpenAI stop reason to Anthropic stop reason
|
|
193
|
+
*/
|
|
194
|
+
mapStopReason(openaiReason) {
|
|
195
|
+
const mapping = {
|
|
196
|
+
stop: 'end_turn',
|
|
197
|
+
length: 'max_tokens',
|
|
198
|
+
tool_calls: 'tool_use',
|
|
199
|
+
content_filter: 'stop_sequence',
|
|
200
|
+
};
|
|
201
|
+
return mapping[openaiReason] || 'end_turn';
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
exports.ResponseBuilder = ResponseBuilder;
|
|
205
205
|
//# sourceMappingURL=response-builder.js.map
|