kimi-proxy 0.0.1 → 0.0.3

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 (47) hide show
  1. package/dist/adapters/anthropicAdapter.js +15 -10
  2. package/dist/adapters/anthropicAdapter.js.map +1 -1
  3. package/dist/config.js +2 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/core/converters/anthropicToOpenAI.js +4 -0
  6. package/dist/core/converters/anthropicToOpenAI.js.map +1 -1
  7. package/dist/core/converters/openaiPassthrough.js +5 -1
  8. package/dist/core/converters/openaiPassthrough.js.map +1 -1
  9. package/dist/core/modelRegistry.d.ts +9 -1
  10. package/dist/core/modelRegistry.js +23 -7
  11. package/dist/core/modelRegistry.js.map +1 -1
  12. package/dist/core/pipeline.js +9 -0
  13. package/dist/core/pipeline.js.map +1 -1
  14. package/dist/core/providers/openRouterProvider.js +1 -1
  15. package/dist/core/providers/openRouterProvider.js.map +1 -1
  16. package/dist/core/transforms/request/EnsureToolCallRequestTransform.d.ts +1 -0
  17. package/dist/core/transforms/request/EnsureToolCallRequestTransform.js +43 -2
  18. package/dist/core/transforms/request/EnsureToolCallRequestTransform.js.map +1 -1
  19. package/dist/core/transforms/request/RestoreThoughtSignaturesTransform.d.ts +10 -0
  20. package/dist/core/transforms/request/RestoreThoughtSignaturesTransform.js +93 -0
  21. package/dist/core/transforms/request/RestoreThoughtSignaturesTransform.js.map +1 -0
  22. package/dist/core/transforms/response/CleanupExtraPropertiesResponseTransform.d.ts +7 -0
  23. package/dist/core/transforms/response/CleanupExtraPropertiesResponseTransform.js +30 -0
  24. package/dist/core/transforms/response/CleanupExtraPropertiesResponseTransform.js.map +1 -0
  25. package/dist/core/transforms/response/EnsureToolCallResponseTransform.d.ts +1 -0
  26. package/dist/core/transforms/response/EnsureToolCallResponseTransform.js +60 -3
  27. package/dist/core/transforms/response/EnsureToolCallResponseTransform.js.map +1 -1
  28. package/dist/core/transforms/response/ExtractThoughtSignaturesTransform.d.ts +10 -0
  29. package/dist/core/transforms/response/ExtractThoughtSignaturesTransform.js +80 -0
  30. package/dist/core/transforms/response/ExtractThoughtSignaturesTransform.js.map +1 -0
  31. package/dist/core/transforms/response/ValidateToolArgumentsTransform.d.ts +9 -0
  32. package/dist/core/transforms/response/ValidateToolArgumentsTransform.js +107 -0
  33. package/dist/core/transforms/response/ValidateToolArgumentsTransform.js.map +1 -0
  34. package/dist/persistence/signatureCache.d.ts +19 -0
  35. package/dist/persistence/signatureCache.js +151 -0
  36. package/dist/persistence/signatureCache.js.map +1 -0
  37. package/dist/server.js +100 -16
  38. package/dist/server.js.map +1 -1
  39. package/dist/services/kimiFixer.js +49 -26
  40. package/dist/services/kimiFixer.js.map +1 -1
  41. package/dist/services/streaming.js +10 -6
  42. package/dist/services/streaming.js.map +1 -1
  43. package/frontend/dist/assets/{JSONViewer-97138fd7.js → JSONViewer-2759ef29.js} +1 -1
  44. package/frontend/dist/assets/index-a3cad95b.js +40 -0
  45. package/frontend/dist/index.html +1 -1
  46. package/package.json +2 -1
  47. package/frontend/dist/assets/index-4b354ce2.js +0 -40
