antigravity-auth 1.6.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.
Files changed (256) hide show
  1. package/README.md +61 -0
  2. package/dist/antigravity/oauth.d.ts +30 -0
  3. package/dist/antigravity/oauth.js +170 -0
  4. package/dist/claude/login.d.ts +7 -0
  5. package/dist/claude/login.js +480 -0
  6. package/dist/claude/menu-helpers.d.ts +22 -0
  7. package/dist/claude/menu-helpers.js +281 -0
  8. package/dist/claude/proxy-manager.d.ts +11 -0
  9. package/dist/claude/proxy-manager.js +129 -0
  10. package/dist/claude/proxy.d.ts +1 -0
  11. package/dist/claude/proxy.js +733 -0
  12. package/dist/constants.d.ts +138 -0
  13. package/dist/constants.js +216 -0
  14. package/dist/hooks/auto-update-checker/cache.d.ts +2 -0
  15. package/dist/hooks/auto-update-checker/cache.js +70 -0
  16. package/dist/hooks/auto-update-checker/checker.d.ts +15 -0
  17. package/dist/hooks/auto-update-checker/checker.js +233 -0
  18. package/dist/hooks/auto-update-checker/constants.d.ts +8 -0
  19. package/dist/hooks/auto-update-checker/constants.js +22 -0
  20. package/dist/hooks/auto-update-checker/index.d.ts +33 -0
  21. package/dist/hooks/auto-update-checker/index.js +121 -0
  22. package/dist/hooks/auto-update-checker/logging.d.ts +2 -0
  23. package/dist/hooks/auto-update-checker/logging.js +8 -0
  24. package/dist/hooks/auto-update-checker/types.d.ts +24 -0
  25. package/dist/hooks/auto-update-checker/types.js +1 -0
  26. package/dist/index.d.ts +6 -0
  27. package/dist/index.js +5 -0
  28. package/dist/opencode/hooks/auto-update-checker/cache.d.ts +2 -0
  29. package/dist/opencode/hooks/auto-update-checker/cache.js +70 -0
  30. package/dist/opencode/hooks/auto-update-checker/checker.d.ts +15 -0
  31. package/dist/opencode/hooks/auto-update-checker/checker.js +233 -0
  32. package/dist/opencode/hooks/auto-update-checker/constants.d.ts +8 -0
  33. package/dist/opencode/hooks/auto-update-checker/constants.js +22 -0
  34. package/dist/opencode/hooks/auto-update-checker/index.d.ts +33 -0
  35. package/dist/opencode/hooks/auto-update-checker/index.js +121 -0
  36. package/dist/opencode/hooks/auto-update-checker/logging.d.ts +2 -0
  37. package/dist/opencode/hooks/auto-update-checker/logging.js +8 -0
  38. package/dist/opencode/hooks/auto-update-checker/types.d.ts +24 -0
  39. package/dist/opencode/hooks/auto-update-checker/types.js +1 -0
  40. package/dist/opencode/plugin.d.ts +29 -0
  41. package/dist/opencode/plugin.js +2954 -0
  42. package/dist/plugin/accounts.d.ts +173 -0
  43. package/dist/plugin/accounts.js +966 -0
  44. package/dist/plugin/auth.d.ts +20 -0
  45. package/dist/plugin/auth.js +44 -0
  46. package/dist/plugin/cache/index.d.ts +4 -0
  47. package/dist/plugin/cache/index.js +4 -0
  48. package/dist/plugin/cache/signature-cache.d.ts +110 -0
  49. package/dist/plugin/cache/signature-cache.js +347 -0
  50. package/dist/plugin/cache.d.ts +43 -0
  51. package/dist/plugin/cache.js +180 -0
  52. package/dist/plugin/cli.d.ts +26 -0
  53. package/dist/plugin/cli.js +126 -0
  54. package/dist/plugin/config/index.d.ts +15 -0
  55. package/dist/plugin/config/index.js +15 -0
  56. package/dist/plugin/config/loader.d.ts +38 -0
  57. package/dist/plugin/config/loader.js +150 -0
  58. package/dist/plugin/config/models.d.ts +26 -0
  59. package/dist/plugin/config/models.js +95 -0
  60. package/dist/plugin/config/schema.d.ts +144 -0
  61. package/dist/plugin/config/schema.js +458 -0
  62. package/dist/plugin/config/updater.d.ts +76 -0
  63. package/dist/plugin/config/updater.js +205 -0
  64. package/dist/plugin/core/streaming/index.d.ts +2 -0
  65. package/dist/plugin/core/streaming/index.js +2 -0
  66. package/dist/plugin/core/streaming/transformer.d.ts +9 -0
  67. package/dist/plugin/core/streaming/transformer.js +301 -0
  68. package/dist/plugin/core/streaming/types.d.ts +28 -0
  69. package/dist/plugin/core/streaming/types.js +1 -0
  70. package/dist/plugin/debug.d.ts +93 -0
  71. package/dist/plugin/debug.js +375 -0
  72. package/dist/plugin/errors.d.ts +27 -0
  73. package/dist/plugin/errors.js +41 -0
  74. package/dist/plugin/fingerprint.d.ts +69 -0
  75. package/dist/plugin/fingerprint.js +137 -0
  76. package/dist/plugin/image-saver.d.ts +24 -0
  77. package/dist/plugin/image-saver.js +78 -0
  78. package/dist/plugin/logger.d.ts +35 -0
  79. package/dist/plugin/logger.js +67 -0
  80. package/dist/plugin/logging-utils.d.ts +22 -0
  81. package/dist/plugin/logging-utils.js +91 -0
  82. package/dist/plugin/project.d.ts +32 -0
  83. package/dist/plugin/project.js +229 -0
  84. package/dist/plugin/quota.d.ts +34 -0
  85. package/dist/plugin/quota.js +261 -0
  86. package/dist/plugin/recovery/constants.d.ts +21 -0
  87. package/dist/plugin/recovery/constants.js +42 -0
  88. package/dist/plugin/recovery/index.d.ts +11 -0
  89. package/dist/plugin/recovery/index.js +11 -0
  90. package/dist/plugin/recovery/storage.d.ts +23 -0
  91. package/dist/plugin/recovery/storage.js +340 -0
  92. package/dist/plugin/recovery/types.d.ts +115 -0
  93. package/dist/plugin/recovery/types.js +6 -0
  94. package/dist/plugin/recovery.d.ts +60 -0
  95. package/dist/plugin/recovery.js +360 -0
  96. package/dist/plugin/refresh-queue.d.ts +99 -0
  97. package/dist/plugin/refresh-queue.js +235 -0
  98. package/dist/plugin/request-helpers.d.ts +281 -0
  99. package/dist/plugin/request-helpers.js +2200 -0
  100. package/dist/plugin/request.d.ts +110 -0
  101. package/dist/plugin/request.js +1489 -0
  102. package/dist/plugin/rotation.d.ts +182 -0
  103. package/dist/plugin/rotation.js +364 -0
  104. package/dist/plugin/search.d.ts +31 -0
  105. package/dist/plugin/search.js +185 -0
  106. package/dist/plugin/server.d.ts +22 -0
  107. package/dist/plugin/server.js +306 -0
  108. package/dist/plugin/storage.d.ts +136 -0
  109. package/dist/plugin/storage.js +599 -0
  110. package/dist/plugin/stores/signature-store.d.ts +4 -0
  111. package/dist/plugin/stores/signature-store.js +24 -0
  112. package/dist/plugin/thinking-recovery.d.ts +89 -0
  113. package/dist/plugin/thinking-recovery.js +289 -0
  114. package/dist/plugin/token.d.ts +18 -0
  115. package/dist/plugin/token.js +127 -0
  116. package/dist/plugin/transform/claude.d.ts +79 -0
  117. package/dist/plugin/transform/claude.js +256 -0
  118. package/dist/plugin/transform/cross-model-sanitizer.d.ts +34 -0
  119. package/dist/plugin/transform/cross-model-sanitizer.js +224 -0
  120. package/dist/plugin/transform/gemini.d.ts +132 -0
  121. package/dist/plugin/transform/gemini.js +659 -0
  122. package/dist/plugin/transform/index.d.ts +14 -0
  123. package/dist/plugin/transform/index.js +9 -0
  124. package/dist/plugin/transform/model-resolver.d.ts +98 -0
  125. package/dist/plugin/transform/model-resolver.js +320 -0
  126. package/dist/plugin/transform/types.d.ts +110 -0
  127. package/dist/plugin/transform/types.js +1 -0
  128. package/dist/plugin/types.d.ts +95 -0
  129. package/dist/plugin/types.js +1 -0
  130. package/dist/plugin/ui/ansi.d.ts +31 -0
  131. package/dist/plugin/ui/ansi.js +45 -0
  132. package/dist/plugin/ui/auth-menu.d.ts +47 -0
  133. package/dist/plugin/ui/auth-menu.js +199 -0
  134. package/dist/plugin/ui/confirm.d.ts +1 -0
  135. package/dist/plugin/ui/confirm.js +14 -0
  136. package/dist/plugin/ui/select.d.ts +22 -0
  137. package/dist/plugin/ui/select.js +243 -0
  138. package/dist/plugin/version.d.ts +18 -0
  139. package/dist/plugin/version.js +79 -0
  140. package/dist/src/antigravity/oauth.d.ts +30 -0
  141. package/dist/src/antigravity/oauth.js +170 -0
  142. package/dist/src/constants.d.ts +138 -0
  143. package/dist/src/constants.js +216 -0
  144. package/dist/src/hooks/auto-update-checker/cache.d.ts +2 -0
  145. package/dist/src/hooks/auto-update-checker/cache.js +70 -0
  146. package/dist/src/hooks/auto-update-checker/checker.d.ts +15 -0
  147. package/dist/src/hooks/auto-update-checker/checker.js +233 -0
  148. package/dist/src/hooks/auto-update-checker/constants.d.ts +8 -0
  149. package/dist/src/hooks/auto-update-checker/constants.js +22 -0
  150. package/dist/src/hooks/auto-update-checker/index.d.ts +33 -0
  151. package/dist/src/hooks/auto-update-checker/index.js +121 -0
  152. package/dist/src/hooks/auto-update-checker/logging.d.ts +2 -0
  153. package/dist/src/hooks/auto-update-checker/logging.js +8 -0
  154. package/dist/src/hooks/auto-update-checker/types.d.ts +24 -0
  155. package/dist/src/hooks/auto-update-checker/types.js +1 -0
  156. package/dist/src/index.d.ts +6 -0
  157. package/dist/src/index.js +5 -0
  158. package/dist/src/plugin/accounts.d.ts +173 -0
  159. package/dist/src/plugin/accounts.js +966 -0
  160. package/dist/src/plugin/auth.d.ts +20 -0
  161. package/dist/src/plugin/auth.js +44 -0
  162. package/dist/src/plugin/cache/index.d.ts +4 -0
  163. package/dist/src/plugin/cache/index.js +4 -0
  164. package/dist/src/plugin/cache/signature-cache.d.ts +110 -0
  165. package/dist/src/plugin/cache/signature-cache.js +347 -0
  166. package/dist/src/plugin/cache.d.ts +43 -0
  167. package/dist/src/plugin/cache.js +180 -0
  168. package/dist/src/plugin/cli.d.ts +26 -0
  169. package/dist/src/plugin/cli.js +126 -0
  170. package/dist/src/plugin/config/index.d.ts +15 -0
  171. package/dist/src/plugin/config/index.js +15 -0
  172. package/dist/src/plugin/config/loader.d.ts +38 -0
  173. package/dist/src/plugin/config/loader.js +150 -0
  174. package/dist/src/plugin/config/models.d.ts +26 -0
  175. package/dist/src/plugin/config/models.js +95 -0
  176. package/dist/src/plugin/config/schema.d.ts +144 -0
  177. package/dist/src/plugin/config/schema.js +458 -0
  178. package/dist/src/plugin/config/updater.d.ts +76 -0
  179. package/dist/src/plugin/config/updater.js +205 -0
  180. package/dist/src/plugin/core/streaming/index.d.ts +2 -0
  181. package/dist/src/plugin/core/streaming/index.js +2 -0
  182. package/dist/src/plugin/core/streaming/transformer.d.ts +9 -0
  183. package/dist/src/plugin/core/streaming/transformer.js +301 -0
  184. package/dist/src/plugin/core/streaming/types.d.ts +28 -0
  185. package/dist/src/plugin/core/streaming/types.js +1 -0
  186. package/dist/src/plugin/debug.d.ts +93 -0
  187. package/dist/src/plugin/debug.js +375 -0
  188. package/dist/src/plugin/errors.d.ts +27 -0
  189. package/dist/src/plugin/errors.js +41 -0
  190. package/dist/src/plugin/fingerprint.d.ts +69 -0
  191. package/dist/src/plugin/fingerprint.js +137 -0
  192. package/dist/src/plugin/image-saver.d.ts +24 -0
  193. package/dist/src/plugin/image-saver.js +78 -0
  194. package/dist/src/plugin/logger.d.ts +35 -0
  195. package/dist/src/plugin/logger.js +67 -0
  196. package/dist/src/plugin/logging-utils.d.ts +22 -0
  197. package/dist/src/plugin/logging-utils.js +91 -0
  198. package/dist/src/plugin/project.d.ts +32 -0
  199. package/dist/src/plugin/project.js +229 -0
  200. package/dist/src/plugin/quota.d.ts +34 -0
  201. package/dist/src/plugin/quota.js +261 -0
  202. package/dist/src/plugin/recovery/constants.d.ts +21 -0
  203. package/dist/src/plugin/recovery/constants.js +42 -0
  204. package/dist/src/plugin/recovery/index.d.ts +11 -0
  205. package/dist/src/plugin/recovery/index.js +11 -0
  206. package/dist/src/plugin/recovery/storage.d.ts +23 -0
  207. package/dist/src/plugin/recovery/storage.js +340 -0
  208. package/dist/src/plugin/recovery/types.d.ts +115 -0
  209. package/dist/src/plugin/recovery/types.js +6 -0
  210. package/dist/src/plugin/recovery.d.ts +60 -0
  211. package/dist/src/plugin/recovery.js +360 -0
  212. package/dist/src/plugin/refresh-queue.d.ts +99 -0
  213. package/dist/src/plugin/refresh-queue.js +235 -0
  214. package/dist/src/plugin/request-helpers.d.ts +281 -0
  215. package/dist/src/plugin/request-helpers.js +2200 -0
  216. package/dist/src/plugin/request.d.ts +110 -0
  217. package/dist/src/plugin/request.js +1489 -0
  218. package/dist/src/plugin/rotation.d.ts +182 -0
  219. package/dist/src/plugin/rotation.js +364 -0
  220. package/dist/src/plugin/search.d.ts +31 -0
  221. package/dist/src/plugin/search.js +185 -0
  222. package/dist/src/plugin/server.d.ts +22 -0
  223. package/dist/src/plugin/server.js +306 -0
  224. package/dist/src/plugin/storage.d.ts +136 -0
  225. package/dist/src/plugin/storage.js +599 -0
  226. package/dist/src/plugin/stores/signature-store.d.ts +4 -0
  227. package/dist/src/plugin/stores/signature-store.js +24 -0
  228. package/dist/src/plugin/thinking-recovery.d.ts +89 -0
  229. package/dist/src/plugin/thinking-recovery.js +289 -0
  230. package/dist/src/plugin/token.d.ts +18 -0
  231. package/dist/src/plugin/token.js +127 -0
  232. package/dist/src/plugin/transform/claude.d.ts +79 -0
  233. package/dist/src/plugin/transform/claude.js +256 -0
  234. package/dist/src/plugin/transform/cross-model-sanitizer.d.ts +34 -0
  235. package/dist/src/plugin/transform/cross-model-sanitizer.js +224 -0
  236. package/dist/src/plugin/transform/gemini.d.ts +132 -0
  237. package/dist/src/plugin/transform/gemini.js +659 -0
  238. package/dist/src/plugin/transform/index.d.ts +14 -0
  239. package/dist/src/plugin/transform/index.js +9 -0
  240. package/dist/src/plugin/transform/model-resolver.d.ts +98 -0
  241. package/dist/src/plugin/transform/model-resolver.js +320 -0
  242. package/dist/src/plugin/transform/types.d.ts +110 -0
  243. package/dist/src/plugin/transform/types.js +1 -0
  244. package/dist/src/plugin/types.d.ts +95 -0
  245. package/dist/src/plugin/types.js +1 -0
  246. package/dist/src/plugin/ui/ansi.d.ts +31 -0
  247. package/dist/src/plugin/ui/ansi.js +45 -0
  248. package/dist/src/plugin/ui/auth-menu.d.ts +47 -0
  249. package/dist/src/plugin/ui/auth-menu.js +199 -0
  250. package/dist/src/plugin/ui/confirm.d.ts +1 -0
  251. package/dist/src/plugin/ui/confirm.js +14 -0
  252. package/dist/src/plugin/ui/select.d.ts +22 -0
  253. package/dist/src/plugin/ui/select.js +243 -0
  254. package/dist/src/plugin/version.d.ts +18 -0
  255. package/dist/src/plugin/version.js +79 -0
  256. package/package.json +54 -0
