commandcode-api-proxy 0.1.2

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 (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +176 -0
  3. package/dist/auth.d.ts +7 -0
  4. package/dist/auth.d.ts.map +1 -0
  5. package/dist/auth.js +77 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/config.d.ts +22 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +67 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/logger.d.ts +9 -0
  12. package/dist/logger.d.ts.map +1 -0
  13. package/dist/logger.js +36 -0
  14. package/dist/logger.js.map +1 -0
  15. package/dist/models.json +89 -0
  16. package/dist/proxy.d.ts +3 -0
  17. package/dist/proxy.d.ts.map +1 -0
  18. package/dist/proxy.js +80 -0
  19. package/dist/proxy.js.map +1 -0
  20. package/dist/server.d.ts +4 -0
  21. package/dist/server.d.ts.map +1 -0
  22. package/dist/server.js +259 -0
  23. package/dist/server.js.map +1 -0
  24. package/dist/setup/opencode.d.ts +2 -0
  25. package/dist/setup/opencode.d.ts.map +1 -0
  26. package/dist/setup/opencode.js +58 -0
  27. package/dist/setup/opencode.js.map +1 -0
  28. package/dist/stream.d.ts +38 -0
  29. package/dist/stream.d.ts.map +1 -0
  30. package/dist/stream.js +89 -0
  31. package/dist/stream.js.map +1 -0
  32. package/dist/translate/models.d.ts +9 -0
  33. package/dist/translate/models.d.ts.map +1 -0
  34. package/dist/translate/models.js +41 -0
  35. package/dist/translate/models.js.map +1 -0
  36. package/dist/translate/openai.d.ts +13 -0
  37. package/dist/translate/openai.d.ts.map +1 -0
  38. package/dist/translate/openai.js +470 -0
  39. package/dist/translate/openai.js.map +1 -0
  40. package/dist/translate/types.d.ts +110 -0
  41. package/dist/translate/types.d.ts.map +1 -0
  42. package/dist/translate/types.js +3 -0
  43. package/dist/translate/types.js.map +1 -0
  44. package/dist/translate/util.d.ts +12 -0
  45. package/dist/translate/util.d.ts.map +1 -0
  46. package/dist/translate/util.js +114 -0
  47. package/dist/translate/util.js.map +1 -0
  48. package/dist/translate/validation.d.ts +6 -0
  49. package/dist/translate/validation.d.ts.map +1 -0
  50. package/dist/translate/validation.js +34 -0
  51. package/dist/translate/validation.js.map +1 -0
  52. package/dist/upstream.d.ts +41 -0
  53. package/dist/upstream.d.ts.map +1 -0
  54. package/dist/upstream.js +167 -0
  55. package/dist/upstream.js.map +1 -0
  56. package/package.json +55 -0
@@ -0,0 +1,470 @@
1
+ import crypto from "node:crypto";
2
+ import { resolveModel } from "../translate/models.js";
3
+ import { getMessageId, extractUsage, pruneDanglingTools, buildCCConfig } from "../translate/util.js";
4
+ import { logger } from "../logger.js";
5
+ // ──────────────────────────────────────────
6
+ // OpenAI request → CC request
7
+ // ──────────────────────────────────────────
8
+ function toCCMessages(messages) {
9
+ const systemParts = [];
10
+ const ccMessages = [];
11
+ // Map tool_call_id -> toolName so tool-result parts can carry the tool name
12
+ // required by the CC upstream schema (tool-result parts need a `toolName`).
13
+ const toolNameById = new Map();
14
+ for (const msg of messages) {
15
+ if (msg.tool_calls) {
16
+ for (const tc of msg.tool_calls) {
17
+ if (tc.id)
18
+ toolNameById.set(tc.id, tc.function.name);
19
+ }
20
+ }
21
+ }
22
+ for (const msg of messages) {
23
+ if (msg.role === "system" || msg.role === "developer") {
24
+ const text = typeof msg.content === "string"
25
+ ? msg.content
26
+ : msg.content
27
+ .map((p) => (p.type === "text" ? p.text : ""))
28
+ .filter(Boolean)
29
+ .join("\n");
30
+ systemParts.push(text);
31
+ continue;
32
+ }
33
+ if (msg.role === "tool") {
34
+ const resultText = typeof msg.content === "string" ? msg.content : JSON.stringify(msg.content);
35
+ ccMessages.push({
36
+ role: "tool",
37
+ content: [
38
+ {
39
+ type: "tool-result",
40
+ toolCallId: msg.tool_call_id ?? "",
41
+ toolName: (msg.tool_call_id ? toolNameById.get(msg.tool_call_id) : undefined) ?? "",
42
+ output: { type: "text", value: resultText },
43
+ },
44
+ ],
45
+ });
46
+ continue;
47
+ }
48
+ if (msg.role === "assistant" && msg.tool_calls) {
49
+ const parts = [];
50
+ if (typeof msg.content === "string" && msg.content) {
51
+ parts.push({ type: "text", text: msg.content });
52
+ }
53
+ for (const tc of msg.tool_calls) {
54
+ let parsedInput;
55
+ try {
56
+ parsedInput = tc.function.arguments ? JSON.parse(tc.function.arguments) : {};
57
+ }
58
+ catch {
59
+ parsedInput = tc.function.arguments;
60
+ }
61
+ parts.push({
62
+ type: "tool-call",
63
+ toolCallId: tc.id,
64
+ toolName: tc.function.name,
65
+ input: parsedInput,
66
+ });
67
+ }
68
+ ccMessages.push({ role: "assistant", content: parts });
69
+ continue;
70
+ }
71
+ if (msg.role === "user") {
72
+ if (typeof msg.content === "string") {
73
+ ccMessages.push({ role: "user", content: msg.content });
74
+ }
75
+ else {
76
+ const parts = msg.content.map((p) => {
77
+ if (p.type === "image_url" && p.image_url) {
78
+ return { type: "image", image: p.image_url.url };
79
+ }
80
+ return { type: "text", text: p.text ?? "" };
81
+ });
82
+ ccMessages.push({ role: "user", content: parts });
83
+ }
84
+ continue;
85
+ }
86
+ // assistant (plain text)
87
+ if (typeof msg.content === "string") {
88
+ ccMessages.push({ role: "assistant", content: msg.content });
89
+ }
90
+ }
91
+ return {
92
+ ccMessages: pruneDanglingTools(ccMessages),
93
+ systemPrompt: systemParts.length > 0 ? systemParts.join("\n\n") : undefined,
94
+ };
95
+ }
96
+ function toCCTools(tools) {
97
+ if (!tools || tools.length === 0)
98
+ return undefined;
99
+ return tools.map((t) => ({
100
+ name: t.function.name,
101
+ description: t.function.description,
102
+ input_schema: t.function.parameters,
103
+ }));
104
+ }
105
+ function resolveToolChoice(tc) {
106
+ if (!tc || tc === "auto")
107
+ return undefined;
108
+ if (tc === "none")
109
+ return "none";
110
+ if (tc === "required")
111
+ return "required";
112
+ if (typeof tc === "object" && tc.type === "function") {
113
+ return tc.function.name;
114
+ }
115
+ return undefined;
116
+ }
117
+ export function toCCRequest(req, configOverrides) {
118
+ const { ccMessages, systemPrompt } = toCCMessages(req.messages);
119
+ const resolvedModel = resolveModel(req.model);
120
+ const body = {
121
+ config: buildCCConfig(configOverrides),
122
+ memory: "",
123
+ taste: "",
124
+ skills: "",
125
+ permissionMode: "standard",
126
+ params: {
127
+ model: resolvedModel,
128
+ messages: ccMessages,
129
+ stream: req.stream ?? false,
130
+ max_tokens: req.max_tokens,
131
+ temperature: req.temperature,
132
+ top_p: req.top_p,
133
+ stop: req.stop,
134
+ reasoning_effort: req.reasoning_effort,
135
+ tools: toCCTools(req.tools),
136
+ tool_choice: resolveToolChoice(req.tool_choice),
137
+ },
138
+ threadId: crypto.randomUUID(),
139
+ };
140
+ const hasTools = req.tools && req.tools.length > 0;
141
+ const noToolsInstruction = "CRITICAL: You are running in a chat-only environment. Tool execution is disabled. Do not generate or call any tools (e.g. Build, ReadFile, grep, Search, etc.). Respond only with plain text.";
142
+ const withToolsInstruction = "";
143
+ const finalSystemPrompt = systemPrompt
144
+ ? `${systemPrompt}\n\n${hasTools ? withToolsInstruction : noToolsInstruction}`
145
+ : hasTools
146
+ ? withToolsInstruction
147
+ : noToolsInstruction;
148
+ if (finalSystemPrompt) {
149
+ body.params.system = finalSystemPrompt;
150
+ }
151
+ // Also append directly to the last user message as a fallback to bypass upstream overrides
152
+ if (ccMessages.length > 0 && !hasTools) {
153
+ for (let i = ccMessages.length - 1; i >= 0; i--) {
154
+ if (ccMessages[i].role === "user") {
155
+ const msg = ccMessages[i];
156
+ const suffix = "\n\n[System Note: Tool execution is disabled in this environment. Do not output any tool calls (such as Build, Search, ReadFile, grep, etc.). You must answer directly in plain text.]";
157
+ if (typeof msg.content === "string") {
158
+ msg.content += suffix;
159
+ }
160
+ else if (Array.isArray(msg.content)) {
161
+ const lastTextPart = [...msg.content].reverse().find((p) => p.type === "text");
162
+ if (lastTextPart) {
163
+ lastTextPart.text = (lastTextPart.text ?? "") + suffix;
164
+ }
165
+ else {
166
+ msg.content.push({ type: "text", text: suffix });
167
+ }
168
+ }
169
+ break;
170
+ }
171
+ }
172
+ }
173
+ return body;
174
+ }
175
+ // ──────────────────────────────────────────
176
+ // CC events → OpenAI streaming chunks
177
+ // ──────────────────────────────────────────
178
+ /**
179
+ * Convert internal UsageData into the OpenAI `usage` object format
180
+ * (prompt_tokens / completion_tokens / total_tokens + detail sub-objects).
181
+ */
182
+ function toOpenAIUsage(u) {
183
+ const promptTokens = u.promptTokens ?? 0;
184
+ const completionTokens = u.completionTokens ?? 0;
185
+ const usage = {
186
+ prompt_tokens: promptTokens,
187
+ completion_tokens: completionTokens,
188
+ total_tokens: u.totalTokens ?? promptTokens + completionTokens,
189
+ };
190
+ if (u.promptTokensDetails?.cachedTokens != null) {
191
+ usage.prompt_tokens_details = { cached_tokens: u.promptTokensDetails.cachedTokens };
192
+ }
193
+ if (u.completionTokensDetails?.reasoningTokens != null) {
194
+ usage.completion_tokens_details = {
195
+ reasoning_tokens: u.completionTokensDetails.reasoningTokens,
196
+ };
197
+ }
198
+ return usage;
199
+ }
200
+ // Index counter for tool calls within a single streaming response.
201
+ let toolCallIndex = 0;
202
+ /**
203
+ * Translate a single CC event into OpenAI streaming chunks.
204
+ *
205
+ * `model` is the model id requested by the downstream client (echoed back in
206
+ * every chunk per the OpenAI spec). `responseModel` is the model reported by
207
+ * the upstream `start` event, if any — used only to enrich the first chunk.
208
+ */
209
+ export function toOpenAIStreamChunk(event, model = "unknown") {
210
+ const chunks = [];
211
+ const id = getMessageId();
212
+ const created = Math.floor(Date.now() / 1000);
213
+ switch (event.type) {
214
+ case "start": {
215
+ toolCallIndex = 0;
216
+ chunks.push({
217
+ id,
218
+ object: "chat.completion.chunk",
219
+ created,
220
+ model,
221
+ choices: [{ index: 0, delta: { role: "assistant" }, finish_reason: null }],
222
+ });
223
+ break;
224
+ }
225
+ case "text-delta": {
226
+ const text = event.data.text;
227
+ if (text) {
228
+ chunks.push({
229
+ id,
230
+ object: "chat.completion.chunk",
231
+ created,
232
+ model,
233
+ choices: [{ index: 0, delta: { content: text }, finish_reason: null }],
234
+ });
235
+ }
236
+ break;
237
+ }
238
+ case "reasoning-delta": {
239
+ const text = event.data.text;
240
+ if (text) {
241
+ chunks.push({
242
+ id,
243
+ object: "chat.completion.chunk",
244
+ created,
245
+ model,
246
+ choices: [{ index: 0, delta: { reasoning_content: text }, finish_reason: null }],
247
+ });
248
+ }
249
+ break;
250
+ }
251
+ case "tool-call-delta": {
252
+ const tc = {
253
+ index: event.data.index ?? 0,
254
+ function: { arguments: event.data.arguments ?? "" },
255
+ };
256
+ if (event.data.toolCallId) {
257
+ tc.id = event.data.toolCallId;
258
+ tc.type = "function";
259
+ }
260
+ if (event.data.name) {
261
+ tc.function.name = event.data.name;
262
+ }
263
+ chunks.push({
264
+ id,
265
+ object: "chat.completion.chunk",
266
+ created,
267
+ model,
268
+ choices: [
269
+ {
270
+ index: 0,
271
+ delta: {
272
+ tool_calls: [tc],
273
+ },
274
+ finish_reason: null,
275
+ },
276
+ ],
277
+ });
278
+ break;
279
+ }
280
+ case "tool-call": {
281
+ // CC complete tool-call event: { toolCallId, toolName, input (object) }
282
+ // Translate to OpenAI tool_calls delta (arguments must be a JSON string).
283
+ const toolCallId = event.data.toolCallId ?? "";
284
+ const toolName = event.data.toolName ?? event.data.name ?? "";
285
+ const input = event.data.input ?? event.data.arguments;
286
+ const args = typeof input === "string" ? input : input != null ? JSON.stringify(input) : "";
287
+ chunks.push({
288
+ id,
289
+ object: "chat.completion.chunk",
290
+ created,
291
+ model,
292
+ choices: [
293
+ {
294
+ index: 0,
295
+ delta: {
296
+ tool_calls: [
297
+ {
298
+ index: toolCallIndex++,
299
+ id: toolCallId,
300
+ type: "function",
301
+ function: { name: toolName, arguments: args },
302
+ },
303
+ ],
304
+ },
305
+ finish_reason: null,
306
+ },
307
+ ],
308
+ });
309
+ break;
310
+ }
311
+ case "finish": {
312
+ const usage = extractUsage(event.data);
313
+ const finishReason = event.data.finishReason ?? "stop";
314
+ const finishMap = {
315
+ stop: "stop",
316
+ length: "length",
317
+ content_filtered: "content_filter",
318
+ "tool-call": "tool_calls",
319
+ "tool-calls": "tool_calls",
320
+ tool_call: "tool_calls",
321
+ error: "stop",
322
+ };
323
+ chunks.push({
324
+ id,
325
+ object: "chat.completion.chunk",
326
+ created,
327
+ model,
328
+ choices: [{ index: 0, delta: {}, finish_reason: finishMap[finishReason] ?? "stop" }],
329
+ });
330
+ // OpenAI streams usage as a separate trailing chunk with an empty
331
+ // `choices` array. We emit it whenever the upstream reports usage so
332
+ // clients that rely on it (context-window %, billing, etc.) receive it.
333
+ if (usage) {
334
+ chunks.push({
335
+ id,
336
+ object: "chat.completion.chunk",
337
+ created,
338
+ model,
339
+ choices: [],
340
+ usage: toOpenAIUsage(usage),
341
+ });
342
+ }
343
+ break;
344
+ }
345
+ case "error": {
346
+ // Surface upstream errors instead of silently dropping them, so the
347
+ // downstream client sees what went wrong (an empty stream is harder to
348
+ // debug). Emit the message as content, then a stop finish.
349
+ const errMsg = event.data.message ??
350
+ event.data.error?.message ??
351
+ JSON.stringify(event.data);
352
+ logger.error(`[CC upstream error] ${errMsg}`);
353
+ chunks.push({
354
+ id,
355
+ object: "chat.completion.chunk",
356
+ created,
357
+ model,
358
+ choices: [
359
+ { index: 0, delta: { content: `[upstream error] ${errMsg}` }, finish_reason: null },
360
+ ],
361
+ });
362
+ chunks.push({
363
+ id,
364
+ object: "chat.completion.chunk",
365
+ created,
366
+ model,
367
+ choices: [{ index: 0, delta: {}, finish_reason: "stop" }],
368
+ });
369
+ break;
370
+ }
371
+ }
372
+ return chunks;
373
+ }
374
+ export function toOpenAIErrorChunk(error) {
375
+ return {
376
+ error: {
377
+ message: error.message,
378
+ type: "upstream_error",
379
+ },
380
+ };
381
+ }
382
+ const OPENAI_FINISH_MAP = {
383
+ stop: "stop",
384
+ length: "length",
385
+ content_filtered: "content_filter",
386
+ "tool-call": "tool_calls",
387
+ "tool-calls": "tool_calls",
388
+ tool_call: "tool_calls",
389
+ error: "stop",
390
+ };
391
+ export function buildNonStreamingResponse(events, model) {
392
+ let content = "";
393
+ let reasoningContent = "";
394
+ const toolCalls = [];
395
+ let finish = null;
396
+ for (const event of events) {
397
+ switch (event.type) {
398
+ case "text-delta":
399
+ content += event.data.text ?? "";
400
+ break;
401
+ case "reasoning-delta":
402
+ reasoningContent += event.data.text ?? "";
403
+ break;
404
+ case "tool-call-delta": {
405
+ const existing = toolCalls.find((tc) => tc.id === event.data.toolCallId);
406
+ if (existing) {
407
+ existing.function.arguments += event.data.arguments ?? "";
408
+ }
409
+ else {
410
+ toolCalls.push({
411
+ id: event.data.toolCallId ?? "",
412
+ type: "function",
413
+ function: {
414
+ name: event.data.name ?? "",
415
+ arguments: event.data.arguments ?? "",
416
+ },
417
+ });
418
+ }
419
+ break;
420
+ }
421
+ case "tool-call": {
422
+ const input = event.data.input ?? event.data.arguments;
423
+ toolCalls.push({
424
+ id: event.data.toolCallId ?? "",
425
+ type: "function",
426
+ function: {
427
+ name: event.data.toolName ?? event.data.name ?? "",
428
+ arguments: typeof input === "string" ? input : input != null ? JSON.stringify(input) : "",
429
+ },
430
+ });
431
+ break;
432
+ }
433
+ case "finish":
434
+ finish = {
435
+ finishReason: event.data.finishReason,
436
+ usage: extractUsage(event.data),
437
+ };
438
+ break;
439
+ }
440
+ }
441
+ const message = { role: "assistant" };
442
+ if (reasoningContent)
443
+ message.reasoning_content = reasoningContent;
444
+ if (toolCalls.length > 0)
445
+ message.tool_calls = toolCalls.slice();
446
+ if (content) {
447
+ message.content = content;
448
+ }
449
+ else if (toolCalls.length === 0) {
450
+ message.content = "";
451
+ }
452
+ const finishReason = finish?.finishReason ?? "stop";
453
+ const response = {
454
+ id: getMessageId(),
455
+ object: "chat.completion",
456
+ created: Math.floor(Date.now() / 1000),
457
+ model,
458
+ choices: [
459
+ {
460
+ index: 0,
461
+ message,
462
+ finish_reason: OPENAI_FINISH_MAP[finishReason] ?? "stop",
463
+ },
464
+ ],
465
+ };
466
+ if (finish?.usage)
467
+ response.usage = toOpenAIUsage(finish.usage);
468
+ return response;
469
+ }
470
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/translate/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ export interface OpenAIChatRequest {
2
+ model: string;
3
+ messages: OpenAIMessage[];
4
+ stream?: boolean;
5
+ max_tokens?: number;
6
+ temperature?: number;
7
+ top_p?: number;
8
+ stop?: string | string[];
9
+ tools?: OpenAITool[];
10
+ tool_choice?: ToolChoice;
11
+ reasoning_effort?: "low" | "medium" | "high";
12
+ }
13
+ export interface OpenAIMessage {
14
+ role: "system" | "developer" | "user" | "assistant" | "tool";
15
+ content: string | ContentPart[];
16
+ tool_calls?: ToolCall[];
17
+ tool_call_id?: string;
18
+ name?: string;
19
+ }
20
+ export interface ContentPart {
21
+ type: "text" | "image_url";
22
+ text?: string;
23
+ image_url?: {
24
+ url: string;
25
+ detail?: string;
26
+ };
27
+ }
28
+ export interface OpenAITool {
29
+ type: "function";
30
+ function: {
31
+ name: string;
32
+ description?: string;
33
+ parameters: Record<string, unknown>;
34
+ };
35
+ }
36
+ export type ToolChoice = "auto" | "none" | "required" | {
37
+ type: "function";
38
+ function: {
39
+ name: string;
40
+ };
41
+ };
42
+ export interface ToolCall {
43
+ id: string;
44
+ type: "function";
45
+ function: {
46
+ name: string;
47
+ arguments: string;
48
+ };
49
+ }
50
+ export interface CCMessage {
51
+ role: "user" | "assistant" | "tool";
52
+ content: string | CCContentPart[];
53
+ }
54
+ export interface CCContentPart {
55
+ type: "text" | "image" | "tool-call" | "tool-result";
56
+ text?: string;
57
+ image?: string;
58
+ toolCallId?: string;
59
+ toolName?: string;
60
+ name?: string;
61
+ arguments?: string;
62
+ args?: unknown;
63
+ input?: unknown;
64
+ result?: string;
65
+ output?: unknown;
66
+ isError?: boolean;
67
+ }
68
+ export interface CCTool {
69
+ name: string;
70
+ description?: string;
71
+ input_schema: Record<string, unknown>;
72
+ }
73
+ export interface CCRequestBody {
74
+ config: Record<string, unknown>;
75
+ memory: string;
76
+ taste: string;
77
+ skills: string;
78
+ permissionMode: string;
79
+ params: {
80
+ model: string;
81
+ messages: CCMessage[];
82
+ system?: string;
83
+ max_tokens?: number;
84
+ temperature?: number;
85
+ top_p?: number;
86
+ stop?: string | string[];
87
+ stream: boolean;
88
+ reasoning_effort?: string;
89
+ tools?: CCTool[];
90
+ tool_choice?: string;
91
+ };
92
+ threadId: string;
93
+ }
94
+ export type CCEventType = "start" | "text-delta" | "reasoning-delta" | "tool-call-delta" | "tool-call" | "tool-result" | "finish" | "error";
95
+ export interface CCEvent {
96
+ type: CCEventType;
97
+ data: Record<string, unknown>;
98
+ }
99
+ export interface UsageData {
100
+ promptTokens?: number;
101
+ completionTokens?: number;
102
+ totalTokens?: number;
103
+ promptTokensDetails?: {
104
+ cachedTokens?: number;
105
+ };
106
+ completionTokensDetails?: {
107
+ reasoningTokens?: number;
108
+ };
109
+ }
110
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/translate/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ // Shared types for the OpenAI ↔ Command Code translation layer.
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/translate/types.ts"],"names":[],"mappings":"AAAA,gEAAgE"}
@@ -0,0 +1,12 @@
1
+ import type { CCMessage, CCRequestBody, UsageData } from "../translate/types.js";
2
+ export declare function getMessageId(): string;
3
+ export declare function resetMessageId(): void;
4
+ export declare function extractUsage(data: Record<string, unknown>): UsageData | undefined;
5
+ export declare function buildCCConfig(overrides?: Partial<CCRequestBody["config"]>): CCRequestBody["config"];
6
+ /**
7
+ * CC rejects requests that contain a tool-call with no matching tool-result,
8
+ * or a tool-result with no matching tool-call. Drop any unpaired parts so the
9
+ * conversation always satisfies CC's pairing requirement.
10
+ */
11
+ export declare function pruneDanglingTools(messages: CCMessage[]): CCMessage[];
12
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/translate/util.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAShF,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAMD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,SAAS,CA2CjF;AAMD,wBAAgB,aAAa,CAC3B,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,GAC3C,aAAa,CAAC,QAAQ,CAAC,CAazB;AAMD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CA+BrE"}