@@ -0,0 +1,10 @@
1
+ import { RequestTransform, RequestTransformContext } from "../../types.js";
2
+ export declare class RestoreThoughtSignaturesTransform implements RequestTransform {
3
+ name: string;
4
+ stage: RequestTransform["stage"];
5
+ priority: number;
6
+ applies(context: RequestTransformContext): boolean;
7
+ transform(context: RequestTransformContext): Promise<void>;
8
+ private retrieveSignatures;
9
+ private injectSignatures;
10
+ }
@@ -0,0 +1,93 @@
1
+ import { SignatureCache } from "../../../persistence/signatureCache.js";
2
+ import { logger } from "../../../utils/logger.js";
3
+ export class RestoreThoughtSignaturesTransform {
4
+ name = "restore-thought-signatures";
5
+ stage = "post-conversion";
6
+ priority = 90;
7
+ applies(context) {
8
+ // Only apply to gemini-3 models
9
+ return Boolean(context.request.model && context.request.model.includes("gemini-3"));
10
+ }
11
+ async transform(context) {
12
+ const providerRequest = context.providerRequest;
13
+ if (!providerRequest) {
14
+ return;
15
+ }
16
+ const body = providerRequest.body;
17
+ if (!isJsonObject(body) || !Array.isArray(body.messages)) {
18
+ return;
19
+ }
20
+ // Collect all tool call IDs from conversation history
21
+ const toolCallIds = [];
22
+ const toolCalls = [];
23
+ for (const [, message] of body.messages.entries()) {
24
+ if (!isJsonObject(message) || message.role !== "assistant") {
25
+ continue;
26
+ }
27
+ const calls = message.tool_calls;
28
+ if (!Array.isArray(calls)) {
29
+ continue;
30
+ }
31
+ for (const [, toolCall] of calls.entries()) {
32
+ if (isJsonObject(toolCall) &&
33
+ toolCall.id &&
34
+ typeof toolCall.id === "string") {
35
+ toolCallIds.push(toolCall.id);
36
+ toolCalls.push({ toolCall, message });
37
+ }
38
+ }
39
+ }
40
+ if (toolCallIds.length === 0) {
41
+ return;
42
+ }
43
+ // Batch retrieve signatures from cache
44
+ const signatures = await this.retrieveSignatures(toolCallIds);
45
+ if (Object.keys(signatures).length === 0) {
46
+ logger.debug({ requestId: context.request.id }, "No thought signatures found in cache");
47
+ return;
48
+ }
49
+ // Inject missing signatures into tool calls
50
+ this.injectSignatures(toolCalls, signatures, context.request.id);
51
+ }
52
+ async retrieveSignatures(toolCallIds) {
53
+ try {
54
+ const cache = new SignatureCache();
55
+ const signatures = await cache.batchRetrieve(toolCallIds);
56
+ logger.debug({ count: Object.keys(signatures).length }, "Retrieved thought signatures from cache");
57
+ return signatures;
58
+ }
59
+ catch (error) {
60
+ logger.error({ err: error, toolCallIdsCount: toolCallIds.length }, "Failed to retrieve thought signatures from cache");
61
+ return {};
62
+ }
63
+ }
64
+ injectSignatures(toolCalls, signatures, requestId) {
65
+ let injectedCount = 0;
66
+ for (const { toolCall } of toolCalls) {
67
+ const toolCallId = toolCall.id;
68
+ if (!signatures[toolCallId]) {
69
+ continue;
70
+ }
71
+ // Only inject if extra_content is missing
72
+ if (toolCall.extra_content) {
73
+ logger.debug({ toolCallId, requestId }, "Tool call already has extra_content, skipping signature injection");
74
+ continue;
75
+ }
76
+ // Inject signature
77
+ toolCall.extra_content = {
78
+ google: {
79
+ thought_signature: signatures[toolCallId],
80
+ },
81
+ };
82
+ injectedCount++;
83
+ logger.debug({ toolCallId, requestId }, "Injected thought signature into tool call");
84
+ }
85
+ if (injectedCount > 0) {
86
+ logger.info({ injectedCount, requestId }, "Injected thought signatures into tool calls");
87
+ }
88
+ }
89
+ }
90
+ function isJsonObject(value) {
91
+ return typeof value === "object" && value !== null && !Array.isArray(value);
92
+ }
93
+ //# sourceMappingURL=RestoreThoughtSignaturesTransform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RestoreThoughtSignaturesTransform.js","sourceRoot":"","sources":["../../../../src/core/transforms/request/RestoreThoughtSignaturesTransform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { ResponseTransform, ResponseTransformContext } from "../../types.js";
2
+ export declare class CleanupExtraPropertiesResponseTransform implements ResponseTransform {
3
+ name: string;
4
+ stage: ResponseTransform["stage"];
5
+ applies(context: ResponseTransformContext): boolean;
6
+ transform(context: ResponseTransformContext): void;
7
+ }
@@ -0,0 +1,30 @@
1
+ import { logger } from "../../../utils/logger.js";
2
+ export class CleanupExtraPropertiesResponseTransform {
3
+ name = "cleanup-extra-properties-transform";
4
+ stage = "provider";
5
+ applies(context) {
6
+ const body = context.providerResponse?.body;
7
+ return isJsonObject(body) && Array.isArray(body.choices);
8
+ }
9
+ transform(context) {
10
+ const providerResponse = context.providerResponse;
11
+ if (!providerResponse) {
12
+ return;
13
+ }
14
+ const providerBody = providerResponse.body;
15
+ if (isJsonObject(providerBody)) {
16
+ providerResponse.body = cleanupExtraProperties(providerBody);
17
+ }
18
+ }
19
+ }
20
+ function isJsonObject(value) {
21
+ return typeof value === "object" && value !== null && !Array.isArray(value);
22
+ }
23
+ function cleanupExtraProperties(body) {
24
+ if (isJsonObject(body.usage) && isJsonObject(body.usage.extra_properties)) {
25
+ delete body.usage.extra_properties;
26
+ logger.info("Cleaned up extra_properties from usage");
27
+ }
28
+ return body;
29
+ }
30
+ //# sourceMappingURL=CleanupExtraPropertiesResponseTransform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CleanupExtraPropertiesResponseTransform.js","sourceRoot":"","sources":["../../../../src/core/transforms/response/CleanupExtraPropertiesResponseTransform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAQlD,MAAM,OAAO,uCAAuC;IAGlD,IAAI,GAAG,oCAAoC,CAAC;IAC5C,KAAK,GAA+B,UAAU,CAAC;IAE/C,OAAO,CAAC,OAAiC;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;QAC5C,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,SAAS,CAAC,OAAiC;QACzC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QAClD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QACD,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC;QAC3C,IAAI,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/B,gBAAgB,CAAC,IAAI,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;CACF;AAED,SAAS,YAAY,CAAC,KAA4B;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAgB;IAC9C,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -6,4 +6,5 @@ export declare class EnsureToolCallResponseTransform implements ResponseTransfor
6
6
  applies(context: ResponseTransformContext): boolean;