@@ -0,0 +1,281 @@
1
+ import type { GoogleSearchConfig } from "./transform/types";
2
+ /**
3
+ * Cleans a JSON schema for Antigravity API compatibility.
4
+ * Transforms unsupported features into description hints while preserving semantic information.
5
+ *
6
+ * Ported from CLIProxyAPI's CleanJSONSchemaForAntigravity (gemini_schema.go)
7
+ */
8
+ export declare function cleanJSONSchemaForAntigravity(schema: any): any;
9
+ export interface AntigravityApiError {
10
+ code?: number;
11
+ message?: string;
12
+ status?: string;
13
+ [key: string]: unknown;
14
+ }
15
+ /**
16
+ * Minimal representation of Antigravity API responses we touch.
17
+ */
18
+ export interface AntigravityApiBody {
19
+ response?: unknown;
20
+ error?: AntigravityApiError;
21
+ [key: string]: unknown;
22
+ }
23
+ /**
24
+ * Usage metadata exposed by Antigravity responses. Fields are optional to reflect partial payloads.
25
+ */
26
+ export interface AntigravityUsageMetadata {
27
+ totalTokenCount?: number;
28
+ promptTokenCount?: number;
29
+ candidatesTokenCount?: number;
30
+ cachedContentTokenCount?: number;
31
+ thoughtsTokenCount?: number;
32
+ }
33
+ /**
34
+ * Normalized thinking configuration accepted by Antigravity.
35
+ */
36
+ export interface ThinkingConfig {
37
+ thinkingBudget?: number;
38
+ includeThoughts?: boolean;
39
+ }
40
+ /**
41
+ * Default token budget for thinking/reasoning. 16000 tokens provides sufficient
42
+ * space for complex reasoning while staying within typical model limits.
43
+ */
44
+ export declare const DEFAULT_THINKING_BUDGET = 16000;
45
+ /**
46
+ * Checks if a model name indicates thinking/reasoning capability.
47
+ * Models with "thinking", "gemini-3", or "opus" in their name support extended thinking.
48
+ */
49
+ export declare function isThinkingCapableModel(modelName: string): boolean;
50
+ /**
51
+ * Extracts thinking configuration from various possible request locations.
52
+ * Supports both Gemini-style thinkingConfig and Anthropic-style thinking options.
53
+ */
54
+ export declare function extractThinkingConfig(requestPayload: Record<string, unknown>, rawGenerationConfig: Record<string, unknown> | undefined, extraBody: Record<string, unknown> | undefined): ThinkingConfig | undefined;
55
+ /**
56
+ * Variant thinking config extracted from OpenCode's providerOptions.
57
+ */
58
+ export interface VariantThinkingConfig {
59
+ /** Gemini 3 native thinking level (low/medium/high) */
60
+ thinkingLevel?: string;
61
+ /** Numeric thinking budget for Claude and Gemini 2.5 */
62
+ thinkingBudget?: number;
63
+ /** Whether to include thoughts in output */
64
+ includeThoughts?: boolean;
65
+ /** Google Search configuration */
66
+ googleSearch?: GoogleSearchConfig;
67
+ }
68
+ /**
69
+ * Extracts variant thinking config from OpenCode's providerOptions.
70
+ *
71
+ * All Antigravity models route through the Google provider, so we only check
72
+ * providerOptions.google. Supports two formats:
73
+ *
74
+ * 1. Gemini 3 native: { google: { thinkingLevel: "high", includeThoughts: true } }
75
+ * 2. Budget-based (Claude/Gemini 2.5): { google: { thinkingConfig: { thinkingBudget: 32000 } } }
76
+ *
77
+ * When providerOptions is missing or has no thinking config (common with OpenCode
78
+ * model variants), falls back to extracting from generationConfig directly:
79
+ * 3. generationConfig fallback: { thinkingConfig: { thinkingBudget: 8192 } }
80
+ */
81
+ export declare function extractVariantThinkingConfig(providerOptions: Record<string, unknown> | undefined, generationConfig?: Record<string, unknown> | undefined): VariantThinkingConfig | undefined;
82
+ /**
83
+ * Determines the final thinking configuration based on model capabilities and user settings.
84
+ * For Claude thinking models, we keep thinking enabled even in multi-turn conversations.
85
+ * The filterUnsignedThinkingBlocks function will handle signature validation/restoration.
86
+ */
87
+ export declare function resolveThinkingConfig(userConfig: ThinkingConfig | undefined, isThinkingModel: boolean, _isClaudeModel: boolean, _hasAssistantHistory: boolean): ThinkingConfig | undefined;
88
+ /**
89
+ * Filters thinking blocks from contents unless the signature matches our cache.
90
+ * Attempts to restore signatures from cache for thinking blocks that lack signatures.
91
+ *
92
+ * @param contents - The contents array from the request
93
+ * @param sessionId - Optional session ID for signature cache lookup
94
+ * @param getCachedSignatureFn - Optional function to retrieve cached signatures
95
+ */
96
+ export declare function filterUnsignedThinkingBlocks(contents: any[], sessionId?: string, getCachedSignatureFn?: (sessionId: string, text: string) => string | undefined, isClaudeModel?: boolean): any[];
97
+ /**
98
+ * Filters thinking blocks from Anthropic-style messages[] payloads using cached signatures.
99
+ */
100
+ export declare function filterMessagesThinkingBlocks(messages: any[], sessionId?: string, getCachedSignatureFn?: (sessionId: string, text: string) => string | undefined, isClaudeModel?: boolean): any[];
101
+ export declare function deepFilterThinkingBlocks(payload: unknown, sessionId?: string, getCachedSignatureFn?: (sessionId: string, text: string) => string | undefined, isClaudeModel?: boolean): unknown;
102
+ /**
103
+ * Transforms thinking/reasoning content in response parts to OpenCode's expected format.
104
+ * Handles both Gemini-style (thought: true) and Anthropic-style (type: "thinking") formats.
105
+ * Also extracts reasoning_content for Anthropic-style responses.
106
+ */
107
+ export declare function transformThinkingParts(response: unknown): unknown;
108
+ /**
109
+ * Ensures thinkingConfig is valid: includeThoughts only allowed when budget > 0.
110
+ */
111
+ export declare function normalizeThinkingConfig(config: unknown): ThinkingConfig | undefined;
112
+ /**
113
+ * Parses an Antigravity API body; handles array-wrapped responses the API sometimes returns.
114
+ */
115
+ export declare function parseAntigravityApiBody(rawText: string): AntigravityApiBody | null;
116
+ /**
117
+ * Extracts usageMetadata from a response object, guarding types.
118
+ */
119
+ export declare function extractUsageMetadata(body: AntigravityApiBody): AntigravityUsageMetadata | null;
120
+ /**
121
+ * Walks SSE lines to find a usage-bearing response chunk.
122
+ */
123
+ export declare function extractUsageFromSsePayload(payload: string): AntigravityUsageMetadata | null;
124
+ /**
125
+ * Enhances 404 errors for Antigravity models with a direct preview-access message.
126
+ */
127
+ export declare function rewriteAntigravityPreviewAccessError(body: AntigravityApiBody, status: number, requestedModel?: string): AntigravityApiBody | null;
128
+ /**
129
+ * Checks if a JSON response body represents an empty response.
130
+ *
131
+ * Empty responses occur when:
132
+ * - No candidates in Gemini format
133
+ * - No choices in OpenAI format
134
+ * - Candidates/choices exist but have no content
135
+ *
136
+ * @param text - The response body text (should be valid JSON)
137
+ * @returns true if the response is empty
138
+ */
139
+ export declare function isEmptyResponseBody(text: string): boolean;
140
+ /**
141
+ * Checks if a streaming SSE response yielded zero meaningful chunks.
142
+ *
143
+ * This is used after consuming a streaming response to determine if retry is needed.
144
+ */
145
+ export interface StreamingChunkCounter {
146
+ increment: () => void;
147
+ getCount: () => number;
148
+ hasContent: () => boolean;
149
+ }
150
+ export declare function createStreamingChunkCounter(): StreamingChunkCounter;
151
+ /**
152
+ * Checks if an SSE line contains meaningful content.
153
+ *
154
+ * @param line - A single SSE line (e.g., "data: {...}")
155
+ * @returns true if the line contains content worth counting
156
+ */
157
+ export declare function isMeaningfulSseLine(line: string): boolean;
158
+ export declare function recursivelyParseJsonStrings(obj: unknown, skipParseKeys?: Set<string>, currentKey?: string): unknown;
159
+ /**
160
+ * Groups function calls with their responses, handling ID mismatches.
161
+ *
162
+ * This is a port of LLM-API-Key-Proxy's _fix_tool_response_grouping() function.
163
+ *
164
+ * When context compaction or other processes strip tool responses, the tool call
165
+ * IDs become orphaned. This function attempts to recover by:
166
+ *
167
+ * 1. Pass 1: Match by exact ID (normal case)
168
+ * 2. Pass 2: Match by function name (for ID mismatches)
169
+ * 3. Pass 3: Match "unknown_function" orphans or take first available
170
+ * 4. Fallback: Create placeholder responses for missing tool results
171
+ *
172
+ * @param contents - Array of Gemini-style content messages
173
+ * @returns Fixed contents array with matched tool responses
174
+ */
175
+ export declare function fixToolResponseGrouping(contents: any[]): any[];
176
+ /**
177
+ * Checks if contents have any tool call/response ID mismatches.
178
+ *
179
+ * @param contents - Array of Gemini-style content messages
180
+ * @returns Object with mismatch details
181
+ */
182
+ export declare function detectToolIdMismatches(contents: any[]): {
183
+ hasMismatches: boolean;
184
+ expectedIds: string[];
185
+ foundIds: string[];
186
+ missingIds: string[];
187
+ orphanIds: string[];
188
+ };
189
+ /**
190
+ * Find orphaned tool_use IDs (tool_use without matching tool_result).
191
+ * Works on Claude format messages.
192
+ */
193
+ export declare function findOrphanedToolUseIds(messages: any[]): Set<string>;
194
+ /**
195
+ * Fix orphaned tool_use blocks in Claude format messages.
196
+ * Mirrors fixToolResponseGrouping() but for Claude's messages[] format.
197
+ *
198
+ * Claude format:
199
+ * - assistant message with content[]: { type: 'tool_use', id, name, input }
200
+ * - user message with content[]: { type: 'tool_result', tool_use_id, content }
201
+ *
202
+ * @param messages - Claude format messages array
203
+ * @returns Fixed messages with placeholder tool_results for orphans
204
+ */
205
+ export declare function fixClaudeToolPairing(messages: any[]): any[];
206
+ /**
207
+ * Validate and fix tool pairing with fallback nuclear option.
208
+ * Defense in depth: tries gentle fix first, then nuclear removal.
209
+ */
210
+ export declare function validateAndFixClaudeToolPairing(messages: any[]): any[];
211
+ /**
212
+ * Injects parameter signatures into tool descriptions.
213
+ * Port of LLM-API-Key-Proxy's _inject_signature_into_descriptions()
214
+ *
215
+ * This helps prevent tool hallucination by explicitly listing parameters
216
+ * in the description, making it harder for the model to hallucinate
217
+ * parameters from its training data.
218
+ *
219
+ * @param tools - Array of tool definitions (Gemini format)
220
+ * @param promptTemplate - Template for the signature (default: "\\n\\nSTRICT PARAMETERS: {params}.")
221
+ * @returns Modified tools array with signatures injected
222
+ */
223
+ export declare function injectParameterSignatures(tools: any[], promptTemplate?: string): any[];
224
+ /**
225
+ * Injects a tool hardening system instruction into the request payload.
226
+ * Port of LLM-API-Key-Proxy's _inject_tool_hardening_instruction()
227
+ *
228
+ * @param payload - The Gemini request payload
229
+ * @param instructionText - The instruction text to inject
230
+ */
231
+ export declare function injectToolHardeningInstruction(payload: Record<string, unknown>, instructionText: string): void;
232
+ /**
233
+ * Assigns IDs to functionCall parts and returns the pending call IDs by name.
234
+ * This is the first pass of tool ID assignment.
235
+ *
236
+ * @param contents - Gemini-style contents array
237
+ * @returns Object with modified contents and pending call IDs map
238
+ */
239
+ export declare function assignToolIdsToContents(contents: any[]): {
240
+ contents: any[];
241
+ pendingCallIdsByName: Map<string, string[]>;
242
+ toolCallCounter: number;
243
+ };
244
+ /**
245
+ * Matches functionResponse IDs to their corresponding functionCall IDs.
246
+ * This is the second pass of tool ID assignment.
247
+ *
248
+ * @param contents - Gemini-style contents array
249
+ * @param pendingCallIdsByName - Map of function names to pending call IDs
250
+ * @returns Modified contents with matched response IDs
251
+ */
252
+ export declare function matchResponseIdsToContents(contents: any[], pendingCallIdsByName: Map<string, string[]>): any[];
253
+ /**
254
+ * Applies all tool fixes to a request payload for Claude models.
255
+ * This includes:
256
+ * 1. Tool ID assignment for functionCalls
257
+ * 2. Response ID matching for functionResponses
258
+ * 3. Orphan recovery via fixToolResponseGrouping
259
+ * 4. Claude format pairing fix via validateAndFixClaudeToolPairing
260
+ *
261
+ * @param payload - Request payload object
262
+ * @param isClaude - Whether this is a Claude model request
263
+ * @returns Object with fix applied status
264
+ */
265
+ export declare function applyToolPairingFixes(payload: Record<string, unknown>, isClaude: boolean): {
266
+ contentsFixed: boolean;
267
+ messagesFixed: boolean;
268
+ };
269
+ /**
270
+ * Creates a synthetic Claude SSE streaming response with error content.
271
+ *
272
+ * When returning HTTP 400/500 errors to OpenCode, the session becomes locked
273
+ * and the user cannot use /compact or other commands. This function creates
274
+ * a fake "successful" SSE response (200 OK) with the error message as text content,
275
+ * allowing the user to continue using the session.
276
+ *
277
+ * @param errorMessage - The error message to include in the response
278
+ * @param requestedModel - The model that was requested
279
+ * @returns A Response object with synthetic SSE stream
280
+ */
281
+ export declare function createSyntheticErrorResponse(errorMessage: string, requestedModel?: string): Response;