7
7
  transform(context: ResponseTransformContext): void;
8
8
  private hasMeaningfulAssistantContent;
9
+ private checkTerminationHeuristic;
9
10
  }
@@ -1,5 +1,5 @@
1
1
  import { getEnsureToolCallState, getMessagesSinceLastUser, } from "../../ensureToolCall.js";
2
- import { clearRetryRequest, requestRetry } from "../../pipelineControl.js";
2
+ import { requestRetry } from "../../pipelineControl.js";
3
3
  import { logger } from "../../../utils/logger.js";
4
4
  export class EnsureToolCallResponseTransform {
5
5
  name = "ensure-tool-call-response";
@@ -26,6 +26,15 @@ export class EnsureToolCallResponseTransform {
26
26
  logger.debug({ requestId: context.request.id }, "Synthetic response detected, skipping EnsureToolCall enforcement");
27
27
  return;
28
28
  }
29
+ // Check for TodoWrite + keyword heuristics
30
+ if (this.checkTerminationHeuristic(context)) {
31
+ console.log("[EnsureToolCall] TodoWrite + keyword heuristics detected. Accepting as termination.");
32
+ ensureState.pendingReminder = false;
33
+ logger.info({
34
+ requestId: context.request.id,
35
+ }, "EnsureToolCall satisfied by TodoWrite + keyword heuristics");
36
+ return;
37
+ }
29
38
  const body = asJsonObject(context.providerResponse.body);
30
39
  const choices = Array.isArray(body.choices)
31
40
  ? body.choices
@@ -50,7 +59,8 @@ export class EnsureToolCallResponseTransform {
50
59
  for (const toolCall of toolCalls) {
51
60
  const toolName = extractToolName(toolCall);
52
61
  if (toolName?.toLowerCase() === ensureState.terminationToolName ||
53
- toolName?.toLowerCase() === "final") {
62
+ toolName?.toLowerCase() === "final" ||
63
+ /(call_*)?[0-9]+/.test(toolName ?? "")) {
54
64
  console.log(`[EnsureToolCall] Termination tool "${toolName}" used.`);
55
65
  // Extract final_answer parameter
56
66
  const finalAnswer = extractFinalAnswer(toolCall);
@@ -117,7 +127,6 @@ export class EnsureToolCallResponseTransform {
117
127
  context.providerResponse.body = body;
118
128
  return;
119
129
  }
120
- clearRetryRequest(context.request.state);
121
130
  ensureState.pendingReminder = false;
122
131
  logger.info({
123
132
  requestId: context.request.id,
@@ -138,6 +147,34 @@ export class EnsureToolCallResponseTransform {
138
147
  }
139
148
  return false;
140
149
  }
150
+ checkTerminationHeuristic(context) {
151
+ if (!context.providerResponse?.body)
152
+ return false;
153
+ const body = asJsonObject(context.providerResponse.body);
154
+ const choices = Array.isArray(body.choices) ? body.choices : [];
155
+ if (choices.length === 0)
156
+ return false;
157
+ const firstChoice = choices[0];
158
+ if (!isJsonObject(firstChoice))
159
+ return false;
160
+ const message = asJsonObject(firstChoice.message);
161
+ // Check message content termination keywords
162
+ if (!hasCaseInsensitiveTerminationKeywords(message.content)) {
163
+ return false;
164
+ }
165
+ // Check exactly one tool call and it's TodoWrite
166
+ const toolCalls = Array.isArray(message.tool_calls)
167
+ ? message.tool_calls
168
+ : [];
169
+ if (toolCalls.length !== 1) {
170
+ return false;
171
+ }
172
+ const toolName = extractToolName(toolCalls[0]);
173
+ if (!toolName || toolName.toLowerCase() !== "todowrite") {
174
+ return false;
175
+ }
176
+ return true;
177
+ }
141
178
  }
142
179
  function extractToolName(tool) {
143
180
  if (!isJsonObject(tool)) {
@@ -220,4 +257,24 @@ function hasMeaningfulContent(content) {
220
257
  }
221
258
  return true;
222
259
  }
260
+ function hasCaseInsensitiveTerminationKeywords(content) {
261
+ if (content === undefined || content === null) {
262
+ return false;
263
+ }
264
+ if (typeof content === "string") {
265
+ return /summary|changes/i.test(content);
266
+ }
267
+ if (Array.isArray(content)) {
268
+ return content.some((entry) => {
269
+ if (typeof entry === "string") {
270
+ return /summary|changes/i.test(entry);
271
+ }
272
+ if (isJsonObject(entry) && typeof entry.text === "string") {
273
+ return /summary|changes/i.test(entry.text);
274
+ }
275
+ return false;
276
+ });
277
+ }
278
+ return false;
279
+ }
223
280
  //# sourceMappingURL=EnsureToolCallResponseTransform.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EnsureToolCallResponseTransform.js","sourceRoot":"","sources":["../../../../src/core/transforms/response/EnsureToolCallResponseTransform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EnsureToolCallResponseTransform.js","sourceRoot":"","sources":["../../../../src/core/transforms/response/EnsureToolCallResponseTransform.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,MAAM,OAAO,+BAA+B;IAC1C,IAAI,GAAG,2BAA2B,CAAC;IACnC,KAAK,GAA+B,UAAU,CAAC;IAC/C,QAAQ,GAAG,GAAG,CAAC;IAEf,OAAO,CAAC,OAAiC;QACvC,6BAA6B;QAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,OAAO,IAAI,EAAE,CAAC;QACxD,IAAI,OAAO,CAAC,sBAAsB,CAAC,KAAK,MAAM,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,OAAO,CACZ,OAAO,CAAC,gBAAgB,EAAE,IAAI;YAC5B,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAChD,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,OAAiC;QACzC,MAAM,WAAW,GAAG,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,4DAA4D;QAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,IAAI,EAAE,CAAC;QACvD,MAAM,mBAAmB,GAAG,OAAO,CAAC,sBAAsB,CAAC,KAAK,MAAM,CAAC;QACvE,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CACV,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,EACjC,kEAAkE,CACnE,CAAC;YACF,OAAO;QACT,CAAC;QAED,2CAA2C;QAC3C,IAAI,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CACT,qFAAqF,CACtF,CAAC;YACF,WAAW,CAAC,eAAe,GAAG,KAAK,CAAC;YACpC,MAAM,CAAC,IAAI,CACT;gBACE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;aAC9B,EACD,4DAA4D,CAC7D,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC,OAAO;YACd,CAAC,CAAE,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAiB,CAAC;QAEzC,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,cAAc,GAAG,CAAC,CAAC;QAEvB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,SAAS;YACX,CAAC;YACD,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;gBACjD,CAAC,CAAC,OAAO,CAAC,UAAU;gBACpB,CAAC,CAAC,EAAE,CAAC;YACP,cAAc,IAAI,SAAS,CAAC,MAAM,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;gBACtB,SAAS;YACX,CAAC;YAED,WAAW,GAAG,IAAI,CAAC;YAEnB,IAAI,kBAAkB,GAAG,KAAK,CAAC;YAC/B,MAAM,SAAS,GAAG,EAAE,CAAC;YACrB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;gBAE3C,IACE,QAAQ,EAAE,WAAW,EAAE,KAAK,WAAW,CAAC,mBAAmB;oBAC3D,QAAQ,EAAE,WAAW,EAAE,KAAK,OAAO;oBACnC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,EACtC,CAAC;oBACD,OAAO,CAAC,GAAG,CAAC,sCAAsC,QAAQ,SAAS,CAAC,CAAC;oBAErE,iCAAiC;oBACjC,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;oBAEjD,mEAAmE;oBACnE,4DAA4D;oBAC5D,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;oBACrD,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;wBACnD,CAAC,CAAC,aAAa;wBACf,CAAC,CAAC,EAAE,CAAC;oBACP,MAAM,kBAAkB,GACtB,IAAI,CAAC,6BAA6B,CAAC,gBAAgB,CAAC,CAAC;oBAEvD,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC/B,MAAM,cAAc,GAClB,YAAY,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC;wBAC5D,CAAC,CAAC,WAAW,CAAC,OAAO;wBACrB,CAAC,CAAC,IAAI,CAAC;oBACX,MAAM,iBAAiB,GAAG,cAAc;wBACtC,CAAC,CAAC,oBAAoB,CAAC,cAAc,CAAC,OAAO,CAAC;wBAC9C,CAAC,CAAC,KAAK,CAAC;oBAEV,MAAM,UAAU,GAAG,kBAAkB,IAAI,iBAAiB,CAAC;oBAE3D,oCAAoC;oBACpC,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,EAAE,CAAC;wBAChC,OAAO,CAAC,GAAG,CACT,sGAAsG,CACvG,CAAC;wBACF,WAAW,CAAC,eAAe,GAAG,IAAI,CAAC;wBACnC,WAAW,CAAC,mBAAmB,GAAG,IAAI,CAAC;wBACvC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBACpC,MAAM,CAAC,IAAI,CACT;4BACE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;4BAC7B,aAAa,EAAE,WAAW,CAAC,aAAa;yBACzC,EACD,8EAA8E,CAC/E,CAAC;wBACF,OAAO;oBACT,CAAC;oBAED,uFAAuF;oBACvF,IAAI,CAAC,UAAU,IAAI,WAAW,IAAI,cAAc,EAAE,CAAC;wBACjD,OAAO,CAAC,GAAG,CACT,kGAAkG,CACnG,CAAC;wBACF,cAAc,CAAC,OAAO,GAAG,WAAW,CAAC;oBACvC,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,CAAC;YAED,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;gBACrB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,OAAO,OAAO,CAAC,UAAU,CAAC;YAC5B,CAAC;YAED,2EAA2E;YAC3E,gEAAgE;YAChE,kBAAkB,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;YACpE,IAAI,kBAAkB,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;gBACvB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;gBACjC,OAAO,OAAO,CAAC,iBAAiB,CAAC;YACnC,CAAC;YAED,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CACT,+EACE,WAAW,CAAC,aAAa,GAAG,CAC9B,IAAI,CACL,CAAC;YACF,WAAW,CAAC,eAAe,GAAG,IAAI,CAAC;YACnC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CACT;gBACE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC7B,aAAa,EAAE,WAAW,CAAC,aAAa;aACzC,EACD,wDAAwD,CACzD,CAAC;YACF,OAAO,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC;YACrC,OAAO;QACT,CAAC;QAED,WAAW,CAAC,eAAe,GAAG,KAAK,CAAC;QACpC,MAAM,CAAC,IAAI,CACT;YACE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;YAC7B,iBAAiB,EAAE,cAAc;SAClC,EACD,+CAA+C,CAChD,CAAC;QACF,OAAO,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC;IACvC,CAAC;IAEO,6BAA6B,CAAC,QAAqB;QACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAE3C,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAEjE,KAAK,MAAM,CAAC,IAAI,qBAAqB,EAAE,CAAC;YACtC,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC9C,IAAI,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;oBACpC,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,yBAAyB,CAC/B,OAAiC;QAEjC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI;YAAE,OAAO,KAAK,CAAC;QAElD,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAEvC,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;YAAE,OAAO,KAAK,CAAC;QAE7C,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAElD,6CAA6C;QAC7C,IAAI,CAAC,qCAAqC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,iDAAiD;QACjD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;YACjD,CAAC,CAAC,OAAO,CAAC,UAAU;YACpB,CAAC,CAAC,EAAE,CAAC;QACP,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,WAAW,EAAE,CAAC;YACxD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,SAAS,eAAe,CAAC,IAAe;IACtC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAe;IACzC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAI,GAAsB,IAAI,CAAC;IAEnC,8BAA8B;IAC9B,IAAI,OAAO,EAAE,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzB,IAAI,GAAG,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;SAAM,IAAI,YAAY,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,0CAA0C,CAAC;IAE3D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IACE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YACpB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ;YAC/B,IAAI,CAAC,MAAM,CAAY,CAAC,IAAI,EAAE,EAC/B,CAAC;YACD,OAAO,IAAI,CAAC,MAAM,CAAW,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,KAA4B;IAChD,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,YAAY,CAAC,KAA4B;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,oBAAoB,CAAC,OAA8B;IAC1D,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/B,CAAC;YACD,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1D,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,qCAAqC,CAC5C,OAA8B;IAE9B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC;YACD,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1D,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { ResponseTransform, ResponseTransformContext } from "../../types.js";
2
+ export declare class ExtractThoughtSignaturesTransform implements ResponseTransform {
3
+ name: string;
4
+ stage: ResponseTransform["stage"];
5
+ priority: number;
6
+ applies(context: ResponseTransformContext): boolean;
7
+ transform(context: ResponseTransformContext): void;
8
+ private extractSignatureFromToolCall;
9
+ private storeSignatures;
10
+ }
@@ -0,0 +1,80 @@
1
+ import { SignatureCache } from "../../../persistence/signatureCache.js";
2
+ import { logger } from "../../../utils/logger.js";
3
+ export class ExtractThoughtSignaturesTransform {
4
+ name = "extract-thought-signatures";
5
+ stage = "provider";
6
+ priority = 50;
7
+ applies(context) {
8
+ // Only apply to gemini-3 models
9
+ return Boolean(context.request.model && context.request.model.includes("gemini-3"));
10
+ }
11
+ transform(context) {
12
+ const providerResponse = context.providerResponse;
13
+ if (!providerResponse) {
14
+ return;
15
+ }
16
+ const body = providerResponse.body;
17
+ if (!isJsonObject(body) || !Array.isArray(body.choices)) {
18
+ return;
19
+ }
20
+ // Extract signatures from tool calls
21
+ const signatures = {};
22
+ for (const choice of body.choices) {
23
+ if (!isJsonObject(choice)) {
24
+ continue;
25
+ }
26
+ const message = choice.message;
27
+ if (!isJsonObject(message)) {
28
+ continue;
29
+ }
30
+ const toolCalls = message.tool_calls;
31
+ if (!Array.isArray(toolCalls)) {
32
+ continue;
33
+ }
34
+ for (const toolCall of toolCalls) {
35
+ this.extractSignatureFromToolCall(toolCall, signatures, context.request.id);
36
+ }
37
+ }
38
+ // Store signatures in cache
39
+ if (Object.keys(signatures).length > 0) {
40
+ this.storeSignatures(signatures);
41
+ }
42
+ }
43
+ extractSignatureFromToolCall(toolCall, signatures, requestId) {
44
+ if (!isJsonObject(toolCall)) {
45
+ return;
46
+ }
47
+ const toolCallId = toolCall.id;
48
+ if (!toolCallId || typeof toolCallId !== "string") {
49
+ return;
50
+ }
51
+ // Check for signature in extra_content.google.thought_signature
52
+ const extraContent = toolCall.extra_content;
53
+ if (isJsonObject(extraContent)) {
54
+ const google = extraContent.google;
55
+ if (isJsonObject(google)) {
56
+ const signature = google.thought_signature;
57
+ if (typeof signature === "string" && signature.length > 0) {
58
+ signatures[toolCallId] = signature;
59
+ logger.debug({ toolCallId, requestId }, "Extracted thought signature from tool call");
60
+ }
61
+ }
62
+ }
63
+ }
64
+ async storeSignatures(signatures) {
65
+ try {
66
+ const cache = new SignatureCache();
67
+ for (const [toolCallId, signature] of Object.entries(signatures)) {
68
+ await cache.store(toolCallId, signature);
69
+ }
70
+ logger.info({ count: Object.keys(signatures).length }, "Stored thought signatures in cache");
71
+ }
72
+ catch (error) {
73
+ logger.error({ err: error, signaturesCount: Object.keys(signatures).length }, "Failed to store thought signatures");
74
+ }
75
+ }
76
+ }
77
+ function isJsonObject(value) {
78
+ return typeof value === "object" && value !== null && !Array.isArray(value);
79
+ }
80
+ //# sourceMappingURL=ExtractThoughtSignaturesTransform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtractThoughtSignaturesTransform.js","sourceRoot":"","sources":["../../../../src/core/transforms/response/ExtractThoughtSignaturesTransform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { ResponseTransform, ResponseTransformContext } from "../../types.js";
2
+ export declare class ValidateToolArgumentsTransform implements ResponseTransform {
3
+ name: string;
4
+ stage: ResponseTransform["stage"];
5
+ priority: number;
6
+ applies(context: ResponseTransformContext): boolean;
7
+ transform(context: ResponseTransformContext): void;
8
+ private validateToolArguments;
9
+ }
@@ -0,0 +1,107 @@
1
+ import { requestRetry } from "../../pipelineControl.js";
2
+ import { logger } from "../../../utils/logger.js";
3
+ export class ValidateToolArgumentsTransform {
4
+ name = "validate-tool-arguments";
5
+ stage = "provider";
6
+ priority = 90;
7
+ applies(context) {
8
+ // Skip if synthetic response
9
+ const headers = context.providerResponse?.headers || {};
10
+ if (headers["x-synthetic-response"] === "true") {
11
+ return false;
12
+ }
13
+ return Boolean(context.providerResponse?.body);
14
+ }
15
+ transform(context) {
16
+ if (!context.providerResponse) {
17
+ return;
18
+ }
19
+ // Skip validation for synthetic responses
20
+ const headers = context.providerResponse.headers || {};
21
+ const isSyntheticResponse = headers["x-synthetic-response"] === "true";
22
+ if (isSyntheticResponse) {
23
+ logger.debug({ requestId: context.request.id }, "Synthetic response detected, skipping tool arguments validation");
24
+ return;
25
+ }
26
+ const body = asJsonObject(context.providerResponse.body);
27
+ const choices = Array.isArray(body.choices)
28
+ ? body.choices
29
+ : (body.choices = []);
30
+ let hasInvalidArguments = false;
31
+ const invalidToolNames = [];
32
+ for (const choice of choices) {
33
+ if (!isJsonObject(choice)) {
34
+ continue;
35
+ }
36
+ const message = asJsonObject(choice.message);
37
+ const toolCalls = Array.isArray(message.tool_calls)
38
+ ? message.tool_calls
39
+ : [];
40
+ if (!toolCalls.length) {
41
+ continue;
42
+ }
43
+ // Validate each tool call's arguments
44
+ for (const toolCall of toolCalls) {
45
+ const toolName = extractToolName(toolCall);
46
+ const argsValid = this.validateToolArguments(toolCall);
47
+ if (!argsValid) {
48
+ hasInvalidArguments = true;
49
+ invalidToolNames.push(toolName || "unknown");
50
+ logger.warn({
51
+ requestId: context.request.id,
52
+ toolName: toolName || "unknown",
53
+ }, "Invalid JSON in tool arguments");
54
+ }
55
+ }
56
+ }
57
+ if (hasInvalidArguments) {
58
+ console.log(`[ValidateToolArguments] Invalid JSON detected in tool arguments for: ${invalidToolNames.join(", ")}. Requesting retry.`);
59
+ requestRetry(context.request.state);
60
+ logger.warn({
61
+ requestId: context.request.id,
62
+ invalidToolNames,
63
+ }, "Tool calls contain invalid JSON arguments; scheduling retry");
64
+ return;
65
+ }
66
+ // All arguments are valid
67
+ logger.debug({ requestId: context.request.id }, "All tool arguments are valid");
68
+ }
69
+ validateToolArguments(toolCall) {
70
+ if (!isJsonObject(toolCall)) {
71
+ return false;
72
+ }
73
+ const fn = isJsonObject(toolCall.function) ? toolCall.function : null;
74
+ if (!fn) {
75
+ return false;
76
+ }
77
+ // Arguments field must exist and be a string
78
+ if (typeof fn.arguments !== "string") {
79
+ return false;
80
+ }
81
+ // Attempt to parse as JSON
82
+ try {
83
+ JSON.parse(fn.arguments);
84
+ return true;
85
+ }
86
+ catch {
87
+ return false;
88
+ }
89
+ }
90
+ }
91
+ function extractToolName(tool) {
92
+ if (!isJsonObject(tool)) {
93
+ return null;
94
+ }
95
+ const fn = isJsonObject(tool.function) ? tool.function : null;
96
+ if (!fn) {
97
+ return null;
98
+ }
99
+ return typeof fn.name === "string" ? fn.name : null;
100
+ }
101
+ function asJsonObject(value) {
102
+ return isJsonObject(value) ? value : {};
103
+ }
104
+ function isJsonObject(value) {
105
+ return typeof value === "object" && value !== null && !Array.isArray(value);
106
+ }
107
+ //# sourceMappingURL=ValidateToolArgumentsTransform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidateToolArgumentsTransform.js","sourceRoot":"","sources":["../../../../src/core/transforms/response/ValidateToolArgumentsTransform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface CachedSignature {
2
+ tool_call_id: string;
3
+ signature: string;
4
+ timestamp: number;
5
+ }
6
+ export declare class SignatureCache {
7
+ private db;
8
+ private memoryCache;
9
+ private dbPath;
10
+ private cleanupCounter;
11
+ constructor(cacheDir?: string);
12
+ private initSchema;
13
+ private scheduleCleanup;
14
+ store(toolCallId: string, signature: string): Promise<void>;
15
+ retrieve(toolCallId: string): Promise<string | null>;
16
+ batchRetrieve(toolCallIds: string[]): Promise<Record<string, string>>;
17
+ cleanup(daysOld?: number): Promise<void>;
18
+ close(): Promise<void>;
19
+ }